{
  "_format": "hh-sol-artifact-1",
  "contractName": "EventReviewPaymaster",
  "sourceName": "contracts/EventReviewPaymaster.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "venueRegistar",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "gsnForwarder",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "contract IRelayHub",
          "name": "hub",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterEventNotRegistered",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterNotEnoughFunds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterNotEnoughGas",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterSenderIsNotTokenOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterTokenAlreadyUsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterUnknownTarget",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterVenueNotBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterVenueNotRegistered",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterWrongNumberOfStars",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReviewPaymasterWrongVenueRegistar",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "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": [
        {
          "internalType": "address",
          "name": "venue",
          "type": "address"
        }
      ],
      "name": "fundVenue",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasUsedByPost",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalance",
      "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": "minGas",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "uint256",
          "name": "_gasUsedByPost",
          "type": "uint256"
        }
      ],
      "name": "setGasUsedByPost",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minGas",
          "type": "uint256"
        }
      ],
      "name": "setMinGas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IRelayHub",
          "name": "hub",
          "type": "address"
        }
      ],
      "name": "setRelayHub",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        }
      ],
      "name": "setTarget",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "setTrustedForwarder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "venueRegistar",
          "type": "address"
        }
      ],
      "name": "setVenueRegistar",
      "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": [],
      "name": "target",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "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"
    }
  ],
  "bytecode": "0x608060405261ea60600355620493e06004553480156200001e57600080fd5b50604051620022ca380380620022ca8339810160408190526200004191620003a1565b6200004c33620000a2565b600880546001600160a01b0319166001600160a01b0386161790556200007283620000f2565b600580546001600160a01b0319166001600160a01b03841617905562000098816200019a565b5050505062000409565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fc6200023e565b620001266309788f9960e21b826001600160a01b03166200029c60201b62000b171790919060201c565b620001785760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f7277617264657260448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b620001a46200023e565b620001ce6334f57c6760e01b826001600160a01b03166200029c60201b62000b171790919060201c565b6200021c5760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c61794875620060448201526064016200016f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200029a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200016f565b565b6000620002a983620002c4565b8015620002bd5750620002bd8383620002fd565b9392505050565b6000620002d9826301ffc9a760e01b620002fd565b8015620002f75750620002f5826001600160e01b0319620002fd565b155b92915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d9150600051905082801562000370575060208210155b80156200037d5750600081115b979650505050505050565b6001600160a01b03811681146200039e57600080fd5b50565b60008060008060808587031215620003b857600080fd5b8451620003c58162000388565b6020860151909450620003d88162000388565b6040860151909350620003eb8162000388565b6060860151909250620003fe8162000388565b939692955090935050565b611eb180620004196000396000f3fe6080604052600436106101ba5760003560e01c8063ad80e451116100ec578063d4b839921161008a578063ef377f0011610064578063ef377f0014610594578063f2fde38b146105b4578063f3fef3a3146105d4578063f9c002f7146105f457600080fd5b8063d4b839921461053f578063da7422281461055f578063df463a661461057f57600080fd5b8063b90b41cf116100c6578063b90b41cf146104de578063bbdaa3c9146104f4578063be37757a1461050b578063ce1b815f1461052157600080fd5b8063ad80e45114610456578063ae4f51cb14610476578063b039a88f1461049657600080fd5b806376fa01c3116101595780637bdf2ec7116101335780637bdf2ec7146103ce5780638da5cb5b14610400578063921276ea1461041e578063ad12e50e1461044057600080fd5b806376fa01c31461036e578063776d1a011461038e5780637bb05264146103ae57600080fd5b80632d14c4b7116101955780632d14c4b7146103105780635c5e3db11461033057806365b36efc14610346578063715018a61461035957600080fd5b8062be5dd41461027d57806301ffc9a7146102b457806312065fe0146102e457600080fd5b36610278576001546001600160a01b031661021c5760405162461bcd60e51b815260206004820152601960248201527f72656c6179206875622061646472657373206e6f74207365740000000000000060448201526064015b60405180910390fd5b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b005b600080fd5b34801561028957600080fd5b5061029d6102983660046116a0565b61060b565b6040516102ab929190611795565b60405180910390f35b3480156102c057600080fd5b506102d46102cf3660046117b9565b610659565b60405190151581526020016102ab565b3480156102f057600080fd5b50336000908152600660205260409020545b6040519081526020016102ab565b34801561031c57600080fd5b5061027661032b3660046117f8565b6106ab565b34801561033c57600080fd5b5061030261290481565b610276610354366004611838565b61071e565b34801561036557600080fd5b50610276610791565b34801561037a57600080fd5b50610276610389366004611863565b6107a5565b34801561039a57600080fd5b506102766103a9366004611838565b6107c1565b3480156103ba57600080fd5b506102766103c9366004611838565b6107eb565b3480156103da57600080fd5b506001546001600160a01b03165b6040516001600160a01b0390911681526020016102ab565b34801561040c57600080fd5b506000546001600160a01b03166103e8565b34801561042a57600080fd5b5061043361087b565b6040516102ab91906118f3565b34801561044c57600080fd5b5061030260035481565b34801561046257600080fd5b50610276610471366004611906565b61089b565b34801561048257600080fd5b50610276610491366004611906565b6108a8565b3480156104a257600080fd5b506104ab6108b5565b6040516102ab91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156104ea57600080fd5b5061030261c35081565b34801561050057600080fd5b506103026201adb081565b34801561051757600080fd5b5061030260045481565b34801561052d57600080fd5b506002546001600160a01b03166103e8565b34801561054b57600080fd5b506005546103e8906001600160a01b031681565b34801561056b57600080fd5b5061027661057a366004611838565b61091e565b34801561058b57600080fd5b506103026109ae565b3480156105a057600080fd5b506102766105af366004611838565b6109c0565b3480156105c057600080fd5b506102766105cf366004611838565b610a11565b3480156105e057600080fd5b506102766105ef36600461191f565b610a8a565b34801561060057600080fd5b50610302620186a081565b60606000610617610b3a565b61062088610b94565b61062988610c2c565b61063288610c87565b61063c8585610cf1565b61064a888888888888610d43565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b148061068a57506001600160e01b03198216630704183b60e11b145b806106a557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106b36111d1565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a3906044015b600060405180830381600087803b15801561070257600080fd5b505af1158015610716573d6000803e3d6000fd5b505050505050565b6001600160a01b03811660009081526006602052604081208054349290610746908490611961565b909155505060015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561070257600080fd5b6107996111d1565b6107a3600061122b565b565b6107ad610b3a565b6107ba858585858561127b565b5050505050565b6107c96111d1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6107f36111d1565b61080d6001600160a01b0382166334f57c6760e01b610b17565b6108595760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c6179487562006044820152606401610213565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6060604051806060016040528060268152602001611e5660269139905090565b6108a36111d1565b600455565b6108b06111d1565b600355565b6108e06040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a06108fc9190611961565b8152602001620186a081526020016201adb08152602001612904815250905090565b6109266111d1565b6109406001600160a01b0382166309788f9960e21b610b17565b61098c5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f727761726465726044820152606401610213565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6109bd61c350620186a0611961565b81565b6109c86111d1565b6001600160a01b0381166109ef57604051630a4d9fad60e41b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610a196111d1565b6001600160a01b038116610a7e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610213565b610a878161122b565b50565b33600090815260066020526040902054811115610aba576040516337904e7560e11b815260040160405180910390fd5b3360009081526006602052604081208054839290610ad9908490611974565b909155505060015460405163f3fef3a360e01b81526001600160a01b038481166004830152602482018490529091169063f3fef3a3906044016106e8565b6000610b22836113b2565b8015610b335750610b3383836113e5565b9392505050565b6001546001600160a01b031633146107a35760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c617948756200006044820152606401610213565b610ba16020820182611987565b610bb29060c081019060a001611838565b6001600160a01b0316610bcd6002546001600160a01b031690565b6001600160a01b031614610c235760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f74207472757374656400000000000000006044820152606401610213565b610a878161146e565b610c3681806119a7565b6040013515610a875760405162461bcd60e51b815260206004820152601c60248201527f76616c7565207472616e73666572206e6f7420737570706f72746564000000006044820152606401610213565b610c946020820182611987565b610ca29060c08101906119bd565b159050610a875760405162461bcd60e51b815260206004820152601c60248201527f73686f756c642068617665206e6f207061796d617374657244617461000000006044820152606401610213565b8015610d3f5760405162461bcd60e51b815260206004820152601b60248201527f73686f756c642068617665206e6f20617070726f76616c4461746100000000006044820152606401610213565b5050565b6060600036610d5289806119a7565b905060045481606001351015610d7b57604051630530142160e51b815260040160405180910390fd5b6005546001600160a01b0316610d976040830160208401611838565b6001600160a01b031614610dbe576040516349b3e2a560e11b815260040160405180910390fd5b6000808080610dd060a08601866119bd565b610dde916004908290611a04565b810190610deb9190611a2e565b6001600160a01b03831660009081526007602090815260408083208584529091529020549397509195509350915060ff1615610e3a576040516323088c4f60e01b815260040160405180910390fd5b6008546040516331135b1560e21b81526001600160a01b0386811660048301529091169063c44d6c5490602401602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190611a87565b610ec557604051637cb14ccf60e01b815260040160405180910390fd5b600860009054906101000a90046001600160a01b03166001600160a01b031663e4fae4e46040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e9190611aa4565b6001600160a01b0385166000908152600660205260409020541015610f76576040516355b98d3d60e01b815260040160405180910390fd5b60405163e5face6160e01b81526001600160a01b03848116600483015285919082169063e5face61906024016020604051808303816000875af1158015610fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe59190611a87565b6110025760405163141747af60e21b815260040160405180910390fd5b836110106020880188611838565b6040516331a9108f60e11b8152600481018690526001600160a01b0391821691831690636352211e90602401602060405180830381865afa158015611059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107d9190611abd565b6001600160a01b0316146110a45760405163f338b72960e01b815260040160405180910390fd5b60328360ff1611156110c95760405163e9bdc7b560e01b815260040160405180910390fd5b60008f80602001906110db9190611987565b6110e490611ba7565b600154604051638e53548b60e01b81529192506000916001600160a01b0390911690638e53548b9061111c908f908690600401611c4a565b602060405180830381865afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d9190611aa4565b6001600160a01b038916600090815260066020526040902054909150611184908290611974565b5050604080516001600160a01b0398891660208201529690971686880152505050506060808301919091528251808303909101815260809091019091529960019950975050505050505050565b6000546001600160a01b031633146107a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610213565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b826112b55760405162461bcd60e51b815260206004820152600a6024820152694e6f207375636365737360b01b6044820152606401610213565b600080806112c587890189611ce0565b60015460035493965091945092506001600160a01b0316906000908290638e53548b906112f2908a611961565b886040518363ffffffff1660e01b8152600401611310929190611d90565b602060405180830381865afa15801561132d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113519190611aa4565b6001600160a01b0380861660009081526007602090815260408083208884528252808320805460ff19166001179055928916825260069052908120805492935083929091906113a1908490611974565b909155505050505050505050505050565b60006113c5826301ffc9a760e01b6113e5565b80156106a557506113de826001600160e01b03196113e5565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611457575060208210155b80156114635750600081115b979650505050505050565b60008061147b83806119a7565b61148c906040810190602001611838565b6001600160a01b031663572b6c0560e01b6114aa6020860186611987565b6114bb9060c081019060a001611838565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161150f9190611e43565b600060405180830381855afa9150503d806000811461154a576040519150601f19603f3d011682016040523d82523d6000602084013e61154f565b606091505b5091509150816115a15760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a207265766572746564000000006044820152606401610213565b80516020146115f25760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e73656044820152606401610213565b808060200190518101906116069190611a87565b6116525760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e74006044820152606401610213565b505050565b60008083601f84011261166957600080fd5b50813567ffffffffffffffff81111561168157600080fd5b60208301915083602082850101111561169957600080fd5b9250929050565b600080600080600080608087890312156116b957600080fd5b863567ffffffffffffffff808211156116d157600080fd5b908801906040828b0312156116e557600080fd5b909650602088013590808211156116fb57600080fd5b6117078a838b01611657565b9097509550604089013591508082111561172057600080fd5b5061172d89828a01611657565b979a9699509497949695606090950135949350505050565b60005b83811015611760578181015183820152602001611748565b50506000910152565b60008151808452611781816020860160208601611745565b601f01601f19169290920160200192915050565b6040815260006117a86040830185611769565b905082151560208301529392505050565b6000602082840312156117cb57600080fd5b81356001600160e01b031981168114610b3357600080fd5b6001600160a01b0381168114610a8757600080fd5b6000806040838503121561180b57600080fd5b82359150602083013561181d816117e3565b809150509250929050565b8035611833816117e3565b919050565b60006020828403121561184a57600080fd5b8135610b33816117e3565b8015158114610a8757600080fd5b60008060008060006080868803121561187b57600080fd5b853567ffffffffffffffff8082111561189357600080fd5b61189f89838a01611657565b9097509550602088013591506118b482611855565b90935060408701359250606087013590808211156118d157600080fd5b50860161010081890312156118e557600080fd5b809150509295509295909350565b602081526000610b336020830184611769565b60006020828403121561191857600080fd5b5035919050565b6000806040838503121561193257600080fd5b823561193d816117e3565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106a5576106a561194b565b818103818111156106a5576106a561194b565b6000823560fe1983360301811261199d57600080fd5b9190910192915050565b6000823560de1983360301811261199d57600080fd5b6000808335601e198436030181126119d457600080fd5b83018035915067ffffffffffffffff8211156119ef57600080fd5b60200191503681900382131561169957600080fd5b60008085851115611a1457600080fd5b83861115611a2157600080fd5b5050820193919092039150565b60008060008060808587031215611a4457600080fd5b8435611a4f816117e3565b93506020850135611a5f816117e3565b925060408501359150606085013560ff81168114611a7c57600080fd5b939692955090935050565b600060208284031215611a9957600080fd5b8151610b3381611855565b600060208284031215611ab657600080fd5b5051919050565b600060208284031215611acf57600080fd5b8151610b33816117e3565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611b1457611b14611ada565b60405290565b600082601f830112611b2b57600080fd5b813567ffffffffffffffff80821115611b4657611b46611ada565b604051601f8301601f19908116603f01168101908282118183101715611b6e57611b6e611ada565b81604052838152866020858801011115611b8757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101008236031215611bba57600080fd5b611bc2611af0565b823581526020830135602082015260408301356040820152611be660608401611828565b6060820152611bf760808401611828565b6080820152611c0860a08401611828565b60a082015260c083013567ffffffffffffffff811115611c2757600080fd5b611c3336828601611b1a565b60c08301525060e092830135928101929092525090565b828152604060208201528151604082015260208201516060820152604082015160808201526000606083015160018060a01b0380821660a08501528060808601511660c0850152505060a0830151611cad60e08401826001600160a01b03169052565b5060c083015161010083810152611cc8610140840182611769565b905060e0840151610120840152809150509392505050565b600080600060608486031215611cf557600080fd5b8335611d00816117e3565b92506020840135611d10816117e3565b929592945050506040919091013590565b6000808335601e19843603018112611d3857600080fd5b830160208101925035905067ffffffffffffffff811115611d5857600080fd5b80360382131561169957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8281526040602082015281356040820152602082013560608201526040820135608082015260006060830135611dc5816117e3565b6001600160a01b031660a0830152611ddf60808401611828565b6001600160a01b031660c0830152611df960a08401611828565b6001600160a01b031660e0830152611e1460c0840184611d21565b61010084810152611e2a61014085018284611d67565b91505060e0840135610120840152809150509392505050565b6000825161199d81846020870161174556fe332e302e302d626574612e312b6f70656e67736e2e7265766965772e697061796d6173746572a26469706673582212208c1cf4d84dbe64b5f3a0c9297e85db9aad685897146638eac66cbd96e581966764736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106101ba5760003560e01c8063ad80e451116100ec578063d4b839921161008a578063ef377f0011610064578063ef377f0014610594578063f2fde38b146105b4578063f3fef3a3146105d4578063f9c002f7146105f457600080fd5b8063d4b839921461053f578063da7422281461055f578063df463a661461057f57600080fd5b8063b90b41cf116100c6578063b90b41cf146104de578063bbdaa3c9146104f4578063be37757a1461050b578063ce1b815f1461052157600080fd5b8063ad80e45114610456578063ae4f51cb14610476578063b039a88f1461049657600080fd5b806376fa01c3116101595780637bdf2ec7116101335780637bdf2ec7146103ce5780638da5cb5b14610400578063921276ea1461041e578063ad12e50e1461044057600080fd5b806376fa01c31461036e578063776d1a011461038e5780637bb05264146103ae57600080fd5b80632d14c4b7116101955780632d14c4b7146103105780635c5e3db11461033057806365b36efc14610346578063715018a61461035957600080fd5b8062be5dd41461027d57806301ffc9a7146102b457806312065fe0146102e457600080fd5b36610278576001546001600160a01b031661021c5760405162461bcd60e51b815260206004820152601960248201527f72656c6179206875622061646472657373206e6f74207365740000000000000060448201526064015b60405180910390fd5b60015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b005b600080fd5b34801561028957600080fd5b5061029d6102983660046116a0565b61060b565b6040516102ab929190611795565b60405180910390f35b3480156102c057600080fd5b506102d46102cf3660046117b9565b610659565b60405190151581526020016102ab565b3480156102f057600080fd5b50336000908152600660205260409020545b6040519081526020016102ab565b34801561031c57600080fd5b5061027661032b3660046117f8565b6106ab565b34801561033c57600080fd5b5061030261290481565b610276610354366004611838565b61071e565b34801561036557600080fd5b50610276610791565b34801561037a57600080fd5b50610276610389366004611863565b6107a5565b34801561039a57600080fd5b506102766103a9366004611838565b6107c1565b3480156103ba57600080fd5b506102766103c9366004611838565b6107eb565b3480156103da57600080fd5b506001546001600160a01b03165b6040516001600160a01b0390911681526020016102ab565b34801561040c57600080fd5b506000546001600160a01b03166103e8565b34801561042a57600080fd5b5061043361087b565b6040516102ab91906118f3565b34801561044c57600080fd5b5061030260035481565b34801561046257600080fd5b50610276610471366004611906565b61089b565b34801561048257600080fd5b50610276610491366004611906565b6108a8565b3480156104a257600080fd5b506104ab6108b5565b6040516102ab91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156104ea57600080fd5b5061030261c35081565b34801561050057600080fd5b506103026201adb081565b34801561051757600080fd5b5061030260045481565b34801561052d57600080fd5b506002546001600160a01b03166103e8565b34801561054b57600080fd5b506005546103e8906001600160a01b031681565b34801561056b57600080fd5b5061027661057a366004611838565b61091e565b34801561058b57600080fd5b506103026109ae565b3480156105a057600080fd5b506102766105af366004611838565b6109c0565b3480156105c057600080fd5b506102766105cf366004611838565b610a11565b3480156105e057600080fd5b506102766105ef36600461191f565b610a8a565b34801561060057600080fd5b50610302620186a081565b60606000610617610b3a565b61062088610b94565b61062988610c2c565b61063288610c87565b61063c8585610cf1565b61064a888888888888610d43565b91509150965096945050505050565b60006001600160e01b031982166370d596f560e11b148061068a57506001600160e01b03198216630704183b60e11b145b806106a557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106b36111d1565b60015460405163f3fef3a360e01b81526001600160a01b038381166004830152602482018590529091169063f3fef3a3906044015b600060405180830381600087803b15801561070257600080fd5b505af1158015610716573d6000803e3d6000fd5b505050505050565b6001600160a01b03811660009081526006602052604081208054349290610746908490611961565b909155505060015460405163aa67c91960e01b81523060048201526001600160a01b039091169063aa67c9199034906024016000604051808303818588803b15801561070257600080fd5b6107996111d1565b6107a3600061122b565b565b6107ad610b3a565b6107ba858585858561127b565b5050505050565b6107c96111d1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6107f36111d1565b61080d6001600160a01b0382166334f57c6760e01b610b17565b6108595760405162461bcd60e51b815260206004820152601f60248201527f746172676574206973206e6f7420612076616c6964204952656c6179487562006044820152606401610213565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6060604051806060016040528060268152602001611e5660269139905090565b6108a36111d1565b600455565b6108b06111d1565b600355565b6108e06040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806080016040528061c350620186a06108fc9190611961565b8152602001620186a081526020016201adb08152602001612904815250905090565b6109266111d1565b6109406001600160a01b0382166309788f9960e21b610b17565b61098c5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c69642049466f727761726465726044820152606401610213565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6109bd61c350620186a0611961565b81565b6109c86111d1565b6001600160a01b0381166109ef57604051630a4d9fad60e41b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610a196111d1565b6001600160a01b038116610a7e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610213565b610a878161122b565b50565b33600090815260066020526040902054811115610aba576040516337904e7560e11b815260040160405180910390fd5b3360009081526006602052604081208054839290610ad9908490611974565b909155505060015460405163f3fef3a360e01b81526001600160a01b038481166004830152602482018490529091169063f3fef3a3906044016106e8565b6000610b22836113b2565b8015610b335750610b3383836113e5565b9392505050565b6001546001600160a01b031633146107a35760405162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c792062652063616c6c65642062792052656c617948756200006044820152606401610213565b610ba16020820182611987565b610bb29060c081019060a001611838565b6001600160a01b0316610bcd6002546001600160a01b031690565b6001600160a01b031614610c235760405162461bcd60e51b815260206004820152601860248201527f466f72776172646572206973206e6f74207472757374656400000000000000006044820152606401610213565b610a878161146e565b610c3681806119a7565b6040013515610a875760405162461bcd60e51b815260206004820152601c60248201527f76616c7565207472616e73666572206e6f7420737570706f72746564000000006044820152606401610213565b610c946020820182611987565b610ca29060c08101906119bd565b159050610a875760405162461bcd60e51b815260206004820152601c60248201527f73686f756c642068617665206e6f207061796d617374657244617461000000006044820152606401610213565b8015610d3f5760405162461bcd60e51b815260206004820152601b60248201527f73686f756c642068617665206e6f20617070726f76616c4461746100000000006044820152606401610213565b5050565b6060600036610d5289806119a7565b905060045481606001351015610d7b57604051630530142160e51b815260040160405180910390fd5b6005546001600160a01b0316610d976040830160208401611838565b6001600160a01b031614610dbe576040516349b3e2a560e11b815260040160405180910390fd5b6000808080610dd060a08601866119bd565b610dde916004908290611a04565b810190610deb9190611a2e565b6001600160a01b03831660009081526007602090815260408083208584529091529020549397509195509350915060ff1615610e3a576040516323088c4f60e01b815260040160405180910390fd5b6008546040516331135b1560e21b81526001600160a01b0386811660048301529091169063c44d6c5490602401602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190611a87565b610ec557604051637cb14ccf60e01b815260040160405180910390fd5b600860009054906101000a90046001600160a01b03166001600160a01b031663e4fae4e46040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e9190611aa4565b6001600160a01b0385166000908152600660205260409020541015610f76576040516355b98d3d60e01b815260040160405180910390fd5b60405163e5face6160e01b81526001600160a01b03848116600483015285919082169063e5face61906024016020604051808303816000875af1158015610fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe59190611a87565b6110025760405163141747af60e21b815260040160405180910390fd5b836110106020880188611838565b6040516331a9108f60e11b8152600481018690526001600160a01b0391821691831690636352211e90602401602060405180830381865afa158015611059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107d9190611abd565b6001600160a01b0316146110a45760405163f338b72960e01b815260040160405180910390fd5b60328360ff1611156110c95760405163e9bdc7b560e01b815260040160405180910390fd5b60008f80602001906110db9190611987565b6110e490611ba7565b600154604051638e53548b60e01b81529192506000916001600160a01b0390911690638e53548b9061111c908f908690600401611c4a565b602060405180830381865afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d9190611aa4565b6001600160a01b038916600090815260066020526040902054909150611184908290611974565b5050604080516001600160a01b0398891660208201529690971686880152505050506060808301919091528251808303909101815260809091019091529960019950975050505050505050565b6000546001600160a01b031633146107a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610213565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b826112b55760405162461bcd60e51b815260206004820152600a6024820152694e6f207375636365737360b01b6044820152606401610213565b600080806112c587890189611ce0565b60015460035493965091945092506001600160a01b0316906000908290638e53548b906112f2908a611961565b886040518363ffffffff1660e01b8152600401611310929190611d90565b602060405180830381865afa15801561132d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113519190611aa4565b6001600160a01b0380861660009081526007602090815260408083208884528252808320805460ff19166001179055928916825260069052908120805492935083929091906113a1908490611974565b909155505050505050505050505050565b60006113c5826301ffc9a760e01b6113e5565b80156106a557506113de826001600160e01b03196113e5565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611457575060208210155b80156114635750600081115b979650505050505050565b60008061147b83806119a7565b61148c906040810190602001611838565b6001600160a01b031663572b6c0560e01b6114aa6020860186611987565b6114bb9060c081019060a001611838565b6040516001600160a01b03909116602482015260440160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161150f9190611e43565b600060405180830381855afa9150503d806000811461154a576040519150601f19603f3d011682016040523d82523d6000602084013e61154f565b606091505b5091509150816115a15760405162461bcd60e51b815260206004820152601c60248201527f697354727573746564466f727761726465723a207265766572746564000000006044820152606401610213565b80516020146115f25760405162461bcd60e51b815260206004820181905260248201527f697354727573746564466f727761726465723a2062616420726573706f6e73656044820152606401610213565b808060200190518101906116069190611a87565b6116525760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420666f7277617264657220666f7220726563697069656e74006044820152606401610213565b505050565b60008083601f84011261166957600080fd5b50813567ffffffffffffffff81111561168157600080fd5b60208301915083602082850101111561169957600080fd5b9250929050565b600080600080600080608087890312156116b957600080fd5b863567ffffffffffffffff808211156116d157600080fd5b908801906040828b0312156116e557600080fd5b909650602088013590808211156116fb57600080fd5b6117078a838b01611657565b9097509550604089013591508082111561172057600080fd5b5061172d89828a01611657565b979a9699509497949695606090950135949350505050565b60005b83811015611760578181015183820152602001611748565b50506000910152565b60008151808452611781816020860160208601611745565b601f01601f19169290920160200192915050565b6040815260006117a86040830185611769565b905082151560208301529392505050565b6000602082840312156117cb57600080fd5b81356001600160e01b031981168114610b3357600080fd5b6001600160a01b0381168114610a8757600080fd5b6000806040838503121561180b57600080fd5b82359150602083013561181d816117e3565b809150509250929050565b8035611833816117e3565b919050565b60006020828403121561184a57600080fd5b8135610b33816117e3565b8015158114610a8757600080fd5b60008060008060006080868803121561187b57600080fd5b853567ffffffffffffffff8082111561189357600080fd5b61189f89838a01611657565b9097509550602088013591506118b482611855565b90935060408701359250606087013590808211156118d157600080fd5b50860161010081890312156118e557600080fd5b809150509295509295909350565b602081526000610b336020830184611769565b60006020828403121561191857600080fd5b5035919050565b6000806040838503121561193257600080fd5b823561193d816117e3565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106a5576106a561194b565b818103818111156106a5576106a561194b565b6000823560fe1983360301811261199d57600080fd5b9190910192915050565b6000823560de1983360301811261199d57600080fd5b6000808335601e198436030181126119d457600080fd5b83018035915067ffffffffffffffff8211156119ef57600080fd5b60200191503681900382131561169957600080fd5b60008085851115611a1457600080fd5b83861115611a2157600080fd5b5050820193919092039150565b60008060008060808587031215611a4457600080fd5b8435611a4f816117e3565b93506020850135611a5f816117e3565b925060408501359150606085013560ff81168114611a7c57600080fd5b939692955090935050565b600060208284031215611a9957600080fd5b8151610b3381611855565b600060208284031215611ab657600080fd5b5051919050565b600060208284031215611acf57600080fd5b8151610b33816117e3565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611b1457611b14611ada565b60405290565b600082601f830112611b2b57600080fd5b813567ffffffffffffffff80821115611b4657611b46611ada565b604051601f8301601f19908116603f01168101908282118183101715611b6e57611b6e611ada565b81604052838152866020858801011115611b8757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101008236031215611bba57600080fd5b611bc2611af0565b823581526020830135602082015260408301356040820152611be660608401611828565b6060820152611bf760808401611828565b6080820152611c0860a08401611828565b60a082015260c083013567ffffffffffffffff811115611c2757600080fd5b611c3336828601611b1a565b60c08301525060e092830135928101929092525090565b828152604060208201528151604082015260208201516060820152604082015160808201526000606083015160018060a01b0380821660a08501528060808601511660c0850152505060a0830151611cad60e08401826001600160a01b03169052565b5060c083015161010083810152611cc8610140840182611769565b905060e0840151610120840152809150509392505050565b600080600060608486031215611cf557600080fd5b8335611d00816117e3565b92506020840135611d10816117e3565b929592945050506040919091013590565b6000808335601e19843603018112611d3857600080fd5b830160208101925035905067ffffffffffffffff811115611d5857600080fd5b80360382131561169957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8281526040602082015281356040820152602082013560608201526040820135608082015260006060830135611dc5816117e3565b6001600160a01b031660a0830152611ddf60808401611828565b6001600160a01b031660c0830152611df960a08401611828565b6001600160a01b031660e0830152611e1460c0840184611d21565b61010084810152611e2a61014085018284611d67565b91505060e0840135610120840152809150509392505050565b6000825161199d81846020870161174556fe332e302e302d626574612e312b6f70656e67736e2e7265766965772e697061796d6173746572a26469706673582212208c1cf4d84dbe64b5f3a0c9297e85db9aad685897146638eac66cbd96e581966764736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
