{
    "contractName": "TestPaymasterEverythingAccepted",
    "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": [],
            "name": "SampleRecipientPreCall",
            "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": "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": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address payable",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "withdrawRelayHubDepositTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        },
        {
            "inputs": [],
            "name": "versionPaymaster",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "deposit",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "destination",
                    "type": "address"
                }
            ],
            "name": "withdrawAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "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\":[],\"name\":\"SampleRecipientPreCall\",\"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/TestPaymasterEverythingAccepted.sol\":\"TestPaymasterEverythingAccepted\"},\"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/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": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6112dc8061007e6000396000f3fe6080604052600436106101225760003560e01c8063b039a88f116100a0578063da74222811610064578063da742228146103f5578063df463a6614610415578063f2fde38b1461042a578063f9c002f71461044a578063fa09e6301461046157600080fd5b8063b039a88f1461035a578063b90b41cf146103a2578063bbdaa3c9146103b8578063ce1b815f146103cf578063d0e30db0146103ed57600080fd5b806376fa01c3116100e757806376fa01c3146102a85780637bb05264146102c85780637bdf2ec7146102e85780638da5cb5b1461031a578063921276ea1461033857600080fd5b8062be5dd4146101e657806301ffc9a71461021d5780632d14c4b71461024d5780635c5e3db11461026f578063715018a61461029357600080fd5b366101e1576001546001600160a01b03166101805760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064015b60405180910390fd5b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b1580156101c657600080fd5b505af11580156101da573d6000803e3d6000fd5b5050505050005b600080fd5b3480156101f257600080fd5b50610206610201366004611025565b610481565b60405161021492919061115b565b60405180910390f35b34801561022957600080fd5b5061023d610238366004610f6b565b6104c6565b6040519015158152602001610214565b34801561025957600080fd5b5061026d6102683660046110e3565b610518565b005b34801561027b57600080fd5b5061028561290481565b604051908152602001610214565b34801561029f57600080fd5b5061026d61058a565b3480156102b457600080fd5b5061026d6102c3366004610f95565b61059e565b3480156102d457600080fd5b5061026d6102e3366004610f31565b6105ba565b3480156102f457600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610214565b34801561032657600080fd5b506000546001600160a01b0316610302565b34801561034457600080fd5b5061034d61064a565b604051610214919061117f565b34801561036657600080fd5b5061036f61066a565b60405161021491908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156103ae57600080fd5b5061028561c35081565b3480156103c457600080fd5b506102856201adb081565b3480156103db57600080fd5b506002546001600160a01b0316610302565b61026d6106d3565b34801561040157600080fd5b5061026d610410366004610f31565b610781565b34801561042157600080fd5b50610285610811565b34801561043657600080fd5b5061026d610445366004610f31565b610823565b34801561045657600080fd5b50610285620186a081565b34801561046d57600080fd5b5061026d61047c366004610f31565b61089c565b6060600061048d610928565b61049688610982565b61049f88610a1a565b6104a98585610a84565b6104b7888888888888610ad2565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b14806104f757506001600160e01b03198216630704183b60e11b145b8061051257506301ffc9a760e01b6001600160e01b03198316145b92915050565b610520610b34565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a390604401600060405180830381600087803b15801561056e57600080fd5b505af1158015610582573d6000803e3d6000fd5b505050505050565b610592610b34565b61059c6000610b8e565b565b6105a6610928565b6105b38585858585610bde565b5050505050565b6105c2610b34565b6105dc6001600160a01b03821663e9fb30f760e01b610c20565b6106285760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c6179487562006044820152606401610177565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b606060405180606001604052806028815260200161127f60289139905090565b6106956040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a06106b19190611205565b8152602001620186a081526020016201adb08152602001612904815250905090565b6001546001600160a01b03166107275760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b6044820152606401610177565b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561076d57600080fd5b505af11580156105b3573d6000803e3d6000fd5b610789610b34565b6107a36001600160a01b0382166309788f9960e21b610c20565b6107ef5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f727761726465726044820152606401610177565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61082061c350620186a0611205565b81565b61082b610b34565b6001600160a01b0381166108905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610177565b61089981610b8e565b50565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091891906110ca565b90506109248183610518565b5050565b6001546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c617948756200006044820152606401610177565b61098f60208201826111ef565b6109a09060c081019060a001610f31565b6001600160a01b03166109bb6002546001600160a01b031690565b6001600160a01b031614610a115760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f74207472757374656400000000000000006044820152606401610177565b61089981610c43565b610a2760208201826111ef565b610a359060c0810190611192565b1590506108995760405162461bcd60e51b815260206004820152601c60248201527f73686f756c642068617665206e6f207061796d617374657244617461000000006044820152606401610177565b80156109245760405162461bcd60e51b815260206004820152601b60248201527f73686f756c642068617665206e6f20617070726f76616c4461746100000000006044820152606401610177565b6040516060906000907fa8c41f12bf21d07540a32ccb08bbc931778b2943d4747381c9466041b89d7d7a908290a1505060408051808201909152600e81526d6e6f20726576657274206865726560901b60208201526000965096945050505050565b6000546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610177565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080518415158152602081018490527f8c7dc6f54401600ae78b31aec3dec125cfa5b7bcbf4ff3cbc5bfd818ba082b49910160405180910390a15050505050565b6000610c2b83610e2c565b8015610c3c5750610c3c8383610e5f565b9392505050565b600080610c5083806111d9565b610c61906040810190602001610f31565b6001600160a01b031663572b6c0560e01b610c7f60208601866111ef565b610c909060c081019060a001610f31565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ce4919061113f565b600060405180830381855afa9150503d8060008114610d1f576040519150601f19603f3d011682016040523d82523d6000602084013e610d24565b606091505b509150915081610d765760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a207265766572746564000000006044820152606401610177565b8051602014610dc75760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e73656044820152606401610177565b80806020019051810190610ddb9190610f4e565b610e275760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e74006044820152606401610177565b505050565b6000610e3f826301ffc9a760e01b610e5f565b80156105125750610e58826001600160e01b0319610e5f565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015610ed1575060208210155b8015610edd5750600081115b979650505050505050565b60008083601f840112610efa57600080fd5b50813567ffffffffffffffff811115610f1257600080fd5b602083019150836020828501011115610f2a57600080fd5b9250929050565b600060208284031215610f4357600080fd5b8135610c3c8161125b565b600060208284031215610f6057600080fd5b8151610c3c81611270565b600060208284031215610f7d57600080fd5b81356001600160e01b031981168114610c3c57600080fd5b600080600080600060808688031215610fad57600080fd5b853567ffffffffffffffff80821115610fc557600080fd5b610fd189838a01610ee8565b909750955060208801359150610fe682611270565b909350604087013592506060870135908082111561100357600080fd5b508601610100818903121561101757600080fd5b809150509295509295909350565b6000806000806000806080878903121561103e57600080fd5b863567ffffffffffffffff8082111561105657600080fd5b908801906040828b03121561106a57600080fd5b9096506020880135908082111561108057600080fd5b61108c8a838b01610ee8565b909750955060408901359150808211156110a557600080fd5b506110b289828a01610ee8565b979a9699509497949695606090950135949350505050565b6000602082840312156110dc57600080fd5b5051919050565b600080604083850312156110f657600080fd5b8235915060208301356111088161125b565b809150509250929050565b6000815180845261112b81602086016020860161122b565b601f01601f19169290920160200192915050565b6000825161115181846020870161122b565b9190910192915050565b60408152600061116e6040830185611113565b905082151560208301529392505050565b602081526000610c3c6020830184611113565b6000808335601e198436030181126111a957600080fd5b83018035915067ffffffffffffffff8211156111c457600080fd5b602001915036819003821315610f2a57600080fd5b6000823560de1983360301811261115157600080fd5b6000823560fe1983360301811261115157600080fd5b6000821982111561122657634e487b7160e01b600052601160045260246000fd5b500190565b60005b8381101561124657818101518382015260200161122e565b83811115611255576000848401525b50505050565b6001600160a01b038116811461089957600080fd5b801515811461089957600080fdfe332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572a2646970667358221220c29b6db7eb11471301b208e068b51a35f619aa1c3d68eb1cc0e06e5b615e7c8764736f6c63430008070033",
    "deployedBytecode": "0x6080604052600436106101225760003560e01c8063b039a88f116100a0578063da74222811610064578063da742228146103f5578063df463a6614610415578063f2fde38b1461042a578063f9c002f71461044a578063fa09e6301461046157600080fd5b8063b039a88f1461035a578063b90b41cf146103a2578063bbdaa3c9146103b8578063ce1b815f146103cf578063d0e30db0146103ed57600080fd5b806376fa01c3116100e757806376fa01c3146102a85780637bb05264146102c85780637bdf2ec7146102e85780638da5cb5b1461031a578063921276ea1461033857600080fd5b8062be5dd4146101e657806301ffc9a71461021d5780632d14c4b71461024d5780635c5e3db11461026f578063715018a61461029357600080fd5b366101e1576001546001600160a01b03166101805760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b60448201526064015b60405180910390fd5b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b1580156101c657600080fd5b505af11580156101da573d6000803e3d6000fd5b5050505050005b600080fd5b3480156101f257600080fd5b50610206610201366004611025565b610481565b60405161021492919061115b565b60405180910390f35b34801561022957600080fd5b5061023d610238366004610f6b565b6104c6565b6040519015158152602001610214565b34801561025957600080fd5b5061026d6102683660046110e3565b610518565b005b34801561027b57600080fd5b5061028561290481565b604051908152602001610214565b34801561029f57600080fd5b5061026d61058a565b3480156102b457600080fd5b5061026d6102c3366004610f95565b61059e565b3480156102d457600080fd5b5061026d6102e3366004610f31565b6105ba565b3480156102f457600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610214565b34801561032657600080fd5b506000546001600160a01b0316610302565b34801561034457600080fd5b5061034d61064a565b604051610214919061117f565b34801561036657600080fd5b5061036f61066a565b60405161021491908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156103ae57600080fd5b5061028561c35081565b3480156103c457600080fd5b506102856201adb081565b3480156103db57600080fd5b506002546001600160a01b0316610302565b61026d6106d3565b34801561040157600080fd5b5061026d610410366004610f31565b610781565b34801561042157600080fd5b50610285610811565b34801561043657600080fd5b5061026d610445366004610f31565b610823565b34801561045657600080fd5b50610285620186a081565b34801561046d57600080fd5b5061026d61047c366004610f31565b61089c565b6060600061048d610928565b61049688610982565b61049f88610a1a565b6104a98585610a84565b6104b7888888888888610ad2565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b14806104f757506001600160e01b03198216630704183b60e11b145b8061051257506301ffc9a760e01b6001600160e01b03198316145b92915050565b610520610b34565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a390604401600060405180830381600087803b15801561056e57600080fd5b505af1158015610582573d6000803e3d6000fd5b505050505050565b610592610b34565b61059c6000610b8e565b565b6105a6610928565b6105b38585858585610bde565b5050505050565b6105c2610b34565b6105dc6001600160a01b03821663e9fb30f760e01b610c20565b6106285760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c6179487562006044820152606401610177565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b606060405180606001604052806028815260200161127f60289139905090565b6106956040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a06106b19190611205565b8152602001620186a081526020016201adb08152602001612904815250905090565b6001546001600160a01b03166107275760405162461bcd60e51b81526020600482015260196024820152781c995b185e481a1d58881859191c995cdcc81b9bdd081cd95d603a1b6044820152606401610177565b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561076d57600080fd5b505af11580156105b3573d6000803e3d6000fd5b610789610b34565b6107a36001600160a01b0382166309788f9960e21b610c20565b6107ef5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f727761726465726044820152606401610177565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61082061c350620186a0611205565b81565b61082b610b34565b6001600160a01b0381166108905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610177565b61089981610b8e565b50565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091891906110ca565b90506109248183610518565b5050565b6001546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c617948756200006044820152606401610177565b61098f60208201826111ef565b6109a09060c081019060a001610f31565b6001600160a01b03166109bb6002546001600160a01b031690565b6001600160a01b031614610a115760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f74207472757374656400000000000000006044820152606401610177565b61089981610c43565b610a2760208201826111ef565b610a359060c0810190611192565b1590506108995760405162461bcd60e51b815260206004820152601c60248201527f73686f756c642068617665206e6f207061796d617374657244617461000000006044820152606401610177565b80156109245760405162461bcd60e51b815260206004820152601b60248201527f73686f756c642068617665206e6f20617070726f76616c4461746100000000006044820152606401610177565b6040516060906000907fa8c41f12bf21d07540a32ccb08bbc931778b2943d4747381c9466041b89d7d7a908290a1505060408051808201909152600e81526d6e6f20726576657274206865726560901b60208201526000965096945050505050565b6000546001600160a01b0316331461059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610177565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080518415158152602081018490527f8c7dc6f54401600ae78b31aec3dec125cfa5b7bcbf4ff3cbc5bfd818ba082b49910160405180910390a15050505050565b6000610c2b83610e2c565b8015610c3c5750610c3c8383610e5f565b9392505050565b600080610c5083806111d9565b610c61906040810190602001610f31565b6001600160a01b031663572b6c0560e01b610c7f60208601866111ef565b610c909060c081019060a001610f31565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ce4919061113f565b600060405180830381855afa9150503d8060008114610d1f576040519150601f19603f3d011682016040523d82523d6000602084013e610d24565b606091505b509150915081610d765760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a207265766572746564000000006044820152606401610177565b8051602014610dc75760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e73656044820152606401610177565b80806020019051810190610ddb9190610f4e565b610e275760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e74006044820152606401610177565b505050565b6000610e3f826301ffc9a760e01b610e5f565b80156105125750610e58826001600160e01b0319610e5f565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015610ed1575060208210155b8015610edd5750600081115b979650505050505050565b60008083601f840112610efa57600080fd5b50813567ffffffffffffffff811115610f1257600080fd5b602083019150836020828501011115610f2a57600080fd5b9250929050565b600060208284031215610f4357600080fd5b8135610c3c8161125b565b600060208284031215610f6057600080fd5b8151610c3c81611270565b600060208284031215610f7d57600080fd5b81356001600160e01b031981168114610c3c57600080fd5b600080600080600060808688031215610fad57600080fd5b853567ffffffffffffffff80821115610fc557600080fd5b610fd189838a01610ee8565b909750955060208801359150610fe682611270565b909350604087013592506060870135908082111561100357600080fd5b508601610100818903121561101757600080fd5b809150509295509295909350565b6000806000806000806080878903121561103e57600080fd5b863567ffffffffffffffff8082111561105657600080fd5b908801906040828b03121561106a57600080fd5b9096506020880135908082111561108057600080fd5b61108c8a838b01610ee8565b909750955060408901359150808211156110a557600080fd5b506110b289828a01610ee8565b979a9699509497949695606090950135949350505050565b6000602082840312156110dc57600080fd5b5051919050565b600080604083850312156110f657600080fd5b8235915060208301356111088161125b565b809150509250929050565b6000815180845261112b81602086016020860161122b565b601f01601f19169290920160200192915050565b6000825161115181846020870161122b565b9190910192915050565b60408152600061116e6040830185611113565b905082151560208301529392505050565b602081526000610c3c6020830184611113565b6000808335601e198436030181126111a957600080fd5b83018035915067ffffffffffffffff8211156111c457600080fd5b602001915036819003821315610f2a57600080fd5b6000823560de1983360301811261115157600080fd5b6000823560fe1983360301811261115157600080fd5b6000821982111561122657634e487b7160e01b600052601160045260246000fd5b500190565b60005b8381101561124657818101518382015260200161122e565b83811115611255576000848401525b50505050565b6001600160a01b038116811461089957600080fd5b801515811461089957600080fdfe332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572a2646970667358221220c29b6db7eb11471301b208e068b51a35f619aa1c3d68eb1cc0e06e5b615e7c8764736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "157:1593:24:-:0;;;;;;;;;;;;-1:-1:-1;936:32:47;719:10:55;936:18:47;:32::i;:::-;157:1593:24;;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;157:1593:24:-;;;;;;;",
    "deployedSourceMap": "157:1593:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4642:8:0;;-1:-1:-1;;;;;4642:8:0;4626:69;;;;-1:-1:-1;;;4626:69:0;;8082:2:63;4626:69:0;;;8064:21:63;8121:2;8101:18;;;8094:30;-1:-1:-1;;;8140:18:63;;;8133:55;8205:18;;4626:69:0;;;;;;;;;4705:8;;:51;;-1:-1:-1;;;4705:51:0;;4750:4;4705:51;;;4853::63;-1:-1:-1;;;;;4705:8:0;;;;:19;;4731:9;;4826:18:63;;4705:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;157:1593:24;;;;;5154:533:0;;;;;;;;;;-1:-1:-1;5154:533:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1461:283;;;;;;;;;;-1:-1:-1;1461:283:0;;;;;:::i;:::-;;:::i;:::-;;;5375:14:63;;5368:22;5350:41;;5338:2;5323:18;1461:283:0;5210:187:63;4975:142:0;;;;;;;;;;-1:-1:-1;4975:142:0;;;;;:::i;:::-;;:::i;:::-;;1375:51;;;;;;;;;;;;1421:5;1375:51;;;;;11338:25:63;;;11326:2;11311:18;1375:51:0;11192: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;;;;;4871:32:63;;;4853:51;;4841:2;4826:18;829:103:0;4707: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;:::-;;;;;;10978:13:63;;10960:32;;11048:4;11036:17;;;11030:24;11008:20;;;11001:54;11111:4;11099:17;;;11093:24;11071:20;;;11064:54;11174:4;11162:17;;;11156:24;11134:20;;;11127:54;;;;10947:3;10932:19;;10745: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;;;;;5123:32:63;;;5077:33:0::1;::::0;::::1;5105:51:63::0;5172:18;;;5165:34;;;5077:8:0;;::::1;::::0;:17:::1;::::0;5078: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;;9872:2:63;3614:103:0::1;::::0;::::1;9854:21:63::0;9911:2;9891:18;;;9884:30;9950:33;9930:18;;;9923:61;10001:18;;3614:103:0::1;9670: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;;8082:2:63;1425:69:24;;;8064:21:63;8121:2;8101:18;;;8094:30;-1:-1:-1;;;8140:18:63;;;8133:55;8205:18;;1425:69:24;7880:349:63;1425:69:24;1504:8;;:51;;-1:-1:-1;;;1504:51:24;;1549:4;1504:51;;;4853::63;-1:-1:-1;;;;;1504:8:24;;;;:19;;1530:9;;4826: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;;8789:2:63;4080:102:0::1;::::0;::::1;8771:21:63::0;;;8808:18;;;8801:30;8867:34;8847:18;;;8840:62;8919:18;;4080:102:0::1;8587: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;;7318:2:63;2161:73:47::1;::::0;::::1;7300:21:63::0;7357:2;7337:18;;;7330:30;7396:34;7376:18;;;7369:62;-1:-1:-1;;;7447:18:63;;;7440:36;7493:19;;2161:73:47::1;7116: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;;;4853:51:63;1635:14:24;;-1:-1:-1;;;;;1652:8:24;;:18;;4826::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;;10232:2:63;2684:70:0;;;10214:21:63;10271:2;10251:18;;;10244:30;10310:32;10290:18;;;10283:60;10360:18;;2684:70:0;10030: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;;8436:2:63;2451:94:0;;;8418:21:63;8475:2;8455:18;;;8448:30;8514:26;8494:18;;;8487:54;8558:18;;2451:94:0;8234: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;;6601:2:63;3057:89:0;;;6583:21:63;6640:2;6620:18;;;6613:30;6679;6659:18;;;6652:58;6727:18;;3057:89:0;6399:352:63;3159:160:0;3256:24;;3248:64;;;;-1:-1:-1;;;3248:64:0;;10591:2:63;3248:64:0;;;10573:21:63;10630:2;10610:18;;;10603:30;10669:29;10649:18;;;10642:57;10716:18;;3248:64:0;10389:351:63;617:420:24;965:24;;855:12;;869:4;;965:24;;869:4;;965:24;-1:-1:-1;;999:31:24;;;;;;;;;;;;-1:-1:-1;;;999:31:24;;;;1024:5;617:420;;;;;;;;;:::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;;9511:2:63;1414:68:47;;;9493:21:63;;;9530:18;;;9523:30;9589:34;9569:18;;;9562:62;9641:18;;1414:68:47;9309: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;1043:332:24:-;1317:51;;;5595:14:63;;5588:22;5570:41;;5642:2;5627:18;;5620:34;;;1317:51:24;;5543:18:63;1317:51:24;;;;;;;1043:332;;;;;:::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;;;;;4871:32:63;;;2342:133:38;;;4853:51:63;4826: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;;7725:2:63;2495:48:38;;;7707:21:63;7764:2;7744:18;;;7737:30;7803;7783:18;;;7776:58;7851:18;;2495:48:38;7523:352:63;2495:48:38;2561:3;:10;2575:2;2561:16;2553:61;;;;-1:-1:-1;;;2553:61:38;;9150:2:63;2553:61:38;;;9132:21:63;;;9169:18;;;9162:30;9228:34;9208:18;;;9201:62;9280:18;;2553:61:38;8948:356:63;2553:61:38;2643:3;2632:23;;;;;;;;;;;;:::i;:::-;2624:67;;;;-1:-1:-1;;;2624:67:38;;6958:2:63;2624:67:38;;;6940:21:63;6997:2;6977:18;;;6970:30;7036:33;7016:18;;;7009:61;7087:18;;2624:67:38;6756: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;;;;;;5827:33:63;;4385:71:59;;;;5809:52:63;;;;4385:71:59;;;;;;;;;;5782: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:257::-;4207:3;4245:5;4239:12;4272:6;4267:3;4260:19;4288:63;4344:6;4337:4;4332:3;4328:14;4321:4;4314:5;4310:16;4288:63;:::i;:::-;4405:2;4384:15;-1:-1:-1;;4380:29:63;4371:39;;;;4412:4;4367:50;;4166:257;-1:-1:-1;;4166:257:63:o;4428:274::-;4557:3;4595:6;4589:13;4611:53;4657:6;4652:3;4645:4;4637:6;4633:17;4611:53;:::i;:::-;4680:16;;;;;4428:274;-1:-1:-1;;4428:274:63:o;5872:298::-;6041:2;6030:9;6023:21;6004:4;6061:44;6101:2;6090:9;6086:18;6078:6;6061:44;:::i;:::-;6053:52;;6155:6;6148:14;6141:22;6136:2;6125:9;6121:18;6114:50;5872:298;;;;;:::o;6175:219::-;6324:2;6313:9;6306:21;6287:4;6344:44;6384:2;6373:9;6369:18;6361:6;6344:44;:::i;11374:521::-;11451:4;11457:6;11517:11;11504:25;11611:2;11607:7;11596:8;11580:14;11576:29;11572:43;11552:18;11548:68;11538:96;;11630:1;11627;11620:12;11538:96;11657:33;;11709:20;;;-1:-1:-1;11752:18:63;11741:30;;11738:50;;;11784:1;11781;11774:12;11738:50;11817:4;11805:17;;-1:-1:-1;11848:14:63;11844:27;;;11834:38;;11831:58;;;11885:1;11882;11875:12;11900:332;12000:4;12058:11;12045:25;12152:3;12148:8;12137;12121:14;12117:29;12113:44;12093:18;12089:69;12079:97;;12172:1;12169;12162:12;12237:327;12332:4;12390:11;12377:25;12484:3;12480:8;12469;12453:14;12449:29;12445:44;12425:18;12421:69;12411:97;;12504:1;12501;12494:12;12569:225;12609:3;12640:1;12636:6;12633:1;12630:13;12627:136;;;12685:10;12680:3;12676:20;12673:1;12666:31;12720:4;12717:1;12710:15;12748:4;12745:1;12738:15;12627:136;-1:-1:-1;12779:9:63;;12569:225::o;12799:258::-;12871:1;12881:113;12895:6;12892:1;12889:13;12881:113;;;12971:11;;;12965:18;12952:11;;;12945:39;12917:2;12910:10;12881:113;;;13012:6;13009:1;13006:13;13003:48;;;13047:1;13038:6;13033:3;13029:16;13022:27;13003:48;;12799:258;;;:::o;13062:131::-;-1:-1:-1;;;;;13137:31:63;;13127:42;;13117:70;;13183:1;13180;13173:12;13198:118;13284:5;13277:13;13270:21;13263:5;13260:32;13250:60;;13306:1;13303;13296:12",
    "source": "pragma solidity ^0.8.0;\npragma abicoder v2;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"../forwarder/IForwarder.sol\";\nimport \"../BasePaymaster.sol\";\n\ncontract TestPaymasterEverythingAccepted is BasePaymaster {\n\n    function versionPaymaster() external view override virtual returns (string memory){\n        return \"3.0.0-beta.3+opengsn.test-pea.ipaymaster\";\n    }\n\n    event SampleRecipientPreCall();\n    event SampleRecipientPostCall(bool success, uint256 actualCharge);\n\n    // solhint-disable-next-line no-empty-blocks\n    function _verifyValue(GsnTypes.RelayRequest calldata) internal override view{}\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    virtual\n    returns (bytes memory, bool) {\n        (relayRequest, signature);\n        (approvalData, maxPossibleGas);\n        emit SampleRecipientPreCall();\n        return (\"no revert here\",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    virtual\n    {\n        (context, gasUseWithoutPost, relayData);\n        emit SampleRecipientPostCall(success, gasUseWithoutPost);\n    }\n\n    function deposit() public payable {\n        require(address(relayHub) != address(0), \"relay hub address not set\");\n        relayHub.depositFor{value:msg.value}(address(this));\n    }\n\n    function withdrawAll(address payable destination) public {\n        uint256 amount = relayHub.balanceOf(address(this));\n        withdrawRelayHubDepositTo(amount, destination);\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.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
            ]
        },
        "id": 7007,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 6868,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:24"
            },
            {
                "id": 6869,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:24"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol",
                "file": "../forwarder/IForwarder.sol",
                "id": 6870,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7007,
                "sourceUnit": 5130,
                "src": "87:37:24",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/BasePaymaster.sol",
                "file": "../BasePaymaster.sol",
                "id": 6871,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7007,
                "sourceUnit": 398,
                "src": "125:30:24",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 6872,
                            "name": "BasePaymaster",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 397,
                            "src": "201:13:24"
                        },
                        "id": 6873,
                        "nodeType": "InheritanceSpecifier",
                        "src": "201:13:24"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 7006,
                "linearizedBaseContracts": [
                    7006,
                    397,
                    12146,
                    10182,
                    11508,
                    5447,
                    12352
                ],
                "name": "TestPaymasterEverythingAccepted",
                "nameLocation": "166:31:24",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            5446
                        ],
                        "body": {
                            "id": 6881,
                            "nodeType": "Block",
                            "src": "304:66:24",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572",
                                        "id": 6879,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "321:42:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_ea45f145518df10379132fea5861124bd3e69b010fb6247bb748acfdbe0e792e",
                                            "typeString": "literal_string \"3.0.0-beta.3+opengsn.test-pea.ipaymaster\""
                                        },
                                        "value": "3.0.0-beta.3+opengsn.test-pea.ipaymaster"
                                    },
                                    "functionReturnParameters": 6878,
                                    "id": 6880,
                                    "nodeType": "Return",
                                    "src": "314:49:24"
                                }
                            ]
                        },
                        "functionSelector": "921276ea",
                        "id": 6882,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionPaymaster",
                        "nameLocation": "231:16:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6875,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "264:8:24"
                        },
                        "parameters": {
                            "id": 6874,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "247:2:24"
                        },
                        "returnParameters": {
                            "id": 6878,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6877,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6882,
                                    "src": "290:13:24",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 6876,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "290:6:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "289:15:24"
                        },
                        "scope": 7006,
                        "src": "222:148:24",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "id": 6884,
                        "name": "SampleRecipientPreCall",
                        "nameLocation": "382:22:24",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6883,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "404:2:24"
                        },
                        "src": "376:31:24"
                    },
                    {
                        "anonymous": false,
                        "id": 6890,
                        "name": "SampleRecipientPostCall",
                        "nameLocation": "418:23:24",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6889,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6886,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "447:7:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6890,
                                    "src": "442:12:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6885,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "442:4:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6888,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "actualCharge",
                                    "nameLocation": "464:12:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6890,
                                    "src": "456:20:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6887,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "456:7:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "441:36:24"
                        },
                        "src": "412:66:24"
                    },
                    {
                        "baseFunctions": [
                            156
                        ],
                        "body": {
                            "id": 6897,
                            "nodeType": "Block",
                            "src": "609:2:24",
                            "statements": []
                        },
                        "id": 6898,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyValue",
                        "nameLocation": "542:12:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6895,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "596:8:24"
                        },
                        "parameters": {
                            "id": 6894,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6893,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6898,
                                    "src": "555:30:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6892,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6891,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "555:21:24"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "555:21:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "554:32:24"
                        },
                        "returnParameters": {
                            "id": 6896,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "609:0:24"
                        },
                        "scope": 7006,
                        "src": "533:78:24",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            358
                        ],
                        "body": {
                            "id": 6930,
                            "nodeType": "Block",
                            "src": "875:162:24",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6915,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6901,
                                                "src": "886:12:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 6916,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6903,
                                                "src": "900:9:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "id": 6917,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "885:25:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$",
                                            "typeString": "tuple(struct GsnTypes.RelayRequest calldata,bytes calldata)"
                                        }
                                    },
                                    "id": 6918,
                                    "nodeType": "ExpressionStatement",
                                    "src": "885:25:24"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6919,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6905,
                                                "src": "921:12:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6920,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6907,
                                                "src": "935:14:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 6921,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "920:30:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 6922,
                                    "nodeType": "ExpressionStatement",
                                    "src": "920:30:24"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 6923,
                                            "name": "SampleRecipientPreCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6884,
                                            "src": "965:22:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 6924,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "965:24:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6925,
                                    "nodeType": "EmitStatement",
                                    "src": "960:29:24"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "hexValue": "6e6f207265766572742068657265",
                                                "id": 6926,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1007:16:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e",
                                                    "typeString": "literal_string \"no revert here\""
                                                },
                                                "value": "no revert here"
                                            },
                                            {
                                                "hexValue": "66616c7365",
                                                "id": 6927,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "bool",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1024:5:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "value": "false"
                                            }
                                        ],
                                        "id": 6928,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1006:24:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"no revert here\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 6914,
                                    "id": 6929,
                                    "nodeType": "Return",
                                    "src": "999:31:24"
                                }
                            ]
                        },
                        "id": 6931,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_preRelayedCall",
                        "nameLocation": "626:15:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6909,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "821:8:24"
                        },
                        "parameters": {
                            "id": 6908,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6901,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "682:12:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "651:43:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6900,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6899,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "651:21:24"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "651:21:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6903,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "719:9:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "704:24:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6902,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "704:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6905,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "753:12:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "738:27:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6904,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "738:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6907,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "783:14:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "775:22:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6906,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "775:7:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "641:162:24"
                        },
                        "returnParameters": {
                            "id": 6914,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6911,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "855:12:24",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6910,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "855:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6913,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "869:4:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6912,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "869:4:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "854:20:24"
                        },
                        "scope": 7006,
                        "src": "617:420:24",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            396
                        ],
                        "body": {
                            "id": 6954,
                            "nodeType": "Block",
                            "src": "1253:122:24",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6944,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6933,
                                                "src": "1264:7:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6945,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6937,
                                                "src": "1273:17:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 6946,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6940,
                                                "src": "1292:9:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 6947,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1263:39:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 6948,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1263:39:24"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 6950,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6935,
                                                "src": "1341:7:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 6951,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6937,
                                                "src": "1350:17:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 6949,
                                            "name": "SampleRecipientPostCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6890,
                                            "src": "1317:23:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                                                "typeString": "function (bool,uint256)"
                                            }
                                        },
                                        "id": 6952,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1317:51:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6953,
                                    "nodeType": "EmitStatement",
                                    "src": "1312:56:24"
                                }
                            ]
                        },
                        "id": 6955,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_postRelayedCall",
                        "nameLocation": "1052:16:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6942,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1228:8:24"
                        },
                        "parameters": {
                            "id": 6941,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6933,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "1093:7:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1078:22:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6932,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1078:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6935,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "1115:7:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1110:12:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6934,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1110:4:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6937,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nameLocation": "1140:17:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1132:25:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6936,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1132:7:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6940,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "1195:9:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1167:37:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 6939,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6938,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "1167:18:24"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "1167:18:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1068:142:24"
                        },
                        "returnParameters": {
                            "id": 6943,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1253:0:24"
                        },
                        "scope": 7006,
                        "src": "1043:332:24",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6983,
                            "nodeType": "Block",
                            "src": "1415:147:24",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 6967,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "arguments": [
                                                        {
                                                            "id": 6961,
                                                            "name": "relayHub",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 23,
                                                            "src": "1441:8:24",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        ],
                                                        "id": 6960,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1433:7:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6959,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1433:7:24",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6962,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1433:17:24",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 6965,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1462:1:24",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 6964,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1454:7:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6963,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1454:7:24",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6966,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1454:10:24",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "1433:31:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206875622061646472657373206e6f7420736574",
                                                "id": 6968,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1466:27:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                },
                                                "value": "relay hub address not set"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                }
                                            ],
                                            "id": 6958,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "1425:7:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6969,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1425:69:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6970,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1425:69:24"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 6979,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "1549:4:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 6978,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1541:7:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 6977,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1541:7:24",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6980,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1541:13:24",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 6971,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 23,
                                                    "src": "1504:8:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                },
                                                "id": 6973,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "depositFor",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5687,
                                                "src": "1504:19:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                                    "typeString": "function (address) payable external"
                                                }
                                            },
                                            "id": 6976,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "expression": {
                                                        "id": 6974,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "1530:3:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 6975,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "value",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1530:9:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "1504:36:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                                                "typeString": "function (address) payable external"
                                            }
                                        },
                                        "id": 6981,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1504:51:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6982,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1504:51:24"
                                }
                            ]
                        },
                        "functionSelector": "d0e30db0",
                        "id": 6984,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deposit",
                        "nameLocation": "1390:7:24",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6956,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1397:2:24"
                        },
                        "returnParameters": {
                            "id": 6957,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1415:0:24"
                        },
                        "scope": 7006,
                        "src": "1381:181:24",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 7004,
                            "nodeType": "Block",
                            "src": "1625:123:24",
                            "statements": [
                                {
                                    "assignments": [
                                        6990
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 6990,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "1643:6:24",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 7004,
                                            "src": "1635:14:24",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 6989,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1635:7:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 6998,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 6995,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "1679:4:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 6994,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1671:7:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 6993,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1671:7:24",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6996,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1671:13:24",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 6991,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 23,
                                                "src": "1652:8:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 6992,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceOf",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5826,
                                            "src": "1652:18:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 6997,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1652:33:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1635:50:24"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 7000,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6990,
                                                "src": "1721:6:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 7001,
                                                "name": "destination",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6986,
                                                "src": "1729:11:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "id": 6999,
                                            "name": "withdrawRelayHubDepositTo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 296,
                                            "src": "1695:25:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_payable_$returns$__$",
                                                "typeString": "function (uint256,address payable)"
                                            }
                                        },
                                        "id": 7002,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1695:46:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7003,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1695:46:24"
                                }
                            ]
                        },
                        "functionSelector": "fa09e630",
                        "id": 7005,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawAll",
                        "nameLocation": "1577:11:24",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6987,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6986,
                                    "mutability": "mutable",
                                    "name": "destination",
                                    "nameLocation": "1605:11:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7005,
                                    "src": "1589:27:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 6985,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1589:15:24",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1588:29:24"
                        },
                        "returnParameters": {
                            "id": 6988,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1625:0:24"
                        },
                        "scope": 7006,
                        "src": "1568:180:24",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 7007,
                "src": "157:1593:24",
                "usedErrors": []
            }
        ],
        "src": "0:1750:24"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/test/TestPaymasterEverythingAccepted.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
            ]
        },
        "id": 7007,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 6868,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:24"
            },
            {
                "id": 6869,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:24"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol",
                "file": "../forwarder/IForwarder.sol",
                "id": 6870,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7007,
                "sourceUnit": 5130,
                "src": "87:37:24",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/BasePaymaster.sol",
                "file": "../BasePaymaster.sol",
                "id": 6871,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 7007,
                "sourceUnit": 398,
                "src": "125:30:24",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 6872,
                            "name": "BasePaymaster",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 397,
                            "src": "201:13:24"
                        },
                        "id": 6873,
                        "nodeType": "InheritanceSpecifier",
                        "src": "201:13:24"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 7006,
                "linearizedBaseContracts": [
                    7006,
                    397,
                    12146,
                    10182,
                    11508,
                    5447,
                    12352
                ],
                "name": "TestPaymasterEverythingAccepted",
                "nameLocation": "166:31:24",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            5446
                        ],
                        "body": {
                            "id": 6881,
                            "nodeType": "Block",
                            "src": "304:66:24",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "332e302e302d626574612e332b6f70656e67736e2e746573742d7065612e697061796d6173746572",
                                        "id": 6879,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "321:42:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_ea45f145518df10379132fea5861124bd3e69b010fb6247bb748acfdbe0e792e",
                                            "typeString": "literal_string \"3.0.0-beta.3+opengsn.test-pea.ipaymaster\""
                                        },
                                        "value": "3.0.0-beta.3+opengsn.test-pea.ipaymaster"
                                    },
                                    "functionReturnParameters": 6878,
                                    "id": 6880,
                                    "nodeType": "Return",
                                    "src": "314:49:24"
                                }
                            ]
                        },
                        "functionSelector": "921276ea",
                        "id": 6882,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionPaymaster",
                        "nameLocation": "231:16:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6875,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "264:8:24"
                        },
                        "parameters": {
                            "id": 6874,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "247:2:24"
                        },
                        "returnParameters": {
                            "id": 6878,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6877,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6882,
                                    "src": "290:13:24",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 6876,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "290:6:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "289:15:24"
                        },
                        "scope": 7006,
                        "src": "222:148:24",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "id": 6884,
                        "name": "SampleRecipientPreCall",
                        "nameLocation": "382:22:24",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6883,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "404:2:24"
                        },
                        "src": "376:31:24"
                    },
                    {
                        "anonymous": false,
                        "id": 6890,
                        "name": "SampleRecipientPostCall",
                        "nameLocation": "418:23:24",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6889,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6886,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "447:7:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6890,
                                    "src": "442:12:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6885,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "442:4:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6888,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "actualCharge",
                                    "nameLocation": "464:12:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6890,
                                    "src": "456:20:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6887,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "456:7:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "441:36:24"
                        },
                        "src": "412:66:24"
                    },
                    {
                        "baseFunctions": [
                            156
                        ],
                        "body": {
                            "id": 6897,
                            "nodeType": "Block",
                            "src": "609:2:24",
                            "statements": []
                        },
                        "id": 6898,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_verifyValue",
                        "nameLocation": "542:12:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6895,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "596:8:24"
                        },
                        "parameters": {
                            "id": 6894,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6893,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6898,
                                    "src": "555:30:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6892,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6891,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "555:21:24"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "555:21:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "554:32:24"
                        },
                        "returnParameters": {
                            "id": 6896,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "609:0:24"
                        },
                        "scope": 7006,
                        "src": "533:78:24",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            358
                        ],
                        "body": {
                            "id": 6930,
                            "nodeType": "Block",
                            "src": "875:162:24",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6915,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6901,
                                                "src": "886:12:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 6916,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6903,
                                                "src": "900:9:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "id": 6917,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "885:25:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$",
                                            "typeString": "tuple(struct GsnTypes.RelayRequest calldata,bytes calldata)"
                                        }
                                    },
                                    "id": 6918,
                                    "nodeType": "ExpressionStatement",
                                    "src": "885:25:24"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6919,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6905,
                                                "src": "921:12:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6920,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6907,
                                                "src": "935:14:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 6921,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "920:30:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 6922,
                                    "nodeType": "ExpressionStatement",
                                    "src": "920:30:24"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 6923,
                                            "name": "SampleRecipientPreCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6884,
                                            "src": "965:22:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 6924,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "965:24:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6925,
                                    "nodeType": "EmitStatement",
                                    "src": "960:29:24"
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "hexValue": "6e6f207265766572742068657265",
                                                "id": 6926,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1007:16:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e",
                                                    "typeString": "literal_string \"no revert here\""
                                                },
                                                "value": "no revert here"
                                            },
                                            {
                                                "hexValue": "66616c7365",
                                                "id": 6927,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "bool",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1024:5:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "value": "false"
                                            }
                                        ],
                                        "id": 6928,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1006:24:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"no revert here\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 6914,
                                    "id": 6929,
                                    "nodeType": "Return",
                                    "src": "999:31:24"
                                }
                            ]
                        },
                        "id": 6931,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_preRelayedCall",
                        "nameLocation": "626:15:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6909,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "821:8:24"
                        },
                        "parameters": {
                            "id": 6908,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6901,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "682:12:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "651:43:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 6900,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6899,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "651:21:24"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "651:21:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6903,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "719:9:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "704:24:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6902,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "704:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6905,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "753:12:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "738:27:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6904,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "738:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6907,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "783:14:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "775:22:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6906,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "775:7:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "641:162:24"
                        },
                        "returnParameters": {
                            "id": 6914,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6911,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "855:12:24",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6910,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "855:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6913,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6931,
                                    "src": "869:4:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6912,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "869:4:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "854:20:24"
                        },
                        "scope": 7006,
                        "src": "617:420:24",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            396
                        ],
                        "body": {
                            "id": 6954,
                            "nodeType": "Block",
                            "src": "1253:122:24",
                            "statements": [
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 6944,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6933,
                                                "src": "1264:7:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 6945,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6937,
                                                "src": "1273:17:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 6946,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6940,
                                                "src": "1292:9:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 6947,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1263:39:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 6948,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1263:39:24"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 6950,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6935,
                                                "src": "1341:7:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "id": 6951,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6937,
                                                "src": "1350:17:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 6949,
                                            "name": "SampleRecipientPostCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6890,
                                            "src": "1317:23:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                                                "typeString": "function (bool,uint256)"
                                            }
                                        },
                                        "id": 6952,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1317:51:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6953,
                                    "nodeType": "EmitStatement",
                                    "src": "1312:56:24"
                                }
                            ]
                        },
                        "id": 6955,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_postRelayedCall",
                        "nameLocation": "1052:16:24",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 6942,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1228:8:24"
                        },
                        "parameters": {
                            "id": 6941,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6933,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nameLocation": "1093:7:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1078:22:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 6932,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1078:5:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6935,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nameLocation": "1115:7:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1110:12:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6934,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1110:4:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6937,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nameLocation": "1140:17:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1132:25:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6936,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1132:7:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6940,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "1195:9:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6955,
                                    "src": "1167:37:24",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 6939,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6938,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "1167:18:24"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "1167:18:24",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1068:142:24"
                        },
                        "returnParameters": {
                            "id": 6943,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1253:0:24"
                        },
                        "scope": 7006,
                        "src": "1043:332:24",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6983,
                            "nodeType": "Block",
                            "src": "1415:147:24",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 6967,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "arguments": [
                                                        {
                                                            "id": 6961,
                                                            "name": "relayHub",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 23,
                                                            "src": "1441:8:24",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        ],
                                                        "id": 6960,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1433:7:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6959,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1433:7:24",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6962,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1433:17:24",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 6965,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1462:1:24",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 6964,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1454:7:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6963,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1454:7:24",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6966,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1454:10:24",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "1433:31:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206875622061646472657373206e6f7420736574",
                                                "id": 6968,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1466:27:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                },
                                                "value": "relay hub address not set"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                }
                                            ],
                                            "id": 6958,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "1425:7:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6969,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1425:69:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6970,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1425:69:24"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 6979,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "1549:4:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 6978,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1541:7:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 6977,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1541:7:24",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6980,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1541:13:24",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 6971,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 23,
                                                    "src": "1504:8:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                },
                                                "id": 6973,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "depositFor",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5687,
                                                "src": "1504:19:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                                    "typeString": "function (address) payable external"
                                                }
                                            },
                                            "id": 6976,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "expression": {
                                                        "id": 6974,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "1530:3:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 6975,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "value",
                                                    "nodeType": "MemberAccess",
                                                    "src": "1530:9:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "1504:36:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                                                "typeString": "function (address) payable external"
                                            }
                                        },
                                        "id": 6981,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1504:51:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6982,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1504:51:24"
                                }
                            ]
                        },
                        "functionSelector": "d0e30db0",
                        "id": 6984,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deposit",
                        "nameLocation": "1390:7:24",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6956,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1397:2:24"
                        },
                        "returnParameters": {
                            "id": 6957,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1415:0:24"
                        },
                        "scope": 7006,
                        "src": "1381:181:24",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 7004,
                            "nodeType": "Block",
                            "src": "1625:123:24",
                            "statements": [
                                {
                                    "assignments": [
                                        6990
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 6990,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "1643:6:24",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 7004,
                                            "src": "1635:14:24",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 6989,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1635:7:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 6998,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 6995,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967268,
                                                        "src": "1679:4:24",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$7006",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 6994,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1671:7:24",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 6993,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1671:7:24",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6996,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1671:13:24",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 6991,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 23,
                                                "src": "1652:8:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$5896",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 6992,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceOf",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5826,
                                            "src": "1652:18:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 6997,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1652:33:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1635:50:24"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 7000,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6990,
                                                "src": "1721:6:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 7001,
                                                "name": "destination",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6986,
                                                "src": "1729:11:24",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "id": 6999,
                                            "name": "withdrawRelayHubDepositTo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 296,
                                            "src": "1695:25:24",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_payable_$returns$__$",
                                                "typeString": "function (uint256,address payable)"
                                            }
                                        },
                                        "id": 7002,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1695:46:24",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 7003,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1695:46:24"
                                }
                            ]
                        },
                        "functionSelector": "fa09e630",
                        "id": 7005,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawAll",
                        "nameLocation": "1577:11:24",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6987,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6986,
                                    "mutability": "mutable",
                                    "name": "destination",
                                    "nameLocation": "1605:11:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 7005,
                                    "src": "1589:27:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 6985,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1589:15:24",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1588:29:24"
                        },
                        "returnParameters": {
                            "id": 6988,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1625:0:24"
                        },
                        "scope": 7006,
                        "src": "1568:180:24",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 7007,
                "src": "157:1593:24",
                "usedErrors": []
            }
        ],
        "src": "0:1750:24"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.221Z",
    "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
    }
}
