1.7k txs
2.4k calls
constructor
constructor(uint32 startTimestamp, address _weth, address _shaolin, (address _v3Router, address _v3Factory, address _owner) _params)
functions
getCurrentInterval
viewfunction getCurrentInterval() view returns (uint32 _lastInterval, uint256 _amountAllocated, uint32 _missedIntervals, uint32 _lastIntervalStartTimestamp, uint256 beforeCurrday, bool updated)
getDailyWETHAllocation
purefunction getDailyWETHAllocation(uint32 t) pure returns (uint256 dailyWadAllocation)
getTwapAmount
viewfunction getTwapAmount(address tokenIn, address tokenOut, uint24 poolTier, uint256 amount) view returns (uint256 twapAmount, uint224 slippage)
intervals
viewfunction intervals(uint32 interval) view returns (uint256 amountAllocated, uint256 amountBurned)
lastBurnedInterval
viewfunction lastBurnedInterval() view returns (uint256)
lastBurnedIntervalStartTimestamp
viewfunction lastBurnedIntervalStartTimestamp() view returns (uint32)
lastIntervalNumber
viewfunction lastIntervalNumber() view returns (uint32)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
shaolin
viewfunction shaolin() view returns (address)
slippageAdmin
viewfunction slippageAdmin() view returns (address)
slippageConfigs
viewfunction slippageConfigs(address pool) view returns (uint224 slippage, uint32 twapLookback)
startTimeStamp
viewfunction startTimeStamp() view returns (uint32)
swapCap
viewfunction swapCap() view returns (uint256)
totalShaolinBurnt
viewfunction totalShaolinBurnt() view returns (uint256)
totalWETHDistributed
viewfunction totalWETHDistributed() view returns (uint256)
uniswapV3Router
viewfunction uniswapV3Router() view returns (address)
v3Factory
viewfunction v3Factory() view returns (address)
weth
viewfunction weth() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
burnShaolin
nonpayablefunction burnShaolin()
changeSlippageAdmin
nonpayablefunction changeSlippageAdmin(address _new)
changeSlippageConfig
nonpayablefunction changeSlippageConfig(address pool, uint224 _newSlippage, uint32 _newLookBack)
distributeWETHForBurning
nonpayablefunction distributeWETHForBurning(uint256 _amount)
renounceOwnership
nonpayablefunction renounceOwnership()
setSwapCap
nonpayablefunction setSwapCap(uint256 _newCap)
swapWETHForShaolinAndBurn
nonpayablefunction swapWETHForShaolinAndBurn(uint32 _deadline)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
BuyAndBurn
event BuyAndBurn(uint256 indexed wethAmount, uint256 indexed shaolinBurnt, address indexed caller)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
SlippageAdminChanged
event SlippageAdminChanged(address indexed oldAdmin, address indexed newAdmin)
SlippageConfigChanged
event SlippageConfigChanged(address indexed pool, uint224 indexed newSlippage, uint32 indexed newLookback)
errors
Address0
error Address0()
Amount0
error Amount0()
Bytes0
error Bytes0()
Expired
error Expired()
GreaterThan
error GreaterThan(uint256 a, uint256 b)
IntervalAlreadyBurned
error IntervalAlreadyBurned()
NotStartedYet
error NotStartedYet()
OnlyEOA
error OnlyEOA()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapActions__InvalidLookBack
error SwapActions__InvalidLookBack()
SwapActions__InvalidSlippage
error SwapActions__InvalidSlippage()
SwapActions__OnlySlippageAdmin
error SwapActions__OnlySlippageAdmin()
T
error T()
creation bytecode
0x610120604052348015610010575f5ffd5b5060405161318b38038061318b83398101604081905261002f9161014b565b604081015181906001600160a01b03811661006357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006c816100c5565b5080516001600160a01b039081166080526020820151811660a052604090910151600280546001600160a01b03191691831691909117905563ffffffff9490941660c052508216610100521660e0525f1960075561020e565b600180546001600160a01b03191690556100de816100e1565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610146575f5ffd5b919050565b5f5f5f5f84860360c081121561015f575f5ffd5b855163ffffffff81168114610172575f5ffd5b945061018060208701610130565b935061018e60408701610130565b92506060605f19820112156101a1575f5ffd5b50604051606081016001600160401b03811182821017156101d057634e487b7160e01b5f52604160045260245ffd5b6040526101df60608701610130565b81526101ed60808701610130565b60208201526101fe60a08701610130565b6040820152939692955090935050565b60805160a05160c05160e05161010051612ea66102e55f395f81816104c401528181610936015281816109d00152610c4e01525f81816102570152818161071f01528181610c2d01528181610c8f0152818161100801528181611337015281816113cd01526123ee01525f818161049d015281816105120152818161074e01528181610dab01528181610e66015281816110f90152818161155d0152818161233901528181612397015261248701525f81816103200152610a3a01525f81816102050152818161204501526121830152612ea65ff3fe608060405234801561000f575f5ffd5b50600436106101bb575f3560e01c8063867dcd51116100f3578063dbb6d50d11610093578063e66ac69e1161006e578063e66ac69e14610472578063f2fde38b14610485578063f38d00f014610498578063fa0b7de7146104bf575f5ffd5b8063dbb6d50d146103fd578063e121ce4114610406578063e30c397814610461575f5ffd5b8063ad1b63f4116100ce578063ad1b63f414610381578063bf34a8c3146103bc578063d167a6d2146103c5578063d1837eca146103cd575f5ffd5b8063867dcd51146103555780638da5cb5b1461035e5780639f47f0481461036e575f5ffd5b8063715018a61161015e578063782ee17011610139578063782ee1701461030357806379ba5097146103135780637c887c591461031b5780637d706da014610342575f5ffd5b8063715018a6146102d557806373279400146102dd57806375039309146102f0575f5ffd5b80633a237aa0116101995780633a237aa01461023f5780633fc8cef31461025257806344e43c9814610279578063457c7afa146102c0575f5ffd5b806302df9df1146101bf578063090f8ad4146101db5780632c76d7a614610200575b5f5ffd5b6101c860075481565b6040519081526020015b60405180910390f35b6004546101eb9063ffffffff1681565b60405163ffffffff90911681526020016101d2565b6102277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d2565b600254610227906001600160a01b031681565b6102277f000000000000000000000000000000000000000000000000000000000000000081565b6102816104e6565b6040805163ffffffff978816815260208101969096529386169385019390935293166060830152608082019290925290151560a082015260c0016101d2565b6102d36102ce3660046125a6565b6105cb565b005b6102d3610639565b6101c86102eb3660046125d2565b61064c565b6102d36102fe3660046125ed565b610708565b6009546101eb9063ffffffff1681565b6102d36107ad565b6102277f000000000000000000000000000000000000000000000000000000000000000081565b6102d36103503660046125ed565b6107f6565b6101c860065481565b5f546001600160a01b0316610227565b6102d361037c366004612604565b610813565b6103a761038f3660046125d2565b60086020525f90815260409020805460019091015482565b604080519283526020830191909152016101d2565b6101c8600a5481565b6102d361091f565b6103e06103db366004612657565b610a32565b604080519283526001600160e01b039091166020830152016101d2565b6101c860055481565b61043d6104143660046125a6565b60036020525f90815260409020546001600160e01b03811690600160e01b900463ffffffff1682565b604080516001600160e01b03909316835263ffffffff9091166020830152016101d2565b6001546001600160a01b0316610227565b6102d36104803660046125d2565b610b7b565b6102d36104933660046125a6565b610cf8565b6101eb7f000000000000000000000000000000000000000000000000000000000000000081565b6102277f000000000000000000000000000000000000000000000000000000000000000081565b6004545f9081908190819081908190819063ffffffff16156105105760045463ffffffff16610532565b7f00000000000000000000000000000000000000000000000000000000000000005b90505f61053f82426126c0565b60045490915063ffffffff16158061055e575061012c63ffffffff8216115b156105c1576105728163ffffffff16610d68565b929a509098509650919450909250839061012c63ffffffff82161180156105a0575060045463ffffffff1615155b6105aa575f6105ad565b60015b6105ba9060ff16876126e2565b9550600192505b5050909192939495565b806105d58161145d565b6105dd611484565b6002546040516001600160a01b038085169216907fe29b0c9a6487aafa3c3ceb89f97f492476d5d1b3c03dbbdd4e1c004d8bd83ef4905f90a350600280546001600160a01b0319166001600160a01b0392909216919091179055565b610641611484565b61064a5f6114b0565b565b60405163df49d31560e01b815263ffffffff821660048201525f908190735dcd2315a462f0046641b2118e106fbb47d133d39063df49d31590602401602060405180830381865af41580156106a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c7919061270e565b905060ff811615806106dc57508060ff166006145b6106ed57668e1bc9bf0400006106f7565b67011c37937e0800005b67ffffffffffffffff169392505050565b80610712816114c9565b6107476001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330856114e9565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164263ffffffff1611801561079c575060045461012c906107949063ffffffff16426126c0565b63ffffffff16115b156107a9576107a9611556565b5050565b60015433906001600160a01b031681146107ea5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107f3816114b0565b50565b6107fe61165b565b801561080a578061080d565b5f195b60075550565b8063ffffffff16610823816114c9565b61082b61165b565b60148263ffffffff161115610853576040516330c067a960e01b815260040160405180910390fd5b670de0b6b3a76400006001600160e01b0384161115610885576040516338fd8f3960e21b815260040160405180910390fd5b8163ffffffff16836001600160e01b0316856001600160a01b03167f6b866971e730de54469a032413d79dc0037a7da3f92641b3a839ecc013a9c73e60405160405180910390a4506040805180820182526001600160e01b03938416815263ffffffff92831660208083019182526001600160a01b039096165f90815260039096529190942093519051909116600160e01b029116179055565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610983573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a79190612727565b9050806005546109b7919061273e565b600555604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024015f604051808303815f87803b158015610a19575f5ffd5b505af1158015610a2b573d5f5f3e3d5ffd5b5050505050565b5f5f5f610a697f0000000000000000000000000000000000000000000000000000000000000000610a6489898961169a565b611710565b6001600160a01b0381165f908152600360209081526040918290208251808401909352546001600160e01b0381168352600160e01b900463ffffffff1690820181905291925090158015610ac5575080516001600160e01b0316155b15610b085760405180604001604052806702c68af0bb140000670de0b6b3a7640000610af19190612751565b67ffffffffffffffff168152600f60209091015290505b5f8160200151603c610b1a9190612771565b90505f610b26846117f6565b90508163ffffffff168163ffffffff161015610b40578091505b5f610b4b85846119ae565b5090505f610b5882611bdd565b855197509050610b6a818a8e8e611ef8565b975050505050505094509492505050565b610b83611556565b80610b8d81611fdc565b333214610bad57604051639f8129d160e01b815260040160405180910390fd5b60095463ffffffff165f908152600860205260409020600181015415610be6576040516331bbcb2160e11b815260040160405180910390fd5b60075481541115610bf75760075481555b8054600182018190555f90610c139066354a6ba7a18000612003565b90505f81835f0154610c259190612797565b90505f610c787f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000845f6127108b61202e565b9050610c8261091f565b610cb66001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385612210565b60095463ffffffff166006556040513390829084907f1b3ed074dce570943c9d4e66776a060e8ac73af4f6b002482b09e561d90f038c905f90a4505050505050565b610d00611484565b600180546001600160a01b0383166001600160a01b03199091168117909155610d305f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f5f5f5f610d7585612246565b600954909250610d8c90839063ffffffff166126e2565b610d979060016126e2565b60405163e091ed9f60e01b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152421660248201529094505f90735dcd2315a462f0046641b2118e106fbb47d133d39063e091ed9f90604401602060405180830381865af4158015610e17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3b91906127aa565b6004549091505f9063ffffffff1615610ef8576004805460405163e091ed9f60e01b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169382019390935291166024820152735dcd2315a462f0046641b2118e106fbb47d133d39063e091ed9f90604401602060405180830381865af4158015610ecf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef391906127aa565b610efa565b815b90508063ffffffff168263ffffffff1603610f67575f610f25600a54610f206102eb4290565b612003565b9050610f3661012c620151806127d9565b61ffff16610f458660016126e2565b610f559063ffffffff16836127fe565b610f5f9190612815565b9550506112e0565b60048054604051630ac51d8960e11b815263ffffffff9091169181018290525f90735dcd2315a462f0046641b2118e106fbb47d133d39063158a3b1290602401602060405180830381865af4158015610fc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe691906127aa565b6040516370a0823160e01b81523060048201529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561104d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110719190612727565b90505b8363ffffffff168563ffffffff16106112dc575f63ffffffff83164263ffffffff16106110ab576110a66001846126c0565b6110ad565b425b90505f61012c6110bd86846126c0565b6110c79190612828565b90505f8a84116110d7575f6110e1565b6110e18b85612797565b6004805460405163e091ed9f60e01b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169382019390935290821660248201529192505f9190891690735dcd2315a462f0046641b2118e106fbb47d133d39063e091ed9f90604401602060405180830381865af415801561116c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119091906127aa565b63ffffffff16146111c5576111a882610f208661064c565b6111b2908d61273e565b8510156111bf575f6111c9565b816111c9565b600a545b90505f6111d982610f208761064c565b90506111e761012c886126c0565b9750735dcd2315a462f0046641b2118e106fbb47d133d363158a3b1261120f61012c8b6126e2565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865af415801561124f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127391906127aa565b96508963ffffffff168963ffffffff160361128c578c9a505b61129b61012c620151806127d9565b61ffff166112af63ffffffff8616836127fe565b6112b99190612815565b6112c3908e61273e565b9c50886112cf8161284f565b9950505050505050611074565b5050505b60095463ffffffff165f9081526008602090815260408083208151808301909252805482526001015491810182905291901561131c575f61131f565b81515b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611384573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a89190612727565b6113b2828961273e565b1115611445576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561141a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143e9190612727565b9650611452565b61144f818861273e565b96505b505050509193509193565b6001600160a01b0381166107f3576040516359c662df60e11b815260040160405180910390fd5b5f546001600160a01b0316331461064a5760405163118cdaa760e01b81523360048201526024016107e1565b600180546001600160a01b03191690556107f381612277565b805f036107f357604051635a53a6e960e01b815260040160405180910390fd5b6040516001600160a01b0384811660248301528381166044830152606482018390526115509186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506122c6565b50505050565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164263ffffffff1610156115a357604051631864d7ab60e21b815260040160405180910390fd5b600b5463ffffffff165f036115bb576115bb5f612332565b5f5f5f5f5f5f6115c96104e6565b9550955095509550955095506115de82612332565b8015611653576115f061012c85612771565b6115fa90846126e2565b6004805463ffffffff92831663ffffffff19918216179091556040805180820182528881525f6020808301828152958c168083526008909152929020905181559251600193909301929092556009805490911690911790555b505050505050565b6002546001600160a01b031633148061167d57505f546001600160a01b031633145b61064a576040516371dd489b60e11b815260040160405180910390fd5b604080516060810182525f8082526020820181905291810191909152826001600160a01b0316846001600160a01b031611156116d4579192915b6040518060600160405280856001600160a01b03168152602001846001600160a01b031681526020018362ffffff1681525090505b9392505050565b5f81602001516001600160a01b0316825f01516001600160a01b031610611735575f5ffd5b815160208084015160408086015181516001600160a01b0395861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201206001600160f81b031960a08401529085901b6bffffffffffffffffffffffff191660a183015260b58201527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d582015260f50160408051601f1981840301815291905280516020909101209392505050565b5f5f5f836001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118599190612893565b5050509350935050505f8161ffff161161189a5760405162461bcd60e51b81526020600482015260026024820152614e4960f01b60448201526064016107e1565b5f806001600160a01b03861663252c09d7846118b787600161291f565b6118c19190612939565b6040516001600160e01b031960e084901b16815261ffff9091166004820152602401608060405180830381865afa1580156118fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611922919061296d565b9350505091508061199a5760405163252c09d760e01b81525f60048201526001600160a01b0387169063252c09d790602401608060405180830381865afa15801561196f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611993919061296d565b5091935050505b6119a482426126c0565b9695505050505050565b5f5f8263ffffffff165f036119ea5760405162461bcd60e51b8152602060048201526002602482015261042560f41b60448201526064016107e1565b6040805160028082526060820183525f9260208301908036833701905050905083815f81518110611a1d57611a1d6129d6565b602002602001019063ffffffff16908163ffffffff16815250505f81600181518110611a4b57611a4b6129d6565b602002602001019063ffffffff16908163ffffffff16815250505f5f866001600160a01b031663883bdbfd846040518263ffffffff1660e01b8152600401611a9391906129ea565b5f60405180830381865afa158015611aad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ad49190810190612af9565b915091505f825f81518110611aeb57611aeb6129d6565b602002602001015183600181518110611b0657611b066129d6565b6020026020010151611b189190612bbe565b90505f825f81518110611b2d57611b2d6129d6565b602002602001015183600181518110611b4857611b486129d6565b602090810291909101015103905063ffffffff8816611b678184612beb565b97505f8360060b128015611b865750611b808184612c27565b60060b15155b15611b995787611b9581612c48565b9850505b63ffffffff8916640100000000600160c01b03602084901b16611bc36001600160a01b0383612c69565b611bcd9190612c9a565b9750505050505050509250929050565b5f5f5f8360020b12611bf2578260020b611bf9565b8260020b5f035b9050620d89e8811115611c1f576040516315e4079d60e11b815260040160405180910390fd5b5f816001165f03611c3457600160801b611c46565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611c7a576ffff97272373d413259a46990580e213a0260801c5b6004821615611c99576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611cb8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611cd7576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611cf6576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611d15576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611d34576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611d54576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611d74576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611d94576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611db4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611dd4576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611df4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611e14576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611e34576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611e55576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611e75576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611e94576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611eb1576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611ed057805f1981611ecc57611ecc6127c5565b0490505b640100000000810615611ee4576001611ee6565b5f5b60ff16602082901c0192505050919050565b5f6fffffffffffffffffffffffffffffffff6001600160a01b03861611611f74575f611f2e60026001600160a01b038816612dab565b9050826001600160a01b0316846001600160a01b031610611f5d57611f58600160c01b86836124cb565b611f6c565b611f6c8186600160c01b6124cb565b915050611fd4565b5f611f926001600160a01b03871680680100000000000000006124cb565b9050826001600160a01b0316846001600160a01b031610611fc157611fbc600160801b86836124cb565b611fd0565b611fd08186600160801b6124cb565b9150505b949350505050565b8063ffffffff164211156107f357604051630407b05b60e31b815260040160405180910390fd5b5f815f1904831182021561201e5763c4c5d7f55f526004601cfd5b50670de0b6b3a764000091020490565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690525f919088169063095ea7b3906044016020604051808303815f875af115801561209d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c19190612db9565b506040516bffffffffffffffffffffffff19606089811b821660208401526001600160e81b031960e887901b16603484015288901b1660378201525f90604b0160405160208183030381529060405290505f5f6121208a8a888b610a32565b915091505f875f146121325787612145565b61214583836001600160e01b0316612003565b6040805160a08101825286815230602082015263ffffffff891681830152606081018c905260808101839052905163c04b8d5960e01b8152919250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c04b8d59906121c0908490600401612dd2565b6020604051808303815f875af11580156121dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122009190612727565b9c9b505050505050505050505050565b6040516001600160a01b0383811660248301526044820183905261224191859182169063a9059cbb9060640161151e565b505050565b5f61225361012c83612815565b60045490915063ffffffff1615612272578061226e81612e5b565b9150505b919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f60205f8451602086015f885af1806122e5576040513d5f823e3d81fd5b50505f513d915081156122fc578060011415612309565b6001600160a01b0384163b155b1561155057604051635274afe760e01b81526001600160a01b03851660048201526024016107e1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164263ffffffff1610806123895750600b5463ffffffff428116916123819116620151806126e2565b63ffffffff16115b156123915750565b5f6123bc7f0000000000000000000000000000000000000000000000000000000000000000426126c0565b90505f6123cc6201518083612828565b6040516370a0823160e01b81523060048201529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612433573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124579190612727565b905080841161246f5761246a8482612797565b612471565b5f5b600a556124818262015180612771565b6124ab907f00000000000000000000000000000000000000000000000000000000000000006126e2565b600b805463ffffffff191663ffffffff9290921691909117905550505050565b5f838302815f1985870982811083820303915050805f036124ff578382816124f5576124f56127c5565b0492505050611709565b808411612516576125166003851502601118612581565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b634e487b715f52806020526024601cfd5b6001600160a01b03811681146107f3575f5ffd5b5f602082840312156125b6575f5ffd5b813561170981612592565b63ffffffff811681146107f3575f5ffd5b5f602082840312156125e2575f5ffd5b8135611709816125c1565b5f602082840312156125fd575f5ffd5b5035919050565b5f5f5f60608486031215612616575f5ffd5b833561262181612592565b925060208401356001600160e01b038116811461263c575f5ffd5b9150604084013561264c816125c1565b809150509250925092565b5f5f5f5f6080858703121561266a575f5ffd5b843561267581612592565b9350602085013561268581612592565b9250604085013562ffffff8116811461269c575f5ffd5b9396929550929360600135925050565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff82811682821603908111156126dc576126dc6126ac565b92915050565b63ffffffff81811683821601908111156126dc576126dc6126ac565b805160ff81168114612272575f5ffd5b5f6020828403121561271e575f5ffd5b611709826126fe565b5f60208284031215612737575f5ffd5b5051919050565b808201808211156126dc576126dc6126ac565b67ffffffffffffffff82811682821603908111156126dc576126dc6126ac565b63ffffffff8181168382160290811690818114612790576127906126ac565b5092915050565b818103818111156126dc576126dc6126ac565b5f602082840312156127ba575f5ffd5b8151611709816125c1565b634e487b7160e01b5f52601260045260245ffd5b5f62ffffff8316806127ed576127ed6127c5565b8062ffffff84160491505092915050565b80820281158282048414176126dc576126dc6126ac565b5f82612823576128236127c5565b500490565b5f63ffffffff83168061283d5761283d6127c5565b8063ffffffff84160491505092915050565b5f63ffffffff821663ffffffff810361286a5761286a6126ac565b60010192915050565b805161ffff81168114612272575f5ffd5b80518015158114612272575f5ffd5b5f5f5f5f5f5f5f60e0888a0312156128a9575f5ffd5b87516128b481612592565b8097505060208801518060020b81146128cb575f5ffd5b95506128d960408901612873565b94506128e760608901612873565b93506128f560808901612873565b925061290360a089016126fe565b915061291160c08901612884565b905092959891949750929550565b61ffff81811683821601908111156126dc576126dc6126ac565b5f61ffff83168061294c5761294c6127c5565b8061ffff84160691505092915050565b8051600681900b8114612272575f5ffd5b5f5f5f5f60808587031215612980575f5ffd5b845161298b816125c1565b93506129996020860161295c565b925060408501516129a981612592565b91506129b760608601612884565b905092959194509250565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b81811015612a2757835163ffffffff16835260209384019390920191600101612a03565b509095945050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612a5b57612a5b6129c2565b604052919050565b5f67ffffffffffffffff821115612a7c57612a7c6129c2565b5060051b60200190565b5f82601f830112612a95575f5ffd5b8151612aa8612aa382612a63565b612a32565b8082825260208201915060208360051b860101925085831115612ac9575f5ffd5b602085015b83811015612aef578051612ae181612592565b835260209283019201612ace565b5095945050505050565b5f5f60408385031215612b0a575f5ffd5b825167ffffffffffffffff811115612b20575f5ffd5b8301601f81018513612b30575f5ffd5b8051612b3e612aa382612a63565b8082825260208201915060208360051b850101925087831115612b5f575f5ffd5b6020840193505b82841015612b8857612b778461295c565b825260209384019390910190612b66565b80955050505050602083015167ffffffffffffffff811115612ba8575f5ffd5b612bb485828601612a86565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff821317156126dc576126dc6126ac565b5f8160060b8360060b80612c0157612c016127c5565b667fffffffffffff1982145f1982141615612c1e57612c1e6126ac565b90059392505050565b5f8260060b80612c3957612c396127c5565b808360060b0791505092915050565b5f8160020b627fffff198103612c6057612c606126ac565b5f190192915050565b6001600160c01b03818116838216818102909216918183048114821517612c9257612c926126ac565b505092915050565b5f6001600160c01b03831680612cb257612cb26127c5565b6001600160c01b03929092169190910492915050565b6001815b6001841115612d0357808504811115612ce757612ce76126ac565b6001841615612cf557908102905b60019390931c928002612ccc565b935093915050565b5f82612d19575060016126dc565b81612d2557505f6126dc565b8160018114612d3b5760028114612d4557612d61565b60019150506126dc565b60ff841115612d5657612d566126ac565b50506001821b6126dc565b5060208310610133831016604e8410600b8410161715612d84575081810a6126dc565b612d905f198484612cc8565b805f1904821115612da357612da36126ac565b029392505050565b5f61170960ff841683612d0b565b5f60208284031215612dc9575f5ffd5b61170982612884565b602081525f825160a0602084015280518060c08501525f5b81811015612e0757602081840181015160e0878401015201612dea565b505f84820160e0015260208501516001600160a01b038116604086015291506040850151606085015260608501516080850152608085015160a085015260e0601f19601f8301168501019250505092915050565b5f63ffffffff821680612c6057612c606126ac56fea264697066735822122052247b72f0885a2d4612d23467dad327cd8f0fc5ffd364dc7528247278bf34f664736f6c634300081b003300000000000000000000000000000000000000000000000000000000679fb2a0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000af0db65b7296c02ab043f5cb17300c8ee949f247000000000000000000000000e592427a0aece92de3edee1f18e0157c058615640000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9840000000000000000000000005da227386e0fd73329fe3923394913eca3a624f7