[ { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "stateMutability": "payable", "type": "constructor" }, { "inputs": [], "name": "AllowanceOverflow", "type": "error" }, { "inputs": [], "name": "AllowanceUnderflow", "type": "error" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "IXERC20_LimitsTooHigh", "type": "error" }, { "inputs": [], "name": "IXERC20_NotHighEnoughLimits", "type": "error" }, { "inputs": [], "name": "InsufficientAllowance", "type": "error" }, { "inputs": [], "name": "InsufficientAmount", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidPermit", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoChange", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "PermitExpired", "type": "error" }, { "inputs": [], "name": "TotalSupplyOverflow", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAccountant", "type": "address" } ], "name": "AccountantSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "mintingLimit", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "burningLimit", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "bridge", "type": "address" } ], "name": "BridgeLimitsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Destroyed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newEndpoint", "type": "address" } ], "name": "EndpointSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "IncentiveAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "IncentiveClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "RolesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "secret", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "addr", "type": "address" } ], "name": "Secret", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "result", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accountant", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint88", "name": "amount", "type": "uint88" } ], "name": "addIncentives", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "route", "type": "uint8" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "extraOptions", "type": "bytes" } ], "name": "bridgeToken", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "bridges", "outputs": [ { "components": [ { "internalType": "uint128", "name": "timestamp", "type": "uint128" }, { "internalType": "uint128", "name": "ratePerSecond", "type": "uint128" }, { "internalType": "uint128", "name": "maxLimit", "type": "uint128" }, { "internalType": "uint128", "name": "currentLimit", "type": "uint128" } ], "internalType": "struct GunGameV2Remote.BridgeParameters", "name": "minterParams", "type": "tuple" }, { "components": [ { "internalType": "uint128", "name": "timestamp", "type": "uint128" }, { "internalType": "uint128", "name": "ratePerSecond", "type": "uint128" }, { "internalType": "uint128", "name": "maxLimit", "type": "uint128" }, { "internalType": "uint128", "name": "currentLimit", "type": "uint128" } ], "internalType": "struct GunGameV2Remote.BridgeParameters", "name": "burnerParams", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "bridge", "type": "address" } ], "name": "burningCurrentLimitOf", "outputs": [ { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "bridge", "type": "address" } ], "name": "burningMaxLimitOf", "outputs": [ { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "secret", "type": "uint256" } ], "name": "connectAndApprove", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "destroy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "endpoint", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "grantRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAllRoles", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAnyRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "incentives", "outputs": [ { "internalType": "uint88", "name": "", "type": "uint88" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "bridge", "type": "address" } ], "name": "mintingCurrentLimitOf", "outputs": [ { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "bridge", "type": "address" } ], "name": "mintingMaxLimitOf", "outputs": [ { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint88", "name": "amount", "type": "uint88" } ], "name": "payIncentives", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "renounceRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "revokeRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "rolesOf", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAccountant", "type": "address" } ], "name": "setAccountant", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newEndpoint", "type": "address" } ], "name": "setEndpoint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "bridge", "type": "address" }, { "internalType": "uint128", "name": "mintingLimit", "type": "uint128" }, { "internalType": "uint128", "name": "burningLimit", "type": "uint128" } ], "name": "setLimits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60806040526040516200205c3803806200205c8339810160408190526100249161006f565b61002d81610033565b5061009f565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008157600080fd5b81516001600160a01b038116811461009857600080fd5b9392505050565b611fad80620000af6000396000f3fe60806040526004361061025c5760003560e01c8063651fd26811610144578063bfc9d63c116100b6578063dbbb41551161007a578063dbbb41551461081e578063dd62ed3e1461083e578063f04e283e14610874578063f2fde38b14610887578063fa2746b41461089a578063fee81cf4146108ba57600080fd5b8063bfc9d63c146106d0578063c1eb7137146106f0578063c40c437414610732578063ced67f0c14610745578063d505accf146107fe57600080fd5b806395d89b411161010857806395d89b4114610604578063998955d3146106305780639c205c81146106505780639d118770146106705780639dc29fac14610690578063a9059cbb146106b057600080fd5b8063651fd2681461055d57806370a082311461057d578063715018a6146105b05780637ecebe00146105b85780638da5cb5b146105eb57600080fd5b80632de94807116101dd5780634a4ee7b1116101a15780634a4ee7b1146104935780634fb3ccc5146104a6578063514e62fc146104de57806354d1f13d146105155780635e280f111461051d578063650c86011461053d57600080fd5b80632de94807146103ef578063313ce567146104225780633644e5151461043e57806340c10f191461045357806348ea71271461047357600080fd5b8063183a4f6e11610224578063183a4f6e146103685780631c10893f1461037d5780631cd64df41461039057806323b872dd146103c757806325692962146103e757600080fd5b806306fdde0314610261578063095ea7b31461028c5780630c05f82c146102bc5780630d5df7ba1461030c57806318160ddd1461034b575b600080fd5b34801561026d57600080fd5b506102766108ed565b6040516102839190611a9d565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004611b08565b610912565b6040519015158152602001610283565b3480156102c857600080fd5b506102fe6102d7366004611b32565b6001600160a01b03166000908152600260205260409020600101546001600160801b031690565b604051908152602001610283565b34801561031857600080fd5b5060015461033390600160a01b90046001600160581b031681565b6040516001600160581b039091168152602001610283565b34801561035757600080fd5b506805345cdf77eb68f44c546102fe565b61037b610376366004611b4d565b610965565b005b61037b61038b366004611b08565b610972565b34801561039c57600080fd5b506102ac6103ab366004611b08565b638b78c6d8600c90815260009290925260209091205481161490565b3480156103d357600080fd5b506102ac6103e2366004611b66565b610988565b61037b610a35565b3480156103fb57600080fd5b506102fe61040a366004611b32565b638b78c6d8600c908152600091909152602090205490565b34801561042e57600080fd5b5060405160128152602001610283565b34801561044a57600080fd5b506102fe610a85565b34801561045f57600080fd5b5061037b61046e366004611b08565b610b02565b34801561047f57600080fd5b5061037b61048e366004611b32565b610b0d565b61037b6104a1366004611b08565b610b8d565b3480156104b257600080fd5b506001546104c6906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b3480156104ea57600080fd5b506102ac6104f9366004611b08565b638b78c6d8600c90815260009290925260209091205416151590565b61037b610b9f565b34801561052957600080fd5b506000546104c6906001600160a01b031681565b34801561054957600080fd5b5061037b610558366004611bb9565b610bdb565b34801561056957600080fd5b506102fe610578366004611b32565b610cce565b34801561058957600080fd5b506102fe610598366004611b32565b6387a211a2600c908152600091909152602090205490565b61037b610d24565b3480156105c457600080fd5b506102fe6105d3366004611b32565b6338377508600c908152600091909152602090205490565b3480156105f757600080fd5b50638b78c6d819546104c6565b34801561061057600080fd5b5060408051808201909152600381526278474760e81b6020820152610276565b34801561063c57600080fd5b506102fe61064b366004611b32565b610d38565b34801561065c57600080fd5b5061037b61066b366004611b4d565b610d82565b34801561067c57600080fd5b5061037b61068b366004611b4d565b610dcc565b34801561069c57600080fd5b5061037b6106ab366004611b08565b610dd6565b3480156106bc57600080fd5b506102ac6106cb366004611b08565b610e15565b3480156106dc57600080fd5b5061037b6106eb366004611bec565b610e7e565b3480156106fc57600080fd5b506102fe61070b366004611b32565b6001600160a01b03166000908152600260205260409020600301546001600160801b031690565b61037b610740366004611c18565b610ef9565b34801561075157600080fd5b506107f0610760366004611b32565b60026020818152600092835260409283902083516080808201865282546001600160801b038082168452600160801b918290048116848701526001850154808216858a015282900481166060808601919091528851938401895296850154808216845282900481169583019590955260039093015480851696820196909652919094049091169181019190915282565b604051610283929190611cd0565b34801561080a57600080fd5b5061037b610819366004611d47565b610fae565b34801561082a57600080fd5b5061037b610839366004611b32565b611137565b34801561084a57600080fd5b506102fe610859366004611db1565b602052637f5e9f20600c908152600091909152603490205490565b61037b610882366004611b32565b6111ef565b61037b610895366004611b32565b61122c565b3480156108a657600080fd5b5061037b6108b5366004611df2565b611253565b3480156108c657600080fd5b506102fe6108d5366004611b32565b63389a75e1600c908152600091909152602090205490565b60408051808201909152600b81526a23bab71023b0b6b2902b1960a91b602082015290565b600082602052637f5e9f20600c5233600052816034600c205581600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b61096f3382611333565b50565b61097a61133f565b610984828261135a565b5050565b60008360601b33602052637f5e9f208117600c526034600c20805460018101156109c857808511156109c2576313be252b6000526004601cfd5b84810382555b50506387a211a28117600c526020600c208054808511156109f15763f4d678b86000526004601cfd5b84810382555050836000526020600c208381540181555082602052600c5160601c8160601c600080516020611f58833981519152602080a3505060015b9392505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b600080610a906108ed565b8051906020012090506040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81528160208201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604082015246606082015230608082015260a081209250505090565b610984338383611366565b610b1561133f565b6001546001600160a01b03808316911603610b435760405163a88ee57760e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f2f209ee77da07c23afbaea89851d66a91c6308cb92a389e16069a9c49dd5201090600090a250565b610b9561133f565b6109848282611333565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6001546001600160a01b03163314610c05576040516282b42960e81b815260040160405180910390fd5b6001546001600160581b03600160a01b90910481169082161115610c3c57604051632ca2f52b60e11b815260040160405180910390fd5b600180546001600160581b03600160a01b80830482168590038216026affffffffffffffffffffff60a01b1983168117909355610c8b9230926001600160a01b039182169116179084166113c0565b6040516001600160581b038216906001600160a01b038416907ff383c0546bb6669c3250601085779bc0b63da3e0fb8e4881605db6fb1a9d4e8290600090a35050565b6001600160a01b038116600090815260026020526040812060018101549054610d15916001600160801b03600160801b808304821693928216928083169291900416611429565b6001600160801b031692915050565b610d2c61133f565b610d3660006114d1565b565b6001600160a01b038116600090815260026020819052604082206003810154910154610d15916001600160801b03600160801b808304821693928216928083169291900416611429565b600154610d9c9033906001600160a01b031660001961150f565b604051339082907ff70ceb1352ac74192e3fa42e88f173263ec9ed80dd174cd26ad3443dc1cebfb490600090a350565b61096f3382611562565b336001600160a01b03831614801590610dfa57506000546001600160a01b03163314155b15610e0a57610e0a8233836115c7565b61098433838361160a565b60006387a211a2600c52336000526020600c20805480841115610e405763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c33600080516020611f58833981519152602080a350600192915050565b610e923330836001600160581b03166113c0565b600180546001600160581b03600160a01b808304821685018216026affffffffffffffffffffff60a01b19909216919091179091556040519082169033907fbea2d8e601f9b1a2082df3c1355dd7aa1812c6333d003e660f46c4923543ba9290600090a350565b82600003610f1a57604051632ca2f52b60e11b815260040160405180910390fd5b336001600160a01b03861614610f3557610f358533856115c7565b60005460405163310310dd60e21b81526001600160a01b039091169063c40c4374903490610f73908b908b908b908b908b908b908b90600401611e35565b6000604051808303818588803b158015610f8c57600080fd5b505af1158015610fa0573d6000803e3d6000fd5b505050505050505050505050565b6000610fb86108ed565b80519060200120905084421115610fd757631a15a3cc6000526004601cfd5b6040518860601b60601c98508760601b60601c975065383775081901600e52886000526020600c2080547f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83528360208401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604084015246606084015230608084015260a08320602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983528a60208401528960408401528860608401528060808401528760a084015260c08320604e526042602c206000528660ff1660205285604052846060526020806080600060015afa8b3d51146110e35763ddafbaef6000526004601cfd5b0190556303faf4f960a51b88176040526034602c2087905587897f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602060608501a360405250506000606052505050505050565b61113f61133f565b6000546001600160a01b03908116908216810361116f5760405163a88ee57760e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156111a2576111a281600080611253565b6111b78269d3c21bcecceda100000080611253565b6040516001600160a01b038316907f87bf030d6c6aa55db1e81d52f84962fc04ce1d477e64e50d57d3a91c52296f9390600090a25050565b6111f761133f565b63389a75e1600c52806000526020600c20805442111561121f57636f5e88186000526004601cfd5b6000905561096f816114d1565b61123461133f565b8060601b61124a57637448fbae6000526004601cfd5b61096f816114d1565b61125b61133f565b61126d60026001600160801b03611eb1565b6001600160801b0316826001600160801b031611806112ae575061129960026001600160801b03611eb1565b6001600160801b0316816001600160801b0316115b156112cc5760405163f596480960e01b815260040160405180910390fd5b6112d6838361165e565b6112e08382611754565b604080516001600160801b038085168252831660208201526001600160a01b038516917f93f3bbfe8cfb354ec059175107653f49f6eb479a8622a7d83866ea015435c944910160405180910390a2505050565b61098482826000611850565b638b78c6d819543314610d36576382b429006000526004601cfd5b61098482826001611850565b600061137184610cce565b9050816001600160801b031681101561139d576040516305b4215560e11b815260040160405180910390fd5b6113a784836118a9565b6113ba83836001600160801b031661192d565b50505050565b8260601b6387a211a28117600c526020600c208054808411156113eb5763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c8160601c600080516020611f58833981519152602080a350505050565b836001600160801b03808216908516146114c9574261144b6201518085611ee5565b6001600160801b0316116114605750826114c9565b4261146e6201518085611ee5565b6001600160801b031611156114c95760006114898442611f0c565b905060006114978483611f2c565b6114a19084611ee5565b9050856001600160801b0316816001600160801b0316116114c257806114c4565b855b925050505b949350505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b8260601b82602052637f5e9f208117600c52816034600c205581600052602c5160601c8160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350505050565b6387a211a2600c52816000526020600c2080548083111561158b5763f4d678b86000526004601cfd5b82900390556805345cdf77eb68f44c8054829003905560008181526001600160a01b038316600080516020611f58833981519152602083a35050565b81602052637f5e9f20600c52826000526034600c208054600181011561160357808311156115fd576313be252b6000526004601cfd5b82810382555b5050505050565b600061161584610d38565b9050816001600160801b0316811015611641576040516305b4215560e11b815260040160405180910390fd5b61164b848361199a565b6113ba83836001600160801b0316611562565b6001600160a01b0382166000908152600260205260408120600101546001600160801b03169061168d84610cce565b6001600160a01b038516600090815260026020526040902060010180546001600160801b0319166001600160801b03861617905590506116ce838383611a22565b6001600160a01b038516600090815260026020526040902060010180546001600160801b03928316600160801b0292169190911790556117116201518084611eb1565b6001600160a01b039094166000908152600260205260409020426001600160801b039081169516600160801b026001600160801b03191694909417909355505050565b6001600160a01b0382166000908152600260205260408120600301546001600160801b03169061178384610d38565b6001600160a01b038516600090815260026020526040902060030180546001600160801b0319166001600160801b03861617905590506117c4838383611a22565b6001600160a01b038516600090815260026020526040902060030180546001600160801b03928316600160801b0292169190911790556118076201518084611eb1565b6001600160a01b039094166000908152600260208190526040909120426001600160801b039081169616600160801b026001600160801b03191695909517940193909355505050565b638b78c6d8600c52826000526020600c20805483811783611872575080841681185b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a3505050505050565b60006118b483610cce565b6001600160a01b038416600090815260026020526040902080546001600160801b031916426001600160801b031617905590506118f18282611f0c565b6001600160a01b03909316600090815260026020526040902060010180546001600160801b03948516600160801b029416939093179092555050565b6805345cdf77eb68f44c54818101818110156119515763e5cfe9576000526004601cfd5b806805345cdf77eb68f44c5550506387a211a2600c52816000526020600c208181540181555080602052600c5160601c6000600080516020611f58833981519152602080a35050565b60006119a583610d38565b6001600160a01b03841660009081526002602081905260409091200180546001600160801b031916426001600160801b031617905590506119e68282611f0c565b6001600160a01b03909316600090815260026020526040902060030180546001600160801b03948516600160801b029416939093179092555050565b600080846001600160801b0316846001600160801b03161115611a7c57611a498585611f0c565b9050806001600160801b0316836001600160801b031611611a6b576000611a75565b611a758184611f0c565b9150611a95565b611a868486611f0c565b9050611a928184611ee5565b91505b509392505050565b60006020808352835180602085015260005b81811015611acb57858101830151858201604001528201611aaf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611b0357600080fd5b919050565b60008060408385031215611b1b57600080fd5b611b2483611aec565b946020939093013593505050565b600060208284031215611b4457600080fd5b610a2e82611aec565b600060208284031215611b5f57600080fd5b5035919050565b600080600060608486031215611b7b57600080fd5b611b8484611aec565b9250611b9260208501611aec565b9150604084013590509250925092565b80356001600160581b0381168114611b0357600080fd5b60008060408385031215611bcc57600080fd5b611bd583611aec565b9150611be360208401611ba2565b90509250929050565b600060208284031215611bfe57600080fd5b610a2e82611ba2565b803560ff81168114611b0357600080fd5b600080600080600080600060c0888a031215611c3357600080fd5b611c3c88611c07565b965060208801359550611c5160408901611aec565b9450611c5f60608901611aec565b93506080880135925060a088013567ffffffffffffffff80821115611c8357600080fd5b818a0191508a601f830112611c9757600080fd5b813581811115611ca657600080fd5b8b6020828501011115611cb857600080fd5b60208301945080935050505092959891949750929550565b6101008101611d0d828580516001600160801b03908116835260208083015182169084015260408083015182169084015260609182015116910152565b82516001600160801b0390811660808401526020840151811660a08401526040840151811660c084015260608401511660e0830152610a2e565b600080600080600080600060e0888a031215611d6257600080fd5b611d6b88611aec565b9650611d7960208901611aec565b95506040880135945060608801359350611d9560808901611c07565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611dc457600080fd5b611dcd83611aec565b9150611be360208401611aec565b80356001600160801b0381168114611b0357600080fd5b600080600060608486031215611e0757600080fd5b611e1084611aec565b9250611e1e60208501611ddb565b9150611e2c60408501611ddb565b90509250925092565b60ff88168152602081018790526001600160a01b038681166040830152851660608201526080810184905260c060a0820181905281018290526000828460e0840137600060e0848401015260e0601f19601f850116830101905098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380841680611ed957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b6001600160801b03818116838216019080821115611f0557611f05611e9b565b5092915050565b6001600160801b03828116828216039080821115611f0557611f05611e9b565b6001600160801b03818116838216028082169190828114611f4f57611f4f611e9b565b50509291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202cf87b1715adc124009d755b32e4086a87e4ded1f963689127c27ca11c4adda964736f6c63430008170033000000000000000000000000a779fc675db318dab004ab8d538cb320d0013f42