0 txs
500.1k calls
constructor
constructor()
functions
accPnlPerToken
viewfunction accPnlPerToken() view returns (int256)
accPnlPerTokenUsed
viewfunction accPnlPerTokenUsed() view returns (int256)
accRewardsPerToken
viewfunction accRewardsPerToken() view returns (uint256)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
availableAssets
viewfunction availableAssets() view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
collateralizationP
viewfunction collateralizationP() view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
currentBalance
viewfunction currentBalance() view returns (uint256)
currentEpoch
viewfunction currentEpoch() view returns (uint16)
currentEpochPositiveOpenPnl
viewfunction currentEpochPositiveOpenPnl() view returns (uint256)
currentEpochStart
viewfunction currentEpochStart() view returns (uint32)
currentMaxSupply
viewfunction currentMaxSupply() view returns (uint256)
dailyAccPnlDeltaPerToken
viewfunction dailyAccPnlDeltaPerToken() view returns (int256)
decimals
purefunction decimals() pure returns (uint8)
getLockedDeposit
viewfunction getLockedDeposit(uint256 depositId) view returns (tuple)
lastDailyAccPnlDeltaResetTs
viewfunction lastDailyAccPnlDeltaResetTs() view returns (uint32)
lastMaxSupplyUpdateTs
viewfunction lastMaxSupplyUpdateTs() view returns (uint32)
lockDiscountP
viewfunction lockDiscountP(uint256 collatP, uint32 lockDuration) view returns (uint256)
lockedDeposits
viewfunction lockedDeposits(uint256 depositId) view returns (address owner, uint256 shares, uint256 assetsDeposited, uint256 assetsDiscount, uint32 atTimestamp, uint32 lockDuration)
lockedDepositsCount
viewfunction lockedDepositsCount() view returns (uint256)
marketCap
viewfunction marketCap() view returns (uint256)
maxAccOpenPnlDeltaPerToken
viewfunction maxAccOpenPnlDeltaPerToken() view returns (uint256)
maxAccPnlPerToken
viewfunction maxAccPnlPerToken() view returns (uint256)
maxDailyAccPnlDeltaPerToken
viewfunction maxDailyAccPnlDeltaPerToken() view returns (uint256)
maxDeposit
viewfunction maxDeposit(address owner) view returns (uint256)
maxDiscountP
viewfunction maxDiscountP() view returns (uint16)
maxDiscountThresholdP
viewfunction maxDiscountThresholdP() view returns (uint16)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxSupplyIncreaseDailyP
viewfunction maxSupplyIncreaseDailyP() view returns (uint16)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
name
viewfunction name() view returns (string)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets) view returns (uint256)
registry
viewfunction registry() view returns (address)
shareToAssetsPrice
viewfunction shareToAssetsPrice() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalClosedPnl
viewfunction totalClosedPnl() view returns (int256)
totalDeposited
viewfunction totalDeposited() view returns (uint256)
totalDiscounts
viewfunction totalDiscounts() view returns (uint256)
totalLiability
viewfunction totalLiability() view returns (int256)
totalLockedDiscounts
viewfunction totalLockedDiscounts() view returns (uint256)
totalRewards
viewfunction totalRewards() view returns (uint256)
totalSharesBeingWithdrawn
viewfunction totalSharesBeingWithdrawn(address owner) view returns (uint256 shares)
totalSupply
viewfunction totalSupply() view returns (uint256)
tvl
viewfunction tvl() view returns (uint256)
withdrawEpochsTimelock
viewfunction withdrawEpochsTimelock() view returns (uint8)
withdrawLockThresholdsP
viewfunction withdrawLockThresholdsP(uint256) view returns (uint16)
withdrawRequests
viewfunction withdrawRequests(address trader, uint16 withdrawEpoch) view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
cancelWithdrawRequest
nonpayablefunction cancelWithdrawRequest(uint256 shares, address owner, uint16 unlockEpoch)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256)
depositWithDiscountAndLock
nonpayablefunction depositWithDiscountAndLock(uint256 assets, uint32 lockDuration, address receiver) returns (uint256)
distributeReward
nonpayablefunction distributeReward(uint256 assets)
initialize
nonpayablefunction initialize(address _asset, address _registry, uint256 _maxAccOpenPnlDeltaPerToken, uint256 _maxDailyAccPnlDeltaPerToken, uint16 _maxSupplyIncreaseDailyP, uint16 _maxDiscountP, uint16 _maxDiscountThresholdP, uint16[2] _withdrawLockThresholdsP)
makeWithdrawRequest
nonpayablefunction makeWithdrawRequest(uint256 shares, address owner)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256)
mintWithDiscountAndLock
nonpayablefunction mintWithDiscountAndLock(uint256 shares, uint32 lockDuration, address receiver) returns (uint256)
receiveAssets
nonpayablefunction receiveAssets(uint256 assets, address user)
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address owner) returns (uint256)
sendAssets
nonpayablefunction sendAssets(uint256 assets, address receiver)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
tryNewOpenPnlRequestOrEpoch
nonpayablefunction tryNewOpenPnlRequestOrEpoch()
tryResetDailyAccPnlDelta
nonpayablefunction tryResetDailyAccPnlDelta()
tryUpdateCurrentMaxSupply
nonpayablefunction tryUpdateCurrentMaxSupply()
unlockDeposit
nonpayablefunction unlockDeposit(uint256 depositId, address receiver)
updateAccPnlPerTokenUsed
nonpayablefunction updateAccPnlPerTokenUsed(uint256 prevPositiveOpenPnl, uint256 newPositiveOpenPnl) returns (uint256)
updateMaxAccOpenPnlDeltaPerToken
nonpayablefunction updateMaxAccOpenPnlDeltaPerToken(uint256 newValue)
updateMaxDailyAccPnlDeltaPerToken
nonpayablefunction updateMaxDailyAccPnlDeltaPerToken(uint256 newValue)
updateMaxDiscountP
nonpayablefunction updateMaxDiscountP(uint256 newValue)
updateMaxDiscountThresholdP
nonpayablefunction updateMaxDiscountThresholdP(uint256 newValue)
updateMaxSupplyIncreaseDailyP
nonpayablefunction updateMaxSupplyIncreaseDailyP(uint256 newValue)
updateWithdrawLockThresholdsP
nonpayablefunction updateWithdrawLockThresholdsP(uint16[2] newValue)
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address owner) returns (uint256)
events
AccPnlPerTokenUsedUpdated
event AccPnlPerTokenUsedUpdated(address indexed sender, uint256 indexed newEpoch, uint256 prevPositiveOpenPnl, uint256 newPositiveOpenPnl, uint256 newEpochPositiveOpenPnl, int256 newAccPnlPerTokenUsed)
AddressParamUpdated
event AddressParamUpdated(string name, address value)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
AssetsReceived
event AssetsReceived(address indexed sender, address indexed user, uint256 assets)
AssetsSent
event AssetsSent(address indexed sender, address indexed receiver, uint256 assets)
CurrentMaxSupplyUpdated
event CurrentMaxSupplyUpdated(uint256 value)
DailyAccPnlDeltaReset
event DailyAccPnlDeltaReset()
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
DepositLocked
event DepositLocked(address indexed sender, address indexed owner, uint256 depositId, (address owner, uint256 shares, uint256 assetsDeposited, uint256 assetsDiscount, uint32 atTimestamp, uint32 lockDuration) d)
DepositUnlocked
event DepositUnlocked(address indexed sender, address indexed receiver, address indexed owner, uint256 depositId, (address owner, uint256 shares, uint256 assetsDeposited, uint256 assetsDiscount, uint32 atTimestamp, uint32 lockDuration) d)
Initialized
event Initialized(uint64 version)
MaxAccOpenPnlDeltaPerTokenUpdated
event MaxAccOpenPnlDeltaPerTokenUpdated(uint256 value)
MaxDailyAccPnlDeltaPerTokenUpdated
event MaxDailyAccPnlDeltaPerTokenUpdated(uint256 value)
MaxDiscountPUpdated
event MaxDiscountPUpdated(uint256 value)
MaxDiscountThresholdPUpdated
event MaxDiscountThresholdPUpdated(uint256 value)
MaxSupplyIncreaseDailyPUpdated
event MaxSupplyIncreaseDailyPUpdated(uint256 value)
OpenPnlCallFailed
event OpenPnlCallFailed()
RewardDistributed
event RewardDistributed(address indexed sender, uint256 assets, uint256 accRewardsPerToken)
ShareToAssetsPriceUpdated
event ShareToAssetsPriceUpdated(uint256 value)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawCanceled
event WithdrawCanceled(address indexed sender, address indexed owner, uint256 shares, uint16 currEpoch, uint16 indexed unlockEpoch)
WithdrawLockThresholdsPUpdated
event WithdrawLockThresholdsPUpdated(uint16[2] value)
WithdrawRequested
event WithdrawRequested(address indexed sender, address indexed owner, uint256 shares, uint16 currEpoch, uint16 indexed unlockEpoch)
errors
AboveBalance
error AboveBalance()
AboveMaxDeposit
error AboveMaxDeposit()
AboveMaxMint
error AboveMaxMint()
AboveWithdrawAmount
error AboveWithdrawAmount()
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
DepositNotUnlocked
error DepositNotUnlocked(uint256 id)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
MaxDailyPnlReached
error MaxDailyPnlReached()
NoActiveDiscount
error NoActiveDiscount()
NoDiscount
error NoDiscount()
NotAllowed
error NotAllowed(address a)
NotCallbacks
error NotCallbacks(address a)
NotEnoughAssets
error NotEnoughAssets()
NotGov
error NotGov(address a)
NotInitializing
error NotInitializing()
NotOpenPnl
error NotOpenPnl(address a)
NullAmount
error NullAmount()
NullPrice
error NullPrice()
PendingWithdrawal
error PendingWithdrawal(address from, uint256 amount)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WaitNextEpochStart
error WaitNextEpochStart()
WrongLockDuration
error WrongLockDuration(uint256 duration, uint256 minLock, uint256 maxLock)
WrongParams
error WrongParams()
creation bytecode
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b6040516143339081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c90816232e13514612b7c5750806301e1d11414612ad85780630344e8a31461276e57806306fdde03146126d457806307a2d13a1461205e578063095ea7b3146126205780630a28a477146125fe5780630a6460c5146125e05780630dfb5287146125c75780630e15561a146125a95780630eabe5a2146124b35780630fc29349146124955780630fcc6f3114612477578063104aeef81461245957806315df9a1e1461240557806318160ddd146123da57806320124bce146110f2578063215e2fae146123bc57806323b872dd146122e357806326235c00146122575780632c135b931461221f578063313ce5671461220357806338d52e0f146121cd57806338f50e7a146121af5780633af60717146120a9578063402d267d146120815780634c3f6313146120635780634cdad5061461205e5780634ea0ddf71461204057806353409be21461202257806361a8c8c414611ffe5780636445ec0014611fe55780636960e1c214611fbf5780636e553f6514611f235780636ee432f214611ee757806370a0823114611ea1578063727663c414611e525780637361a54414611be15780637436e1df14611b555780637667180814611b305780637b10399914611b095780637dfc692214611ae45780637fcff2af14611ac6578063864de7cd14611a695780638fefbaf114611a39578063940a4e451461199357806394bf804d146118f957806395d89b411461182a578063979abb25146117ad5780639aca06dc1461178f578063a481c14b1461168e578063a8abe90514611457578063a9059cbb14611395578063ad00a5a414611371578063b3d7f6b914611352578063b460af941461128d578063b82c58991461121b578063ba08765214611155578063be216e8314611137578063c63384ab1461111c578063c63d75b6146110f7578063c6e6f59214610c21578063ce845d1d146110f2578063ce96cb77146110cb578063cf39c2db1461103b578063d8bdfd4814611015578063d905777e14610fe9578063db0447d514610fc4578063dd62ed3e14610f7a578063ddd65e3114610f5c578063e5328e0614610f13578063e66a6e3b14610d39578063e783967614610c60578063e7899c0614610c44578063ea5f2bba14610c26578063ef8b30f714610c21578063f8fb10f714610bfc578063faf33f2914610bde578063fda266ef1461044a578063fe0b6d90146103bb5763ff50abdc1461039b57600080fd5b346103b857806003193601126103b8576020600e54604051908152f35b80fd5b50346103b85760203660031901126103b8576004356103d933613ad7565b61753081116104385760208161040f7f484c943d66ffcec2016496d14da4bca3a349f387e1208e697f274612de7299c193613e0b565b6002805461ffff60901b191660909290921b61ffff60901b16919091179055604051908152a180f35b604051635863f78960e01b8152600490fd5b50346103b8576101203660031901126103b857610465612bb7565b61046d612ba1565b9061ffff6084351660843503610bd95761ffff60a4351660a43503610bd95761ffff60c4351660c43503610bd957366101031215610bd957604051906104b282612d17565b61012482368211610bd95760e4905b828210610bc1575050506000805160206142de83398151915254926001600160401b0384161580610bb3575b60016001600160401b038616149081610ba9575b159081610ba0575b50610b8e5760016001600160401b03198516176000805160206142de8339815191525560ff8460401c1615610b61575b6001600160a01b038216158015610b50575b8015610b3f575b8015610b28575b8015610b17575b8015610b06575b8015610af4575b6104385784546001600160a01b0319166001600160a01b039190911617845560405161059981612d17565b600881526706f737469756d4c560c41b6020820152604051906105bb82612d17565b600382526206f4c560ec1b60208301526105d361412f565b6105db61412f565b8051906001600160401b038211610ae057819061060660008051602061423e83398151915254612e61565b601f8111610a85575b50602090601f83116001146109e35788926109d8575b50508160011b916000199060031b1c19161760008051602061423e833981519152555b8051906001600160401b0382116109c457819061067360008051602061427e83398151915254612e61565b601f811161095e575b50602090601f83116001146108bc5787926108b1575b50508160011b916000199060031b1c19161760008051602061427e833981519152555b6106bd61412f565b6106c561412f565b6106d76001600160a01b03821661415e565b90156108a9575b6000805160206142be83398151915280546001600160a81b03191660a09290921b60ff60a01b16919091176001600160a01b039092169190911790556044356008556064356009558290815b6002811061087857505060035560028054670de0b6b3a764000060055560c43560801b61ffff60801b1660a43560701b61ffff60701b1667ffffffffffffffff60601b1990921660843560901b61ffff60901b16179190911717600160601b1763ffffffff19164263ffffffff16179055604051606081016001600160401b03811182821017610862576040526003815260026020820152600160408201528290835b6003811061083e578460ff858560015560401c16156107e95780f35b60ff60401b196000805160206142de83398151915254166000805160206142de833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b9091602060019160ff8551169060ff8560031b92831b921b191617930191016107cd565b634e487b7160e01b600052604160045260246000fd5b909160206108a060019261ffff8651169085851b60031b9161ffff809116831b921b19161790565b9301910161072a565b5060126106de565b015190503880610692565b60008051602061427e83398151915288528793507f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa91905b601f1984168510610943576001945083601f1981161061092a575b505050811b0160008051602061427e833981519152556106b5565b015160001960f88460031b161c1916905538808061090f565b818101518355602094850194600190930192909101906108f4565b60008051602061427e83398151915288526109b4907f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f850160051c810191602086106109ba575b601f0160051c0190613039565b3861067c565b90915081906109a7565b634e487b7160e01b86526041600452602486fd5b015190503880610625565b60008051602061423e83398151915289528893507f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab091905b601f1984168510610a6a576001945083601f19811610610a51575b505050811b0160008051602061423e83398151915255610648565b015160001960f88460031b161c19169055388080610a36565b81810151835560209485019460019093019290910190610a1b565b60008051602061423e8339815191528952610ada907f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f850160051c810191602086106109ba57601f0160051c0190613039565b3861060f565b634e487b7160e01b87526041600452602487fd5b5061271061ffff60c43516111561056e565b5061138861ffff60a4351611610567565b5061753061ffff6084351611610560565b5061ffff60208401511661ffff8451161015610559565b506509184e72a00060643510610552565b506001600160a01b0381161561054b565b68ffffffffffffffffff19841668010000000000000001176000805160206142de83398151915255610539565b60405163f92ee8a960e01b8152600490fd5b90501538610509565b303b159150610501565b5060ff8460401c16156104ed565b60208091610bce84612c34565b8152019101906104c1565b600080fd5b50346103b857806003193601126103b8576020600a54604051908152f35b50346103b857806003193601126103b857602061ffff60025460701c16604051908152f35b612d88565b50346103b857806003193601126103b8576020600554604051908152f35b50346103b857806003193601126103b857610c5d6134fd565b80f35b50346103b857602080600319360112610d355760408260c09360a08351610c8681612cfc565b828152828682015282858201528260608201528260808201520152600435815260148352209060405191610cb983612cfc565b60018060a01b03815416928381526001820154908381019182526002830154926040820193845260046003820154916060840192835201549363ffffffff9586948560a06080870196828a1688520197831c168752604051988952519088015251604087015251606086015251166080840152511660a0820152f35b5080fd5b50346103b85760403660031901126103b857600435610d56612ba1565b8254604051630d2020dd60e01b81526863616c6c6261636b7360b81b60048201526001600160a01b0392916020908290602490829087165afa8015610f085783918691610ed9575b50163303610ec157610dc7610dc260008051602061429e833981519152548561356a565b61359c565b610dd381600b54612de0565b80600b55610de5610dc2600654613007565b12610eaf57610dfe90610df66134fd565b600d54612de0565b80600d55610e0d60095461359c565b12610e9d57610e26610e1e8461359c565b601154612de0565b601155610e3d610e358461359c565b600f54612de0565b600f55610e48612eda565b610e50613066565b610e6c8382846000805160206142be8339815191525416613f6a565b60405192835216907f17ffe64fb2212f31d60284d6471e06abb7db8d66f0a60f9b884b29f1597d05da60203392a380f35b6040516317a796c960e31b8152600490fd5b604051630de1bf7560e21b8152600490fd5b60405163bde4d0f160e01b8152336004820152602490fd5b610efb915060203d602011610f01575b610ef38183612d32565b810190612da9565b38610d9e565b503d610ee9565b6040513d87823e3d90fd5b50346103b857806003193601126103b8576020670de0b6b3a7640000610f53610f3d600654613007565b60008051602061429e8339815191525490612fd4565b04604051908152f35b50346103b857806003193601126103b8576020600c54604051908152f35b50346103b85760403660031901126103b857610f94612bb7565b610fa5610f9f612ba1565b91612c43565b9060018060a01b03166000526020526020604060002054604051908152f35b50346103b857806003193601126103b857602061ffff60025460901c16604051908152f35b50346103b85760203660031901126103b857602061100d611008612bb7565b6133e6565b604051908152f35b50346103b857806003193601126103b8576020611030613388565b60ff60405191168152f35b50346103b85760203660031901126103b85760043561105933613ad7565b61271081118015906110c0575b610438576020816110977fc3d15eac433007c433395eb171cde0d63e1c539dae45c0ae13358aebdfa36a5193613e0b565b6002805461ffff60801b191660809290921b61ffff60801b16919091179055604051908152a180f35b5061ffff8111611066565b50346103b85760203660031901126103b857602061100d6110ed611008612bb7565b61374e565b612c7c565b50346103b85760203660031901126103b857611111612bb7565b50602061100d613348565b50346103b857806003193601126103b857602061100d6132cd565b50346103b857806003193601126103b857602061100d600654613007565b50346103b85761116436612d53565b9161117181949294613852565b61117a836133e6565b81116111d657602093604061100d9360018060a01b0386168152601587522061ffff60025460601c16600052855260406000206111b8838254612dfc565b90556111c38261374e565b9384916111d08385613c19565b33613e39565b60405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606490fd5b50346103b85760203660031901126103b857604060c091600435815260146020522060018060a01b0381541690600181015490600281015490600460038201549101549163ffffffff93604051958652602086015260408501526060840152818116608084015260201c1660a0820152f35b50346103b85761129c36612d53565b91926112a784613852565b6112b36110ed846133e6565b841161130d5760209360409361100d936112cf6005548461356a565b95869460018060a01b0384168152601589522061ffff60025460601c1660005287526040600020611301858254612dfc565b90556111d08385613c19565b60405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606490fd5b50346103b85760203660031901126103b857602061100d60043561370c565b50346103b85760203660031901126103b857602061100d611390612bb7565b613239565b50346103b85760403660031901126103b8576113af612bb7565b906024359033815260008051602061425e8339815191529081602052604081205483811061143057508260406113f6926113e833613239565b943382526020522054612dfc565b1061141057611405913361361e565b602060405160018152f35b6040516339d9cf4f60e01b81523360048201526024810191909152604490fd5b60405163391434e360e21b8152336004820152602481019190915260448101849052606490fd5b50346103b85760403660031901126103b857600435611474612ba1565b8254604051630d2020dd60e01b8152661bdc195b941b9b60ca1b60048201526020936001600160a01b0393909290919085908290602490829088165afa90811561166657849186918891611671575b50600460405180948193632e3fbb9960e21b8352165afa80156116665760ff918791611639575b5016611627576114f981612c43565b33600052845260406000205492811692833314159081611608575b506115f0578161152661152b92613239565b61302c565b82855260008051602061425e83398151915284526040852054106115de577fb432a6de7b81c02ac0ba95c212b7e1f7eb2a3ce73634ca53d6685f22f46909a36115d861ffff61158c6002548260ff611581613388565b169160601c16613050565b858852601587528160408920911696876000525260406000206115b085825461302c565b905560025460601c1660405191829133958390929161ffff6020916040840195845216910152565b0390a480f35b60405163077eb09160e11b8152600490fd5b60405163fa5cd00f60e01b8152336004820152602490fd5b905082811591821561161d575b505038611514565b1090508238611615565b604051630f424fa160e21b8152600490fd5b6116599150863d881161165f575b6116518183612d32565b810190613220565b386114ea565b503d611647565b6040513d88823e3d90fd5b6116889150823d8411610f0157610ef38183612d32565b386114c3565b50346103b85760403660031901126103b8576004356116ab612ba1565b6000805160206142be833981519152546001600160a01b0391906116d6908490309033908616613db1565b61171d6116fe610dc26116e886612fb7565b60008051602061429e8339815191525490612fe7565b61170a81600b54612f9e565b600b556117156134fd565b600d54612f9e565b600d5561173461172c8461359c565b601154612f9e565b60115561174b6117438461359c565b600f54612f9e565b600f55611756612eda565b61175e613066565b60405192835216907f6498a42739b9b246e80b4d5115100c258e8d082641eaf0a7d04a09ed462026f860203392a380f35b50346103b857806003193601126103b8576020601354604051908152f35b50346103b85760203660031901126103b8576004356117cb33613ad7565b6113888111610438576020816118017f62412ddbb9ad43638b3b9f4506160bc417a547fd57bfacef427820562bcc156093613e0b565b6002805461ffff60701b191660709290921b61ffff60701b16919091179055604051908152a180f35b50346103b857806003193601126103b8576040518160008051602061427e83398151915290815461185a81612e61565b918285526020936001926001811690816000146118d5575060011461189a575b6118968661188a818a0382612d32565b60405191829182612bcd565b0390f35b9080949650528483205b8284106118c257505050816118969361188a9282010193388061187a565b80548585018701529285019281016118a4565b60ff19168787015250505050151560051b820101915061188a81611896388061187a565b50346103b85760403660031901126103b857600435611916612ba1565b61191f82613852565b611927613348565b821161194e5761100d8261193c60209461370c565b80936119488284613b63565b33613ce4565b60405162461bcd60e51b815260206004820152601b60248201527f455243343632363a206d696e74206d6f7265207468616e206d617800000000006044820152606490fd5b50346103b85760203660031901126103b8576000805160206142be83398151915254600435906119d1908290309033906001600160a01b0316613db1565b6119e86119e06116e883612fb7565b60065461302c565b6006556119f36135c5565b6119ff8160105461302c565b60105560065460405191825260208201527f53118bff2fb56701752f5bf54053d24fb83cec92f9f6ce664b90c38a2991caa460403392a280f35b50346103b85760403660031901126103b85760243563ffffffff81168103610bd95761100d60209160043561315d565b50346103b85760203660031901126103b857600435611a8733613ad7565b6509184e72a0008110610438576020817f452c17bc4698a1b501a64383b48f3a1c75ceb2ec01d6fde73087c03b8bead46092600955604051908152a180f35b50346103b857806003193601126103b8576020600654604051908152f35b50346103b857806003193601126103b857602061ffff60025460801c16604051908152f35b50346103b857806003193601126103b857546040516001600160a01b039091168152602090f35b50346103b857806003193601126103b857602061ffff60025460601c16604051908152f35b50346103b857611b6436612cb2565b611b6f839293613852565b611b7e63ffffffff8416613885565b612710611ba3611b9d611b9886611b936132cd565b61315d565b61301c565b84612fd4565b0492611bb06110ed613348565b8411611bcf5760209361100d93611bc960055483613fab565b916138f1565b604051631249d93f60e11b8152600490fd5b50346103b85760403660031901126103b8576004356024359060018060a01b039283815416936040518095630d2020dd60e01b8252661bdc195b941b9b60ca1b600483015281602460209889935afa908115611e47578391611e2a575b50163303611e1257611cbf611c64611c558561359c565b611c5e8561359c565b90612f9e565b60008051602061429e8339815191525492611c83610dc2600654613007565b91600b54938493611ca287611c9d620f4240988994612f9e565b612fd4565b0485611cb088600854612fd4565b0480821015611e0b575061359c565b915081811315611e035750925b828402928484051484151715611ded57611cf892611cec611cf29261359c565b9061312f565b90612de0565b80600b55611d0882601154612de0565b601155600c55611d166135c5565b60025461ffff919061ffff60601b611d33606083901c851661314a565b60601b1663ffffffff804211611dce5742166dffff0000000000000000ffffffff19929092161717600255611d7090611d6b8461359c565b612de0565b600a55611d7b613066565b60025460601c1690600a5492600c54906040519283528583015283604083015260608201527f115621a72d6f59323a1d752b116219634bc004cadb85d6bdc8e7eb254905722d60803392a3604051908152f35b6040516306dfcc6560e41b815260048101899052426024820152604490fd5b634e487b7160e01b600052601160045260246000fd5b905092611ccc565b905061359c565b604051637195a89560e01b8152336004820152602490fd5b611e419150863d8811610f0157610ef38183612d32565b38611c3e565b6040513d85823e3d90fd5b50346103b85760203660031901126103b8577f4961675a9c9880f947b5431f9f261df11bad68eb4e4849146dae031fe29587006020600435611e9333613ad7565b80600855604051908152a180f35b50346103b85760203660031901126103b8576020906040906001600160a01b03611ec9612bb7565b16815260008051602061425e83398151915283522054604051908152f35b50346103b85760203660031901126103b8576004356002811015610d35578061ffff60209260041c6003015460f06040519360041b161c168152f35b50346103b85760403660031901126103b857600435611f40612ba1565b90611f4a81613852565b611f556110ed613348565b8111611f7a5761100d602092611f6d60055484613fab565b9283916119488284613b63565b60405162461bcd60e51b815260206004820152601e60248201527f455243343632363a206465706f736974206d6f7265207468616e206d617800006044820152606490fd5b50346103b857806003193601126103b857602060025463ffffffff60405191831c168152f35b50346103b857806003193601126103b857610c5d613066565b50346103b857806003193601126103b857602063ffffffff60025416604051908152f35b50346103b857806003193601126103b8576020601254604051908152f35b50346103b857806003193601126103b8576020600b54604051908152f35b612c16565b50346103b857806003193601126103b8576020600854604051908152f35b50346103b85760203660031901126103b85761209b612bb7565b50602061100d6110ed613348565b50346103b85760403660031901126103b8573660231215610bd9576040516120d081612d17565b604481368211610bd9576004905b828210612197575050506120f133613ad7565b61ffff602081602084015116828451161015610438578383815b836002821061216a57505050600355604051928490845b6002831061215357867f475f7f6bcd116d44ba47532765402844bae849d89a5ae8675e5bd9ee72bb5d37604088a180f35b838060019287855116815201920192019190612122565b61218e8394876001949551169085851b60031b9161ffff809116831b921b19161790565b9301910161210b565b602080916121a484612c34565b8152019101906120de565b50346103b857806003193601126103b8576020600954604051908152f35b50346103b857806003193601126103b8576000805160206142be833981519152546040516001600160a01b039091168152602090f35b50346103b857806003193601126103b857602060405160068152f35b50346103b857806003193601126103b8576020670de0b6b3a7640000610f5360008051602061429e8339815191525460055490612fd4565b50346103b85761226636612cb2565b612271839293613852565b61228063ffffffff8416613885565b612288613348565b82116122d1576122978261370c565b9261271092838502938585041485151715611ded576020946122cb61100d956122c5611b9886611b936132cd565b90612fe7565b906138f1565b604051632533d46960e11b8152600490fd5b50346103b85760603660031901126103b8576122fd612bb7565b612305612ba1565b6001600160a01b038216600090815260008051602061425e8339815191526020526040902054604435919082811061238c5761234a8361234486613239565b92612dfc565b10612363576114059261235e83338361377d565b61361e565b506040516339d9cf4f60e01b81526001600160a01b039290921660048301526024820152604490fd5b60405163391434e360e21b81526001600160a01b0385166004820152602481019190915260448101839052606490fd5b50346103b857806003193601126103b8576020600754604051908152f35b50346103b857806003193601126103b857602060008051602061429e83398151915254604051908152f35b50346103b85760403660031901126103b85761241f612bb7565b6024359161ffff8316809303610bd95760409160018060a01b03168152601560205220906000526020526020604060002054604051908152f35b50346103b857806003193601126103b8576020600454604051908152f35b50346103b857806003193601126103b8576020600f54604051908152f35b50346103b857806003193601126103b8576020601154604051908152f35b50346103b85760603660031901126103b8576004356124d0612ba1565b6044359161ffff808416809403610bd95760018060a01b038316928386526015602052604086208560005260205260406000205483116125975761251390612c43565b33600052602052604060002054833314159081612578575b506115f0576115d87f57b7eb5935219110018f4904a98d5af59f59927c4bb85a66b44164cadbea5e88918487526015602052604087208660005260205260406000206115b0858254612dfc565b905082811591821561258d575b50503861252b565b1090508238612585565b604051630d79a13b60e31b8152600490fd5b50346103b857806003193601126103b8576020601054604051908152f35b50346103b857806003193601126103b857610c5d612eda565b50346103b857806003193601126103b8576020600d54604051908152f35b50346103b85760203660031901126103b857602061100d60055460043561356a565b50346103b85760403660031901126103b85761263a612bb7565b6024359033156126bb576001600160a01b03169081156126a25761265d33612c43565b82600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b50346103b857806003193601126103b8576040518160008051602061423e83398151915290815461270481612e61565b918285526020936001926001811690816000146118d55750600114612733576118968661188a818a0382612d32565b9080949650528483205b82841061275b57505050816118969361188a9282010193388061187a565b805485850187015292850192810161273d565b50346103b85760403660031901126103b85760043561278b612ba1565b8254604051630d2020dd60e01b81526f1b1bd8dad95911195c1bdcda5d13999d60821b600482015260209360249390926001600160a01b039290869082908790829087165afa8015612acd5783918891612ab0575b50168387526014865260408720946040516331a9108f60e11b815285600482015287818381865afa80156129845785918a91612a93575b5016963388141580612a41575b806129d2575b6129bc57600487015463ffffffff9182821691901c8216018181116129a957164210612993576003860191612873610dc2845460008051602061429e833981519152549061356a565b9161288083600b54612de0565b80600b55612892610dc2600654613007565b12610eaf57818a923b1561298f57829160405180948193630852cd8d60e31b83528b60048401525af1801561298457612943575b507f4f6edae18c3565f82e2ad9ec85f343d98808341c24c167045a40b6678b37c8579392916128fa61291e92600c54612de0565b600c556129056135c5565b612912610e1e825461359c565b60115554601254612dfc565b6012556129306001860154823061361e565b6115d86040519283921695339583612e09565b916128fa61291e92996129787f4f6edae18c3565f82e2ad9ec85f343d98808341c24c167045a40b6678b37c857979695612ce9565b999250509192936128c6565b6040513d8b823e3d90fd5b8280fd5b6040516305e50af360e31b815260048101869052fd5b634e487b7160e01b8a526011600452828afd5b5060405163fa5cd00f60e01b8152336004820152fd5b5060405163e985e9c560e01b81526004810189905233838201528181604481875afa908115612a36578a91612a09575b501561282a565b612a299150823d8411612a2f575b612a218183612d32565b810190612dc8565b38612a02565b503d612a17565b6040513d8c823e3d90fd5b5060405163020604bf60e21b81526004810187905281818481875afa908115612a36578a91612a76575b508516331415612824565b612a8d9150823d8411610f0157610ef38183612d32565b38612a6b565b612aaa9150893d8b11610f0157610ef38183612d32565b38612817565b612ac79150873d8911610f0157610ef38183612d32565b386127e0565b6040513d89823e3d90fd5b50346103b857806003193601126103b8576000805160206142be833981519152546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115612b71578291612b3b575b602082604051908152f35b90506020813d602011612b69575b81612b5660209383612d32565b81010312610d3557602091505138612b30565b3d9150612b49565b6040513d84823e3d90fd5b905034610d355781600319360112610d355760209063ffffffff60025460401c168152f35b602435906001600160a01b0382168203610bd957565b600435906001600160a01b0382168203610bd957565b6020808252825181830181905290939260005b828110612c0257505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501612be0565b34610bd9576020366003190112610bd957602061100d60043561374e565b359061ffff82168203610bd957565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b34610bd9576000366003190112610bd9576020670de0b6b3a7640000610f53610f3d612ca9600654613007565b600c5490612f9e565b6060906003190112610bd9576004359060243563ffffffff81168103610bd957906044356001600160a01b0381168103610bd95790565b6001600160401b03811161086257604052565b60c081019081106001600160401b0382111761086257604052565b604081019081106001600160401b0382111761086257604052565b90601f801991011681019081106001600160401b0382111761086257604052565b6060906003190112610bd957600435906001600160a01b03906024358281168103610bd957916044359081168103610bd95790565b34610bd9576020366003190112610bd957602061100d600554600435613fab565b90816020910312610bd957516001600160a01b0381168103610bd95790565b90816020910312610bd957518015158103610bd95790565b91909160008382019384129112908015821691151617611ded57565b91908203918211611ded57565b90815281546001600160a01b031660208083019190915260018301546040830152600283015460608301526003830154608083015260049092015463ffffffff80821660a0840152921c90911660c082015260e00190565b90600182811c92168015612e91575b6020831014612e7b57565b634e487b7160e01b600052602260045260246000fd5b91607f1691612e70565b3d15612ed5573d906001600160401b0382116108625760405191612ec9601f8201601f191660200184612d32565b82523d6000602084013e565b606090565b60008054604051630d2020dd60e01b8152661bdc195b941b9b60ca1b600482015290602090829060249082906001600160a01b03165afa908115612b7157829182918291612f7f575b5060405182602082019163bef35b7960e01b835260048152612f4481612d17565b51925af1612f50612e9b565b5015612f595750565b807fc45ac4c0d7669b6d1ee2b2c07a9b01916676c3ca98959fb0833a9f5d5e5ae2b091a1565b612f98915060203d602011610f0157610ef38183612d32565b38612f23565b81810392916000138015828513169184121617611ded57565b90670de0b6b3a764000091828102928184041490151715611ded57565b81810292918115918404141715611ded57565b8115612ff1570490565b634e487b7160e01b600052601260045260246000fd5b90670de0b6b3a76400008201809211611ded57565b90612710918201809211611ded57565b91908201809211611ded57565b818110613044575050565b60008155600101613039565b91909161ffff80809416911601918211611ded57565b6002546201518061308063ffffffff8360201c1642612dfc565b10156130895750565b60008051602061429e833981519152549061ffff90612710828260901c168101838111611ded577fd103db6eec024592fa6d47db028ec6408076ac4762eb021a6e52b525828bab9b946020946130e0921690612fd4565b04908160045567ffffffff0000000042841b169067ffffffff00000000191617600255604051908152a1565b818102929160008212600160ff1b821416611ded578184051490151715611ded57565b8115612ff157600160ff1b8114600019831416611ded570590565b61ffff809116908114611ded5760010190565b6000612710821161318f57505061318b6301e133809163ffffffff61ffff60025460701c16915b1690612fd4565b0490565b6002549061ffff91828160801c1693848111156000146132065790836131b86131c29387612dfc565b9160701c16612fd4565b9261270f1901908282116131f257506131ec61318b936301e13380959363ffffffff931690612fe7565b91613184565b634e487b7160e01b81526011600452602490fd5b505061318b92506301e1338093915063ffffffff906131ec565b90816020910312610bd9575160ff81168103610bd95790565b9060009160009061ffff8060025460601c169283926001809460ff60015416915b613268575b50505050505050565b909192939495978561327a8484613050565b16868a169081116132c6576001600160a01b03851686526015602090815260408088209288529190528520546132ba916132b4919061302c565b9861314a565b9594939291908561325a565b509761325f565b6132d8600654613007565b600c5460008082131561332457506132f09082612dfc565b905b606482029180830460641481151715611ded57612710029180830460641490151715611ded5761332191612fe7565b90565b8181039180830560001914901517156131f25750613342908261302c565b906132f2565b6000600c54136000146133825761332160045460008051602061429e8339815191525480821060001461337c575080612dfc565b90612dfc565b60001990565b6133a56133936132cd565b6127108082101561337c575080612dfc565b60035461ffff90818160101c1683116000146133ca5750505060ff60015460101c1690565b1610156133dd5760ff60015460081c1690565b60ff6001541690565b6000805460408051630d2020dd60e01b8152661bdc195b941b9b60ca1b6004820152929390926020926001600160a01b0392919084908290602490829087165afa9081156134d6578391859188916134e0575b506004875180948193632e3fbb9960e21b8352165afa9081156134d6579060ff9187916134b9575b50166134b2571683526015815281832060025460601c61ffff168452905281205460008051602061429e83398151915254909160001982019182116131f25750808210156134ad575090565b905090565b5050505090565b6134d09150853d871161165f576116518183612d32565b38613461565b85513d88823e3d90fd5b6134f79150823d8411610f0157610ef38183612d32565b38613439565b6002546201518061351763ffffffff8360401c1642612dfc565b10156135205750565b6000600d81905563ffffffff60401b199091164260401b63ffffffff60401b16176002557fa047de172c12fcf40e0ff45a86ac45befb232ae644862699ef140a8c5f763b419080a1565b906135758183613fab565b918115612ff157670de0b6b3a7640000900961358e5790565b60018101809111611ded5790565b6001600160ff1b0381116135ad5790565b6024906040519063123baf0360e11b82526004820152fd5b7f547c25b7a5677a006ff044a0e4b5e699598339825e7b42d3dc645117ceee805060206136086135f6600654613007565b600c5460008113156136155790612dfc565b80600555604051908152a1565b50600090612dfc565b916001600160a01b038084169283156136f357169283156136da5760009083825260008051602061425e833981519152806020526040832054918483106136a7575082847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef959360409388602097528652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b0391909116600482015260248101929092525060448101839052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b60001981148061373a575b61332157670de0b6b3a76400006005546137318184614048565b920961358e5790565b50670de0b6b3a76400006005541015613717565b600019811480613769575b6133215760055461332191614048565b50670de0b6b3a76400006005541015613759565b919061378883612c43565b9260018060a01b03908183169160009583875260205260408620549360001985036137b65750505050505050565b85851061382157508116156138085781156137ef57906137d96040949392612c43565b908552602052039120553880808080808061325f565b604051634a1406b160e11b815260048101869052602490fd5b60405163e602df0560e01b815260048101869052602490fd5b604051637dc7a0d960e11b81526001600160a01b039190911660048201526024810185905260448101869052606490fd5b15613873576005541561386157565b60405163337264f160e21b8152600490fd5b604051630e5a744960e41b8152600490fd5b61ffff60025460701c16156138df5762093a8080821080156138d2575b6138aa575050565b60649250604051916368fb90f760e11b8352600483015260248201526301e133806044820152fd5b506301e1338082116138a2565b6040516350725e4f60e01b8152600490fd5b939290919282851115613ac5576007546000198114611ded5783600161391c92019687600755612dfc565b906139b4600092878452601460205261399d6040978886209760018060a01b039788871660018060a01b03198b5416178a558260018b01558160028b01558460038b015560048a019067ffffffff0000000082549160201b169063ffffffff4216906001600160401b031916171790556139968183613b63565b3033613ce4565b6139a98160135461302c565b60135560125461302c565b6012556024602084845416875192838092630d2020dd60e01b82526f1b1bd8dad95911195c1bdcda5d13999d60821b60048301525afa908115613abb579084918491613a9c575b501690813b1561298f5785516340c10f1960e01b81526001600160a01b0391909116600482015260248101879052919081908390604490829084905af1908115613a915750907fd82de973812d2d606cff6d895b9200686684ae1b161fe3996077810bae3835b49291613a82575b50825416925180613a7c33948783612e09565b0390a390565b613a8b90612ce9565b38613a69565b8551903d90823e3d90fd5b613ab5915060203d602011610f0157610ef38183612d32565b386139fb565b86513d85823e3d90fd5b60405163a4e993e160e01b8152600490fd5b6000546040516312d43a5160e01b8152916001600160a01b03916020908490600490829086165afa928315613b5757600093613b34575b50811691168103613b1c5750565b6024906040519063093650d560e01b82526004820152fd5b82919350613b509060203d602011610f0157610ef38183612d32565b9290613b0e565b6040513d6000823e3d90fd5b9060008051602061429e8339815191525491600b5460008112600014613bbe5750613bb992611cec610dc2613bad93613ba7600b54613ba18661359c565b9061310c565b9361302c565b600b555b600e5461302c565b600e55565b600012613bd1575b50613bb99150613bb1565b613bdd613bf49161359c565b92611cec613bee601154809661310c565b9161359c565b9182800560011483151715611ded57613bb992613c1091612de0565b60115538613bc6565b60009060008051602061429e833981519152549082600b54818112600014613c9357505090613c6591613c51600b54613ba18461359c565b918415613c8657611cec91610dc29161302c565b600b555b15613c7a57613bb990600e5461302c565b613bb990600e54612dfc565b611cec91610dc291612dfc565b13613ca0575b5050613c69565b613cac613cbd9161359c565b91611cec613bee601154809561310c565b80600003908082056000191490151715611ded57613cda91612de0565b6011553880613c99565b909260018060a01b038094613d0d85836000805160206142be8339815191525416863091613db1565b169384156136da577fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79260409260008051602061429e833981519152613d5482825461302c565b90558660005260008051602061425e833981519152602052836000208181540190558660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208751858152a3835195865260208601521692a3565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a08101918183106001600160401b0384111761086257613e09926040526140bd565b565b61ffff90818111613e1a571690565b604490604051906306dfcc6560e41b8252601060048301526024820152fd5b6001600160a01b03808416958183169493919281888703613f59575b505086156136f3578660005260008051602061425e8339815191529384602052604094856000205491838310613f2757509180917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db969594938a60005260205203846000205560008051602061429e8339815191528181540390556000887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208751858152a3613f188783856000805160206142be8339815191525416613f6a565b835196875260208701521693a4565b865163391434e360e21b81526001600160a01b0391909116600482015260248101929092525060448101829052606490fd5b613f63918661377d565b3881613e55565b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152613e0991613fa6606483612d32565b6140bd565b670de0b6b3a764000091818302916000198482099383808610950394808603951461403b57848311156140295782910981600003821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b60405163227bc15360e01b8152600490fd5b5050906133219250612fe7565b9080820290600019818409908280831092039180830392146140ac57670de0b6b3a76400009082821115614029577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac10669940990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b6000806140e69260018060a01b03169360208151910182865af16140df612e9b565b90836141da565b8051908115159182614114575b50506140fc5750565b60249060405190635274afe760e01b82526004820152fd5b6141279250602080918301019101612dc8565b1538806140f3565b60ff6000805160206142de8339815191525460401c161561414c57565b604051631afcd79f60e31b8152600490fd5b90604051602081019063313ce56760e01b82526004815261417e81612d17565b5160009384928392916001600160a01b03165afa61419a612e9b565b90806141ce575b6141ab575b508190565b60208180518101031261298f576020015160ff81116141a6576001925060ff1690565b506020815110156141a1565b9061420157508051156141ef57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580614234575b614212575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561420a56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0452c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace020773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220ebfd328e36d4a96fc8a654aaa7da7232bacc2aeaf9b803cb4fc71f678a949f7264736f6c63430008180033