0 txs
1 call
constructor
constructor(address _paymentToken, address _saleToken, uint256 _startTime, uint256 _endTime)
functions
addressPromoCodeDiscountPercentage
viewfunction addressPromoCodeDiscountPercentage() view returns (uint8)
addressPromoCodePercentage
viewfunction addressPromoCodePercentage() view returns (uint8)
allPromoCodes
viewfunction allPromoCodes(uint256) view returns (string)
baseOwnerPercentage
viewfunction baseOwnerPercentage() view returns (uint8)
casher
viewfunction casher() view returns (address)
checkTierWhitelist
viewfunction checkTierWhitelist(string _tierId, address user, bytes32[] merkleProof, uint256 allocation) view returns (bool)
claimRewardsEnabled
viewfunction claimRewardsEnabled() view returns (bool)
codePurchaseAmount
viewfunction codePurchaseAmount(string) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
endTime
viewfunction endTime() view returns (uint256)
funder
viewfunction funder() view returns (address)
getAllPromoCodeInfo
viewfunction getAllPromoCodeInfo(uint256 fromIdx, uint256 toIdx) view returns (tuple[])
getAllPromoCodes
viewfunction getAllPromoCodes(uint256 fromIdx, uint256 toIdx) view returns (string[])
getAllTierIds
viewfunction getAllTierIds() view returns (string[])
getOwnerPromoCodes
viewfunction getOwnerPromoCodes(address owner) view returns (string[])
getPromoCodeLength
viewfunction getPromoCodeLength() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasCashed
viewfunction hasCashed() view returns (bool)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hasWithdrawn
viewfunction hasWithdrawn(address) view returns (bool)
masterOwnerPercentage
viewfunction masterOwnerPercentage() view returns (uint8)
MAX_BASE_OWNER_PERCENTAGE
viewfunction MAX_BASE_OWNER_PERCENTAGE() view returns (uint8)
MAX_BONUS_PERCENTAGE
viewfunction MAX_BONUS_PERCENTAGE() view returns (uint8)
MAX_MASTER_OWNER_PERCENTAGE
viewfunction MAX_MASTER_OWNER_PERCENTAGE() view returns (uint8)
maxPaymentReceivedPerUser
viewfunction maxPaymentReceivedPerUser() view returns (uint256)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
owner
viewfunction owner() view returns (address)
ownerPromoCodes
viewfunction ownerPromoCodes(address, uint256) view returns (string)
paymentReceivedFromUser
viewfunction paymentReceivedFromUser(address) view returns (uint256)
paymentToken
viewfunction paymentToken() view returns (address)
promoCodes
viewfunction promoCodes(string) view returns (uint8 discountPercentage, address promoCodeOwnerAddress, address masterOwnerAddress, uint256 promoCodeOwnerEarnings, uint256 masterOwnerEarnings, uint256 totalPurchased, uint8 baseOwnerPercentageOverride, uint8 masterOwnerPercentageOverride)
purchasedAmountPerTier
viewfunction purchasedAmountPerTier(string, address) view returns (uint256)
renounceOwnership
purefunction renounceOwnership() pure
saleAmount
viewfunction saleAmount() view returns (uint256)
saleToken
viewfunction saleToken() view returns (address)
saleTokenPurchasedByTier
viewfunction saleTokenPurchasedByTier(string) view returns (uint256)
startTime
viewfunction startTime() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tierIds
viewfunction tierIds(uint256) view returns (string)
tiers
viewfunction tiers(string) view returns (uint256 price, uint256 maxTotalPurchasable, uint256 maxAllocationPerWallet, uint8 bonusPercentage, bytes32 whitelistRootHash, bool isHalt, bool allowPromoCode, bool allowWalletPromoCode, uint256 startTime, uint256 endTime, bool requireSignature)
totalPaymentReceived
viewfunction totalPaymentReceived() view returns (uint256)
totalRewardsUnclaimed
viewfunction totalRewardsUnclaimed() view returns (uint256)
validateWalletPromoCode
viewfunction validateWalletPromoCode(address promoCodeAddress) view returns (bool)
withdrawDelay
viewfunction withdrawDelay() view returns (uint24)
withdrawerCount
viewfunction withdrawerCount() view returns (uint32)
addOperator
nonpayablefunction addOperator(address operator)
addPromoCode
nonpayablefunction addPromoCode(string _code, uint8 _discountPercentage, address _promoCodeOwnerAddress, address _masterOwnerAddress, uint8 _baseOwnerPercentageOverride, uint8 _masterOwnerPercentageOverride)
cash
nonpayablefunction cash()
cashAllPaymentToken
nonpayablefunction cashAllPaymentToken()
cashPaymentToken
nonpayablefunction cashPaymentToken(uint256 amount)
emergencyTokenRetrieve
nonpayablefunction emergencyTokenRetrieve(address token)
fund
nonpayablefunction fund(uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
limitedPurchaseInTierWithCode
nonpayablefunction limitedPurchaseInTierWithCode(string _tierId, uint256 _amount, string _promoCode, address _walletPromoCode)
removeOperator
nonpayablefunction removeOperator(address operator)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeCashPaymentToken
nonpayablefunction safeCashPaymentToken()
setCasher
nonpayablefunction setCasher(address _casher)
setFunder
nonpayablefunction setFunder(address _funder)
setTier
nonpayablefunction setTier(string _tierId, uint256 _price, uint256 _maxTotalPurchasable, uint256 _maxAllocationPerWallet, bytes32 _whitelistRootHash, uint8 _bonusPercentage, bool _isHalt, bool _allowPromoCode, bool _allowWalletPromoCode, uint256 _startTime, uint256 _endTime, bool requireSignature)
setWithdrawDelay
nonpayablefunction setWithdrawDelay(uint24 _withdrawDelay)
signedPurchaseInTierWithCode
nonpayablefunction signedPurchaseInTierWithCode(string _tierId, uint256 _amount, uint256 allocatedPayment, bytes signature, string _promoCode, address _walletPromoCode)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateAddressDiscount
nonpayablefunction updateAddressDiscount(uint8 _addressPromoCodeDiscountPercentage)
updateAddressRewards
nonpayablefunction updateAddressRewards(uint8 _addressPromoCodePercentage)
updateClaimRewardsEnabled
nonpayablefunction updateClaimRewardsEnabled(bool _claimRewardsEnabled)
updateIsHalt
nonpayablefunction updateIsHalt(string _tierId, bool _isHalt)
updateMaxAllocationPerWallet
nonpayablefunction updateMaxAllocationPerWallet(string _tierId, uint256 _maxAllocationPerWallet)
updateMaxPaymentReceivedPerUser
nonpayablefunction updateMaxPaymentReceivedPerUser(uint256 _maxPaymentReceived)
updateMaxTotalPurchasable
nonpayablefunction updateMaxTotalPurchasable(string _tierId, uint256 _maxTotalPurchasable)
updatePromoCodeDiscount
nonpayablefunction updatePromoCodeDiscount(string _promoCode, uint8 discountPercentage)
updateRewards
nonpayablefunction updateRewards(uint8 _baseOwnerPercentage, uint8 _masterOwnerPercentage)
updateWalletPromoCodeAllowance
nonpayablefunction updateWalletPromoCodeAllowance(string _tierId, bool _allowWalletPromoCode)
updateWhitelist
nonpayablefunction updateWhitelist(string _tierId, bytes32 _whitelistRootHash)
whitelistedPurchaseInTier
nonpayablefunction whitelistedPurchaseInTier(string _tierId, uint256 _amount, bytes32[] _merkleProof, uint256 _allocation, string _promoCode, address _walletPromoCode)
withdraw
nonpayablefunction withdraw()
withdrawAllPromoCodeRewards
nonpayablefunction withdrawAllPromoCodeRewards()
withdrawPromoCodeRewards
nonpayablefunction withdrawPromoCodeRewards(string _promoCode)
events
Cash
event Cash(address indexed sender, uint256 paymentTokenBalance, uint256 saleTokenBalance)
EmergencyTokenRetrieve
event EmergencyTokenRetrieve(address indexed sender, uint256 amount)
Fund
event Fund(address indexed sender, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PromoCodeAdded
event PromoCodeAdded(string code, uint8 discountPercentage, address promoCodeOwnerAddress, address masterOwnerAddress)
PurchasedInTier
event PurchasedInTier(address indexed buyer, string tierId, uint256 amount, string promoCode)
ReferralRewardWithdrawn
event ReferralRewardWithdrawn(address referrer, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetCasher
event SetCasher(address indexed casher)
SetFunder
event SetFunder(address indexed funder)
SetWithdrawDelay
event SetWithdrawDelay(uint24 indexed withdrawDelay)
Withdraw
event Withdraw(address indexed sender, uint256 amount)
errors
No errors.
creation bytecode
0x61016034620004ea57601f6200641438819003918201601f191683019291906001600160401b03841183851017620004ef578160809284926040968752833981010312620004ea57620000528162000505565b906020926200006384830162000505565b8183015160609093015160008054336001600160a01b031980831682178455865193986001600160a01b03989496919594939192909189167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08b80a36001805587811697821695888714620004a85750851562000474578242101562000430576301e1853d1983018381116200037557421115620003e1578383101562000389576312d1d76b198401848111620003755783111562000326573315620002f5573385600254161760025560c05260e05260805260a0526016549361010096600a885261012096600288526305080208610140976005895264ffffffffff19161760165580805260098252858120338252825260ff868220541615620002bc575b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299182825260098152868220338352815260ff87832054161562000280575b50505081600a541617600a55600b541617600b555191615ed993846200051b8539608051848181610adc01528181611b730152612a4c015260a051848181612055015281816136be0152613944015260c0518481816120b001528181612d6401526133c6015260e051848181610b08015281816120f70152613976015251838181610d89015281816114f4015281816135ce0152613f2601525182818161096d0152818161152601526135fd015251818181612af70152614ec50152f35b828252600981528682209033835252858120600160ff198254161790553391600080516020620063f4833981519152339280a4388080620001c2565b808052600982528581203382528252858120600160ff19825416179055333382600080516020620063f48339815191528180a462000183565b865162461bcd60e51b8152600481018b9052600a602482015269183c1810333ab73232b960b11b6044820152606490fd5b865162461bcd60e51b8152600481018b9052602260248201527f656e642074696d652068617320746f2062652077697468696e20313020796561604482015261727360f01b6064820152608490fd5b634e487b7160e01b8a52601160045260248afd5b865162461bcd60e51b8152600481018b9052602b60248201527f656e642074696d657374616d70206d757374206265206166746572207374617260448201526a0742074696d657374616d760ac1b6064820152608490fd5b865162461bcd60e51b8152600481018b9052602260248201527f73746172742074696d652068617320746f2062652077697468696e203120796560448201526130b960f11b6064820152608490fd5b865162461bcd60e51b8152600481018b9052601960248201527f73746172742074696d657374616d7020746f6f206561726c79000000000000006044820152606490fd5b865162461bcd60e51b8152600481018b9052600d60248201526c183c181039b0b632aa37b5b2b760991b6044820152606490fd5b62461bcd60e51b8152600481018b9052601860248201527f73616c65546f6b656e203d207061796d656e74546f6b656e00000000000000006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620004ea5756fe608080604052600436101561001357600080fd5b60e090600035821c90816301ffc9a714613fb7575080630288a39c14613f91578063041ae88014613f6857806306dd29e514613f4a5780630827a7e914613f0c57806309822db414613eba5780630acc8cd114613e1f5780630b54f99814613d785780630c50a4e614613d46578063161972d014613b315780631e06779b14613adb578063209e4fa214613a61578063248a9ca314613a3257806326c654821461390e5780632b5214cc146138805780632cecefaa146138115780632f285709146137ab5780632f2ff15d1461370a5780633013ce29146136e15780633197cbb6146136a657806334595ecd146136435780633506f8821461359a57806336568abe146135085780633ccfd60b146134e957806348faade4146134cb5780634bcaf4ac146134825780635057a3d81461337f57806351b292081461335e578063521779cd14612e4557806352811c4b14612d2b57806354d630ce14612d0d5780635c4039e614612b7e5780635e2c19db14612b3f57806364c88f3514612b1b5780636c0c7e8414612add578063715018a614612a9c578063738e6b1b14612a6f57806378e9792514612a3457806378eb9b4e146129f95780637dbcb6cf146129d55780637dd20946146129b2578063844bf2121461235a5780638aae995a1461233c5780638da5cb5b146123135780638f38dc88146122ca57806391d148541461227d578063961be391146120105780639830a70c14611ff25780639870d7fe14611f045780639d63f06514611edf578063a1b013bd14611e39578063a217fddf14611e1d578063a590c84e14611db6578063a7118dda14611ccd578063a736039f14611c41578063aacc557a14611b44578063ab034d3c14611aac578063ac8a584a146119ff578063b2635ca2146119db578063b59ef979146113e1578063bc26127614610e21578063c187ab8814610d64578063c30091a114610cf5578063c514ef8214610ce2578063c72cba6e14610ba3578063ca1d209d14610aa9578063cc89629b14610a80578063cd8dd5c0146109f6578063d547741f146109b5578063d6ca214d14610991578063d7d0b82c14610953578063dd6e684c14610892578063e1146fcf146106ed578063e985e367146106c4578063ed78b4a51461063a578063f2fde38b146104cc578063f5b541a6146104a3578063fca35f15146104695763fe551b051461038657600080fd5b3461046457602036600319011261046457600435906001600160401b038211610464576103d260206103bf610160943690600401614298565b81604051938285809451938492016141a6565b8101600d8152030190209081549160018101549160028201549060ff80600385015416600485015460058601549160068701549584600860078a015499015416986040519a8b5260208b015260408a015260608901526080880152818116151560a0880152818160081c16151560c088015260101c161515908501526101008401526101208301521515610140820152f35b600080fd5b34610464576020366003190112610464576001600160a01b0361048a6141ee565b16600052600f6020526020604060002054604051908152f35b34610464576000366003190112610464576020604051600080516020615e448339815191528152f35b3461046457602080600319360112610464576104e66141ee565b6104ee6148a5565b6001600160a01b039081169182156106075781600054166000805260098252604060002081600052825260ff604060002054166105cb575b506000805260098152604060002083600052815260ff604060002054161561058c575b506105526148a5565b6000548260018060a01b0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b600080526009815260406000209083600052526040600020600160ff1982541617905533826000600080516020615dc48339815191528180a482610549565b60008052600982526040600020816000528252604060002060ff19815416905533906000600080516020615e648339815191528180a483610526565b6064906040519062461bcd60e51b82526004820152600c60248201526b5a65726f206164647265737360a01b6044820152fd5b3461046457610685600161064d366143c8565b336000908152600080516020615de48339815191526020908152604090912054919492909160ff168015610696575b6103bf90614ca8565b8101600d8152030190200155600080f35b50600080516020615e448339815191526000908152600983526040808220338352845290205460ff1661067c565b3461046457600036600319011261046457600b546040516001600160a01b039091168152602090f35b3461046457600036600319011261046457610706614c52565b60165461071960ff602092831c16615a91565b33600052601481526040600020805461073181615ad1565b9161073f60405193846140df565b8183526000908152838120848085015b84841061087457508460009160005b82518110156107fb578061078d836107796107c39487615ae8565b5181604051938285809451938492016141a6565b60139082019081520301902080546001600160a01b039060081c811633146107e2575b60018201541633146107c8575b50614ce5565b61075e565b6107da60036000920196875490614779565b9555856107bd565b60006107f46002840198895490614779565b97556107b0565b7f11b92d201b630fa1e3be9af7551da6822eedc4029b693211d743cf1bf6ca969661086b8561082b811515615afc565b61083781601754614c04565b601755600a5461085390829033906001600160a01b0316614c11565b60408051338152602081019290925290918291820190565b0390a160018055005b600191829161088285614100565b815201920192019190859061074f565b34610464576040366003190112610464576004356001600160401b038111610464576108c2903690600401614298565b336000908152600080516020615de48339815191526020908152604090912054909160049160ff168015610925575b6108fa90614ca8565b8261090e60405192838151938492016141a6565b810192600d84528160243594030190200155600080f35b50600080516020615e448339815191526000908152600984526040808220338352855290205460ff166108f1565b3461046457600036600319011261046457602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461046457600036600319011261046457602063ffffffff60085416604051908152f35b34610464576040366003190112610464576109f46004356109d4614204565b908060005260096020526109ef6001604060002001546145e1565b6146ec565b005b3461046457610a04366142f0565b601554808211610a78575b50610a1b818310615d3d565b610a2d610a288383614c04565b615d79565b915b818110610a485760405180610a448582614306565b0390f35b80610a5e610a58610a739361400a565b50614100565b610a688286615ae8565b526107bd8185615ae8565b610a2f565b905082610a0f565b34610464576000366003190112610464576003546040516001600160a01b039091168152602090f35b3461046457602036600319011261046457600254600435906001600160a01b039081163303610b6a5781610b2d91610b027f000000000000000000000000000000000000000000000000000000000000000042106148fd565b309033907f000000000000000000000000000000000000000000000000000000000000000016614940565b610b3981600554614779565b6005556040519081527fda8220a878ff7a89474ccffdaa31ea1ed1ffbb0207d5051afccc4fbaf81f9bcd60203392a2005b60405162461bcd60e51b815260206004820152601160248201527031b0b63632b9103737ba10333ab73232b960791b6044820152606490fd5b34610464576000366003190112610464576003546001600160a01b0390811633148015610cd5575b610bd490614b5d565b600a54166040516370a0823160e01b81523060048201526020908181602481865afa908115610cc957600091610c9c575b506017549081811115610c5c57610c2260009392610c2b92614c04565b80943390614c11565b6040519283528201527f83205c70ca31ffcb57664adecfd9894647d48665aefae1fb38bbc7ca4c1b86fb60403392a2005b60405162461bcd60e51b81526004810184905260186024820152772737ba1032b737bab3b4103830bcb6b2b73a103a37b5b2b760411b6044820152606490fd5b90508181813d8311610cc2575b610cb381836140df565b81010312610464575183610c05565b503d610ca9565b6040513d6000823e3d90fd5b5060005481163314610bcb565b3461046457610685600261064d366143c8565b34610464576040366003190112610464576004356001600160401b03811161046457610d25903690600401614298565b610d4b602060ff610d346143a8565b610d3c6148a5565b16926103bf60648511156152ed565b810160138152030190209060ff19825416179055600080f35b3461046457602036600319011261046457610d7d614398565b610d856148a5565b60ff7f00000000000000000000000000000000000000000000000000000000000000001660ff821611610dce5762ff00006016549160101b169062ff0000191617601655600080f35b60405162461bcd60e51b815260206004820152602560248201527f496e76616c696420616464726573732070726f6d6f20636f64652070657263656044820152646e7461676560d81b6064820152608490fd5b34610464576080366003190112610464576001600160401b0360043581811161046457610e52903690600401614298565b6024918235604491823590811161046457610e71903690600401614298565b610e79614230565b9060405193855190610eae60ff60086020988981818d0197610e9c81838b6141a6565b8101600d815203019020015416615587565b601054156113a3578251158015611392575b610ec9906153d1565b6001976060988451611352575b6001600160a01b0395808716806112eb575b50896040518a818351610efc81838c6141a6565b8101600d81520301902054968c8051611286575b505050505033600052600f8752610f36604060002054610f308689614750565b90614779565b6010541061123657610f46614c52565b60405187818a51610f588183896141a6565b8101600d81520301902060ff600582015416611202576006810154421015806111f4575b156111bc57861561118b5760028101548015908115611150575b5015611112576001015480159081156110e2575b50156110b25788600080516020615e048339815191526110968a6110a98b8b6110828c6110748d611057868f610fe08489614750565b33600052600f8352610ff86040600020918254614779565b905561100f611007858a614750565b600754614779565b60075560405182818d516110248183876141a6565b8101600e8152030190203360005282526040600020611044898254614779565b9055604051809381928d519283916141a6565b8101601281520301902061106c868254614779565b905584614750565b90600a541630903390614940565b6040519485946060865260608601906141c9565b91840152828103604084015233956141c9565b0390a260018055005b600080516020615e84833981519152606492601f89936040519462461bcd60e51b86526004860152840152820152fd5b905061110a876040518a818d516110fa81838c6141a6565b8101601281520301902054614779565b11158a610faa565b60405162461bcd60e51b8152600481018990526018818401527722bc31b2b2b2103bb0b63632ba1030b63637b1b0ba34b7b760411b81850152606490fd5b905060405189818c5161116481838b6141a6565b8101600e81520301902033600052895261118388604060002054614779565b11158b610f96565b60405162461bcd60e51b815260048101899052600b818401526a0416d6f756e7420697320360ac1b81850152606490fd5b60405162461bcd60e51b8152600481018990526012818401527154696572206973206e6f742061637469766560701b81850152606490fd5b506007810154421115610f7c565b60405162461bcd60e51b815260048101899052600e818401526d151a595c881a5cc81a185b1d195960921b81850152606490fd5b7f50757263686173652065786365656473206d6178207061796d656e7420726563608492602589936040519462461bcd60e51b8652600486015284015282015264195a5d995960da1b6064820152fd5b6064919293949860ff6112a361129e6112aa94615547565b615536565b1690614750565b0496156112d0576112c692506112c08988614750565b906158a3565b898089818c610f10565b50506112e6906112e08887614750565b906157a0565b6112c6565b909a50611348915061132660ff60056113118c898f6040519384928392519283916141a6565b8101600d815203019020015460101c16615458565b611332813314156154a4565b61134361133e8c615c4b565b6154f0565b614797565b986000908b610ee8565b985061138260ff60056040518a818d5161136d81838c6141a6565b8101600d815203019020015460081c16615413565b61138b84615cf4565b8398610ed6565b506001600160a01b03841615610ec0565b857843616e277420757365206c696d69746564507572636861736560381b60649260198b6040519462461bcd60e51b86526004860152840152820152fd5b50346104645760c0366003190112610464576001600160401b0360043581811161046457611413903690600401614298565b9161141c6143a8565b906044356001600160a01b03811691908290036104645761143b614230565b9360843560ff81168103610464576114516143b8565b336000908152600080516020615de4833981519152602052604090205490959060ff1680156119b5575b61148490614ca8565b60ff6040516020818161149d8d838151938492016141a6565b8101601381520301902054161580159061197d575b61193c5760ff906114c5895115156152ac565b16956114d460648811156152ed565b84156118f8576001600160a01b0316948486146118965760ff9061151e827f0000000000000000000000000000000000000000000000000000000000000000168385161115615339565b1661154e60ff7f000000000000000000000000000000000000000000000000000000000000000016821115615385565b602a88511461184557604051611563816140a8565b87815260208101948686526040820195888752606083016000815260808401916000835260a08501936000855260c086019760ff16885285019586528c60405181818093516020819301916115b7926141a6565b601390820190815260209190030190209451855491516001600160a81b031990921660ff9091161760089190911b610100600160a81b031617845560019788850190600160a01b60019003905116600160a01b6001900319825416179055516002840155516003830155516004820155600501915160ff168254915160081b61ff00169161ffff1916171790558260005260146020528560406000209061165d91614d77565b8360005260146020528560406000209061167691614d77565b601554600160401b811015611819578083611694920160155561400a565b92909261182f578651918211611819576116ae835461406e565b601f81116117ce575b506020601f8311600114611740579180807fdeb0585f6b30ffdde9bbea238445b3ebce51812e02ac98186da1f6f6e745b0ef99979593611720999795600093611735575b501b916000199060031b1c19161790555b6040519485946080865260808601906141c9565b926020850152604084015260608301520390a1005b8901519250386116fb565b601f929192198216908460005260206000209160005b8181106117b857509183917fdeb0585f6b30ffdde9bbea238445b3ebce51812e02ac98186da1f6f6e745b0ef9a9896946117209a9896941061179f575b5050811b01905561170c565b88015160001960f88460031b161c191690553880611793565b8a83015184559285019260209283019201611756565b836000526020600020601f840160051c8101916020851061180f575b601f0160051c019082905b8281106118035750506116b7565b600081550182906117f5565b90915081906117ea565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052600060045260246000fd5b60405162461bcd60e51b815260206004820152602360248201527f416464726573732070726f6d6f20636f64657320617265206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608490fd5b60405162461bcd60e51b815260206004820152603460248201527f50726f6d6f20636f6465206f776e657220616e64206d6173746572206f776e65604482015273722063616e6e6f74206265207468652073616d6560601b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f496e76616c69642070726f6d6f20636f6465206f776e657220616464726573736044820152fd5b60405162461bcd60e51b815260206004820152601960248201527850726f6d6f20636f646520616c72656164792065786973747360381b6044820152606490fd5b506040518851611991818360208d016141a6565b601390820190815281900360200190205460081c6001600160a01b031615156114b2565b50336000908152600080516020615e24833981519152602052604090205460ff1661147b565b3461046457600036600319011261046457602060ff60165460081c16604051908152f35b346104645760208060031936011261046457611a196141ee565b611a216143f9565b600080516020615e44833981519152918260005260098152611a4a6001604060002001546145e1565b60008381526009825260408082206001600160a01b0390941680835293835290205460ff16611a7557005b82600052600981526040600020908260005252604060002060ff1981541690553391600080516020615e64833981519152600080a4005b3461046457602080600319360112610464576004358015158091036104645764ff00000000906000805260098352604060002033600052835260ff604060002054168015611b16575b611afe90614ca8565b601654921b169064ff00000000191617601655600080f35b50600080516020615e448339815191526000908152600984526040808220338352855290205460ff16611af5565b346104645760203660031901126104645760043562ffffff81169081810361046457611b6e6148a5565b611b997f000000000000000000000000000000000000000000000000000000000000000042106148fd565b6309679a36821015611bed576003805462ffffff60a01b191660a09290921b62ffffff60a01b169190911790557f0dac7b34fe917a51c24c51f379615699f5c23ce9168eaed469bc161c90028608600080a2005b60405162461bcd60e51b815260206004820152602660248201527f776974686472617744656c61792068617320746f2062652077697468696e203560448201526520796561727360d01b6064820152608490fd5b3461046457602080600319360112610464576001600160a01b03611c636141ee565b169081600052601480825260406000205491611c7e83615d79565b9360005b848110611c975760405180610a448882614306565b611cc89082600052848452611cb3610a58826040600020614056565b611cbd8289615ae8565b526107bd8188615ae8565b611c82565b3461046457610180366003190112610464576004356001600160401b03811161046457611cfe903690600401614298565b611d066143b8565b9060c4359182151583036104645760e43591821515830361046457610104358015158103610464576101643593841515850361046457336000908152600080516020615de483398151915260205260409020546109f4969060ff168015611d90575b611d7190614ca8565b6101443594610124359460843590606435906044359060243590614eac565b50336000908152600080516020615e24833981519152602052604090205460ff16611d68565b3461046457602036600319011261046457611dcf6141ee565b611dd76148a5565b600380546001600160a01b0319166001600160a01b039290921691821790557fde112653552cba8a4f696cac12b4478ce2b9b8c0e04429455a2052ec7c0412ce600080a2005b3461046457600036600319011261046457602060405160008152f35b3461046457602036600319011261046457611e52614398565b611e5a6148a5565b606460ff821611611e835763ff0000006016549160181b169063ff000000191617601655600080f35b60405162461bcd60e51b815260206004820152602e60248201527f496e76616c696420616464726573732070726f6d6f20636f646520646973636f60448201526d756e742070657263656e7461676560901b6064820152608490fd5b3461046457600036600319011261046457602060165460ff60405191831c1615158152f35b346104645760208060031936011261046457611f1e6141ee565b611f266143f9565b6001600160a01b03168015611fbb57600080516020615e44833981519152918260005260098152611f5e6001604060002001546145e1565b8260005260098152604060002082600052815260ff6040600020541615611f8157005b826000526009815260406000209082600052526040600020600160ff198254161790553391600080516020615dc4833981519152600080a4005b60405162461bcd60e51b815260048101839052600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b34610464576000366003190112610464576020601054604051908152f35b34610464576000366003190112610464576003546001600160a01b0390612080906120799062ffffff9033858216148015612270575b61204f90614b5d565b60a01c167f0000000000000000000000000000000000000000000000000000000000000000614779565b4211614ba9565b60065460ff811661223a5760ff19166001176006556040516370a0823160e01b80825230600483015290916020907f000000000000000000000000000000000000000000000000000000000000000081168285602481845afa948515610cc957600095612209575b50846120f5913390614c11565b7f000000000000000000000000000000000000000000000000000000000000000016916040519081523060048201528181602481865afa908115610cc9576000916121dc575b506000906000600c545b808210612179575050610c2b91612169916005548181106000146121725750614c04565b80933390614c11565b9050614c04565b9092612195856121888661403b565b5060405192838092614cf4565b600d81520301902054156121d2576121c66121cc916121b7876121888861403b565b60128152030190205490614779565b93614ce5565b90612145565b926121cc90614ce5565b90508181813d8311612202575b6121f381836140df565b8101031261046457518461213b565b503d6121e9565b9094508281813d8311612233575b61222181836140df565b810103126104645751936120f56120e8565b503d612217565b60405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e4818d85cda195960921b6044820152606490fd5b5060005485163314612046565b3461046457604036600319011261046457612296614204565b600435600052600960205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b34610464576020366003190112610464576004356001600160401b0381116104645761230060206103bf81933690600401614298565b8101601281520301902054604051908152f35b34610464576000366003190112610464576000546040516001600160a01b039091168152602090f35b34610464576000366003190112610464576020600554604051908152f35b346104645760c0366003190112610464576001600160401b036004358181116104645761238b903690600401614298565b906064359181831161046457366023840112156104645782600401359180831161046457366024848601011161046457608435908111610464576124936123d961249b923690600401614298565b9361248d6123e561421a565b9661240460ff600860405160208181610e9c8d838151938492016141a6565b60405160208101903360601b82524660348201523060601b60548201526124536088828a5161243b818d60206068860191016141a6565b810160443560688201520360688101845201826140df565b5190207f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c600020926024369201614261565b906156e3565b9190916155ce565b6001600160a01b03166000908152600080516020615e24833981519152602052604090205460ff1615612979578151158015612968575b6124db906153d1565b6001606093835161293a575b6001600160a01b0381166128df575b604051602081855161250b8183858a016141a6565b8101600d81520301902054938551612891575b50505033600052600f602052604060002054906024359161254660443591610f308686614750565b1161284057612553614c52565b604051602081835161256881838588016141a6565b8101600d81520301902060ff60058201541661280a576006810154421015806127fc575b156127c257821561278f5760028101548015908115612750575b5015612710576001015480159081156126ed575b50156126ba576110a98261269161267c866125e7600080516020615e04833981519152986126a598614750565b33600052600f6020526126006040600020918254614779565b905561260f6110078286614750565b60075560405160208188516126278183858d016141a6565b8101600e815203019020336000526020526040600020612648858254614779565b9055604051602081885161265f8183858d016141a6565b81016012815203019020612674858254614779565b905583614750565b600a54309033906001600160a01b0316614940565b6040519384936060855260608501906141c9565b906020840152828103604084015233956141c9565b60405162461bcd60e51b815260206004820152601f6024820152600080516020615e848339815191526044820152606490fd5b90506127088360405160208186516110fa8183858b016141a6565b1115856125ba565b60405162461bcd60e51b815260206004820152601860248201527722bc31b2b2b2103bb0b63632ba1030b63637b1b0ba34b7b760411b6044820152606490fd5b905060405160208185516127678183858a016141a6565b8101600e8152030190203360005260205261278784604060002054614779565b1115866125a6565b60405162461bcd60e51b815260206004820152600b60248201526a0416d6f756e7420697320360ac1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601260248201527154696572206973206e6f742061637469766560701b6044820152606490fd5b50600781015442111561258c565b60405162461bcd60e51b815260206004820152600e60248201526d151a595c881a5cc81a185b1d195960921b6044820152606490fd5b60405162461bcd60e51b815260206004820152602360248201527f50757263686173652065786365656473207061796d656e7420616c6c6f63617460448201526234b7b760e91b6064820152608490fd5b60646128a88593949660ff6112a361129e8b615547565b0494156128c8576128c092506112c060243586614750565b83808061251e565b50506128da906112e060243585614750565b6128c0565b9350506128fe60ff600560405160208186516113118183858b016141a6565b612913336001600160a01b03851614156154a4565b61291f61133e84615c4b565b6129316001600160a01b038416614797565b926000906124f6565b935061295860ff6005604051602081875161136d8183858c016141a6565b61296183615cf4565b82936124e7565b506001600160a01b038316156124d2565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606490fd5b3461046457600036600319011261046457602060ff600654166040519015158152f35b3461046457600036600319011261046457602060ff60165460101c16604051908152f35b34610464576109f4612a0f600561064d366142b6565b8101600d815203019020019062ff0000825491151560101b169062ff00001916179055565b346104645760003660031901126104645760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610464576020366003190112610464576020612a92612a8d6141ee565b615c4b565b6040519015158152f35b346104645760003660031901126104645760405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b6044820152606490fd5b3461046457600036600319011261046457602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461046457600036600319011261046457602060ff60165460181c16604051908152f35b34610464576020366003190112610464576001600160a01b03612b606141ee565b166000526004602052602060ff604060002054166040519015158152f35b34610464576020366003190112610464576004356001600160401b03811161046457612bae903690600401614298565b612bb6614c52565b612bc760ff60165460201c16615a91565b602a815114612cea575b6020612bea9181604051938285809451938492016141a6565b8101601381520301902060018060a01b039081815460081c16331490818015612cdb575b15612ca5577f11b92d201b630fa1e3be9af7551da6822eedc4029b693211d743cf1bf6ca96969261086b9260009015612c79575061085390600260009301908154938492555b612c5f821515615afc565b612c6b82601754614c04565b6017553390600a5416614c11565b91816001820154163314612c93575b508161085391612c54565b60030180546000909155915081612c88565b60405162461bcd60e51b815260206004820152600e60248201526d2737ba1031b7b2329037bbb732b960911b6044820152606490fd5b50826001820154163314612c0e565b50612cf761133e33615c4b565b612bea6020612d0533614797565b915050612bd1565b34610464576000366003190112610464576020601554604051908152f35b34610464576020806003193601126104645760035460043591906001600160a01b0390811633148015612e38575b612d6290614b5d565b7f0000000000000000000000000000000000000000000000000000000000000000166040516370a0823160e01b81523060048201528281602481855afa8015610cc9578491600091612e07575b5010612dc45790610c2b836000933390614c11565b6064826040519062461bcd60e51b825280600483015260248201527f4e6f20656e6f756768207061796d656e7420746f6b656e7320746f20636173686044820152fd5b809250848092503d8311612e31575b612e2081836140df565b810103126104645783905185612daf565b503d612e16565b5060005481163314612d59565b346104645760c0366003190112610464576001600160401b0360043581811161046457612e76903690600401614298565b6044803583811161046457612e8f903690600401614368565b60649291929460843590811161046457612ead903690600401614298565b612eb561421a565b91604051968651916020966004888a0194612ed1818d886141a6565b600d908c018181528c90038a01909b200154156132fe57612ef691833591338b615b34565b156132cd5760405186818951612f0d8183886141a6565b8101600e8152030190203360005286528035612f30602435604060002054614779565b1161328c575b825115801561327b575b612f49906153d1565b600197606098845161323c575b6001600160a01b0395808716806131f8575b50896040518a818351612f7c81838c6141a6565b81018781520301902054968c80516131a8575b5050505050612f9c614c52565b8660405180928a51612faf8184896141a6565b8201908152030190209460ff60058701541661317657600686015442101580613168575b156131325760243595861561310257600281015480159081156130c7575b501561308a5760010154801590811561306a575b501561303b5788600080516020615e048339815191526110968a6110a98b8b6110828c6110748d611057868f610fe08489614750565b600080516020615e8483398151915287916040519262461bcd60e51b84526004840152601f6024840152820152fd5b9050613082876040518a818d516110fa81838c6141a6565b11158a613005565b507722bc31b2b2b2103bb0b63632ba1030b63637b1b0ba34b7b760411b87916040519262461bcd60e51b8452600484015260186024840152820152fd5b905060405189818c516130db81838b6141a6565b8101600e8152030190203360005289526130fa88604060002054614779565b11158b612ff1565b506a0416d6f756e7420697320360ac1b87916040519262461bcd60e51b84526004840152600b6024840152820152fd5b7154696572206973206e6f742061637469766560701b87916040519262461bcd60e51b8452600484015260126024840152820152fd5b506007860154421115612fd3565b6d151a595c881a5cc81a185b1d195960921b87916040519262461bcd60e51b84526004840152600e6024840152820152fd5b86919293949860ff6112a361129e6131bf94615547565b0496156131e1576131d792506112c060243588614750565b898089818c612f8f565b50506131f3906112e060243587614750565b6131d7565b909a50613232915061132660ff600561321e8c898f6040519384928392519283916141a6565b810189815203019020015460101c16615458565b986000908b612f68565b985061326b60ff60056040518a818d5161325781838c6141a6565b810187815203019020015460081c16615413565b61327484615cf4565b8398612f56565b506001600160a01b03841615612f40565b60405162461bcd60e51b815260048101879052601b60248201527f5075726368617365206578636565647320616c6c6f636174696f6e000000000081870152fd5b60405162461bcd60e51b815260048101879052602481018990526c24b73b30b634b210383937b7b360991b81870152fd5b505060ff600860405188818b5161331681838a6141a6565b81018d81520301902001541615612f365760405162461bcd60e51b8152600481018790526013602482015272557365207369676e656420707572636861736560681b81870152fd5b3461046457600036600319011261046457602060ff60165416604051908152f35b34610464576000366003190112610464576003546001600160a01b0390811633148015613475575b6133b090614b5d565b6040516370a0823160e01b8152306004820152907f000000000000000000000000000000000000000000000000000000000000000016602082602481845afa918215610cc957600092613440575b508161340b913390614c11565b604051908152600060208201527f83205c70ca31ffcb57664adecfd9894647d48665aefae1fb38bbc7ca4c1b86fb60403392a2005b9091506020813d821161346d575b8161345b602093836140df565b8101031261046457519061340b6133fe565b3d915061344e565b50600054811633146133a7565b34610464576020366003190112610464576004356001600160401b038111610464576134b860206103bf81933690600401614298565b8101601181520301902054604051908152f35b34610464576000366003190112610464576020600754604051908152f35b3461046457600036600319011261046457613502614c52565b60018055005b3461046457604036600319011261046457613521614204565b336001600160a01b0382160361353d576109f4906004356146ec565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b34610464576040366003190112610464576135b3614398565b60ff6135bd6143a8565b916135c66148a5565b166135f660ff7f000000000000000000000000000000000000000000000000000000000000000016821115615339565b61362860ff7f00000000000000000000000000000000000000000000000000000000000000001660ff84161115615385565b61ff006016549260081b169161ffff19161717601655600080f35b34610464576080366003190112610464576001600160401b0360043581811161046457613674903690600401614298565b9061367d614204565b916044359182116104645760209261369c612a92933690600401614368565b9160643593615b34565b346104645760003660031901126104645760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461046457600036600319011261046457600a546040516001600160a01b039091168152602090f35b3461046457604036600319011261046457600435613726614204565b8160005260096020526137406001604060002001546145e1565b81600052600960205260406000209060018060a01b0316908160005260205260ff604060002054161561376f57005b8160005260096020526040600020816000526020526040600020600160ff198254161790553391600080516020615dc4833981519152600080a4005b3461046457602036600319011261046457600435600c5481101561046457600c600052610a44906137fd907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701614100565b6040519182916020835260208301906141c9565b3461046457602036600319011261046457336000908152600080516020615de4833981519152602052604090205460ff16801561385a575b61385290614ca8565b600435601055005b50336000908152600080516020615e24833981519152602052604090205460ff16613849565b3461046457600036600319011261046457600c5461389d81615ad1565b6138aa60405191826140df565b818152600c60009081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7929060208084015b8383106138f25760405180610a448782614306565b600182819261390089614100565b8152019601920191946138dd565b3461046457602080600319360112610464576139286141ee565b906139316148a5565b61396861207962ffffff60035460a01c167f0000000000000000000000000000000000000000000000000000000000000000614779565b6001600160a01b03918216917f0000000000000000000000000000000000000000000000000000000000000000168214610464576040516370a0823160e01b8152306004820152908082602481865afa918215610cc957600092613a01575b506139f6827fb1d34d1c064a5cb36c65797ef779e448eefccf2b978edbcfd206cc687c8cea5a93943390614c11565b6040519283523392a2005b91508082813d8311613a2b575b613a1881836140df565b81010312610464579051906139f66139c7565b503d613a0e565b346104645760203660031901126104645760043560005260096020526020600160406000200154604051908152f35b34610464576040366003190112610464576004356001600160401b03811161046457613a91903690600401614298565b613ab26020613a9e614204565b9281604051938285809451938492016141a6565b8101600e8152030190209060018060a01b03166000526020526020604060002054604051908152f35b3461046457604036600319011261046457613af46141ee565b6001600160a01b0316600090815260146020526040902080546024359081101561046457613b2191614056565b61182f576137fd610a4491614100565b503461046457613b40366142f0565b601554808211613d3e575b50613b57818310615d3d565b613b618282614c04565b91613b6b83615ad1565b92613b7960405194856140df565b808452613b88601f1991615ad1565b0160005b818110613cf0575050805b828110613c3b575050506040519060208083018184528251809152816040850193019160005b828110613bca5785850386f35b8351805160ff9081168752818401516001600160a01b039081168886015260408084015190911690880152606080830151908801526080808301519088015260a0808301519088015260c0808301518216908801529088015116878601526101009094019392810192600101613bbd565b806107bd613c5b613c4e613ceb9461400a565b5060405191828092614cf4565b60138152602092839103019020613c728685614c04565b9160405191613c80836140a8565b600581549160ff93848416865260018060a01b039081600895861c169087015260018201541660408601526002810154606086015260038101546080860152600481015460a086015201549082821660c08501521c1689820152613ce48289615ae8565b5286615ae8565b613b97565b602090604051613cff816140a8565b6000815282600081830152600060408301526000606083015260006080830152600060a0830152600060c0830152600089830152828801015201613b8c565b905038613b4b565b34610464576109f4613d5c600561064d366142b6565b8101600d815203019020019060ff801983541691151516179055565b503461046457602036600319011261046457600435906001600160401b03821161046457613db260206103bf610100943690600401614298565b810160138152030190209060ff82549260018060a01b03908160018201541660028201546003830154916005600485015494015494604051988781168a5260081c16602089015260408801526060870152608086015260a085015281811660c085015260081c1690820152f35b3461046457602036600319011261046457613e386141ee565b613e406148a5565b6001600160a01b03168015613e8857600280546001600160a01b031916821790557f73e0366d7ceb5a21fb27f8b2aa2720e2a9dee755bd85bfb5dbccf2830753b022600080a2005b60405162461bcd60e51b815260206004820152600a602482015269183c1810333ab73232b960b11b6044820152606490fd5b3461046457602036600319011261046457600435601554811015610464576015600052610a44906137fd907f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47501614100565b3461046457600036600319011261046457602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610464576000366003190112610464576020601754604051908152f35b34610464576000366003190112610464576002546040516001600160a01b039091168152602090f35b3461046457600036600319011261046457602062ffffff60035460a01c16604051908152f35b34610464576020366003190112610464576004359063ffffffff60e01b821680920361046457602091637965db0b60e01b8114908115613ff9575b5015158152f35b6301ffc9a760e01b14905083613ff2565b60155481101561402557601560005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b600c5481101561402557600c60005260206000200190600090565b80548210156140255760005260206000200190600090565b90600182811c9216801561409e575b602083101461408857565b634e487b7160e01b600052602260045260246000fd5b91607f169161407d565b61010081019081106001600160401b0382111761181957604052565b608081019081106001600160401b0382111761181957604052565b90601f801991011681019081106001600160401b0382111761181957604052565b90604051918260008254926141148461406e565b9081845260019485811690816000146141835750600114614140575b505061413e925003836140df565b565b9093915060005260209081600020936000915b81831061416b57505061413e93508201013880614130565b85548884018501529485019487945091830191614153565b91505061413e94506020925060ff191682840152151560051b8201013880614130565b60005b8381106141b95750506000910152565b81810151838201526020016141a9565b906020916141e2815180928185528580860191016141a6565b601f01601f1916010190565b600435906001600160a01b038216820361046457565b602435906001600160a01b038216820361046457565b60a435906001600160a01b038216820361046457565b606435906001600160a01b038216820361046457565b6001600160401b03811161181957601f01601f191660200190565b92919261426d82614246565b9161427b60405193846140df565b829481845281830111610464578281602093846000960137010152565b9080601f83011215610464578160206142b393359101614261565b90565b604060031982011261046457600435906001600160401b038211610464576142e091600401614298565b9060243580151581036104645790565b6040906003190112610464576004359060243590565b602080820190808352835180925260408301928160408460051b8301019501936000915b84831061433a5750505050505090565b9091929394958480614358600193603f198682030187528a516141c9565b980193019301919493929061432a565b9181601f84011215610464578235916001600160401b038311610464576020808501948460051b01011161046457565b6004359060ff8216820361046457565b6024359060ff8216820361046457565b60a4359060ff8216820361046457565b604060031982011261046457600435906001600160401b038211610464576143f291600401614298565b9060243590565b336000908152600080516020615de4833981519152602090815260408083205490929060ff161561442957505050565b61443233614797565b9080845190614440826140c4565b604282528482019260603685378251156145cd57603084538251906001918210156145cd5790607860218501536041915b81831161455f5750505061451d5760486145199386936144fd936144ee985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a8601526144c5815180928c6037890191016141a6565b8401917001034b99036b4b9b9b4b733903937b6329607d1b6037840152518093868401906141a6565b010360288101875201856140df565b5192839262461bcd60e51b8452600484015260248301906141c9565b0390fd5b60648486519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f811660108110156145b9576f181899199a1a9b1b9c1cb0b131b232b360811b901a61458f8587614786565b5360041c9280156145a557600019019190614471565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b60009080825260209060098252604092838120338252835260ff84822054161561460b5750505050565b61461433614797565b91845190614621826140c4565b604282528482019260603685378251156145cd57603084538251906001918210156145cd5790607860218501536041915b8183116146a65750505061451d5760486145199386936144fd936144ee985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a8601526144c5815180928c6037890191016141a6565b909192600f811660108110156145b9576f181899199a1a9b1b9c1cb0b131b232b360811b901a6146d68587614786565b5360041c9280156145a557600019019190614652565b906000918083526009602052604083209160018060a01b03169182845260205260ff60408420541661471d57505050565b8083526009602052604083208284526020526040832060ff198154169055600080516020615e64833981519152339380a4565b8181029291811591840414171561476357565b634e487b7160e01b600052601160045260246000fd5b9190820180921161476357565b908151811015614025570160200190565b60405190606082018281106001600160401b0382111761181957604052602a82526020820160403682378251156140255760309053815160019081101561402557607860218401536029905b8082116148375750506147f35790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f81166010811015614890576f181899199a1a9b1b9c1cb0b131b232b360811b901a6148668486614786565b5360041c91801561487b5760001901906147e3565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b6000546001600160a01b031633036148b957565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561490457565b60405162461bcd60e51b81526020600482015260146024820152731cd85b1948185b1c9958591e481cdd185c9d195960621b6044820152606490fd5b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a08101918183106001600160401b038411176118195761413e926040525b60018060a01b03169060405160408101908082106001600160401b0383111761181957614a23916040526020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af13d15614ac0573d91614a0883614246565b92614a1660405194856140df565b83523d868885013e614ac4565b805191821591848315614a95575b505050905015614a3e5750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b919381809450010312614abc57820151908115158203614ab9575080388084614a31565b80fd5b5080fd5b6060915b91929015614b265750815115614ad8575090565b3b15614ae15790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015614b395750805190602001fd5b60405162461bcd60e51b8152602060048201529081906145199060248301906141c9565b15614b6457565b60405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206e6f7420636173686572206f72206f776e65720000000000006044820152606490fd5b15614bb057565b60405162461bcd60e51b815260206004820152602660248201527f63616e2774207769746864726177206265666f726520636c61696d20697320736044820152651d185c9d195960d21b6064820152608490fd5b9190820391821161476357565b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261413e91614c4d6064836140df565b614994565b600260015414614c63576002600155565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b15614caf57565b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b60001981146147635760010190565b600092918154614d038161406e565b92600191808316908115614d5c5750600114614d20575b50505050565b90919293945060005260209081600020906000915b858310614d4b5750505050019038808080614d1a565b805485840152918301918101614d35565b60ff1916845250505081151590910201915038808080614d1a565b8054600160401b81101561181957614d96906001928382018155614056565b92909261182f578051906001600160401b03821161181957614db8845461406e565b601f8111614e61575b5060209081601f8411600114614dfe5750928293918392600094614df3575b50501b916000199060031b1c1916179055565b015192503880614de0565b919083601f1981168760005284600020946000905b88838310614e475750505010614e2e575b505050811b019055565b015160001960f88460031b161c19169055388080614e24565b858701518855909601959485019487935090810190614e13565b600085815260208120601f850160051c81019260208610614ea2575b601f0160051c019185905b838110614e9757505050614dc1565b828155018590614e88565b9092508290614e7d565b9a9590989396919792999489156152775760ff169660ff7f000000000000000000000000000000000000000000000000000000000000000016881161523757428511156151fd57848611156151c557604051976101608901996001600160401b039b8a8c108d8d11176118195761503f9b6040528a5260208a0152604089019b8c5260608901526080880152151560a0870152151560c0860152151560e08501526101008401526101208301521515610140820152600861014060405160208181614f7d8b838151938492016141a6565b8101600d8152030190209280518455602081015196600197888601555160028501556003840160ff60608301511660ff198254161790556080810151600485015561501260058501614fe160a08401511515829060ff801983541691151516179055565b60c0830151815460e085015162ffff0019909116911515871b61ff00169190911790151560101b62ff000016179055565b610100810151600685015561012081015160078501550151151591019060ff801983541691151516179055565b600c5460005b81811061514c5750600160401b8110156118195780836150689201600c5561403b565b93909361182f57805191821161181957615082845461406e565b601f8111615101575b50602090601f83116001146150ba57928293918392600094614df35750501b916000199060031b1c1916179055565b90601f19831691856000528360206000209360005b878282106150e857505010614e2e57505050811b019055565b84860151875590950194602094850194879350016150cf565b846000526020600020601f840160051c81019160208510615142575b601f0160051c019084905b82811061513657505061508b565b60008155018490615128565b909150819061511d565b6151558161403b565b506040516151798161516b602082018095614cf4565b03601f1981018352826140df565b51902060405160208101906151a86020828161519b8c878151938492016141a6565b81010380845201826140df565b519020146151be576151b990614ce5565b615045565b5050505050565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420656e642074696d6560801b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271496e76616c69642073746172742074696d6560701b6044820152606490fd5b60405162461bcd60e51b8152602060048201526018602482015277496e76616c696420626f6e75732070657263656e7461676560401b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b6044820152606490fd5b156152b357565b60405162461bcd60e51b8152602060048201526012602482015271496e76616c69642070726f6d6f20636f646560701b6044820152606490fd5b156152f457565b60405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420646973636f756e742070657263656e7461676500000000006044820152606490fd5b1561534057565b60405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642062617365206f776e65722070657263656e746167650000006044820152606490fd5b1561538c57565b60405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206d6173746572206f776e65722070657263656e74616765006044820152606490fd5b156153d857565b60405162461bcd60e51b81526020600482015260136024820152724f6e652070726f6d6f20636f6465206f6e6c7960681b6044820152606490fd5b1561541a57565b60405162461bcd60e51b8152602060048201526016602482015275141c9bdb5bc818dbd919481b9bdd08185b1b1bddd95960521b6044820152606490fd5b1561545f57565b60405162461bcd60e51b815260206004820152601d60248201527f57616c6c65742070726f6d6f20636f6465206e6f7420616c6c6f7765640000006044820152606490fd5b156154ab57565b60405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420757365206f776e2077616c6c657420636f64650000000000006044820152606490fd5b156154f757565b60405162461bcd60e51b8152602060048201526017602482015276556e6163746976617465642077616c6c657420636f646560481b6044820152606490fd5b60ff166064039060ff821161476357565b805190602a820361556057505060ff60165460181c1690565b602080918361557860ff9560405180968195016141a6565b81016013815203019020541690565b1561558e57565b60405162461bcd60e51b81526020600482015260186024820152775573652077686974656c697374656420707572636861736560401b6044820152606490fd5b60058110156156cd57806155df5750565b600181036156275760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606490fd5b600281036156745760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461567d57565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146157115761570d916020820151906060604084015193015160001a9061571b565b9091565b5050600090600290565b9291906fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383116157945791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156157875781516001600160a01b03811615615781579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b6158529060049061582c906020906001600160a01b03906157c2828216614797565b90604051928251938581818601966157db81838a6141a6565b810160138152030190205460081c1615615856575b50606461580560ff60165460101c1689614750565b0461581281601754614779565b60175561583f60026040518681865161582c81838b6141a6565b8101601381520301902001918254614779565b90556040519384928392519283916141a6565b9055565b61589d906040518581855161586c81838a6141a6565b6013908201908152030190208054610100600160a81b03191660089290921b610100600160a81b0316919091179055565b386157f0565b615a4561585292936004926040908151908051926020946159c88684848d838084018b6158d2829d8d846141a6565b8b019a60138c81809e5260058360ff9a8b958694030190200154161515600014615a7557600561591a6064989561592e9585948b986159c19b519485938492519283916141a6565b8201908152030190200154165b1683614750565b04938a8a8d8b8b85806005835186818061594c8c8a519283916141a6565b81018a815203019020015460081c1615615a5757806005615983866003996159ae998f9861599a98519485938492519283916141a6565b820190815203019020015460081c165b1687614750565b0499818c51938285809451938492016141a6565b8101600d81520301902001541690614750565b0490614779565b6159dd6159d58383614779565b601754614779565b601755615a0a600284518981806159f88c8b519283916141a6565b81018a81520301902001918254614779565b9055615a346003835188818751615a2281838d6141a6565b81018981520301902001918254614779565b9055519485938492519283916141a6565b82019081520301902001918254614779565b600395506159ae945089925061599a91508060165460081c16615993565b50606495506159c1945085925061592e91508060165416615927565b15615a9857565b60405162461bcd60e51b815260206004820152601160248201527010db185a5b5a5b99c8191a5cd8589b1959607a1b6044820152606490fd5b6001600160401b0381116118195760051b60200190565b80518210156140255760209160051b010190565b15615b0357565b60405162461bcd60e51b8152602060048201526009602482015268139bc81c995dd85c9960ba1b6044820152606490fd5b949193909294604093845190602093848301916bffffffffffffffffffffffff199060601b16825260348301526034825260608201908282106001600160401b038311176118195760049285615b998193858b528351902096858151938492016141a6565b8101600d606082015203019020015494615bb287615ad1565b96615bbf865198896140df565b8088528388019060051b820191368311610464578490915b838310615c3b5750505050916000925b8651841015615c3157615bfa8488615ae8565b519085600083831015615c215750506000528252615c1b8460002093614ce5565b92615be7565b9091615c1b9382528552206121c6565b9350945050501490565b8235815291810191859101615bd7565b6001600160a01b03168015615cee57600c549060005b828110615c7057505050600090565b615c798161403b565b50615c8b604091825191828092614cf4565b600d81526020928391030190205415615ce357615cb781615cab8561403b565b50845192838092614cf4565b600e81520301902090846000525260002054615cdb57615cd690614ce5565b615c61565b505050600190565b5050615cd690614ce5565b50600090565b61413e90615d04815115156152ac565b6020615d1960405192838151938492016141a6565b601390820190815281900360200190205460081c6001600160a01b031615156152ac565b15615d4457565b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606490fd5b90615d8382615ad1565b615d9060405191826140df565b8281528092615da1601f1991615ad1565b019060005b828110615db257505050565b806060602080938501015201615da656fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0dec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6be946766cc702359d37f3d17629bf89eaede8a13918dd830a30b50c9b6a7bc68484e70a45dc3cad9f831e8a7d9f4327701c9df1c790bfeaa7b6cb95e200be673397667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b4578636565642074696572277320746f74616c207075726368617361626c6500a264697066735822122010509c1c72dd8265734780ff86186288eac0fda78987d72ed9a7ded83775867a64736f6c634300081100332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000414bd0ff95726f0882fb683606d096394300cac80000000000000000000000000000000000000000000000000000000067a0cbe0000000000000000000000000000000000000000000000000000000006981ff60