0 txs
5.8k calls
constructor
constructor()
functions
auditor
viewfunction auditor(address) view returns (bool)
cKIP
viewfunction cKIP() view returns (address)
CLAIM_HASH
viewfunction CLAIM_HASH() view returns (bytes32)
CLAIM_INTERVAL
viewfunction CLAIM_INTERVAL() view returns (uint40)
claimedAmounts
viewfunction claimedAmounts(uint256) view returns (uint256)
delegations
viewfunction delegations(uint256, uint256) view returns (address)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
fines
viewfunction fines(uint256) view returns (uint256)
fundAddress
viewfunction fundAddress() view returns (address)
getDelegation
viewfunction getDelegation(uint256 tokenId, uint256 slot) view returns (address)
kipNode
viewfunction kipNode() view returns (address)
lastClaimTime
viewfunction lastClaimTime(uint256) view returns (uint256)
lastWithdrawTime
viewfunction lastWithdrawTime(uint256) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
paymaster
viewfunction paymaster(address) view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
treasurer
viewfunction treasurer(address) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
WITHDRAW_HASH
viewfunction WITHDRAW_HASH() view returns (bytes32)
WITHDRAW_INTERVAL
viewfunction WITHDRAW_INTERVAL() view returns (uint40)
withdrawAmounts
viewfunction withdrawAmounts(uint256) view returns (uint256)
batchClaim
nonpayablefunction batchClaim(tuple[] claims)
batchSetDelegation
nonpayablefunction batchSetDelegation(uint256[] tokenIds, uint256[] slots, address[] addresses)
batchWithdraw
nonpayablefunction batchWithdraw(tuple[] withdrawals)
claim
nonpayablefunction claim(uint256 tokenId, uint256 amount, address _paymaster, bytes32 referenceId, bytes signature, uint64 expiration_time)
initialize
nonpayablefunction initialize(address initialOwner, address kipNodeAddress, address cKIPToken, address _fundAddress)
pause
nonpayablefunction pause()
penalty
nonpayablefunction penalty(uint256 tokenId, uint256 amount, bytes32 referenceId)
renounceOwnership
nonpayablefunction renounceOwnership()
setAuditor
nonpayablefunction setAuditor(address _address, bool enabled)
setClaimInterval
nonpayablefunction setClaimInterval(uint40 interval)
setDelegation
nonpayablefunction setDelegation(uint256 tokenId, uint256 slot, address _address)
setFundAddress
nonpayablefunction setFundAddress(address _address)
setPaymaster
nonpayablefunction setPaymaster(address _address, bool enabled)
setTreasurer
nonpayablefunction setTreasurer(address _address, bool enabled)
setWithdrawInterval
nonpayablefunction setWithdrawInterval(uint40 interval)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(uint256 tokenId, uint256 amount, address _paymaster, bytes32 referenceId, bytes signature, uint64 expiration_time)
events
AuditorChanged
event AuditorChanged(address indexed auditor, bool enabled)
Claimed
event Claimed(address indexed tokenOwner, uint256 tokenId, uint256 amount, address indexed paymaster, bytes32 referenceId, uint256 amountT)
ClaimIntervalChanged
event ClaimIntervalChanged(address indexed operator, uint40 newInterval)
DelegationChanged
event DelegationChanged(address indexed tokenOwner, uint256 tokenId, uint256 slot, address indexed delegation)
FundAddressChanged
event FundAddressChanged(address indexed operator, address indexed _address)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PaymasterChanged
event PaymasterChanged(address indexed paymaster, bool enabled)
Penalty
event Penalty(address indexed paymaster, uint256 tokenId, uint256 amount, bytes32 referenceId, uint256 amountT)
TreasurerChanged
event TreasurerChanged(address indexed treasurer, bool enabled)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
Withdraw
event Withdraw(address indexed tokenOwner, uint256 tokenId, uint256 amount, address indexed paymaster, bytes32 referenceId, uint256 amountT)
WithdrawIntervalChanged
event WithdrawIntervalChanged(address indexed operator, uint40 newInterval)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AmountIsZero
error AmountIsZero()
ArrayLengthsError
error ArrayLengthsError()
CanNotWithdrawYet01
error CanNotWithdrawYet01()
CanNotWithdrawYet02
error CanNotWithdrawYet02()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
ExpiredSignature
error ExpiredSignature()
FailedCall
error FailedCall()
InvalidAmount
error InvalidAmount()
InvalidAuditor
error InvalidAuditor()
InvalidInitialization
error InvalidInitialization()
InvalidPayMaster
error InvalidPayMaster()
InvalidSignature
error InvalidSignature()
InvalidTokenOwner
error InvalidTokenOwner()
InvalidTreasurer
error InvalidTreasurer()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516128726100f95f395f8181611afb01528181611b240152611c6301526128725ff3fe60806040526004361061023e575f3560e01c8063715018a6116101345780639f666d84116100b3578063d06f973411610078578063d06f973414610775578063d85f478314610794578063e549e3c9146107c7578063e82bef29146107e6578063f2fde38b14610805578063f8c8765e14610824575f80fd5b80639f666d84146106b1578063ad3cb1cc146106dc578063b2fa953f14610719578063b340c0b614610738578063b43bd42414610756575f80fd5b8063877dab7e116100f9578063877dab7e146105af5780638d40d1a2146105da5780638da5cb5b146106085780639501ed30146106445780639633e19614610683575f80fd5b8063715018a61461051e5780637532f3f2146105325780637795024f1461055d5780638456cb591461057c57806385dc300414610590575f80fd5b80633f4ba83a116101c05780635320ca5a116101855780635320ca5a1461047f578063538e3af01461049e57806356f738cf146104bd57806357b93d0f146104dc5780635c975abb146104fb575f80fd5b80633f4ba83a146104015780634764e6981461041557806349d3a0c1146104345780634f1ef2861461045857806352d1902d1461046b575f80fd5b80632e584727116102065780632e5847271461033557806330c6b5eb14610360578063320947c51461039a57806333a6cc58146103b95780633644e515146103ec575f80fd5b806302d488ab146102425780630f20b94c1461027e5780631573f688146102b75780631c0552e8146102d8578063275e4170146102f7575b5f80fd5b34801561024d575f80fd5b5061026161025c366004612228565b610843565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610289575f80fd5b506102a9610298366004612248565b600b6020525f908152604090205481565b604051908152602001610275565b3480156102c2575f80fd5b506102d66102d1366004612273565b61086c565b005b3480156102e3575f80fd5b506102d66102f23660046122ae565b6108d3565b348015610302575f80fd5b506103256103113660046122d7565b60056020525f908152604090205460ff1681565b6040519015158152602001610275565b348015610340575f80fd5b506102a961034f366004612248565b60076020525f908152604090205481565b34801561036b575f80fd5b5060025461038490600160a01b900464ffffffffff1681565b60405164ffffffffff9091168152602001610275565b3480156103a5575f80fd5b506102d66103b436600461230d565b6109a4565b3480156103c4575f80fd5b506102a97f6dc7908c73454287a1ea5818cabdf99f39460a1624034acb20bc177a32970dd481565b3480156103f7575f80fd5b506102a960035481565b34801561040c575f80fd5b506102d6610da3565b348015610420575f80fd5b506102d661042f3660046123b7565b610db5565b34801561043f575f80fd5b5060025461038490600160c81b900464ffffffffff1681565b6102d66104663660046123ef565b610e29565b348015610476575f80fd5b506102a9610e48565b34801561048a575f80fd5b506102d66104993660046124f9565b610e63565b3480156104a9575f80fd5b506102d66104b8366004612537565b610f8e565b3480156104c8575f80fd5b50600154610261906001600160a01b031681565b3480156104e7575f80fd5b506102d66104f636600461230d565b611097565b348015610506575f80fd5b505f8051602061281d8339815191525460ff16610325565b348015610529575f80fd5b506102d661137a565b34801561053d575f80fd5b506102a961054c366004612248565b60096020525f908152604090205481565b348015610568575f80fd5b506102d6610577366004612273565b61138b565b348015610587575f80fd5b506102d66113ea565b34801561059b575f80fd5b506102d66105aa3660046122d7565b6113fa565b3480156105ba575f80fd5b506102a96105c9366004612248565b60086020525f908152604090205481565b3480156105e5575f80fd5b506103256105f43660046122d7565b60066020525f908152604090205460ff1681565b348015610613575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610261565b34801561064f575f80fd5b5061026161065e366004612228565b600c60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561068e575f80fd5b5061032561069d3660046122d7565b60046020525f908152604090205460ff1681565b3480156106bc575f80fd5b506102a96106cb366004612248565b600a6020525f908152604090205481565b3480156106e7575f80fd5b5061070c604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610275919061256d565b348015610724575f80fd5b506102d66107333660046125a2565b61144d565b348015610743575f80fd5b505f54610261906001600160a01b031681565b348015610761575f80fd5b506102d66107703660046123b7565b6114f1565b348015610780575f80fd5b506102d661078f366004612273565b61155e565b34801561079f575f80fd5b506102a97f9886c4dc768744e8fa1a61dddb7049ff4846914c1822d360c892f3c6e3d92e4581565b3480156107d2575f80fd5b506102d66107e13660046124f9565b6115bd565b3480156107f1575f80fd5b50600254610261906001600160a01b031681565b348015610810575f80fd5b506102d661081f3660046122d7565b6116e3565b34801561082f575f80fd5b506102d661083e36600461263e565b611725565b5f828152600c602090815260408083208484529091529020546001600160a01b03165b92915050565b61087461197e565b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f4b16fbed4606c86f7df45a41ede997377a7d995d2d3d1cab165577cd5ad231b191015b60405180910390a25050565b815f036108f3576040516310eb483f60e21b815260040160405180910390fd5b335f9081526005602052604081205460ff16151590036109265760405163653f34c560e01b815260040160405180910390fd5b5f83815260096020526040812080548492906109439084906126ab565b90915550505f838152600960209081526040918290205482518681529182018590528183018490526060820152905133917f80954bca99399b6d66dee63affdda96c34c0944868300a18cee9aba4cf547762919081900360800190a2505050565b6109ac6119d9565b335f546040516331a9108f60e11b8152600481018a90526001600160a01b039283169290911690636352211e90602401602060405180830381865afa1580156109f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1b91906126be565b6001600160a01b031614610a425760405163153e35b760e11b815260040160405180910390fd5b6001600160a01b0385165f9081526006602052604081205460ff1615159003610a7e57604051631f0b806560e11b815260040160405180910390fd5b42816001600160401b03161015610aa85760405163df4cc36d60e01b815260040160405180910390fd5b855f03610ac8576040516310eb483f60e21b815260040160405180910390fd5b5f8781526007602052604090205415610b26576002545f888152600760205260409020544291610b0791600160a01b90910464ffffffffff16906126ab565b1115610b2657604051630c3e11ad60e31b815260040160405180910390fd5b5f878152600b6020526040902054610b3f9087906126ab565b5f88815260096020908152604080832054600a90925290912054610b6391906126d9565b1015610b825760405163162908e360e11b815260040160405180910390fd5b6002545f888152600860205260409020544291610bae91600160c81b90910464ffffffffff16906126ab565b1115610bcd5760405163c4f8891d60e01b815260040160405180910390fd5b6003545f888152600b60205260408120549091907f9886c4dc768744e8fa1a61dddb7049ff4846914c1822d360c892f3c6e3d92e45908a8a33878b604051602001610c1e97969594939291906126ec565b60405160208183030381529060405280519060200120604051602001610c5b92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f610cb585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508693925050611a099050565b9050866001600160a01b0316816001600160a01b031614610ce957604051638baa579f60e01b815260040160405180910390fd5b5f898152600760209081526040808320429055600b909152812080548a91908390610d159084906126ab565b9182905550604080518d8152602081018d90528082018b90526060810183905290519193506001600160a01b038b16925033917f3779aca1d52a9b15d4caeffa7a8c7c787ca2c8a9df114eafcfded2a07395b6529181900360800190a3600254610d97906001600160a01b0316336001546001600160a01b031691908c611a31565b50505050505050505050565b610dab61197e565b610db3611a91565b565b610dbd61197e565b6002805464ffffffffff60c81b1916600160c81b64ffffffffff8416021790553360405164ffffffffff831681526001600160a01b0391909116907f6b9032fac6f094188a616792a3966f4bc38adb500ddcc2de5d59cc80fbb2e957906020015b60405180910390a250565b610e31611af0565b610e3a82611b94565b610e448282611b9c565b5050565b5f610e51611c58565b505f805160206127fd83398151915290565b5f5b81811015610f8957610f81838383818110610e8257610e8261272e565b9050602002810190610e949190612742565b35848484818110610ea757610ea761272e565b9050602002810190610eb99190612742565b60200135858585818110610ecf57610ecf61272e565b9050602002810190610ee19190612742565b610ef29060608101906040016122d7565b868686818110610f0457610f0461272e565b9050602002810190610f169190612742565b60600135878787818110610f2c57610f2c61272e565b9050602002810190610f3e9190612742565b610f4c906080810190612760565b898989818110610f5e57610f5e61272e565b9050602002810190610f709190612742565b6104f69060c081019060a0016127a2565b600101610e65565b505050565b335f546040516331a9108f60e11b8152600481018690526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610fd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffd91906126be565b6001600160a01b0316146110245760405163153e35b760e11b815260040160405180910390fd5b5f838152600c6020908152604080832085845282529182902080546001600160a01b0319166001600160a01b03851690811790915582518681529182018590529133917f6efa025447ee6bd572f7d849f325e3f3f77cce2eaf349f8155de2a7cdfe69367910160405180910390a3505050565b61109f6119d9565b855f036110bf576040516310eb483f60e21b815260040160405180910390fd5b6001600160a01b0385165f9081526004602052604081205460ff16151590036110fb576040516328ac08bf60e21b815260040160405180910390fd5b335f546040516331a9108f60e11b8152600481018a90526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611146573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116a91906126be565b6001600160a01b0316146111915760405163153e35b760e11b815260040160405180910390fd5b42816001600160401b031610156111bb5760405163df4cc36d60e01b815260040160405180910390fd5b6003545f888152600a60205260408120549091907f6dc7908c73454287a1ea5818cabdf99f39460a1624034acb20bc177a32970dd4908a8a33878b60405160200161120c97969594939291906126ec565b6040516020818303038152906040528051906020012060405160200161124992919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6112a385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508693925050611a099050565b9050866001600160a01b0316816001600160a01b0316146112d757604051638baa579f60e01b815260040160405180910390fd5b5f898152600a6020526040812080548a919083906112f69084906126ab565b91829055505f8c81526008602052604090204290559150506001600160a01b03881633604080518d8152602081018d90529081018a9052606081018490526001600160a01b0391909116907f81e2388a9870cf1e51097c818ad378f1cd491b64c437b06c4e354f6f868dd6e09060800160405180910390a350505050505050505050565b61138261197e565b610db35f611ca1565b61139361197e565b6001600160a01b0382165f81815260056020908152604091829020805460ff191685151590811790915591519182527fa023931582d6fb575a6cf36394701787cc71b39dc84ae891b31727c8b777ade591016108c7565b6113f261197e565b610db3611d11565b61140261197e565b600280546001600160a01b0319166001600160a01b03831690811790915560405133907f13abd3fce076a01d6a465ae881df315c159220f02b0030e56f07779bfd31cbba905f90a350565b848314158061145c5750848114155b1561147a5760405163abac5cb960e01b815260040160405180910390fd5b5f5b858110156114e8576114e08787838181106114995761149961272e565b905060200201358686848181106114b2576114b261272e565b905060200201358585858181106114cb576114cb61272e565b90506020020160208101906104b891906122d7565b60010161147c565b50505050505050565b6114f961197e565b6002805464ffffffffff60a01b1916600160a01b64ffffffffff8416021790553360405164ffffffffff831681526001600160a01b0391909116907f81676673bcf9564b38909ca1083333b5d53837f42b97449d9fb9d3ed34a33b6190602001610e1e565b61156661197e565b6001600160a01b0382165f81815260066020908152604091829020805460ff191685151590811790915591519182527fe6d0014afe3799ee7a4480917a3acf21b9344cec1e248ad6d4acf474f3cac87591016108c7565b5f5b81811015610f89576116db8383838181106115dc576115dc61272e565b90506020028101906115ee9190612742565b358484848181106116015761160161272e565b90506020028101906116139190612742565b602001358585858181106116295761162961272e565b905060200281019061163b9190612742565b61164c9060608101906040016122d7565b86868681811061165e5761165e61272e565b90506020028101906116709190612742565b606001358787878181106116865761168661272e565b90506020028101906116989190612742565b6116a6906080810190612760565b8989898181106116b8576116b861272e565b90506020028101906116ca9190612742565b6103b49060c081019060a0016127a2565b6001016115bf565b6116eb61197e565b6001600160a01b03811661171957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61172281611ca1565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156117695750825b90505f826001600160401b031660011480156117845750303b155b905081158015611792575080155b156117b05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156117da57845460ff60401b1916600160401b1785555b5f80546001600160a01b03199081166001600160a01b038b81169190911790925560018054909116898316178155600280549289166001600160c81b03199093169290921761278d60a81b1764ffffffffff60c81b19166102a360cf1b17909155604080518082018252600d81526c12d2541393d111549155d05491609a1b60209182015281518083018352928352603160f81b9281019290925280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f928101929092527fac91799c9c9ed0413248d8004348cfef0d4495627ec0716f613a64680b0811a7908201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f19818403018152919052805160209091012060035561191d89611d59565b611925611d6a565b61192d611d72565b831561197357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b336119b07f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610db35760405163118cdaa760e01b8152336004820152602401611710565b5f8051602061281d8339815191525460ff1615610db35760405163d93c066560e01b815260040160405180910390fd5b5f805f80611a178686611d82565b925092509250611a278282611dcb565b5090949350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611a8b908590611e83565b50505050565b611a99611eef565b5f8051602061281d833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b6a5f805160206127fd833981519152546001600160a01b031690565b6001600160a01b031614155b15610db35760405163703e46dd60e11b815260040160405180910390fd5b61172261197e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bf6575060408051601f3d908101601f19168201909252611bf3918101906127bb565b60015b611c1e57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611710565b5f805160206127fd8339815191528114611c4e57604051632a87526960e21b815260048101829052602401611710565b610f898383611f1e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610db35760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611d196119d9565b5f8051602061281d833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611ad2565b611d61611f73565b61172281611fbc565b610db3611f73565b611d7a611f73565b610db3611fc4565b5f805f8351604103611db9576020840151604085015160608601515f1a611dab88828585611fe4565b955095509550505050611dc4565b505081515f91506002905b9250925092565b5f826003811115611dde57611dde6127d2565b03611de7575050565b6001826003811115611dfb57611dfb6127d2565b03611e195760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115611e2d57611e2d6127d2565b03611e4e5760405163fce698f760e01b815260048101829052602401611710565b6003826003811115611e6257611e626127d2565b03610e44576040516335e2f38360e21b815260048101829052602401611710565b5f8060205f8451602086015f885af180611ea2576040513d5f823e3d81fd5b50505f513d91508115611eb9578060011415611ec6565b6001600160a01b0384163b155b15611a8b57604051635274afe760e01b81526001600160a01b0385166004820152602401611710565b5f8051602061281d8339815191525460ff16610db357604051638dfc202b60e01b815260040160405180910390fd5b611f27826120ac565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611f6b57610f89828261210f565b610e44612181565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610db357604051631afcd79f60e31b815260040160405180910390fd5b6116eb611f73565b611fcc611f73565b5f8051602061281d833981519152805460ff19169055565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561201d57505f915060039050826120a2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561206e573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661209957505f9250600191508290506120a2565b92505f91508190505b9450945094915050565b806001600160a01b03163b5f036120e157604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611710565b5f805160206127fd83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161212b91906127e6565b5f60405180830381855af49150503d805f8114612163576040519150601f19603f3d011682016040523d82523d5f602084013e612168565b606091505b50915091506121788583836121a0565b95945050505050565b3415610db35760405163b398979f60e01b815260040160405180910390fd5b6060826121b5576121b0826121ff565b6121f8565b81511580156121cc57506001600160a01b0384163b155b156121f557604051639996b31560e01b81526001600160a01b0385166004820152602401611710565b50805b9392505050565b80511561220f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f8060408385031215612239575f80fd5b50508035926020909101359150565b5f60208284031215612258575f80fd5b5035919050565b6001600160a01b0381168114611722575f80fd5b5f8060408385031215612284575f80fd5b823561228f8161225f565b9150602083013580151581146122a3575f80fd5b809150509250929050565b5f805f606084860312156122c0575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156122e7575f80fd5b81356121f88161225f565b80356001600160401b0381168114612308575f80fd5b919050565b5f805f805f805f60c0888a031215612323575f80fd5b8735965060208801359550604088013561233c8161225f565b94506060880135935060808801356001600160401b0381111561235d575f80fd5b8801601f81018a1361236d575f80fd5b80356001600160401b03811115612382575f80fd5b8a6020828401011115612393575f80fd5b602091909101935091506123a960a089016122f2565b905092959891949750929550565b5f602082840312156123c7575f80fd5b813564ffffffffff811681146121f8575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612400575f80fd5b823561240b8161225f565b915060208301356001600160401b03811115612425575f80fd5b8301601f81018513612435575f80fd5b80356001600160401b0381111561244e5761244e6123db565b604051601f8201601f19908116603f011681016001600160401b038111828210171561247c5761247c6123db565b604052818152828201602001871015612493575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f8083601f8401126124c2575f80fd5b5081356001600160401b038111156124d8575f80fd5b6020830191508360208260051b85010111156124f2575f80fd5b9250929050565b5f806020838503121561250a575f80fd5b82356001600160401b0381111561251f575f80fd5b61252b858286016124b2565b90969095509350505050565b5f805f60608486031215612549575f80fd5b833592506020840135915060408401356125628161225f565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f805f80606087890312156125b7575f80fd5b86356001600160401b038111156125cc575f80fd5b6125d889828a016124b2565b90975095505060208701356001600160401b038111156125f6575f80fd5b61260289828a016124b2565b90955093505060408701356001600160401b03811115612620575f80fd5b61262c89828a016124b2565b979a9699509497509295939492505050565b5f805f8060808587031215612651575f80fd5b843561265c8161225f565b9350602085013561266c8161225f565b9250604085013561267c8161225f565b9150606085013561268c8161225f565b939692955090935050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561086657610866612697565b5f602082840312156126ce575f80fd5b81516121f88161225f565b8181038181111561086657610866612697565b9687526020870195909552604086019390935260608501919091526001600160a01b031660808401526001600160401b031660a083015260c082015260e00190565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112612756575f80fd5b9190910192915050565b5f808335601e19843603018112612775575f80fd5b8301803591506001600160401b0382111561278e575f80fd5b6020019150368190038213156124f2575f80fd5b5f602082840312156127b2575f80fd5b6121f8826122f2565b5f602082840312156127cb575f80fd5b5051919050565b634e487b7160e01b5f52602160045260245ffd5b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a264697066735822122046589d1a26eb35ab10496285104ff748f6e04b32720d98a19fd5abe0c9bfcc3864736f6c634300081a0033