{
    "contractName": "TestPaymasterStoreContext",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "actualCharge",
                    "type": "uint256"
                }
            ],
            "name": "SampleRecipientPostCall",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "context",
                    "type": "string"
                }
            ],
            "name": "SampleRecipientPostCallWithValues",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [],
            "name": "SampleRecipientPreCall",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "relay",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "encodedFunction",
                    "type": "bytes"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "baseRelayFee",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "gasLimit",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "maxPossibleGas",
                    "type": "uint256"
                }
            ],
            "name": "SampleRecipientPreCallWithValues",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "CALLDATA_SIZE_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "FORWARDER_HUB_OVERHEAD",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PAYMASTER_ACCEPTANCE_BUDGET",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "POST_RELAYED_CALL_GAS_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PRE_RELAYED_CALL_GAS_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "deposit",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getGasAndDataLimits",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "acceptanceBudget",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "preRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "calldataSizeLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IPaymaster.GasAndDataLimits",
                    "name": "limits",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRelayHub",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getTrustedForwarder",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "context",
                    "type": "bytes"
                },
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "gasUseWithoutPost",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxPriorityFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "transactionCalldataGasUsed",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "relayWorker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "paymaster",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "forwarder",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "paymasterData",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "clientId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayData",
                    "name": "relayData",
                    "type": "tuple"
                }
            ],
            "name": "postRelayedCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "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": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                },
                {
                    "internalType": "uint256",
                    "name": "maxPossibleGas",
                    "type": "uint256"
                }
            ],
            "name": "preRelayedCall",
            "outputs": [
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                },
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IRelayHub",
                    "name": "hub",
                    "type": "address"
                }
            ],
            "name": "setRelayHub",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "forwarder",
                    "type": "address"
                }
            ],
            "name": "setTrustedForwarder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionPaymaster",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "destination",
                    "type": "address"
                }
            ],
            "name": "withdrawAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address payable",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "withdrawRelayHubDepositTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualCharge\",\"type\":\"uint256\"}],\"name\":\"SampleRecipientPostCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"context\",\"type\":\"string\"}],\"name\":\"SampleRecipientPostCallWithValues\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SampleRecipientPreCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relay\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedFunction\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxPossibleGas\",\"type\":\"uint256\"}],\"name\":\"SampleRecipientPreCallWithValues\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CALLDATA_SIZE_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORWARDER_HUB_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAYMASTER_ACCEPTANCE_BUDGET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POST_RELAYED_CALL_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_RELAYED_CALL_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasAndDataLimits\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"acceptanceBudget\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"calldataSizeLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymaster.GasAndDataLimits\",\"name\":\"limits\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRelayHub\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTrustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUseWithoutPost\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"name\":\"postRelayedCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"maxPossibleGas\",\"type\":\"uint256\"}],\"name\":\"preRelayedCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRelayHub\",\"name\":\"hub\",\"type\":\"address\"}],\"name\":\"setRelayHub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"setTrustedForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionPaymaster\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"withdrawRelayHubDepositTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getGasAndDataLimits()\":{\"returns\":{\"limits\":\"An instance of the `GasAndDataLimits` struct ##### `acceptanceBudget` If the transactions consumes more than `acceptanceBudget` this Paymaster will be charged for gas no matter what. Transaction that gets rejected after consuming more than `acceptanceBudget` gas is on this Paymaster's expense. Should be set to an amount gas this Paymaster expects to spend deciding whether to accept or reject a request. This includes gas consumed by calculations in the `preRelayedCall`, `Forwarder` and the recipient contract. :warning: **Warning** :warning: As long this value is above `preRelayedCallGasLimit` (see defaults in `BasePaymaster`), the Paymaster is guaranteed it will never pay for rejected transactions. If this value is below `preRelayedCallGasLimit`, it might might make Paymaster open to a \\\"griefing\\\" attack. The relayers should prefer lower `acceptanceBudget`, as it improves their chances of being compensated. From a Relay's point of view, this is the highest gas value a bad Paymaster may cost the relay, since the paymaster will pay anything above that value regardless of whether the transaction succeeds or reverts. Specifying value too high might make the call rejected by relayers (see `maxAcceptanceBudget` in server config). ##### `preRelayedCallGasLimit` The max gas usage of preRelayedCall. Any revert of the `preRelayedCall` is a request rejection by the paymaster. As long as `acceptanceBudget` is above `preRelayedCallGasLimit`, any such revert is not payed by the paymaster. ##### `postRelayedCallGasLimit` The max gas usage of postRelayedCall. The Paymaster is not charged for the maximum, only for actually used gas. Note that an OOG will revert the inner transaction, but the paymaster will be charged for it anyway.\"}},\"getRelayHub()\":{\"returns\":{\"_0\":\"The address of the `RelayHub` that is trusted by this Paymaster to execute the requests.\"}},\"getTrustedForwarder()\":{\"returns\":{\"_0\":\"The address of the `Forwarder` that is trusted by this Paymaster to execute the requests.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"params\":{\"context\":\"The call context, as returned by the preRelayedCall\",\"gasUseWithoutPost\":\"The actual amount of gas used by the entire transaction, EXCEPT        the gas used by the postRelayedCall itself.\",\"relayData\":\"The relay params of the request. can be used by relayHub.calculateCharge()\",\"success\":\"`true` if the relayed call succeeded, false if it reverted\"}},\"preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)\":{\"params\":{\"approvalData\":\"- extra dapp-specific data (e.g. signature from trusted party)\",\"maxPossibleGas\":\"- based on values returned from `getGasAndDataLimits` the RelayHub will calculate the maximum possible amount of gas the user may be charged for. In order to convert this value to wei, the Paymaster has to call \\\"relayHub.calculateCharge()\\\"\",\"relayRequest\":\"- the full relay request structure\",\"signature\":\"- user's EIP712-compatible signature of the `relayRequest`. Note that in most cases the paymaster shouldn't try use it at all. It is always checked by the forwarder immediately after preRelayedCall returns.\"},\"returns\":{\"_0\":\"A byte array to be passed to postRelayedCall. Can contain any data needed by this Paymaster in any form or be empty if no extra data is needed.\",\"_1\":\"The flag that allows a Paymaster to \\\"delegate\\\" the rejection to the recipient code. It also means the Paymaster trust the recipient to reject fast: both preRelayedCall, forwarder check and recipient checks must fit into the GasLimits.acceptanceBudget, otherwise the TX is paid by the Paymaster. `true` if the Paymaster wants to reject the TX if the recipient reverts. `false` if the Paymaster wants rejects by the recipient to be completed on chain and paid by the Paymaster.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"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.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"versionPaymaster()\":{\"returns\":{\"_0\":\"version The SemVer string of this Paymaster's version.\"}},\"withdrawRelayHubDepositTo(uint256,address)\":{\"params\":{\"amount\":\"The amount to be subtracted from the sender.\",\"target\":\"The target to which the amount will be transferred.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGasAndDataLimits()\":{\"notice\":\"Return the Gas Limits for Paymaster's functions and maximum msg.data length values for this Paymaster. This function allows different paymasters to have different properties without changes to the RelayHub.\"},\"getTrustedForwarder()\":{\"notice\":\":warning: **Warning** :warning: using incorrect Forwarder may cause the Paymaster to agreeing to pay for invalid transactions.\"},\"postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"notice\":\"This method is called after the actual relayed function call. It may be used to record the transaction (e.g. charge the caller by some contract logic) for this call. Revert in this functions causes a revert of the client's relayed call (and preRelayedCall(), but the Paymaster is still committed to pay the relay for the entire transaction.\"},\"preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)\":{\"notice\":\"Called by the Relay in view mode and later by the `RelayHub` on-chain to validate that the Paymaster agrees to pay for this call. The request is considered to be rejected by the Paymaster in one of the following conditions:  - `preRelayedCall()` method reverts  - the `Forwarder` reverts because of nonce or signature error  - the `Paymaster` returned `rejectOnRecipientRevert: true` and the recipient contract reverted    (and all that did not consume more than `acceptanceBudget` gas). In any of the above cases, all Paymaster calls and the recipient call are reverted. In any other case the Paymaster will pay for the gas cost of the transaction. Note that even if `postRelayedCall` is reverted the Paymaster will be charged.\"},\"setRelayHub(address)\":{\"notice\":\"The owner of the Paymaster can change the instance of the RelayHub this Paymaster works with. :warning: **Warning** :warning: The deposit on the previous RelayHub must be withdrawn first.\"},\"setTrustedForwarder(address)\":{\"notice\":\"The owner of the Paymaster can change the instance of the Forwarder this Paymaster works with.the Recipients must trust this Forwarder as well in order for the configuration to remain functional.\"},\"withdrawRelayHubDepositTo(uint256,address)\":{\"notice\":\"Withdraw deposit from the RelayHub.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterStoreContext.sol\":\"TestPaymasterStoreContext\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/BasePaymaster.sol\":{\"keccak256\":\"0x89c669597c94431753f0e043015677d0a2261121d8dee5db04baa9e0bd60506e\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://195cad8f002b5fd930f007f6f582a8d2193574422c74d65fc556ae58d4227f76\",\"dweb:/ipfs/QmPxDaWYdZfB1kwKCxVMFw92h59RarKXkyadcVT5LT5avd\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol\":{\"keccak256\":\"0xef3d770001c3245db4408cdd0afdfc622695ccfe31f28b74571d05158bbf83f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://08949174ed05b596d89c8f1eeedfeb254993b84054bbc1ff6081ad926f5db406\",\"dweb:/ipfs/QmNQtKzHpie4Esocxuc9YrPtGQyA928a1a5TWbVc7cPoqk\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IERC2771Recipient.sol\":{\"keccak256\":\"0x92a3665ec2fc3d2ab78cf8a08451b2ab6466dc7fae3c215150be2132500406fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364eee344363535733b4cc1a7748e1fc8b10786f6df6c0e2bc0082bcb2477e0e\",\"dweb:/ipfs/QmfCwWAxFqU4woSqu3g5BFPASEA7eCSwcwUSHM9EoYhYdu\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x205617108fad6f3543fc12773e9d25998e944852e8ed9d71f79cb799ae299246\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4903018f63b15211f2714edcf1c56f5c0bee6fea07efaaf908d3a78d07fb6d84\",\"dweb:/ipfs/Qmezexeh6GszFUHW2dgTGWTfb613Ni3tfjLqAtdAYAxCpQ\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol\":{\"keccak256\":\"0x19dcbf5e1bfaa413b6800ad84ffedd2989b401cede299f009ff62c33e03ccfae\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://bb5cb7bee7de97770e374b4cad1265c636a740dc7a2013d686a89d9398ba3098\",\"dweb:/ipfs/QmSqhNkFwDtS1EnupbQWduDm78N6s8c1zqXf5aLqZF69Xx\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.sol\":{\"keccak256\":\"0xd21014ab3a4ada1c21486db36c971e30be61451e519eaa61f3f074908247c607\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2956d687a5691de930f698a22a1ff62b151792fbfd4e4a928a5cf6d982e03921\",\"dweb:/ipfs/QmNgkGYL4vqUu6jHHHsRfdCFLnvRQ7WTatkVVJoW2YwJtX\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterStoreContext.sol\":{\"keccak256\":\"0x306447590c4f965bdaa4a2598bc8c2f461a80d02bed0a0ea26752d36c152e79b\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://07d9654295098bb589079167608ba28a0e42b1e0019d90b6aa334e9cfffd9b69\",\"dweb:/ipfs/QmSnSCBGbbYnFQNN1TRiDLAkP9S5Jp7utu3ooFThM94hWN\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnEip712Library.sol\":{\"keccak256\":\"0xc35980f371cab5d9af3e1ead06f82b2afb705a8dbb2a5f53793f0179c485c274\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://dd7732d690c7959df567ee3e4863b0045583506fbae3c87b684b6173fd126968\",\"dweb:/ipfs/QmUbcUAqxKZTQS5ZwwPVnfNAtCmas4pPWQhRWXXwWQEeef\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol\":{\"keccak256\":\"0xfc3ed2bbd925e24facf0c3bb96d57dd7fc5bcc4a684b5473f04e8d209b758805\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cb57b5b38d3e588f119ae45174891f2049d1d0de160a12b81a20335cd8bf731b\",\"dweb:/ipfs/Qmf6xfbdLbTKEpnzxwnSaRy1YZJtLYTZh8URqry86oyoSU\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnUtils.sol\":{\"keccak256\":\"0x8616968305b6127f4cb43209502e074c3964230a66c703e6b8623b03e5ec6442\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2b1f1163fee75613024b38c25e17649933919f4a47a5ba5e8c3ea046023eb1ad\",\"dweb:/ipfs/QmNWReZE8BQ82eXahdKjnNjQWHuH9L9wcTcnKgyV5ypKCa\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol\":{\"keccak256\":\"0xa61a3d8fcd89182975d0bd17b86c22b6affd2f7bf26db66b1ddb2ee396f122ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0bc21e2c8c2f483aee9d5bc003fa77dc7afddbaa7cc99560581a416cfdef11\",\"dweb:/ipfs/QmbwLE7AJpoH2LVeeHxewq3tf1vXhLNUdYsubWxzDGKfTr\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
    "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61142d8061007e6000396000f3fe6080604052600436106101225760003560e01c8063b039a88f116100a0578063da74222811610064578063da742228146103f5578063df463a6614610415578063f2fde38b1461042a578063f9c002f71461044a578063fa09e6301461046157600080fd5b8063b039a88f1461035a578063b90b41cf146103a2578063bbdaa3c9146103b8578063ce1b815f146103cf578063d0e30db0146103ed57600080fd5b806376fa01c3116100e757806376fa01c3146102a85780637bb05264146102c85780637bdf2ec7146102e85780638da5cb5b1461031a578063921276ea1461033857600080fd5b8062be5dd4146101e657806301ffc9a71461021d5780632d14c4b71461024d5780635c5e3db11461026f578063715018a61461029357600080fd5b366101e1576001546001600160a01b03166101805760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064015b60405180910390fd5b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b1580156101c657600080fd5b505af11580156101da573d6000803e3d6000fd5b5050505050005b600080fd5b3480156101f257600080fd5b50610206610201366004611099565b610481565b60405161021492919061125b565b60405180910390f35b34801561022957600080fd5b5061023d610238366004610fdf565b6104c6565b6040519015158152602001610214565b34801561025957600080fd5b5061026d610268366004611157565b610518565b005b34801561027b57600080fd5b5061028561290481565b604051908152602001610214565b34801561029f57600080fd5b5061026d61058a565b3480156102b457600080fd5b5061026d6102c3366004611009565b61059e565b3480156102d457600080fd5b5061026d6102e3366004610fa5565b6105ba565b3480156102f457600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610214565b34801561032657600080fd5b506000546001600160a01b0316610302565b34801561034457600080fd5b5061034d61064a565b604051610214919061129b565b34801561036657600080fd5b5061036f61066a565b60405161021491908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156103ae57600080fd5b5061028561c35081565b3480156103c457600080fd5b506102856201adb081565b3480156103db57600080fd5b506002546001600160a01b0316610302565b61026d6106d3565b34801561040157600080fd5b5061026d610410366004610fa5565b610781565b34801561042157600080fd5b50610285610811565b34801561043657600080fd5b5061026d610445366004610fa5565b610823565b34801561045657600080fd5b50610285620186a081565b34801561046d57600080fd5b5061026d61047c366004610fa5565b61089c565b6060600061048d610928565b61049688610982565b61049f88610a1a565b6104a98585610a84565b6104b7888888888888610ad2565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b14806104f757506001600160e01b03198216630704183b60e11b145b8061051257506301ffc9a760e01b6001600160e01b03198316145b92915050565b610520610baa565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a390604401600060405180830381600087803b15801561056e57600080fd5b505af1158015610582573d6000803e3d6000fd5b505050505050565b610592610baa565b61059c6000610c04565b565b6105a6610928565b6105b38585858585610c54565b5050505050565b6105c2610baa565b6105dc6001600160a01b03821663e9fb30f760e01b610c94565b6106285760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c6179487562006044820152606401610177565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60606040518060600160405280602881526020016113d060289139905090565b6106956040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a06106b19190611321565b8152602001620186a081526020016201adb08152602001612904815250905090565b6001546001600160a01b03166107275760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b6044820152606401610177565b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561076d57600080fd5b505af11580156105b3573d6000803e3d6000fd5b610789610baa565b6107a36001600160a01b0382166309788f9960e21b610c94565b6107ef5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f727761726465726044820152606401610177565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61082061c350620186a0611321565b81565b61082b610baa565b6001600160a01b0381166108905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610177565b61089981610c04565b50565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610918919061113e565b90506109248183610518565b5050565b6001546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c617948756200006044820152606401610177565b61098f602082018261130b565b6109a09060c081019060a001610fa5565b6001600160a01b03166109bb6002546001600160a01b031690565b6001600160a01b031614610a115760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f74207472757374656400000000000000006044820152606401610177565b61089981610cb7565b610a27602082018261130b565b610a359060c08101906112ae565b1590506108995760405162461bcd60e51b815260206004820152601c60248201527f73686f756c642068617665206e6f207061796d617374657244617461000000006044820152606401610177565b80156109245760405162461bcd60e51b815260206004820152601b60248201527f73686f756c642068617665206e6f20617070726f76616c4461746100000000006044820152606401610177565b606060007fd088471316fb168019cd082eb2108ea260581582468fda1d2c2bfa0600190e09610b0460208a018a61130b565b610b15906080810190606001610fa5565b610b1f8a806112f5565b610b2d906020810190610fa5565b610b378b806112f5565b610b459060a08101906112ae565b610b5260208e018e61130b565b35610b5d8e806112f5565b606001358b8b8b604051610b79999897969594939291906111f8565b60405180910390a1600060405180606001604052806035815260200161139b60359139999098509650505050505050565b6000546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610177565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7fbc530d38711559345009cd3511e818db39c5db7735fd614712f6dc7f1771b87c8585604051610c8592919061127f565b60405180910390a15050505050565b6000610c9f83610ea0565b8015610cb05750610cb08383610ed3565b9392505050565b600080610cc483806112f5565b610cd5906040810190602001610fa5565b6001600160a01b031663572b6c0560e01b610cf3602086018661130b565b610d049060c081019060a001610fa5565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610d5891906111dc565b600060405180830381855afa9150503d8060008114610d93576040519150601f19603f3d011682016040523d82523d6000602084013e610d98565b606091505b509150915081610dea5760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a207265766572746564000000006044820152606401610177565b8051602014610e3b5760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e73656044820152606401610177565b80806020019051810190610e4f9190610fc2565b610e9b5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e74006044820152606401610177565b505050565b6000610eb3826301ffc9a760e01b610ed3565b80156105125750610ecc826001600160e01b0319610ed3565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015610f45575060208210155b8015610f515750600081115b979650505050505050565b60008083601f840112610f6e57600080fd5b50813567ffffffffffffffff811115610f8657600080fd5b602083019150836020828501011115610f9e57600080fd5b9250929050565b600060208284031215610fb757600080fd5b8135610cb081611377565b600060208284031215610fd457600080fd5b8151610cb08161138c565b600060208284031215610ff157600080fd5b81356001600160e01b031981168114610cb057600080fd5b60008060008060006080868803121561102157600080fd5b853567ffffffffffffffff8082111561103957600080fd5b61104589838a01610f5c565b90975095506020880135915061105a8261138c565b909350604087013592506060870135908082111561107757600080fd5b508601610100818903121561108b57600080fd5b809150509295509295909350565b600080600080600080608087890312156110b257600080fd5b863567ffffffffffffffff808211156110ca57600080fd5b908801906040828b0312156110de57600080fd5b909650602088013590808211156110f457600080fd5b6111008a838b01610f5c565b9097509550604089013591508082111561111957600080fd5b5061112689828a01610f5c565b979a9699509497949695606090950135949350505050565b60006020828403121561115057600080fd5b5051919050565b6000806040838503121561116a57600080fd5b82359150602083013561117c81611377565b809150509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526111c8816020860160208601611347565b601f01601f19169290920160200192915050565b600082516111ee818460208701611347565b9190910192915050565b6001600160a01b038a811682528916602082015260e060408201819052600090611225908301898b611187565b87606084015286608084015282810360a0840152611244818688611187565b9150508260c08301529a9950505050505050505050565b60408152600061126e60408301856111b0565b905082151560208301529392505050565b602081526000611293602083018486611187565b949350505050565b602081526000610cb060208301846111b0565b6000808335601e198436030181126112c557600080fd5b83018035915067ffffffffffffffff8211156112e057600080fd5b602001915036819003821315610f9e57600080fd5b6000823560de198336030181126111ee57600080fd5b6000823560fe198336030181126111ee57600080fd5b6000821982111561134257634e487b7160e01b600052601160045260246000fd5b500190565b60005b8381101561136257818101518382015260200161134a565b83811115611371576000848401525b50505050565b6001600160a01b038116811461089957600080fd5b801515811461089957600080fdfe636f6e74657874207061737365642066726f6d2070726552656c6179656443616c6c20746f20706f737452656c6179656443616c6c332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572a26469706673582212202a4fc2a8c0fb5bdd363c8656d21a39738f398818048320e86a6fa1fef7655ff064736f6c63430008070033",
    "deployedBytecode": "0x6080604052600436106101225760003560e01c8063b039a88f116100a0578063da74222811610064578063da742228146103f5578063df463a6614610415578063f2fde38b1461042a578063f9c002f71461044a578063fa09e6301461046157600080fd5b8063b039a88f1461035a578063b90b41cf146103a2578063bbdaa3c9146103b8578063ce1b815f146103cf578063d0e30db0146103ed57600080fd5b806376fa01c3116100e757806376fa01c3146102a85780637bb05264146102c85780637bdf2ec7146102e85780638da5cb5b1461031a578063921276ea1461033857600080fd5b8062be5dd4146101e657806301ffc9a71461021d5780632d14c4b71461024d5780635c5e3db11461026f578063715018a61461029357600080fd5b366101e1576001546001600160a01b03166101805760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064015b60405180910390fd5b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b1580156101c657600080fd5b505af11580156101da573d6000803e3d6000fd5b5050505050005b600080fd5b3480156101f257600080fd5b50610206610201366004611099565b610481565b60405161021492919061125b565b60405180910390f35b34801561022957600080fd5b5061023d610238366004610fdf565b6104c6565b6040519015158152602001610214565b34801561025957600080fd5b5061026d610268366004611157565b610518565b005b34801561027b57600080fd5b5061028561290481565b604051908152602001610214565b34801561029f57600080fd5b5061026d61058a565b3480156102b457600080fd5b5061026d6102c3366004611009565b61059e565b3480156102d457600080fd5b5061026d6102e3366004610fa5565b6105ba565b3480156102f457600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610214565b34801561032657600080fd5b506000546001600160a01b0316610302565b34801561034457600080fd5b5061034d61064a565b604051610214919061129b565b34801561036657600080fd5b5061036f61066a565b60405161021491908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156103ae57600080fd5b5061028561c35081565b3480156103c457600080fd5b506102856201adb081565b3480156103db57600080fd5b506002546001600160a01b0316610302565b61026d6106d3565b34801561040157600080fd5b5061026d610410366004610fa5565b610781565b34801561042157600080fd5b50610285610811565b34801561043657600080fd5b5061026d610445366004610fa5565b610823565b34801561045657600080fd5b50610285620186a081565b34801561046d57600080fd5b5061026d61047c366004610fa5565b61089c565b6060600061048d610928565b61049688610982565b61049f88610a1a565b6104a98585610a84565b6104b7888888888888610ad2565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b14806104f757506001600160e01b03198216630704183b60e11b145b8061051257506301ffc9a760e01b6001600160e01b03198316145b92915050565b610520610baa565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a390604401600060405180830381600087803b15801561056e57600080fd5b505af1158015610582573d6000803e3d6000fd5b505050505050565b610592610baa565b61059c6000610c04565b565b6105a6610928565b6105b38585858585610c54565b5050505050565b6105c2610baa565b6105dc6001600160a01b03821663e9fb30f760e01b610c94565b6106285760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c6179487562006044820152606401610177565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60606040518060600160405280602881526020016113d060289139905090565b6106956040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a06106b19190611321565b8152602001620186a081526020016201adb08152602001612904815250905090565b6001546001600160a01b03166107275760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b6044820152606401610177565b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561076d57600080fd5b505af11580156105b3573d6000803e3d6000fd5b610789610baa565b6107a36001600160a01b0382166309788f9960e21b610c94565b6107ef5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f727761726465726044820152606401610177565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61082061c350620186a0611321565b81565b61082b610baa565b6001600160a01b0381166108905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610177565b61089981610c04565b50565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610918919061113e565b90506109248183610518565b5050565b6001546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c617948756200006044820152606401610177565b61098f602082018261130b565b6109a09060c081019060a001610fa5565b6001600160a01b03166109bb6002546001600160a01b031690565b6001600160a01b031614610a115760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f74207472757374656400000000000000006044820152606401610177565b61089981610cb7565b610a27602082018261130b565b610a359060c08101906112ae565b1590506108995760405162461bcd60e51b815260206004820152601c60248201527f73686f756c642068617665206e6f207061796d617374657244617461000000006044820152606401610177565b80156109245760405162461bcd60e51b815260206004820152601b60248201527f73686f756c642068617665206e6f20617070726f76616c4461746100000000006044820152606401610177565b606060007fd088471316fb168019cd082eb2108ea260581582468fda1d2c2bfa0600190e09610b0460208a018a61130b565b610b15906080810190606001610fa5565b610b1f8a806112f5565b610b2d906020810190610fa5565b610b378b806112f5565b610b459060a08101906112ae565b610b5260208e018e61130b565b35610b5d8e806112f5565b606001358b8b8b604051610b79999897969594939291906111f8565b60405180910390a1600060405180606001604052806035815260200161139b60359139999098509650505050505050565b6000546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610177565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7fbc530d38711559345009cd3511e818db39c5db7735fd614712f6dc7f1771b87c8585604051610c8592919061127f565b60405180910390a15050505050565b6000610c9f83610ea0565b8015610cb05750610cb08383610ed3565b9392505050565b600080610cc483806112f5565b610cd5906040810190602001610fa5565b6001600160a01b031663572b6c0560e01b610cf3602086018661130b565b610d049060c081019060a001610fa5565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610d5891906111dc565b600060405180830381855afa9150503d8060008114610d93576040519150601f19603f3d011682016040523d82523d6000602084013e610d98565b606091505b509150915081610dea5760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a207265766572746564000000006044820152606401610177565b8051602014610e3b5760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e73656044820152606401610177565b80806020019051810190610e4f9190610fc2565b610e9b5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e74006044820152606401610177565b505050565b6000610eb3826301ffc9a760e01b610ed3565b80156105125750610ecc826001600160e01b0319610ed3565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015610f45575060208210155b8015610f515750600081115b979650505050505050565b60008083601f840112610f6e57600080fd5b50813567ffffffffffffffff811115610f8657600080fd5b602083019150836020828501011115610f9e57600080fd5b9250929050565b600060208284031215610fb757600080fd5b8135610cb081611377565b600060208284031215610fd457600080fd5b8151610cb08161138c565b600060208284031215610ff157600080fd5b81356001600160e01b031981168114610cb057600080fd5b60008060008060006080868803121561102157600080fd5b853567ffffffffffffffff8082111561103957600080fd5b61104589838a01610f5c565b90975095506020880135915061105a8261138c565b909350604087013592506060870135908082111561107757600080fd5b508601610100818903121561108b57600080fd5b809150509295509295909350565b600080600080600080608087890312156110b257600080fd5b863567ffffffffffffffff808211156110ca57600080fd5b908801906040828b0312156110de57600080fd5b909650602088013590808211156110f457600080fd5b6111008a838b01610f5c565b9097509550604089013591508082111561111957600080fd5b5061112689828a01610f5c565b979a9699509497949695606090950135949350505050565b60006020828403121561115057600080fd5b5051919050565b6000806040838503121561116a57600080fd5b82359150602083013561117c81611377565b809150509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526111c8816020860160208601611347565b601f01601f19169290920160200192915050565b600082516111ee818460208701611347565b9190910192915050565b6001600160a01b038a811682528916602082015260e060408201819052600090611225908301898b611187565b87606084015286608084015282810360a0840152611244818688611187565b9150508260c08301529a9950505050505050505050565b60408152600061126e60408301856111b0565b905082151560208301529392505050565b602081526000611293602083018486611187565b949350505050565b602081526000610cb060208301846111b0565b6000808335601e198436030181126112c557600080fd5b83018035915067ffffffffffffffff8211156112e057600080fd5b602001915036819003821315610f9e57600080fd5b6000823560de198336030181126111ee57600080fd5b6000823560fe198336030181126111ee57600080fd5b6000821982111561134257634e487b7160e01b600052601160045260246000fd5b500190565b60005b8381101561136257818101518382015260200161134a565b83811115611371576000848401525b50505050565b6001600160a01b038116811461089957600080fd5b801515811461089957600080fdfe636f6e74657874207061737365642066726f6d2070726552656c6179656443616c6c20746f20706f737452656c6179656443616c6c332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572a26469706673582212202a4fc2a8c0fb5bdd363c8656d21a39738f398818048320e86a6fa1fef7655ff064736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "136:1548:27:-:0;;;;;;;;;;;;-1:-1:-1;936:32:47;719:10:55;936:18:47;:32::i;:::-;136:1548:27;;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;136:1548:27:-;;;;;;;",
    "deployedSourceMap": "136:1548:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4642:8:0;;-1:-1:-1;;;;;4642:8:0;4626:69;;;;-1:-1:-1;;;4626:69:0;;9193:2:63;4626:69:0;;;9175:21:63;9232:2;9212:18;;;9205:30;-1:-1:-1;;;9251:18:63;;;9244:55;9316:18;;4626:69:0;;;;;;;;;4705:8;;:51;;-1:-1:-1;;;4705:51:0;;4750:4;4705:51;;;5124::63;-1:-1:-1;;;;;4705:8:0;;;;:19;;4731:9;;5097:18:63;;4705:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;136:1548:27;;;;;5154:533:0;;;;;;;;;;-1:-1:-1;5154:533:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1461:283;;;;;;;;;;-1:-1:-1;1461:283:0;;;;;:::i;:::-;;:::i;:::-;;;6498:14:63;;6491:22;6473:41;;6461:2;6446:18;1461:283:0;6333:187:63;4975:142:0;;;;;;;;;;-1:-1:-1;4975:142:0;;;;;:::i;:::-;;:::i;:::-;;1375:51;;;;;;;;;;;;1421:5;1375:51;;;;;12449:25:63;;;12437:2;12422:18;1375:51:0;12303:177:63;1831:101:47;;;;;;;;;;;;;:::i;6140:309:0:-;;;;;;;;;;-1:-1:-1;6140:309:0;;;;;:::i;:::-;;:::i;3551:197::-;;;;;;;;;;-1:-1:-1;3551:197:0;;;;;:::i;:::-;;:::i;829:103::-;;;;;;;;;;-1:-1:-1;916:8:0;;-1:-1:-1;;;;;916:8:0;829:103;;;-1:-1:-1;;;;;5142:32:63;;;5124:51;;5112:2;5097:18;829:103:0;4978:203:63;1201:85:47;;;;;;;;;;-1:-1:-1;1247:7:47;1273:6;-1:-1:-1;;;;;1273:6:47;1201:85;;222:148:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1781:362:0:-;;;;;;;;;;;;;:::i;:::-;;;;;;12089:13:63;;12071:32;;12159:4;12147:17;;;12141:24;12119:20;;;12112:54;12222:4;12210:17;;;12204:24;12182:20;;;12175:54;12285:4;12273:17;;;12267:24;12245:20;;;12238:54;;;;12058:3;12043:19;;11856:442;1003:54:0;;;;;;;;;;;;1052:5;1003:54;;1198:60;;;;;;;;;;;;1252:6;1198:60;;4234:118;;;;;;;;;;-1:-1:-1;4328:17:0;;-1:-1:-1;;;;;4328:17:0;4234:118;;1381:181:24;;;:::i;3997:231:0:-;;;;;;;;;;-1:-1:-1;3997:231:0;;;;;:::i;:::-;;:::i;1264:105::-;;;;;;;;;;;;;:::i;2081:198:47:-;;;;;;;;;;-1:-1:-1;2081:198:47;;;;;:::i;:::-;;:::i;1133:59:0:-;;;;;;;;;;;;1186:6;1133:59;;1568:180:24;;;;;;;;;;-1:-1:-1;1568:180:24;;;;;:::i;:::-;;:::i;5154:533:0:-;5379:12;5393:4;5409:21;:19;:21::i;:::-;5440:30;5457:12;5440:16;:30::i;:::-;5516:34;5537:12;5516:20;:34::i;:::-;5560:33;5580:12;;5560:19;:33::i;:::-;5610:70;5626:12;5640:9;;5651:12;;5665:14;5610:15;:70::i;:::-;5603:77;;;;5154:533;;;;;;;;;:::o;1461:283::-;1563:4;-1:-1:-1;;;;;;1586:43:0;;-1:-1:-1;;;1586:43:0;;:99;;-1:-1:-1;;;;;;;1645:40:0;;-1:-1:-1;;;1645:40:0;1586:99;:151;;;-1:-1:-1;;;;;;;;;;937:40:58;;;1701:36:0;1579:158;1461:283;-1:-1:-1;;1461:283:0:o;4975:142::-;1094:13:47;:11;:13::i;:::-;5077:8:0::1;::::0;:33:::1;::::0;-1:-1:-1;;;5077:33:0;;-1:-1:-1;;;;;5394:32:63;;;5077:33:0::1;::::0;::::1;5376:51:63::0;5443:18;;;5436:34;;;5077:8:0;;::::1;::::0;:17:::1;::::0;5349:18:63;;5077:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4975:142:::0;;:::o;1831:101:47:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;6140:309:0:-;6347:21;:19;:21::i;:::-;6378:64;6395:7;;6404;6413:17;6432:9;6378:16;:64::i;:::-;6140:309;;;;;:::o;3551:197::-;1094:13:47;:11;:13::i;:::-;3622:59:0::1;-1:-1:-1::0;;;;;3622:30:0;::::1;-1:-1:-1::0;;;3622:30:0::1;:59::i;:::-;3614:103;;;::::0;-1:-1:-1;;;3614:103:0;;10983:2:63;3614:103:0::1;::::0;::::1;10965:21:63::0;11022:2;11002:18;;;10995:30;11061:33;11041:18;;;11034:61;11112:18;;3614:103:0::1;10781:355:63::0;3614:103:0::1;3727:8;:14:::0;;-1:-1:-1;;;;;;3727:14:0::1;-1:-1:-1::0;;;;;3727:14:0;;;::::1;::::0;;;::::1;::::0;;3551:197::o;222:148:24:-;290:13;314:49;;;;;;;;;;;;;;;;;;;222:148;:::o;1781:362:0:-;1879:41;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1879:41:0;1944:192;;;;;;;;1052:5;1186:6;1318:51;;;;:::i;:::-;1944:192;;;;1186:6;1944:192;;;;1252:6;1944:192;;;;1421:5;1944:192;;;1937:199;;1781:362;:::o;1381:181:24:-;1441:8;;-1:-1:-1;;;;;1441:8:24;1425:69;;;;-1:-1:-1;;;1425:69:24;;9193:2:63;1425:69:24;;;9175:21:63;9232:2;9212:18;;;9205:30;-1:-1:-1;;;9251:18:63;;;9244:55;9316:18;;1425:69:24;8991:349:63;1425:69:24;1504:8;;:51;;-1:-1:-1;;;1504:51:24;;1549:4;1504:51;;;5124::63;-1:-1:-1;;;;;1504:8:24;;;;:19;;1530:9;;5097:18:63;;1504:51:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3997:231:0;1094:13:47;:11;:13::i;:::-;4088:57:0::1;-1:-1:-1::0;;;;;4088:27:0;::::1;-1:-1:-1::0;;;4088:27:0::1;:57::i;:::-;4080:102;;;::::0;-1:-1:-1;;;4080:102:0;;9900:2:63;4080:102:0::1;::::0;::::1;9882:21:63::0;;;9919:18;;;9912:30;9978:34;9958:18;;;9951:62;10030:18;;4080:102:0::1;9698:356:63::0;4080:102:0::1;4192:17;:29:::0;;-1:-1:-1;;;;;;4192:29:0::1;-1:-1:-1::0;;;;;4192:29:0;;;::::1;::::0;;;::::1;::::0;;3997:231::o;1264:105::-;1318:51;1052:5;1186:6;1318:51;:::i;:::-;1264:105;:::o;2081:198:47:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:47;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:47;;8429:2:63;2161:73:47::1;::::0;::::1;8411:21:63::0;8468:2;8448:18;;;8441:30;8507:34;8487:18;;;8480:62;-1:-1:-1;;;8558:18:63;;;8551:36;8604:19;;2161:73:47::1;8227:402:63::0;2161:73:47::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1568:180:24:-;1652:8;;:33;;-1:-1:-1;;;1652:33:24;;1679:4;1652:33;;;5124:51:63;1635:14:24;;-1:-1:-1;;;;;1652:8:24;;:18;;5097::63;;1652:33:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1635:50;;1695:46;1721:6;1729:11;1695:25;:46::i;:::-;1625:123;1568:180;:::o;2621:140:0:-;916:8;;-1:-1:-1;;;;;916:8:0;2692:10;:27;2684:70;;;;-1:-1:-1;;;2684:70:0;;11343:2:63;2684:70:0;;;11325:21:63;11382:2;11362:18;;;11355:30;11421:32;11401:18;;;11394:60;11471:18;;2684:70:0;11141:354:63;2332:283:0;2484:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2459:57:0;:21;4328:17;;-1:-1:-1;;;;;4328:17:0;;4234:118;2459:21;-1:-1:-1;;;;;2459:57:0;;2451:94;;;;-1:-1:-1;;;2451:94:0;;9547:2:63;2451:94:0;;;9529:21:63;9586:2;9566:18;;;9559:30;9625:26;9605:18;;;9598:54;9669:18;;2451:94:0;9345:348:63;2451:94:0;2555:53;2595:12;2555:39;:53::i;2950:203::-;3065:22;;;;:12;:22;:::i;:::-;:36;;;;;;;:::i;:::-;:48;;-1:-1:-1;3057:89:0;;;;-1:-1:-1;;;3057:89:0;;7712:2:63;3057:89:0;;;7694:21:63;7751:2;7731:18;;;7724:30;7790;7770:18;;;7763:58;7838:18;;3057:89:0;7510:352:63;3159:160:0;3256:24;;3248:64;;;;-1:-1:-1;;;3248:64:0;;11702:2:63;3248:64:0;;;11684:21:63;11741:2;11721:18;;;11714:30;11780:29;11760:18;;;11753:57;11827:18;;3248:64:0;11500:351:63;648:700:27;874:12;888:4;961:300;1007:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;:::-;1055:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;1094:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;1133:22;;;;:12;:22;:::i;:::-;:35;1182:20;:12;;:20;:::i;:::-;:24;;;1220:12;;1246:14;961:300;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1335:5;1271:70;;;;;;;;;;;;;;;;;;;;-1:-1:-1;648:700:27;-1:-1:-1;;;;;;;648:700:27:o;1359:130:47:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;10622:2:63;1414:68:47;;;10604:21:63;;;10641:18;;;10634:30;10700:34;10680:18;;;10673:62;10752:18;;1414:68:47;10420:356:63;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1354:328:27:-;1625:50;1666:7;;1625:50;;;;;;;:::i;:::-;;;;;;;;1354:328;;;;;:::o;1333:274:59:-;1420:4;1527:23;1542:7;1527:14;:23::i;:::-;:73;;;;;1554:46;1579:7;1588:11;1554:24;:46::i;:::-;1520:80;1333:274;-1:-1:-1;;;1333:274:59:o;2158:540:38:-;2260:12;;2294:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2294:34:38;-1:-1:-1;;;2429:22:38;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;2342:133;;-1:-1:-1;;;;;5142:32:63;;;2342:133:38;;;5124:51:63;5097:18;;2342:133:38;;;-1:-1:-1;;2342:133:38;;;;;;;;;;;;;;-1:-1:-1;;;;;2342:133:38;-1:-1:-1;;;;;;2342:133:38;;;;;;;;;;2294:191;;;;2342:133;2294:191;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2259:226;;;;2503:7;2495:48;;;;-1:-1:-1;;;2495:48:38;;8836:2:63;2495:48:38;;;8818:21:63;8875:2;8855:18;;;8848:30;8914;8894:18;;;8887:58;8962:18;;2495:48:38;8634:352:63;2495:48:38;2561:3;:10;2575:2;2561:16;2553:61;;;;-1:-1:-1;;;2553:61:38;;10261:2:63;2553:61:38;;;10243:21:63;;;10280:18;;;10273:30;10339:34;10319:18;;;10312:62;10391:18;;2553:61:38;10059:356:63;2553:61:38;2643:3;2632:23;;;;;;;;;;;;:::i;:::-;2624:67;;;;-1:-1:-1;;;2624:67:38;;8069:2:63;2624:67:38;;;8051:21:63;8108:2;8088:18;;;8081:30;8147:33;8127:18;;;8120:61;8198:18;;2624:67:38;7867:355:63;2624:67:38;2249:449;;2158:540;:::o;704:411:59:-;768:4;975:60;1000:7;-1:-1:-1;;;975:24:59;:60::i;:::-;:133;;;;-1:-1:-1;1052:56:59;1077:7;-1:-1:-1;;;;;;1052:24:59;:56::i;:::-;1051:57;956:152;704:411;-1:-1:-1;;704:411:59:o;4223:638::-;4385:71;;;-1:-1:-1;;;;;;6687:33:63;;4385:71:59;;;;6669:52:63;;;;4385:71:59;;;;;;;;;;6642:18:63;;;;4385:71:59;;;;;;;;;-1:-1:-1;;;;;4385:71:59;-1:-1:-1;;;4385:71:59;;;4664:20;;4316:4;;4385:71;4316:4;;;;;;4385:71;4316:4;;4664:20;4629:7;4622:5;4611:86;4600:97;;4724:16;4710:30;;4774:4;4768:11;4753:26;;4806:7;:29;;;;;4831:4;4817:10;:18;;4806:29;:48;;;;;4853:1;4839:11;:15;4806:48;4799:55;4223:638;-1:-1:-1;;;;;;;4223:638:59: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;296:59;14:347;;;;;:::o;366:247::-;425:6;478:2;466:9;457:7;453:23;449:32;446:52;;;494:1;491;484:12;446:52;533:9;520:23;552:31;577:5;552:31;:::i;878:245::-;945:6;998:2;986:9;977:7;973:23;969:32;966:52;;;1014:1;1011;1004:12;966:52;1046:9;1040:16;1065:28;1087:5;1065:28;:::i;1128:286::-;1186:6;1239:2;1227:9;1218:7;1214:23;1210:32;1207:52;;;1255:1;1252;1245:12;1207:52;1281:23;;-1:-1:-1;;;;;;1333:32:63;;1323:43;;1313:71;;1380:1;1377;1370:12;1419:895;1542:6;1550;1558;1566;1574;1627:3;1615:9;1606:7;1602:23;1598:33;1595:53;;;1644:1;1641;1634:12;1595:53;1684:9;1671:23;1713:18;1754:2;1746:6;1743:14;1740:34;;;1770:1;1767;1760:12;1740:34;1809:58;1859:7;1850:6;1839:9;1835:22;1809:58;:::i;:::-;1886:8;;-1:-1:-1;1783:84:63;-1:-1:-1;1971:2:63;1956:18;;1943:32;;-1:-1:-1;1984:28:63;1943:32;1984:28;:::i;:::-;2031:5;;-1:-1:-1;2083:2:63;2068:18;;2055:32;;-1:-1:-1;2140:2:63;2125:18;;2112:32;;2156:16;;;2153:36;;;2185:1;2182;2175:12;2153:36;-1:-1:-1;2208:24:63;;2266:3;2248:16;;;2244:26;2241:46;;;2283:1;2280;2273:12;2241:46;2306:2;2296:12;;;1419:895;;;;;;;;:::o;2589:1055::-;2729:6;2737;2745;2753;2761;2769;2822:3;2810:9;2801:7;2797:23;2793:33;2790:53;;;2839:1;2836;2829:12;2790:53;2879:9;2866:23;2908:18;2949:2;2941:6;2938:14;2935:34;;;2965:1;2962;2955:12;2935:34;2988:22;;;;3044:2;3026:16;;;3022:25;3019:45;;;3060:1;3057;3050:12;3019:45;3083:2;;-1:-1:-1;3138:2:63;3123:18;;3110:32;;3154:16;;;3151:36;;;3183:1;3180;3173:12;3151:36;3222:60;3274:7;3263:8;3252:9;3248:24;3222:60;:::i;:::-;3301:8;;-1:-1:-1;3196:86:63;-1:-1:-1;3389:2:63;3374:18;;3361:32;;-1:-1:-1;3405:16:63;;;3402:36;;;3434:1;3431;3424:12;3402:36;;3473:60;3525:7;3514:8;3503:9;3499:24;3473:60;:::i;:::-;2589:1055;;;;-1:-1:-1;2589:1055:63;;;;;3634:2;3619:18;;;3606:32;;2589:1055;-1:-1:-1;;;;2589:1055:63:o;3649:184::-;3719:6;3772:2;3760:9;3751:7;3747:23;3743:32;3740:52;;;3788:1;3785;3778:12;3740:52;-1:-1:-1;3811:16:63;;3649:184;-1:-1:-1;3649:184:63:o;3838:323::-;3914:6;3922;3975:2;3963:9;3954:7;3950:23;3946:32;3943:52;;;3991:1;3988;3981:12;3943:52;4027:9;4014:23;4004:33;;4087:2;4076:9;4072:18;4059:32;4100:31;4125:5;4100:31;:::i;:::-;4150:5;4140:15;;;3838:323;;;;;:::o;4166:266::-;4254:6;4249:3;4242:19;4306:6;4299:5;4292:4;4287:3;4283:14;4270:43;-1:-1:-1;4358:1:63;4333:16;;;4351:4;4329:27;;;4322:38;;;;4414:2;4393:15;;;-1:-1:-1;;4389:29:63;4380:39;;;4376:50;;4166:266::o;4437:257::-;4478:3;4516:5;4510:12;4543:6;4538:3;4531:19;4559:63;4615:6;4608:4;4603:3;4599:14;4592:4;4585:5;4581:16;4559:63;:::i;:::-;4676:2;4655:15;-1:-1:-1;;4651:29:63;4642:39;;;;4683:4;4638:50;;4437:257;-1:-1:-1;;4437:257:63:o;4699:274::-;4828:3;4866:6;4860:13;4882:53;4928:6;4923:3;4916:4;4908:6;4904:17;4882:53;:::i;:::-;4951:16;;;;;4699:274;-1:-1:-1;;4699:274:63:o;5481:847::-;-1:-1:-1;;;;;5872:15:63;;;5854:34;;5924:15;;5919:2;5904:18;;5897:43;5976:3;5971:2;5956:18;;5949:31;;;5797:4;;6003:62;;6045:19;;6037:6;6029;6003:62;:::i;:::-;6101:6;6096:2;6085:9;6081:18;6074:34;6145:6;6139:3;6128:9;6124:19;6117:35;6201:9;6193:6;6189:22;6183:3;6172:9;6168:19;6161:51;6229:49;6271:6;6263;6255;6229:49;:::i;:::-;6221:57;;;6315:6;6309:3;6298:9;6294:19;6287:35;5481:847;;;;;;;;;;;;:::o;6732:298::-;6901:2;6890:9;6883:21;6864:4;6921:44;6961:2;6950:9;6946:18;6938:6;6921:44;:::i;:::-;6913:52;;7015:6;7008:14;7001:22;6996:2;6985:9;6981:18;6974:50;6732:298;;;;;:::o;7035:246::-;7194:2;7183:9;7176:21;7157:4;7214:61;7271:2;7260:9;7256:18;7248:6;7240;7214:61;:::i;:::-;7206:69;7035:246;-1:-1:-1;;;;7035:246:63:o;7286:219::-;7435:2;7424:9;7417:21;7398:4;7455:44;7495:2;7484:9;7480:18;7472:6;7455:44;:::i;12485:521::-;12562:4;12568:6;12628:11;12615:25;12722:2;12718:7;12707:8;12691:14;12687:29;12683:43;12663:18;12659:68;12649:96;;12741:1;12738;12731:12;12649:96;12768:33;;12820:20;;;-1:-1:-1;12863:18:63;12852:30;;12849:50;;;12895:1;12892;12885:12;12849:50;12928:4;12916:17;;-1:-1:-1;12959:14:63;12955:27;;;12945:38;;12942:58;;;12996:1;12993;12986:12;13011:332;13111:4;13169:11;13156:25;13263:3;13259:8;13248;13232:14;13228:29;13224:44;13204:18;13200:69;13190:97;;13283:1;13280;13273:12;13348:327;13443:4;13501:11;13488:25;13595:3;13591:8;13580;13564:14;13560:29;13556:44;13536:18;13532:69;13522:97;;13615:1;13612;13605:12;13680:225;13720:3;13751:1;13747:6;13744:1;13741:13;13738:136;;;13796:10;13791:3;13787:20;13784:1;13777:31;13831:4;13828:1;13821:15;13859:4;13856:1;13849:15;13738:136;-1:-1:-1;13890:9:63;;13680:225::o;13910:258::-;13982:1;13992:113;14006:6;14003:1;14000:13;13992:113;;;14082:11;;;14076:18;14063:11;;;14056:39;14028:2;14021:10;13992:113;;;14123:6;14120:1;14117:13;14114:48;;;14158:1;14149:6;14144:3;14140:16;14133:27;14114:48;;13910:258;;;:::o;14173:131::-;-1:-1:-1;;;;;14248:31:63;;14238:42;;14228:70;;14294:1;14291;14284:12;14309:118;14395:5;14388:13;14381:21;14374:5;14371:32;14361:60;;14417:1;14414;14407:12",
    "source": "pragma solidity ^0.8.0;\npragma abicoder v2;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"./TestPaymasterEverythingAccepted.sol\";\n\ncontract TestPaymasterStoreContext is TestPaymasterEverythingAccepted {\n\n    event SampleRecipientPreCallWithValues(\n        address relay,\n        address from,\n        bytes encodedFunction,\n        uint256 baseRelayFee,\n        uint256 gasLimit,\n        bytes approvalData,\n        uint256 maxPossibleGas\n    );\n\n    event SampleRecipientPostCallWithValues(\n        string context\n    );\n\n    /**\n     * This demonstrates how preRelayedCall can return 'context' data for reuse in postRelayedCall.\n     */\n    function _preRelayedCall(\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData,\n        uint256 maxPossibleGas\n    )\n    internal\n    override\n    returns (bytes memory, bool) {\n        (signature, approvalData, maxPossibleGas);\n\n        emit SampleRecipientPreCallWithValues(\n            relayRequest.relayData.relayWorker,\n            relayRequest.request.from,\n            relayRequest.request.data,\n            relayRequest.relayData.maxFeePerGas,\n            relayRequest.request.gas,\n            approvalData,\n            maxPossibleGas);\n        return (\"context passed from preRelayedCall to postRelayedCall\",false);\n    }\n\n    function _postRelayedCall(\n        bytes calldata context,\n        bool success,\n        uint256 gasUseWithoutPost,\n        GsnTypes.RelayData calldata relayData\n    )\n    internal\n    override\n    {\n        (context, success, gasUseWithoutPost, relayData);\n        emit SampleRecipientPostCallWithValues(string(context));\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterStoreContext.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterStoreContext.sol",
        "exportedSymbols": {
            "BasePaymaster": [
                397
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "TestPaymasterEverythingAccepted": [
                7006
            ],
            "TestPaymasterStoreContext": [
                7246
            ]
        },
        "id": 7247,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 7146,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:27"
            },
            {
                "id": 7147,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:27"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.sol",
                "file": "./TestPaymasterEverythingAccepted.sol",
                "id": 7148,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7247,
                "sourceUnit": 7007,
                "src": "87:47:27",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 7149,
                            "name": "TestPaymasterEverythingAccepted",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7006,
                            "src": "174:31:27"
                        },
                        "id": 7150,
                        "nodeType": "InheritanceSpecifier",
                        "src": "174:31:27"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 7246,
                "linearizedBaseContracts": [
                    7246,
                    7006,
                    397,
                    12146,
                    10182,
                    11508,
                    5447,
                    12352
                ],
                "name": "TestPaymasterStoreContext",
                "nameLocation": "145:25:27",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "anonymous": false,
                        "id": 7166,
                        "name": "SampleRecipientPreCallWithValues",
                        "nameLocation": "219:32:27",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 7165,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7152,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "relay",
                                    "nameLocation": "269:5:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "261:13:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7151,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "261:7:27",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7154,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "292:4:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "284:12:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7153,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "284:7:27",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7156,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "encodedFunction",
                                    "nameLocation": "312:15:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "306:21:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7155,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "306:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7158,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "baseRelayFee",
                                    "nameLocation": "345:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "337:20:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7157,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "337:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7160,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "gasLimit",
                                    "nameLocation": "375:8:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "367:16:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7159,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "367:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7162,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "399:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "393:18:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7161,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "393:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7164,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "429:14:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "421:22:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7163,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "421:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "251:198:27"
                        },
                        "src": "213:237:27"
                    },
                    {
                        "anonymous": false,
                        "id": 7170,
                        "name": "SampleRecipientPostCallWithValues",
                        "nameLocation": "462:33:27",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 7169,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7168,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "512:7:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7170,
                                    "src": "505:14:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 7167,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "505:6:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "495:30:27"
                        },
                        "src": "456:70:27"
                    },
                    {
                        "baseFunctions": [
                            6931
                        ],
                        "body": {
                            "id": 7217,
                            "nodeType": "Block",
                            "src": "894:454:27",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 7188,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7176,
                                                "src": "905:9:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7189,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7178,
                                                "src": "916:12:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7190,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7180,
                                                "src": "930:14:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 7191,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "904:41:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(bytes calldata,bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 7192,
                                    "nodeType": "ExpressionStatement",
                                    "src": "904:41:27"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7194,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1007:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7195,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "1007:22:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 7196,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayWorker",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8475,
                                                "src": "1007:34:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7197,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1055:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7198,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "1055:20:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 7199,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5045,
                                                "src": "1055:25:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7200,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1094:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7201,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "1094:20:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 7202,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5055,
                                                "src": "1094:25:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7203,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1133:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7204,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "1133:22:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 7205,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8469,
                                                "src": "1133:35:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7206,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1182:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7207,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "1182:20:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 7208,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5051,
                                                "src": "1182:24:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 7209,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7178,
                                                "src": "1220:12:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7210,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7180,
                                                "src": "1246:14:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 7193,
                                            "name": "SampleRecipientPreCallWithValues",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7166,
                                            "src": "961:32:27",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,bytes memory,uint256,uint256,bytes memory,uint256)"
                                            }
                                        },
                                        "id": 7211,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "961:300:27",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7212,
                                    "nodeType": "EmitStatement",
                                    "src": "956:305:27"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "hexValue": "636f6e74657874207061737365642066726f6d2070726552656c6179656443616c6c20746f20706f737452656c6179656443616c6c",
                                                "id": 7213,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1279:55:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_559a642a1797c3511aa8b94966c2092ae06aa41f86187b092decd8c368289fad",
                                                    "typeString": "literal_string \"context passed from preRelayedCall to postRelayedCall\""
                                                },
                                                "value": "context passed from preRelayedCall to postRelayedCall"
                                            },
                                            {
                                                "hexValue": "66616c7365",
                                                "id": 7214,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "bool",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1335:5:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "value": "false"
                                            }
                                        ],
                                        "id": 7215,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1278:63:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_559a642a1797c3511aa8b94966c2092ae06aa41f86187b092decd8c368289fad_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"context passed from preRelayedCall to postRelayedCall\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 7187,
                                    "id": 7216,
                                    "nodeType": "Return",
                                    "src": "1271:70:27"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 7171,
                            "nodeType": "StructuredDocumentation",
                            "src": "532:111:27",
                            "text": " This demonstrates how preRelayedCall can return 'context' data for reuse in postRelayedCall."
                        },
                        "id": 7218,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_preRelayedCall",
                        "nameLocation": "657:15:27",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 7182,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "852:8:27"
                        },
                        "parameters": {
                            "id": 7181,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7174,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "713:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "682:43:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 7173,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7172,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "682:21:27"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "682:21:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7176,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "750:9:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "735:24:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7175,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "735:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7178,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "784:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "769:27:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7177,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "769:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7180,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "814:14:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "806:22:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7179,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "806:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "672:162:27"
                        },
                        "returnParameters": {
                            "id": 7187,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7184,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "874:12:27",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7183,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "874:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7186,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "888:4:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 7185,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "888:4:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "873:20:27"
                        },
                        "scope": 7246,
                        "src": "648:700:27",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6955
                        ],
                        "body": {
                            "id": 7244,
                            "nodeType": "Block",
                            "src": "1552:130:27",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 7231,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7220,
                                                "src": "1563:7:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7232,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7222,
                                                "src": "1572:7:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 7233,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7224,
                                                "src": "1581:17:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 7234,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7227,
                                                "src": "1600:9:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 7235,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1562:48:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 7236,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1562:48:27"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 7240,
                                                        "name": "context",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7220,
                                                        "src": "1666:7:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 7239,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1659:6:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                        "typeString": "type(string storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 7238,
                                                        "name": "string",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1659:6:27",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 7241,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1659:15:27",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            ],
                                            "id": 7237,
                                            "name": "SampleRecipientPostCallWithValues",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7170,
                                            "src": "1625:33:27",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 7242,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1625:50:27",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7243,
                                    "nodeType": "EmitStatement",
                                    "src": "1620:55:27"
                                }
                            ]
                        },
                        "id": 7245,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_postRelayedCall",
                        "nameLocation": "1363:16:27",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 7229,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1539:8:27"
                        },
                        "parameters": {
                            "id": 7228,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7220,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "1404:7:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1389:22:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7219,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1389:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7222,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "1426:7:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1421:12:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 7221,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1421:4:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7224,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nameLocation": "1451:17:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1443:25:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7223,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1443:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7227,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "1506:9:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1478:37:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 7226,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7225,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "1478:18:27"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "1478:18:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1379:142:27"
                        },
                        "returnParameters": {
                            "id": 7230,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1552:0:27"
                        },
                        "scope": 7246,
                        "src": "1354:328:27",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    }
                ],
                "scope": 7247,
                "src": "136:1548:27",
                "usedErrors": []
            }
        ],
        "src": "0:1684:27"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterStoreContext.sol",
        "exportedSymbols": {
            "BasePaymaster": [
                397
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IStakeManager": [
                6284
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "TestPaymasterEverythingAccepted": [
                7006
            ],
            "TestPaymasterStoreContext": [
                7246
            ]
        },
        "id": 7247,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 7146,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:27"
            },
            {
                "id": 7147,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:27"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.sol",
                "file": "./TestPaymasterEverythingAccepted.sol",
                "id": 7148,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7247,
                "sourceUnit": 7007,
                "src": "87:47:27",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 7149,
                            "name": "TestPaymasterEverythingAccepted",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 7006,
                            "src": "174:31:27"
                        },
                        "id": 7150,
                        "nodeType": "InheritanceSpecifier",
                        "src": "174:31:27"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 7246,
                "linearizedBaseContracts": [
                    7246,
                    7006,
                    397,
                    12146,
                    10182,
                    11508,
                    5447,
                    12352
                ],
                "name": "TestPaymasterStoreContext",
                "nameLocation": "145:25:27",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "anonymous": false,
                        "id": 7166,
                        "name": "SampleRecipientPreCallWithValues",
                        "nameLocation": "219:32:27",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 7165,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7152,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "relay",
                                    "nameLocation": "269:5:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "261:13:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7151,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "261:7:27",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7154,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nameLocation": "292:4:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "284:12:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 7153,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "284:7:27",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7156,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "encodedFunction",
                                    "nameLocation": "312:15:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "306:21:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7155,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "306:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7158,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "baseRelayFee",
                                    "nameLocation": "345:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "337:20:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7157,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "337:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7160,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "gasLimit",
                                    "nameLocation": "375:8:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "367:16:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7159,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "367:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7162,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "399:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "393:18:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7161,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "393:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7164,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "429:14:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7166,
                                    "src": "421:22:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7163,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "421:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "251:198:27"
                        },
                        "src": "213:237:27"
                    },
                    {
                        "anonymous": false,
                        "id": 7170,
                        "name": "SampleRecipientPostCallWithValues",
                        "nameLocation": "462:33:27",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 7169,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7168,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "512:7:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7170,
                                    "src": "505:14:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 7167,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "505:6:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "495:30:27"
                        },
                        "src": "456:70:27"
                    },
                    {
                        "baseFunctions": [
                            6931
                        ],
                        "body": {
                            "id": 7217,
                            "nodeType": "Block",
                            "src": "894:454:27",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 7188,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7176,
                                                "src": "905:9:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7189,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7178,
                                                "src": "916:12:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7190,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7180,
                                                "src": "930:14:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 7191,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "904:41:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(bytes calldata,bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 7192,
                                    "nodeType": "ExpressionStatement",
                                    "src": "904:41:27"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7194,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1007:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7195,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "1007:22:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 7196,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayWorker",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8475,
                                                "src": "1007:34:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7197,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1055:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7198,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "1055:20:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 7199,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5045,
                                                "src": "1055:25:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7200,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1094:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7201,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "1094:20:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 7202,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5055,
                                                "src": "1094:25:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7203,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1133:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7204,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "1133:22:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 7205,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8469,
                                                "src": "1133:35:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 7206,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7174,
                                                        "src": "1182:12:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 7207,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "1182:20:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 7208,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5051,
                                                "src": "1182:24:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 7209,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7178,
                                                "src": "1220:12:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7210,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7180,
                                                "src": "1246:14:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 7193,
                                            "name": "SampleRecipientPreCallWithValues",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7166,
                                            "src": "961:32:27",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,bytes memory,uint256,uint256,bytes memory,uint256)"
                                            }
                                        },
                                        "id": 7211,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "961:300:27",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7212,
                                    "nodeType": "EmitStatement",
                                    "src": "956:305:27"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "hexValue": "636f6e74657874207061737365642066726f6d2070726552656c6179656443616c6c20746f20706f737452656c6179656443616c6c",
                                                "id": 7213,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1279:55:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_559a642a1797c3511aa8b94966c2092ae06aa41f86187b092decd8c368289fad",
                                                    "typeString": "literal_string \"context passed from preRelayedCall to postRelayedCall\""
                                                },
                                                "value": "context passed from preRelayedCall to postRelayedCall"
                                            },
                                            {
                                                "hexValue": "66616c7365",
                                                "id": 7214,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "bool",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1335:5:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "value": "false"
                                            }
                                        ],
                                        "id": 7215,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1278:63:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_559a642a1797c3511aa8b94966c2092ae06aa41f86187b092decd8c368289fad_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"context passed from preRelayedCall to postRelayedCall\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 7187,
                                    "id": 7216,
                                    "nodeType": "Return",
                                    "src": "1271:70:27"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 7171,
                            "nodeType": "StructuredDocumentation",
                            "src": "532:111:27",
                            "text": " This demonstrates how preRelayedCall can return 'context' data for reuse in postRelayedCall."
                        },
                        "id": 7218,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_preRelayedCall",
                        "nameLocation": "657:15:27",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 7182,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "852:8:27"
                        },
                        "parameters": {
                            "id": 7181,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7174,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "713:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "682:43:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 7173,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7172,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "682:21:27"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "682:21:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7176,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "750:9:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "735:24:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7175,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "735:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7178,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "784:12:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "769:27:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7177,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "769:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7180,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "814:14:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "806:22:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7179,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "806:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "672:162:27"
                        },
                        "returnParameters": {
                            "id": 7187,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7184,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "874:12:27",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7183,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "874:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7186,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7218,
                                    "src": "888:4:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 7185,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "888:4:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "873:20:27"
                        },
                        "scope": 7246,
                        "src": "648:700:27",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            6955
                        ],
                        "body": {
                            "id": 7244,
                            "nodeType": "Block",
                            "src": "1552:130:27",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 7231,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7220,
                                                "src": "1563:7:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 7232,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7222,
                                                "src": "1572:7:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 7233,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7224,
                                                "src": "1581:17:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 7234,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7227,
                                                "src": "1600:9:27",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 7235,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1562:48:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 7236,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1562:48:27"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 7240,
                                                        "name": "context",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 7220,
                                                        "src": "1666:7:27",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 7239,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1659:6:27",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                        "typeString": "type(string storage pointer)"
                                                    },
                                                    "typeName": {
                                                        "id": 7238,
                                                        "name": "string",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1659:6:27",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 7241,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1659:15:27",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            ],
                                            "id": 7237,
                                            "name": "SampleRecipientPostCallWithValues",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7170,
                                            "src": "1625:33:27",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory)"
                                            }
                                        },
                                        "id": 7242,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1625:50:27",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7243,
                                    "nodeType": "EmitStatement",
                                    "src": "1620:55:27"
                                }
                            ]
                        },
                        "id": 7245,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_postRelayedCall",
                        "nameLocation": "1363:16:27",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 7229,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1539:8:27"
                        },
                        "parameters": {
                            "id": 7228,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 7220,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "1404:7:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1389:22:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 7219,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1389:5:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7222,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "1426:7:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1421:12:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 7221,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1421:4:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7224,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nameLocation": "1451:17:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1443:25:27",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 7223,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1443:7:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 7227,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "1506:9:27",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7245,
                                    "src": "1478:37:27",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 7226,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 7225,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "1478:18:27"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "1478:18:27",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1379:142:27"
                        },
                        "returnParameters": {
                            "id": 7230,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1552:0:27"
                        },
                        "scope": 7246,
                        "src": "1354:328:27",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    }
                ],
                "scope": 7247,
                "src": "136:1548:27",
                "usedErrors": []
            }
        ],
        "src": "0:1684:27"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.226Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "getGasAndDataLimits()": {
                "returns": {
                    "limits": "An instance of the `GasAndDataLimits` struct ##### `acceptanceBudget` If the transactions consumes more than `acceptanceBudget` this Paymaster will be charged for gas no matter what. Transaction that gets rejected after consuming more than `acceptanceBudget` gas is on this Paymaster's expense. Should be set to an amount gas this Paymaster expects to spend deciding whether to accept or reject a request. This includes gas consumed by calculations in the `preRelayedCall`, `Forwarder` and the recipient contract. :warning: **Warning** :warning: As long this value is above `preRelayedCallGasLimit` (see defaults in `BasePaymaster`), the Paymaster is guaranteed it will never pay for rejected transactions. If this value is below `preRelayedCallGasLimit`, it might might make Paymaster open to a \"griefing\" attack. The relayers should prefer lower `acceptanceBudget`, as it improves their chances of being compensated. From a Relay's point of view, this is the highest gas value a bad Paymaster may cost the relay, since the paymaster will pay anything above that value regardless of whether the transaction succeeds or reverts. Specifying value too high might make the call rejected by relayers (see `maxAcceptanceBudget` in server config). ##### `preRelayedCallGasLimit` The max gas usage of preRelayedCall. Any revert of the `preRelayedCall` is a request rejection by the paymaster. As long as `acceptanceBudget` is above `preRelayedCallGasLimit`, any such revert is not payed by the paymaster. ##### `postRelayedCallGasLimit` The max gas usage of postRelayedCall. The Paymaster is not charged for the maximum, only for actually used gas. Note that an OOG will revert the inner transaction, but the paymaster will be charged for it anyway."
                }
            },
            "getRelayHub()": {
                "returns": {
                    "_0": "The address of the `RelayHub` that is trusted by this Paymaster to execute the requests."
                }
            },
            "getTrustedForwarder()": {
                "returns": {
                    "_0": "The address of the `Forwarder` that is trusted by this Paymaster to execute the requests."
                }
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "params": {
                    "context": "The call context, as returned by the preRelayedCall",
                    "gasUseWithoutPost": "The actual amount of gas used by the entire transaction, EXCEPT        the gas used by the postRelayedCall itself.",
                    "relayData": "The relay params of the request. can be used by relayHub.calculateCharge()",
                    "success": "`true` if the relayed call succeeded, false if it reverted"
                }
            },
            "preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)": {
                "params": {
                    "approvalData": "- extra dapp-specific data (e.g. signature from trusted party)",
                    "maxPossibleGas": "- based on values returned from `getGasAndDataLimits` the RelayHub will calculate the maximum possible amount of gas the user may be charged for. In order to convert this value to wei, the Paymaster has to call \"relayHub.calculateCharge()\"",
                    "relayRequest": "- the full relay request structure",
                    "signature": "- user's EIP712-compatible signature of the `relayRequest`. Note that in most cases the paymaster shouldn't try use it at all. It is always checked by the forwarder immediately after preRelayedCall returns."
                },
                "returns": {
                    "_0": "A byte array to be passed to postRelayedCall. Can contain any data needed by this Paymaster in any form or be empty if no extra data is needed.",
                    "_1": "The flag that allows a Paymaster to \"delegate\" the rejection to the recipient code. It also means the Paymaster trust the recipient to reject fast: both preRelayedCall, forwarder check and recipient checks must fit into the GasLimits.acceptanceBudget, otherwise the TX is paid by the Paymaster. `true` if the Paymaster wants to reject the TX if the recipient reverts. `false` if the Paymaster wants rejects by the recipient to be completed on chain and paid by the Paymaster."
                }
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "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."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            },
            "versionPaymaster()": {
                "returns": {
                    "_0": "version The SemVer string of this Paymaster's version."
                }
            },
            "withdrawRelayHubDepositTo(uint256,address)": {
                "params": {
                    "amount": "The amount to be subtracted from the sender.",
                    "target": "The target to which the amount will be transferred."
                }
            }
        },
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {
            "getGasAndDataLimits()": {
                "notice": "Return the Gas Limits for Paymaster's functions and maximum msg.data length values for this Paymaster. This function allows different paymasters to have different properties without changes to the RelayHub."
            },
            "getTrustedForwarder()": {
                "notice": ":warning: **Warning** :warning: using incorrect Forwarder may cause the Paymaster to agreeing to pay for invalid transactions."
            },
            "postRelayedCall(bytes,bool,uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "notice": "This method is called after the actual relayed function call. It may be used to record the transaction (e.g. charge the caller by some contract logic) for this call. Revert in this functions causes a revert of the client's relayed call (and preRelayedCall(), but the Paymaster is still committed to pay the relay for the entire transaction."
            },
            "preRelayedCall(((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,uint256)": {
                "notice": "Called by the Relay in view mode and later by the `RelayHub` on-chain to validate that the Paymaster agrees to pay for this call. The request is considered to be rejected by the Paymaster in one of the following conditions:  - `preRelayedCall()` method reverts  - the `Forwarder` reverts because of nonce or signature error  - the `Paymaster` returned `rejectOnRecipientRevert: true` and the recipient contract reverted    (and all that did not consume more than `acceptanceBudget` gas). In any of the above cases, all Paymaster calls and the recipient call are reverted. In any other case the Paymaster will pay for the gas cost of the transaction. Note that even if `postRelayedCall` is reverted the Paymaster will be charged."
            },
            "setRelayHub(address)": {
                "notice": "The owner of the Paymaster can change the instance of the RelayHub this Paymaster works with. :warning: **Warning** :warning: The deposit on the previous RelayHub must be withdrawn first."
            },
            "setTrustedForwarder(address)": {
                "notice": "The owner of the Paymaster can change the instance of the Forwarder this Paymaster works with.the Recipients must trust this Forwarder as well in order for the configuration to remain functional."
            },
            "withdrawRelayHubDepositTo(uint256,address)": {
                "notice": "Withdraw deposit from the RelayHub."
            }
        },
        "version": 1
    }
}
