2 txs
46 calls
constructor
constructor(address _poolManager, address _hook, address _wblt, address _bmx, address _dailyGauge, address _voterDistributor)
functions
BMX
viewfunction BMX() view returns (address)
buybackBps
viewfunction buybackBps() view returns (uint16)
buybackPoolKey
viewfunction buybackPoolKey() view returns (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks)
buybackPoolSet
viewfunction buybackPoolSet() view returns (bool)
DAILY_GAUGE
viewfunction DAILY_GAUGE() view returns (address)
isHook
viewfunction isHook(address) view returns (bool)
minOutBps
viewfunction minOutBps() view returns (uint16)
owner
viewfunction owner() view returns (address)
pendingBmxForVoter
viewfunction pendingBmxForVoter() view returns (uint256)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingWbltForBuyback
viewfunction pendingWbltForBuyback() view returns (uint256)
pendingWbltForVoter
viewfunction pendingWbltForVoter() view returns (uint256)
poolManager
viewfunction poolManager() view returns (address)
VOTER_DISTRIBUTOR
viewfunction VOTER_DISTRIBUTOR() view returns (address)
WBLT
viewfunction WBLT() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
claimVoterFees
nonpayablefunction claimVoterFees(address to)
collectFee
nonpayablefunction collectFee(tuple key, uint256 amount)
collectInternalFee
nonpayablefunction collectInternalFee(uint256 bmxAmount)
flushBuffers
nonpayablefunction flushBuffers()
renounceOwnership
nonpayablefunction renounceOwnership()
setBuybackBps
nonpayablefunction setBuybackBps(uint16 newBps)
setBuybackPoolKey
nonpayablefunction setBuybackPoolKey(tuple key)
setHook
nonpayablefunction setHook(address hook, bool enabled)
setMinOutBps
nonpayablefunction setMinOutBps(uint16 newBps)
sweepERC20
nonpayablefunction sweepERC20(address token, uint256 amount, address to)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
events
BuybackBpsUpdated
event BuybackBpsUpdated(uint16 newBps)
BuybackExecuted
event BuybackExecuted(uint256 wbltIn, uint256 bmxOut)
BuybackPoolSet
event BuybackPoolSet((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey)
FeeReceived
event FeeReceived(address indexed pool, uint256 amount, bool isBmxPool)
FeeSplit
event FeeSplit(uint256 buybackPortion, uint256 voterPortion, bool isBmxPool)
HookAuthorised
event HookAuthorised(address hook, bool enabled)
MinOutBpsUpdated
event MinOutBpsUpdated(uint16 newBps)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
SwapFailed
event SwapFailed(uint8 swapType, uint256 amountIn)
TokenSwept
event TokenSwept(address indexed token, uint256 amount, address indexed to)
VoterFeesClaimed
event VoterFeesClaimed(uint256 amount, address to)
VoterFlush
event VoterFlush(uint256 bmxIn, uint256 wbltOut)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadySet
error AlreadySet()
FailedInnerCall
error FailedInnerCall()
InvalidBps
error InvalidBps()
InvalidPoolKey
error InvalidPoolKey()
NoFunds
error NoFunds()
NoKey
error NoKey()
NoSwap
error NoSwap()
NotAllowed
error NotAllowed()
NotHook
error NotHook()
NotPoolManager
error NotPoolManager()
NotPoolManager
error NotPoolManager()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
Slippage
error Slippage()
SwapActive
error SwapActive()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x6101206040526001805463ffffffff60a01b19166309ab097960a21b179055348015610029575f80fd5b50604051612f45380380612f4583398101604081905261004891610183565b8580338061006f57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61007881610104565b5050506001600160a01b0386811660805285165f818152600b6020908152604091829020805460ff191660019081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a16001600160a01b0393841660a05291831660c052821660e0521661010052506102069050565b600180546001600160a01b031916905561011d81610120565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461011d575f80fd5b5f805f805f8060c08789031215610198575f80fd5b86516101a38161016f565b60208801519096506101b48161016f565b60408801519095506101c58161016f565b60608801519094506101d68161016f565b60808801519093506101e78161016f565b60a08801519092506101f88161016f565b809150509295509295509295565b60805160a05160c05160e05161010051612c3761030e5f395f81816103340152611c6901525f81816102dd015281816106f30152818161096b0152611b9301525f8181610208015281816107b0015281816107f701528181610b0e01528181610b5501528181610cce01526114db01525f818161028001528181610ba501528181610c9301528181610f5a015281816114b50152611c4701525f818161046901528181610eb30152818161115601528181611291015281816112d10152818161153f01528181611599015281816116240152818161166a015281816117480152818161186801528181611957015281816119d201528181611adc0152611c900152612c375ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c806391dd7346116100f3578063d95b4abb11610093578063e30c39781161006e578063e30c39781461048b578063e97af9041461049c578063f2af25bc146104a4578063f2fde38b146104b1575f80fd5b8063d95b4abb146103d7578063d95c70f8146103ea578063dc4c90d314610464575f80fd5b8063a4d9f536116100ce578063a4d9f5361461035f578063a6e9cc3d14610387578063baa9f0fa14610390578063d2676529146103a5575f80fd5b806391dd73461461030f578063988dff131461032f5780639933ea7514610356575f80fd5b806354bda2b71161015e57806379ba50971161013957806379ba5097146102bd578063833e8db1146102c55780638a17f2d2146102d85780638da5cb5b146102ff575f80fd5b806354bda2b71461027b5780635e964c1f146102a2578063715018a6146102b5575f80fd5b80631a669779116101995780631a669779146102035780632942adf7146102425780632e814f221461025557806344712c1014610268575f80fd5b8063133795b4146101bf578063165f8b6a146101d457806318c71f16146101f0575b5f80fd5b6101d26101cd3660046124f1565b6104c4565b005b6101dd60025481565b6040519081526020015b60405180910390f35b6101d26101fe366004612512565b610564565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e7565b6101d261025036600461253f565b610776565b6101d26102633660046124f1565b610a25565b6101d2610276366004612568565b610abe565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b6101d26102b0366004612596565b610c89565b6101d2610d9f565b6101d2610db2565b6101d26102d33660046125e2565b610dfb565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b5f546001600160a01b031661022a565b61032261031d366004612619565b610ea6565b6040516101e791906126b5565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b6101dd60035481565b60015461037490600160b01b900461ffff1681565b60405161ffff90911681526020016101e7565b6101dd60045481565b60015461037490600160a01b900461ffff1681565b6103c76103b33660046126c7565b600b6020525f908152604090205460ff1681565b60405190151581526020016101e7565b6101d26103e53660046126c7565b610f04565b600754600854600954610424926001600160a01b03908116928082169262ffffff600160a01b83041692600160b81b90920460020b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a0016101e7565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031661022a565b6101d2610fbf565b600a546103c79060ff1681565b6101d26104bf3660046126c7565b610fea565b6104cc61105a565b6127108161ffff1611156104f35760405163c6cc5d7f60e01b815260040160405180910390fd5b600180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16600160a01b61ffff8416908102919091179091556040519081527fda4694a6b8cb415b826e95148e7cffcdad2df632d70e393ae0c5b2b1baaa15a9906020015b60405180910390a150565b335f908152600b602052604090205460ff16610593576040516318e59f8760e31b815260040160405180910390fd5b805f036105b357604051631f2a200560e01b815260040160405180910390fd5b6001545f90612710906105d190600160a01b900461ffff16846126f6565b6105db919061270d565b90505f6105e8828461272c565b604080518581526001602082015291925033917fe7cb43fb0558b8bbb770740bbbf27e5bc47955e46c02cf19c2e52a341b82067f910160405180910390a2604080518381526020810183905260018183015290517fe14e9e082f1a0aed7e497e194cc0314a405d834ff72e8848d1e59e377d594c819181900360600190a15f821180156106775750600a5460ff165b15610754576040805160a080820183526007546001600160a01b0390811683526008548082166020850152600160a01b810462ffffff1694840194909452600160b81b90930460020b60608301526009549092166080820152205f906040516348f60dfd60e01b815260048101829052602481018590529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906348f60dfd906044015f604051808303815f87803b15801561073c575f80fd5b505af115801561074e573d5f803e3d5ffd5b50505050505b8015610771578060035f82825461076b919061273f565b90915550505b505050565b335f908152600b602052604090205460ff166107a5576040516318e59f8760e31b815260040160405180910390fd5b5f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166107dd60208501856126c7565b6001600160a01b0316148061083257506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661082760408501602086016126c7565b6001600160a01b0316145b905061084460a08401608085016126c7565b6001600160a01b03167fe7cb43fb0558b8bbb770740bbbf27e5bc47955e46c02cf19c2e52a341b82067f83836040516108899291909182521515602082015260400190565b60405180910390a2815f036108b157604051631f2a200560e01b815260040160405180910390fd5b6001545f90612710906108cf90600160a01b900461ffff16856126f6565b6108d9919061270d565b90505f6108e6828561272c565b60408051848152602081018390528515158183015290519192507fe14e9e082f1a0aed7e497e194cc0314a405d834ff72e8848d1e59e377d594c81919081900360600190a182156109e7575f61094b610944368890038801886127b5565b60a0902090565b6040516348f60dfd60e01b815260048101829052602481018590529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906348f60dfd906044015f604051808303815f87803b1580156109b4575f80fd5b505af11580156109c6573d5f803e3d5ffd5b505050508160035f8282546109db919061273f565b90915550610a16915050565b8160025f8282546109f8919061273f565b925050819055508060045f828254610a10919061273f565b90915550505b610a1e611086565b5050505050565b610a2d61105a565b6127108161ffff161115610a545760405163c6cc5d7f60e01b815260040160405180910390fd5b600180547fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff16600160b01b61ffff8416908102919091179091556040519081527f1a00aae8be2607613519c8d887edc631f9d730df918a2bd3ff0683b8a8fcba0890602001610559565b610ac661105a565b600a5460ff1615610b03576040517fa741a04500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610b3b60208401846126c7565b6001600160a01b03161480610b9057506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610b8560408401602085016126c7565b6001600160a01b0316145b90505f610bd5610ba360208501856126c7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b80610bee5750610bee610ba360408501602086016126c7565b9050818015610bfa5750805b610c30576040517fc256622b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826007610c3d828261284d565b5050600a805460ff191660011790556040517f0a752c54a18747009d5d1f70ed4541471ca938e3f71349b2d0c022c06c35090290610c7c908590612958565b60405180910390a1505050565b610c9161105a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480610d0257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15610d39576040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4d6001600160a01b03841682846110bc565b806001600160a01b0316836001600160a01b03167fe8b2c769b00730298f87350efd2b5fa12b2af65f89e8b625c2edb67c25a6155d84604051610d9291815260200190565b60405180910390a3505050565b610da761105a565b610db05f611130565b565b60015433906001600160a01b03168114610def5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610df881611130565b50565b610e0361105a565b6001600160a01b038216610e43576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f818152600b6020908152604091829020805460ff19168515159081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d19779091015b60405180910390a15050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ef15760405163570c108560e11b815260040160405180910390fd5b610efb8383611149565b90505b92915050565b610f0c61105a565b6004545f819003610f49576040517f43f9e11000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600455610f816001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836110bc565b604080518281526001600160a01b03841660208201527f224c5ee7fd79ace10ea945d31053d6f5f566d6a5ca8ffdfb70a65980068b642c9101610e9a565b600a5460ff16610fe2576040516380246e7f60e01b815260040160405180910390fd5b610db0611086565b610ff261105a565b600180546001600160a01b0383166001600160a01b031990911681179091556110225f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b03163314610db05760405163118cdaa760e01b8152336004820152602401610de6565b600a5460ff1661109257565b600254156110a7576110a760016002546111b1565b60035415610db057610db060026003546111b1565b6040516001600160a01b0383811660248301526044820183905261077191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061137e565b600180546001600160a01b0319169055610df8816113f8565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111945760405163570c108560e11b815260040160405180910390fd5b61119c611447565b5060408051602081019091525f815292915050565b600a5460ff166111d4576040516380246e7f60e01b815260040160405180910390fd5b5f60055460ff1660028111156111ec576111ec6129e0565b14611223576040517f7d5ac18a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805483919060ff19166001836002811115611242576112426129e0565b021790555060068190556001826002811115611260576112606129e0565b0361126e575f60025561128c565b6002826002811115611282576112826129e0565b0361128c575f6003555b6112be7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d69565b156112cf576112cb611447565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894918260405160200161131191815260200190565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161133c91906126b5565b5f604051808303815f875af1158015611357573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261077191908101906129f4565b5f6113926001600160a01b03841683611e12565b905080515f141580156113b65750808060200190518101906113b49190612a88565b155b15610771576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610de6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60055460065460ff909116905f826002811115611466576114666129e0565b0361149d576040517fc84be13500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546008546001600160a01b0391821691908116907f000000000000000000000000000000000000000000000000000000000000000081168314907f00000000000000000000000000000000000000000000000000000000000000001683145f6001876002811115611512576115126129e0565b0361151e575081611521565b50805b6001876002811115611535576115356129e0565b0361161f576115927f000000000000000000000000000000000000000000000000000000000000000030886fffffffffffffffffffffffffffffffff165f8761157e5788611580565b895b6001600160a01b031693929190611e1f565b8261161a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af11580156115f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116189190612aa3565b505b6116eb565b6116637f000000000000000000000000000000000000000000000000000000000000000030886fffffffffffffffffffffffffffffffff165f8661157e5788611580565b816116eb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af11580156116c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e99190612aa3565b505b6040805160a080820183526007546001600160a01b0390811683526008548082166020850152600160a01b810462ffffff1694840194909452600160b81b90930460020b60608301526009549092166080820152205f9061176d907f00000000000000000000000000000000000000000000000000000000000000009061209c565b50505090505f604051806060016040528084151581526020018961179090612aba565b8152602001846117be576117b9600173fffd8963efd1fc6a506488495d951d5263988d26612af0565b6117ce565b6117ce6401000276a36001612b0f565b6001600160a01b039081169091529091505f90780100000000000000000000000000000000000000000000000090829061180a908616806126f6565b905085156118245761181d8b8284612167565b9250611832565b61182f8b8383612167565b92505b604080517fde1abeef0000000000000000000000000000000000000000000000000000000060208201525f916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f3cd914c916007918991016040516020818303038152906040526040518463ffffffff1660e01b81526004016118c293929190612b2e565b6020604051808303815f875af19250505080156118fc575060408051601f3d908101601f191682019092526118f991810190612aa3565b60015b611a33577f030ae102ccbff8129e2d9335284c31b712b0f182c2bb6a163efabe477ee048578d8d604051611931929190612bc1565b60405180910390a160018d600281111561194d5761194d6129e0565b036119b4576119987f0000000000000000000000000000000000000000000000000000000000000000308e5f8d611984578e611986565b8f5b6001600160a01b031693929190612204565b8b60025f8282546119a9919061273f565b90915550611a169050565b60028d60028111156119c8576119c86129e0565b03611a16576119ff7f0000000000000000000000000000000000000000000000000000000000000000308e5f8c611984578e611986565b8b60035f828254611a10919061273f565b90915550505b50506005805460ff1916905550505f600655505050505050505050565b90505f87611a41578b611a43565b8a5b90505f88611a5d57611a558360801d90565b600f0b611a6b565b611a6783600f0b90565b600f0b5b60015490915061271090611a8a90600160b01b900461ffff16886126f6565b611a94919061270d565b811015611acd576040517f7dd37f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b036001600160a01b0383167f000000000000000000000000000000000000000000000000000000000000000030845f612204565b60018f6002811115611b1757611b176129e0565b03611c3a576040805160a080820183526007546001600160a01b0390811683526008548082166020850152600160a01b810462ffffff1694840194909452600160b81b90930460020b60608301526009549092166080820152205f906040516348f60dfd60e01b815260048101829052602481018490529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906348f60dfd906044015f604051808303815f87803b158015611bdc575f80fd5b505af1158015611bee573d5f803e3d5ffd5b505050507f8e8412cac6b961b95ef832e2bac486977bbd29eb9725f9eddd97f3380c31f6498f83604051611c2c929190918252602082015260400190565b60405180910390a150611d4a565b611c8e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000836110bc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0f9190612aa3565b50604080518f8152602081018390527f2b81f5114e97a6b3bd574fa938530d188d17ced1862c051b111ea85f155066d2910160405180910390a15b50506005805460ff1916905550505f6006555050505050505050505050565b6040517ff135baaa0000000000000000000000000000000000000000000000000000000081527fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab2360048201525f906001600160a01b0383169063f135baaa90602401602060405180830381865afa158015611de6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0a9190612aa3565b151592915050565b6060610efb83835f61230d565b8115610a1e578015611ed257836001600160a01b031663f5298aca84611e54886001600160a01b03166001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015611eb7575f80fd5b505af1158015611ec9573d5f803e3d5ffd5b50505050610a1e565b6001600160a01b038516611f9f57604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015611f20575f80fd5b505af1158015611f32573d5f803e3d5ffd5b50505050836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015611f74573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611f999190612aa3565b50610a1e565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015611fdf575f80fd5b505af1158015611ff1573d5f803e3d5ffd5b505050506001600160a01b038316301461201f5761201a6001600160a01b0386168486856123bf565b612033565b6120336001600160a01b03861685846110bc565b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015612070573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120949190612aa3565b505050505050565b5f805f805f6120aa866123fe565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa15801561210b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212f9190612aa3565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f838302815f1985870982811083820303915050808411612186575f80fd5b805f03612198575082900490506121fd565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b8115610a1e5780612265576040517f0b0d9c090000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401611ea0565b836001600160a01b031663156e29f68461228e886001600160a01b03166001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b1580156122f0575f80fd5b505af1158015612302573d5f803e3d5ffd5b505050505050505050565b60608147101561234b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610de6565b5f80856001600160a01b031684866040516123669190612beb565b5f6040518083038185875af1925050503d805f81146123a0576040519150601f19603f3d011682016040523d82523d5f602084013e6123a5565b606091505b50915091506123b586838361243a565b9695505050505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526123f89186918216906323b872dd906084016110e9565b50505050565b6040515f9061241d908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b60608261244f5761244a826124af565b6121fd565b815115801561246657506001600160a01b0384163b155b156124a8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610de6565b50806121fd565b8051156124bf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215612501575f80fd5b813561ffff811681146121fd575f80fd5b5f60208284031215612522575f80fd5b5035919050565b5f60a08284031215612539575f80fd5b50919050565b5f8060c08385031215612550575f80fd5b61255a8484612529565b9460a0939093013593505050565b5f60a08284031215612578575f80fd5b610efb8383612529565b6001600160a01b0381168114610df8575f80fd5b5f805f606084860312156125a8575f80fd5b83356125b381612582565b92506020840135915060408401356125ca81612582565b809150509250925092565b8015158114610df8575f80fd5b5f80604083850312156125f3575f80fd5b82356125fe81612582565b9150602083013561260e816125d5565b809150509250929050565b5f806020838503121561262a575f80fd5b823567ffffffffffffffff811115612640575f80fd5b8301601f81018513612650575f80fd5b803567ffffffffffffffff811115612666575f80fd5b856020828401011115612677575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610efb6020830184612687565b5f602082840312156126d7575f80fd5b81356121fd81612582565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610efe57610efe6126e2565b5f8261272757634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610efe57610efe6126e2565b80820180821115610efe57610efe6126e2565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561278f5761278f612752565b604052919050565b62ffffff81168114610df8575f80fd5b8060020b8114610df8575f80fd5b5f60a08284031280156127c6575f80fd5b5060405160a0810167ffffffffffffffff811182821017156127ea576127ea612752565b60405282356127f881612582565b8152602083013561280881612582565b6020820152604083013561281b81612797565b6040820152606083013561282e816127a7565b6060820152608083013561284181612582565b60808201529392505050565b813561285881612582565b81546001600160a01b0319166001600160a01b0382161782555060018101602083013561288481612582565b81546001600160a01b0319166001600160a01b0382161782555060408301356128ac81612797565b815460608501356128bc816127a7565b8060b81b79ffffff00000000000000000000000000000000000000000000001676ffffff00000000000000000000000000000000000000008460a01b167fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff841617178455505050505f608083013561293381612582565b6002830180546001600160a01b0319166001600160a01b0383161790559050806123f8565b60a08101823561296781612582565b6001600160a01b03168252602083013561298081612582565b6001600160a01b03166020830152604083013561299c81612797565b62ffffff16604083015260608301356129b4816127a7565b60020b606083015260808301356129ca81612582565b6001600160a01b03811660808401525092915050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215612a04575f80fd5b815167ffffffffffffffff811115612a1a575f80fd5b8201601f81018413612a2a575f80fd5b805167ffffffffffffffff811115612a4457612a44612752565b612a57601f8201601f1916602001612766565b818152856020838501011115612a6b575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215612a98575f80fd5b81516121fd816125d5565b5f60208284031215612ab3575f80fd5b5051919050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203612aea57612aea6126e2565b505f0390565b6001600160a01b038281168282160390811115610efe57610efe6126e2565b6001600160a01b038181168382160190811115610efe57610efe6126e2565b83546001600160a01b0390811682526001850154808216602084015260a081811c62ffffff16604085015260b89190911c600290810b606085015286015490911660808301525f90612ba190830185805115158252602080820151908301526040908101516001600160a01b0316910152565b610120610100830152612bb8610120830184612687565b95945050505050565b6040810160038410612be157634e487b7160e01b5f52602160045260245ffd5b9281526020015290565b5f82518060208501845e5f92019182525091905056fea264697066735822122019449d1487b09605e8d06c864c3c032c3d2368f355d3361a2d8bad0a0cb2d7f964736f6c634300081a0033000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b00000000000000000000000066989c71705debb446d6b83d76cbabdd502cb0cc0000000000000000000000004e74d4db6c0726ccded4656d0bce448876bb4c7a000000000000000000000000548f93779fbc992010c07467cbaf329dd5f059b7000000000000000000000000e578cc6d1baf15e43b18fdf8447efa13d39f2261000000000000000000000000b1dd2fdb023cb54b7cc2a0f5d9e8d47a9f7723ce