202.9k txs
160.4k calls
constructor
constructor(address owner)
functions
calculateGiftCodeHash
purefunction calculateGiftCodeHash(string code) pure returns (bytes32)
EXPIRY_TIME
viewfunction EXPIRY_TIME() view returns (uint256)
GAS_PAYMENT
viewfunction GAS_PAYMENT() view returns (uint128)
gifts
viewfunction gifts(bytes32 giftCodeHash) view returns (address token, address creator, uint128 tokenAmount, uint128 nativeAmount, uint128 gasPayment, uint8 status, uint96 expiry)
isOperator
viewfunction isOperator(address) view returns (bool)
MAX_CODE_LENGTH
viewfunction MAX_CODE_LENGTH() view returns (uint256)
MAX_EXPIRY_TIME
viewfunction MAX_EXPIRY_TIME() view returns (uint256)
MAX_GAS_PAYMENT
viewfunction MAX_GAS_PAYMENT() view returns (uint256)
MAX_TOKEN_TRANSFER_GAS_LIMIT
viewfunction MAX_TOKEN_TRANSFER_GAS_LIMIT() view returns (uint256)
MIN_EXPIRY_TIME
viewfunction MIN_EXPIRY_TIME() view returns (uint256)
MIN_NATIVE_TRANSFER_GAS_LIMIT
viewfunction MIN_NATIVE_TRANSFER_GAS_LIMIT() view returns (uint256)
NATIVE_TRANSFER_GAS_LIMIT
viewfunction NATIVE_TRANSFER_GAS_LIMIT() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
TOKEN_TRANSFER_GAS_LIMIT
viewfunction TOKEN_TRANSFER_GAS_LIMIT() view returns (uint256)
totalGasFeeClaimableByPCS
viewfunction totalGasFeeClaimableByPCS() view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
batchCancelGift
nonpayablefunction batchCancelGift(bytes32[] codeHashList) returns (bytes[])
batchClaimGift
nonpayablefunction batchClaimGift(tuple[] params) returns (bytes[])
cancelGift
nonpayablefunction cancelGift(bytes32 codeHash)
claimGift
nonpayablefunction claimGift(string code, address to)
collectGasFee
nonpayablefunction collectGasFee(address to)
createGift
payablefunction createGift(bytes32 codeHash, address token, uint128 tokenAmount, uint128 nativeAmount) payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setGasPayment
nonpayablefunction setGasPayment(uint128 newGasPayment)
setMaxCodeLength
nonpayablefunction setMaxCodeLength(uint256 newMaxCodeLength)
setNativeTransferGasLimit
nonpayablefunction setNativeTransferGasLimit(uint256 newNativeTransferGasLimit)
setOperator
nonpayablefunction setOperator(address operator, bool isOperatorOrNot)
setTokenTransferGasLimit
nonpayablefunction setTokenTransferGasLimit(uint256 newTokenTransferGasLimit)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateExpiryTime
nonpayablefunction updateExpiryTime(uint256 newExpiryTime)
events
CollectGasFee
event CollectGasFee(address to, uint256 amount)
GiftCancelError
event GiftCancelError(bytes32 indexed codeHash, bytes reason)
GiftCancelled
event GiftCancelled(bytes32 indexed codeHash)
GiftClaimed
event GiftClaimed(bytes32 indexed codeHash, address indexed to)
GiftClaimError
event GiftClaimError(bytes32 indexed codeHash, address indexed to, bytes reason)
GiftCreated
event GiftCreated(bytes32 indexed codeHash, address indexed creator, address indexed token, uint128 tokenAmount, uint128 nativeAmount, uint128 gasPayment, uint128 expiry)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
UpdateCodeLength
event UpdateCodeLength(uint256 newMaxCodeLength)
UpdateExpiryTime
event UpdateExpiryTime(uint256 newExpiryTime)
UpdateGasPayment
event UpdateGasPayment(uint256 newGasPayment)
UpdateNativeTransferGasLimit
event UpdateNativeTransferGasLimit(uint256 newNativeTransferGasLimit)
UpdateOperator
event UpdateOperator(address indexed operator, bool isOperatorOrNot)
UpdateTokenTransferGasLimit
event UpdateTokenTransferGasLimit(uint256 newTokenTransferGasLimit)
errors
AlreadyExpired
error AlreadyExpired()
CodeLengthTooLong
error CodeLengthTooLong()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
GiftAlreadyExists
error GiftAlreadyExists()
GiftNotClaimable
error GiftNotClaimable()
GiftNotExist
error GiftNotExist()
InvalidExpiryTime
error InvalidExpiryTime()
InvalidGasPayment
error InvalidGasPayment()
InvalidGiftAmount
error InvalidGiftAmount()
InvalidNativeAmount
error InvalidNativeAmount()
InvalidNativeTransferGasLimit
error InvalidNativeTransferGasLimit()
InvalidTokenAmount
error InvalidTokenAmount()
InvalidTokenFeeOnTransfer
error InvalidTokenFeeOnTransfer()
InvalidTokenTransferGasLimit
error InvalidTokenTransferGasLimit()
NativeTransferFailed
error NativeTransferFailed()
NotExpired
error NotExpired()
NotGiftCreatorOrOperator
error NotGiftCreatorOrOperator()
NotOperator
error NotOperator()
NotOperatorOrSelf
error NotOperatorOrSelf()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
TokenTransferFailed
error TokenTransferFailed()
ZeroAddress
error ZeroAddress()
creation bytecode
0x6080346100f757601f61279438819003918201601f19168301916001600160401b038311848410176100fb578084926020946040528339810103126100f757516001600160a01b038116908190036100f75780156100e457600180546001600160a01b03199081169091555f80549182168317815560405192916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3604060035562093a80600455600580546001600160801b0319166544364c5bb000179055610fbd6007556201388060085561268490816101108239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630a5ec8cc14611f405780630b66e16714611f05578063167c421a14611c3b5780631c864ca714611b595780633f4ba83a14611a9b578063448a9e5014611a31578063461749e3146119945780634b602282146119595780634cb1e341146118b35780634d1532cc14611813578063558a729714611745578063593618c31461170a5780635c975abb146116c7578063672f16061461168c5780636d70f7ae14611624578063715018a61461156257806379ba50971461145a5780637be7bb2e1461141e5780637f704640146113d15780638456cb59146113285780638da5cb5b146112d85780638eb932b8146111785780639904ec9c1461113d578063a10e10cd14610afa578063cc3adfdc14610a4a578063cc99c49414610726578063da138e1214610609578063e0c3587d146105c9578063e11b9f1c14610350578063e30c3978146102ff578063e363c4e3146102c4578063ed8d6c8f1461028a578063f28f9e48146102505763f2fde38b1461018f575f80fd5b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff6101db611fdc565b6101e36123a7565b16807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff5f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206040516108fc8152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020604051610e108152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020604051629896808152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760043567ffffffffffffffff811161024c5761039f903690600401612050565b90335f52600260205260ff60405f205416156105a1576103be826121c7565b905f5b8381106103da57604051806103d685826120c4565b0390f35b6103ee6103e88286856122f5565b80612335565b919061040660206104008489886122f5565b01612386565b90303b1561024c578360645f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60019873ffffffffffffffffffffffffffffffffffffffff60405198899788967fcc99c4940000000000000000000000000000000000000000000000000000000088526040600489015281604489015288880137888784880101521660248501520116810103018183305af19081610591575b5061058c576104b661226a565b806104c183876122c7565b526104cc82866122c7565b506104db6103e88388876122f5565b610520602060405183819483830196873781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612141565b5190207f66759d6c643c300c89939e939bafbc9c860c3e9a96c7d1e6577e1ab549037d2d61058273ffffffffffffffffffffffffffffffffffffffff61056c6020610400888d8c6122f5565b1693604051918291602083526020830190612081565b0390a35b016103c1565b610586565b5f61059b91612141565b866104a9565b7f7c214f04000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020604051670de0b6b3a76400008152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576004355f52600960205260405f2073ffffffffffffffffffffffffffffffffffffffff81541673ffffffffffffffffffffffffffffffffffffffff600183015416600360028401549301549260ff8460801c169160405193845260208401526fffffffffffffffffffffffffffffffff8116604084015260801c60608301526fffffffffffffffffffffffffffffffff8316608083015260048110156106f95760e0926bffffffffffffffffffffffff9160a084015260881c1660c0820152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760043567ffffffffffffffff811161024c57610775903690600401612022565b9061077e611fff565b906107876123c7565b61078f612617565b335f52600260205260ff60405f2054161580610a40575b610a185773ffffffffffffffffffffffffffffffffffffffff82169283156109f05760035481116109c857610816602060405183819483830196873781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612141565b51902090815f52600960205260405f2060038101805460ff8160801c1660048110156106f9576001810361097357506bffffffffffffffffffffffff429160881c161061094b577002000000000000000000000000000000007fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff82541617905560028101906fffffffffffffffffffffffffffffffff8254168381610923575b5050505460801c908161090f575b50507f360aefe28e0ec1a42bc00890806c72a6348292e4731061ed8cba2f91ed04623a5f80a35f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b61091c91600754916125d0565b82806108c4565b73ffffffffffffffffffffffffffffffffffffffff61094393541661243b565b8480836108b6565b7fa0d64f8a000000000000000000000000000000000000000000000000000000005f5260045ffd5b156109a0577f15a3c792000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0bcef1df000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fda30d369000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4f782a4f000000000000000000000000000000000000000000000000000000005f5260045ffd5b50303314156107a6565b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57600435610a846123a7565b610e1081108015610aed575b610ac5576020817fbf21aea560a53fe85e22e5088bc44f8300281cdcbfcb85f94b919e9ab8bd919592600455604051908152a1005b7f98e71feb000000000000000000000000000000000000000000000000000000005f5260045ffd5b506301e133808111610a90565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57600435610b2f611fff565b90604435906fffffffffffffffffffffffffffffffff821680920361024c57606435926fffffffffffffffffffffffffffffffff841680850361024c57610b74612617565b610b7c6123c7565b8315948580611135575b61110d57835f52600960205260405f20600381019360ff855460801c1660048110156106f9576110e5576fffffffffffffffffffffffffffffffff6005541684016fffffffffffffffffffffffffffffffff81116110b8576fffffffffffffffffffffffffffffffff1634036110905773ffffffffffffffffffffffffffffffffffffffff169687610ebe5715610e96576001915b7001000000000000000000000000000000007fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff865416178555877fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782556002820190877fffffffffffffffffffffffffffffffff000000000000000000000000000000008354161782556fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b1691161790556fffffffffffffffffffffffffffffffff8060055416167fffffffffffffffffffffffffffffffff000000000000000000000000000000008554161784550173ffffffffffffffffffffffffffffffffffffffff33167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610d70600454426122e8565b916bffffffffffffffffffffffff8311610e655790816bffffffffffffffffffffffff9392547fffffff000000000000000000000000ffffffffffffffffffffffffffffffffff7cffffffffffffffffffffffff00000000000000000000000000000000008560881b1691161790556fffffffffffffffffffffffffffffffff6005541690610e01826006546122e8565b600655604051958652602086015260408501521660608301527f19d85777dfbd1e4086a91d123a5a931445bdb219ff182c3cc7f409fc78ca1d4860803393a45f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b827f6dfcc650000000000000000000000000000000000000000000000000000000005f52606060045260245260445ffd5b7f21607339000000000000000000000000000000000000000000000000000000005f5260045ffd5b610e96576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526020816024818b5afa90811561101f575f9161105e575b5060205f6064600854828c604051927f23b872dd0000000000000000000000000000000000000000000000000000000084523360048501523060248501528d6044850152f180601f3d1160015f5114161516611052575b1561102a57604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024818c5afa801561101f5788925f91610fe6575b5090610fb1916122db565b03610fbe57600191610c1b565b7ff96be7e1000000000000000000000000000000000000000000000000000000005f5260045ffd5b919250506020813d602011611017575b8161100360209383612141565b8101031261024c5751879190610fb1610fa6565b3d9150610ff6565b6040513d5f823e3d90fd5b7f045c4b02000000000000000000000000000000000000000000000000000000005f5260045ffd5b503d883b151715610f5c565b90506020813d602011611088575b8161107960209383612141565b8101031261024c575188610f05565b3d915061106c565b7f44e8bd2c000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fc20f3d8a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f77573380000000000000000000000000000000000000000000000000000000005f5260045ffd5b508115610b86565b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020600854604051908152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760043567ffffffffffffffff811161024c576111c7903690600401612050565b335f52600260205260ff60405f205416156105a1576111e5816121c7565b905f5b8181106111fd57604051806103d685826120c4565b61120881838661222d565b3590303b1561024c57600191604051907f167c421a00000000000000000000000000000000000000000000000000000000825260048201525f8160248183305af190816112c8575b506112c35761125d61226a565b8061126883876122c7565b5261127382866122c7565b507f087732728035173f66fb7bbb22ac5d8aa446883d9915d947c8b25ad949ca39bf6112b96112a384878a61222d565b3592604051918291602083526020830190612081565b0390a25b016111e8565b6112bd565b5f6112d291612141565b86611250565b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761135e6123a7565b611366612617565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff60015416176001557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206fffffffffffffffffffffffffffffffff60055416604051908152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760206040516301e133808152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c573373ffffffffffffffffffffffffffffffffffffffff6001541603611536577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001555f54337fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f5573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576115986123a7565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001555f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5773ffffffffffffffffffffffffffffffffffffffff611670611fdc565b165f526002602052602060ff60405f2054166040519015158152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020600654604051908152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57602060ff60015460a01c166040519015158152f35b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020600754604051908152f35b3461024c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5761177c611fdc565b6024359081151580920361024c5773ffffffffffffffffffffffffffffffffffffffff906117a86123a7565b169081156109f05760207f2ee52be9d342458b3d25e07faada7ff9bc06723b4aa24edb6321ac1316b8a9dd91835f526002825260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a2005b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c5760043567ffffffffffffffff811161024c576118646020913690600401612022565b6118a88360405183819483830196873781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612141565b519020604051908152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576118ea611fdc565b6118f26123a7565b73ffffffffffffffffffffffffffffffffffffffff81169081156109f057600654918215611090578261194c7f5daa7a9d424c1e745acb32312133a5399318394c4d50b2dfc1687be2cb84575e946040945f600655612608565b82519182526020820152a1005b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020600454604051908152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576004356119ce6123a7565b629896808111611a09576020817fcf0ae3b7542ad1d0bd5b17ecd803da90352cd2ad1a0bbcc17139fdba0108b7d492600855604051908152a1005b7f809cb799000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c577f8a99aa75647882cc6f478cfe70b8129ece7ddf03b0988de9ad8e5940acceec396020600435611a8e6123a7565b80600355604051908152a1005b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57611ad16123a7565b60015460ff8160a01c1615611b31577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff166001557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576004356fffffffffffffffffffffffffffffffff811680910361024c57611bad6123a7565b670de0b6b3a76400008111611c13576020817f48d59477abcdcc8439a62680dae11a9f35158cffeef2a8f72394ef4523f5d093927fffffffffffffffffffffffffffffffff000000000000000000000000000000006005541617600555604051908152a1005b7fe5a3c622000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57600435611c756123c7565b805f52600960205260405f2073ffffffffffffffffffffffffffffffffffffffff600182015416338114918215808091611eee575b80611ee4575b611ebc57600382019081549060ff8260801c1660048110156106f957600181036109735750611e76575b507003000000000000000000000000000000007fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff82541617905560028101906fffffffffffffffffffffffffffffffff82541680611db3575b50505460801c9182611d8a575b837fb5801e43d9b9905b116988e1e59c5ddba7765582f4de93c93c33430192f3851e5f80a25f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b15611da15790611d9991612608565b818080611d40565b611dae91600754916125d0565b611d99565b838515611e5157505073ffffffffffffffffffffffffffffffffffffffff90541660205f60446fffffffffffffffffffffffffffffffff855416604051907fa9059cbb000000000000000000000000000000000000000000000000000000008252876004830152602482015282855af19081601f3d1160015f5114161516611e44575b501561102a575b8480611d33565b3b153d1715905085611e36565b73ffffffffffffffffffffffffffffffffffffffff611e7193541661243b565b611e3d565b6bffffffffffffffffffffffff429160881c1611611e945785611cda565b7fd0404f85000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7a2332f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b5030331415611cb0565b50335f52600260205260ff60405f20541615611caa565b3461024c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c576020600354604051908152f35b3461024c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024c57600435611f7a6123a7565b6108fc8110611fb4576020817f2b866b25c0bc9ec791d84eb350cb3507b63af30a445eceeb3069fcfd2c910ddb92600755604051908152a1005b7ffd9bc7b6000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361024c57565b9181601f8401121561024c5782359167ffffffffffffffff831161024c576020838186019501011161024c57565b9181601f8401121561024c5782359167ffffffffffffffff831161024c576020808501948460051b01011161024c57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602081016020825282518091526040820191602060408360051b8301019401925f915b8383106120f657505050505090565b9091929394602080612132837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951612081565b970193019301919392906120e7565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761218257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116121825760051b60200190565b906121d1826121af565b6121de6040519182612141565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220c82946121af565b01905f5b82811061221c57505050565b806060602080938501015201612210565b919081101561223d5760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3d156122c2573d9067ffffffffffffffff821161218257604051916122b760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612141565b82523d5f602084013e565b606090565b805182101561223d5760209160051b010190565b919082039182116110b857565b919082018092116110b857565b919081101561223d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561024c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561024c570180359067ffffffffffffffff821161024c5760200191813603831361024c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361024c5790565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361153657565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6124135760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9073ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff604051927f70a082310000000000000000000000000000000000000000000000000000000084521690816004840152602083602481875afa92831561101f575f9361259c575b5060205f60446008548285604051927fa9059cbb0000000000000000000000000000000000000000000000000000000084528860048501528b6024850152f19081601f3d1160015f511416151661258f575b501561102a576020906024604051809581937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa801561101f575f9061255b575b61255492506122db565b03610fbe57565b506020823d602011612587575b8161257560209383612141565b8101031261024c57612554915161254a565b3d9150612568565b3b153d171590505f612501565b9092506020813d6020116125c8575b816125b860209383612141565b8101031261024c5751915f6124af565b3d91506125ab565b5f92839283928392f1156125e057565b7ff4b3b1bc000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80809381935af1156125e057565b60ff60015460a01c1661262657565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffdfea26469706673582212205841e55505e5de367fcb0ffb6597ef5599090d62b52aa8a94046f32da131ee4e64736f6c634300081a0033000000000000000000000000b134367c0e447d7de9bd50e55762c190c678ffea