0 txs
48 calls
constructor
constructor(address poolManager_, address coinVersionLookup_, address[] trustedMessageSenders_)
functions
getHookPermissions
purefunction getHookPermissions() pure returns (tuple)
getPoolCoin
viewfunction getPoolCoin(tuple key) view returns (tuple)
getPoolCoinByHash
viewfunction getPoolCoinByHash(bytes23 poolKeyHash) view returns (tuple)
isTrustedMessageSender
viewfunction isTrustedMessageSender(address sender) view returns (bool)
poolManager
viewfunction poolManager() view returns (address)
afterAddLiquidity
nonpayablefunction afterAddLiquidity(address sender, tuple key, tuple params, int256 delta, int256 feesAccrued, bytes hookData) returns (bytes4, int256)
afterDonate
nonpayablefunction afterDonate(address sender, tuple key, uint256 amount0, uint256 amount1, bytes hookData) returns (bytes4)
afterInitialize
nonpayablefunction afterInitialize(address sender, tuple key, uint160 sqrtPriceX96, int24 tick) returns (bytes4)
afterRemoveLiquidity
nonpayablefunction afterRemoveLiquidity(address sender, tuple key, tuple params, int256 delta, int256 feesAccrued, bytes hookData) returns (bytes4, int256)
afterSwap
nonpayablefunction afterSwap(address sender, tuple key, tuple params, int256 delta, bytes hookData) returns (bytes4, int128)
beforeAddLiquidity
nonpayablefunction beforeAddLiquidity(address sender, tuple key, tuple params, bytes hookData) returns (bytes4)
beforeDonate
nonpayablefunction beforeDonate(address sender, tuple key, uint256 amount0, uint256 amount1, bytes hookData) returns (bytes4)
beforeInitialize
nonpayablefunction beforeInitialize(address sender, tuple key, uint160 sqrtPriceX96) returns (bytes4)
beforeRemoveLiquidity
nonpayablefunction beforeRemoveLiquidity(address sender, tuple key, tuple params, bytes hookData) returns (bytes4)
beforeSwap
nonpayablefunction beforeSwap(address sender, tuple key, tuple params, bytes hookData) returns (bytes4, int256, uint24)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
events
CoinMarketRewardsV4
event CoinMarketRewardsV4(address coin, address currency, address payoutRecipient, address platformReferrer, address tradeReferrer, address protocolRewardRecipient, address dopplerRecipient, (uint256 creatorPayoutAmountCurrency, uint256 creatorPayoutAmountCoin, uint256 platformReferrerAmountCurrency, uint256 platformReferrerAmountCoin, uint256 tradeReferrerAmountCurrency, uint256 tradeReferrerAmountCoin, uint256 protocolAmountCurrency, uint256 protocolAmountCoin, uint256 dopplerAmountCurrency, uint256 dopplerAmountCoin) marketRewards)
Swapped
event Swapped(address indexed sender, address indexed swapSender, bool isTrustedSwapSenderAddress, (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, bytes32 indexed poolKeyHash, (bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96) params, int128 amount0, int128 amount1, bool isCoinBuy, bytes hookData, uint160 sqrtPriceX96)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
CannotMintZeroLiquidity
error CannotMintZeroLiquidity()
CoinVersionLookupCannotBeZeroAddress
error CoinVersionLookupCannotBeZeroAddress()
EthTransferFailed
error EthTransferFailed()
FailedInnerCall
error FailedInnerCall()
HookNotImplemented
error HookNotImplemented()
InvalidTickRangeMisordered
error InvalidTickRangeMisordered(int24 tickLower, int24 tickUpper)
NoCoinForHook
error NoCoinForHook((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key)
NotACoin
error NotACoin(address coin)
NotPoolManager
error NotPoolManager()
PathMustHaveAtLeastOneStep
error PathMustHaveAtLeastOneStep()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60c06040523461037057613dfa80380380610019816103a8565b928339810190606081830312610370578051906001600160a01b0382168203610370576020810151916001600160a01b03831691828403610370576040810151906001600160401b038211610370570184601f82011215610370578051946001600160401b038611610374578560051b916020806100988186016103a8565b80998152019382010191821161037057602001915b818310610350575050506080525f6101a06100c6610388565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a0610124610388565b828152600160208201528260408201528260608201528260808201528260a08201528260c0820152600160e08201528261010082015282610120820152826101408201528261016082015282610180820152015261200030161580159061033f575b8015610332575b8015610325575b8015610318575b801561030b575b80156102ff575b80156102ef575b80156102e3575b80156102d7575b80156102cb575b80156102bf575b80156102b3575b80156102a7575b61029457156102855760a0525f5b815181101561021f57600190818060a01b0360208260051b85010151165f525f60205260405f208260ff19825416179055016101e8565b604051613a2c90816103ce823960805181818160e101528181610171015281816101c90152818161043101528181611050015281816110c9015281816117760152818161220f0152818161238b0152612527015260a0518181816104a501526117d30152f35b637a01d33160e11b5f5260045ffd5b630732d7b560e51b5f523060045260245ffd5b506001301615156101da565b506002301615156101d3565b506004301615156101cc565b506008301615156101c5565b506010301615156101be565b506020301615156101b7565b50604030161515600114156101b0565b506080301615156101a9565b50610100301615156101a2565b506102003016151561019b565b5061040030161515610194565b506108003016151561018d565b506110003016151560011415610186565b82516001600160a01b0381168103610370578152602092830192016100ad565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b0381118382101761037457604052565b6040519190601f01601f191682016001600160401b038111838210176103745760405256fe6101806040526004361015610012575f80fd5b5f60c0525f3560e01c806321d0ee7014612514578063259982e5146125145780632c5fe5a9146123c8578063575e24b4146123345780635859e6d0146122525780636c2bbe7e146121fc5780636fe7e6eb1461173c57806391dd7346146110975780639f063efc1461103d578063b47b2fb1146103d9578063b6a8b0fa146100ce578063bc9113b314610397578063c4e833ce146101f8578063dc4c90d3146101b2578063dc98354e146101405763e1b4af69146100ce575f80fd5b3461013a576100dc3661287a565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303925061012791505057630a85dc2960e01b60c05152600460c051fd5b63570c108560e11b60c05152600460c051fd5b60c05180fd5b3461013a5760e036600319011261013a57610159612568565b5060a036602319011261013a5761016e612840565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361012757630a85dc2960e01b60c05152600460c051fd5b3461013a5760c05136600319011261013a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461013a5760c05136600319011261013a576040516102168161267a565b60c051815260c051602082015260c051604082015260c051606082015260c051608082015260c05160a082015260c05160c082015260c05160e082015260c05161010082015260c05161012082015260c05161014082015260c05161016082015260c0516101808201526101a060c0519101526101c0602060405161029a8161267a565b60c051815281810190600182526040810160c05181526060820160c05181526080830160c051815260a0840160c051815260c0850160c051815260e08601906001825261010087019260c051845261012088019460c051865261014089019660c05188526101608a019860c0518a526101a06101808c019b60c0518d52019b60c0518d526040519d8e9160c051835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461013a57602036600319011261013a576001600160a01b036103b8612568565b1660c0515260c051602052602060ff604060c0512054166040519015158152f35b3461013a5761016036600319011261013a576103f3612568565b60a036602319011261013a5760603660c319011261013a57610144356001600160401b03811161013a5761042b90369060040161257e565b608052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811633036101275761047161046c366126c7565b61295f565b60a05260a05160c05152600160205260018060a01b03604060c05120541692831561101f5760405163f3ffe14b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600482015260c05181602481885afa908115610b155760c05191610eb6575b5060a05160c0515260016020526001604060c05120019461050c366126c7565b60c0519687919061051b6129ab565b50805460c051929091905b828410610dc157505050506001600160801b0316956001600160801b031660018060a01b0360208401511692519260c0515060c05150835115610dae57835115610d965760208401516105799190613111565b908115610d88576001600160801b0389935b8315610d775760208301516001600160a01b03169a5b8415610d6f5750935b1680610d31575050505b602060e05295600193905b835185101561064c576001600160801b03976106196105f96105ed6001946105e78a8a612b30565b51613111565b9b909316600f0b612cca565b600f0b6040519061060c60e05183612696565b60c05182528b848b613199565b6001600160801b0316981561063e57818060a01b039060e0510151165b9401936105bf565b818060a01b03905116610636565b868691896001600160801b03811680610cc0575b5060805115610cb85760e051856080518101031261013a5784356001600160a01b0381169081900361013a575b604051633fb80b1560e01b815260e051816004818b5afa908115610b155760c05191610c7c575b50604051936328c22dfb60e11b855260e051856004818c5afa948515610b155760c05195610c3e575b5060405193637a9f55c760e11b855260e051856004818d5afa948515610b155760c05195610c00575b50604051630d1a887760e21b815260e051909590866004818e5afa918215610b155760c05192610bc1575b61075c965061073e612cea565b506001600160a01b03888116151597908716151591889083906132b4565b96610bb0575b610b9b575b60608601946107788587518661339c565b6080870197610789848a518761339c565b604088019661079a8489518861339c565b519588519860e0510151975199519560405196876101408101106001600160401b036101408a011117610b83578f999b7f35b5031218696db1dfd903223a47f38e66a1998e14a942a5d60fddaa49a685fc9c6102209c6101209b6101408c016040528b5260c05160e0518c015260408b015260c05160608b015260808a015260c05160a08a015260c089015260c05160e089015261010088015260c0518888015260405198895260018060a01b031660e05189015260018060a01b0316604088015260018060a01b0316606087015260018060a01b0316608086015260018060a01b031660a085015260018060a01b031660c0840152805160e084015260e0518101516101008401526040810151828401526060810151610140840152608081015161016084015260a081015161018084015260c08101516101a084015260e08101516101c08401526101008101516101e08401520151610200820152a160c0515060c0515060018060a01b0316908160c0515260c05160e0515260ff604060c0512054169260405163d737d0c760e01b815260e05181600481875afa60c0519181610b45575b50610b3f575060c051945b60c435908115159182810361013a5715610b22576044356001600160a01b0381169081810361013a575014905b60a0610984366126c7565b2060405160e051810191825260066040820152604081526109a6606082612696565b519020604051631e2eaeaf60e01b8152600481019190915260e0519094859060249082906001600160a01b03165afa938415610b155760c05194610adb575b5060405195151586526109fb60e0518701612a01565b60c086015260e43560e0860152610104356001600160a01b0381169081900361013a576101008601526101243560801d600f0b61012086015261012435600f0b61014086015215156101608501526101c06101808501526080516101c0850152608051906101e085013760c0516101e06080518501015260018060a01b03166101a08301527fd0565428a2140862827b5b6126002556c70acb52db537fae9cf41a18a470ec4a60a0519360018060a01b0316926101e081601f19601f60805101168101030190a46040805163b47b2fb160e01b815260c05160e051820152f35b90935060e0513d60e05111610b0e575b610af58183612696565b8160e0519181010312610b0a575192876109e5565b5f80fd5b503d610aeb565b6040513d60c051823e3d90fd5b6024356001600160a01b0381169081810361013a57501490610979565b9461094c565b90915060e0513d60e05111610b7c575b610b5f8183612696565b8160e051918101031261013a57610b75906129cf565b9087610941565b503d610b55565b634e487b7160e01b60c051526041600452602460c051fd5b610bab8560e0518801518561339c565b610767565b610bbc8888518661339c565b610762565b915060e0513d60e05111610bf9575b610bda8188612696565b8660e051918101031261013a57610bf361075c966129cf565b91610731565b503d610bd0565b90945060e0513d60e05111610c37575b610c1a8183612696565b8160e051918101031261013a57610c30906129cf565b938a610706565b503d610c10565b90945060e0513d60e05111610c75575b610c588183612696565b8160e051918101031261013a57610c6e906129cf565b93896106dd565b503d610c4e565b905060e0513d60e05111610cb1575b610c958183612696565b8160e051918101031261013a57610cab906129cf565b886106b4565b503d610c8b565b60c05161068d565b6001600160a01b0385163b1561013a57604051630b0d9c0960e01b81526001600160a01b038481166004830152306024830152604482019290925260c05190918290606490829084908a165af18015610b1557156106605760c051610d2491612696565b60c05161013a5786610660565b610d619350610d4290600f0b612cca565b9160405192610d52602085612696565b60c0518452600f0b9188613199565b6001600160801b03166105b4565b9050936105aa565b82516001600160a01b03169a6105a1565b6001600160801b038361058b565b634e487b7160e01b60c051526032600452602460c051fd5b6319dcad4d60e31b60c05152600460c051fd5b90919299610e299460408c610de5610dd98288612cb5565b505460020b9187612cb5565b505460181c60020b825191610df98361265f565b8252602082015260c0518282015260c0516060820152815180988192632d35e7ed60e11b83528760048401612b6e565b60c0519190039082906001600160a01b038f165af1958615610b155760c05196610e77575b50600191610e63610e6d928860801d90612bbc565b96600f0b90612bbc565b9a01929190610526565b610e6d91965091610e63610ea360019460403d8111610eaf575b610e9b8183612696565b810190612b58565b90509792505091610e4e565b503d610e91565b90503d8060c051833e610ec98183612696565b81019060208183031261013a578051906001600160401b03821161013a570160408183031261013a5760405191610eff8361260e565b81516001600160401b03811161013a5782019080601f8301121561013a57815191610f29836128ea565b92610f376040519485612696565b80845260208085019160051b8301019183831161013a5760208101915b838310610f7a575050505050610f6f916020918452016129cf565b6020820152856104ec565b82516001600160401b03811161013a5782019060a0828703601f19011261013a5760405190610fa882612644565b610fb4602084016129cf565b8252610fc2604084016129e3565b6020830152610fd3606084016129f3565b6040830152610fe4608084016129cf565b606083015260a0830151916001600160401b03831161013a5761100f88602080969581960101612a76565b6080820152815201920191610f54565b604051632653ac6960e21b815260a49061103b60048201612a01565bfd5b3461013a5761104b366127d7565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330393506101279250505057630a85dc2960e01b60c05152600460c051fd5b34610b0a576020366003190112610b0a576004356001600160401b038111610b0a576110c790369060040161257e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381169291903384900361172d5761110682612901565b916111146040519384612696565b80835260208301933682820111610b0a57815f926020928737840101526111396129ab565b5081518201916020830193602082850312610b0a5751906001600160401b038211610b0a5701808303929060c08412610b0a5760a06040519461117b8661260e565b12610b0a5760405161118c81612644565b611198602083016129cf565b81526111a6604083016129cf565b60208201526111b7606083016129e3565b60408201526111c8608083016129f3565b60608201526111d960a083016129cf565b6080820152845260c08101516001600160401b038111610b0a5760209101019380601f86011215610b0a57845191611210836128ea565b9561121e6040519788612696565b838752602060608189019502820101928311610b0a57602001925b8284106116cb57505050508260208301528151915f935f936112596129ab565b508151905f925b8284106115ca5750505050519061128160018060a01b038351163083612c29565b9161129c602082019260018060a01b03845116903090612c29565b925f8113611554575b60c05184136114dc575b60c051811261141f575b505060c0518212611344575b6113408484604051916112d78361265f565b60c05183526060602084019360c05185526040810192600f0b83520191600f0b82526040519260c051602085015251604084015251600f0b606083015251600f0b60808201526080815261132c60a082612696565b604051918291602083526020830190612856565b0390f35b80516001600160a01b0316853b1561013a57604051632961046560e21b8152600481019190915260c05181602481838a5af18015610b1557611402575b50936113a6602092826113a060049860018060a01b0390511692612ca5565b91612fce565b60405194858092630476982d60e21b825260c051905af1928315610b1557611340936113d3575b806112c5565b6113f49060203d6020116113fb575b6113ec8183612696565b810190612c1a565b50836113cd565b503d6113e2565b60c05191959161141191612696565b60c05161013a579385611381565b81516001600160a01b0316873b1561013a57604051632961046560e21b8152600481019190915260c05181602481838c5af1908115610b155788916114c0575b506113a06114779360018060a01b0390511692612ca5565b604051630476982d60e21b815260208160048160c0518a5af18015610b15576114a1575b806112b9565b6114b99060203d6020116113fb576113ec8183612696565b508561149b565b6114ce915060c05190612696565b60c05161013a57868861145f565b82516001600160a01b0316873b1561013a57604051630b0d9c0960e01b815260c0516001600160a01b0390921660048201523060248201526044810186905290818060648101038160c0518c5af18015610b155761153b575b506112af565b60c05161154791612696565b60c05161013a5787611535565b81516001600160a01b0316873b15610b0a57604051630b0d9c0960e01b81526001600160a01b03919091166004820152306024820152604481018290525f81606481838c5af180156115bf576115ab575b506112a5565b5f6115b591612696565b5f60c052876115a5565b6040513d5f823e3d90fd5b909192956115d88783612b30565b515160020b9760206115ea8985612b30565b51015160020b986001600160801b0360406116058b87612b30565b510151165f81126116bc578b604092611653925f9d8551926116268461265f565b83526020830152848201528c606082015283519c8d80948193632d35e7ed60e11b83528b60048401612b6e565b03925af19889156115bf575f9961168e575b5060019161167a611684928b60801d90612bbc565b99600f0b90612bbc565b9601929190611260565b6116849199509161167a6116b160019460403d8111610eaf57610e9b8183612696565b509a92505091611665565b6393dafdf160e01b5f5260045ffd5b606060208584030112610b0a57604051906116e582612629565b6116ee856129f3565b82526116fc602086016129f3565b60208301526040850151906001600160801b0382168203610b0a578260209260406060950152815201930192611239565b63570c108560e11b5f5260045ffd5b34610b0a57610100366003190112610b0a57611756612568565b60a0366023190112610b0a5761176a612840565b506117736126b7565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316903382900361172d5760405163442f7de960e11b81526001600160a01b039182166004820181905291602090829060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa9081156115bf575f916121bd575b5060ff60049116036121ab57806001600160a01b03611821366126c7565b5116146101605260405163b80945e960e01b81525f81600481855afa80156115bf575f61014052611fd2575b50602061014051019061ffff825116611865816128ea565b906118736040519283612696565b808252611882601f19916128ea565b015f5b818110611fbb5750505f6101008190526101405160a08101515161012052919360c09092019190805b610120518110611c2b57506b019d971e4fe8401e74000000036b019d971e4fe8401e740000008111611bcd576101405160a00151610120515f198101908111611bcd576118fe8161190993612b30565b5160020b9451612b30565b5160020b611915612be2565b506101605115611c0c57925b6101605115611c075750611933613888565b8060020b918460020b9483861215611bf0579061196261195c6001600160801b03959493613483565b92613483565b6101605115611be157611974926138f6565b905b6040519461198386612629565b8552602085015216604083015261ffff5f19915116019061ffff8211611bcd5761ffff6119bd9216906119b68286612b30565b5283612b30565b50604051906119cb8261260e565b8152600160208201918383526119e361046c366126c7565b5f528160205260405f2090828060a01b039051166bffffffffffffffffffffffff60a01b82541617815501905190815191680100000000000000008311611bb9578154838355808410611b93575b50602001905f5260205f205f915b838310611b2f575f80611ad288611a8d611aae8a611aa0611a5f366126c7565b9160405192611a6d8461260e565b83526020830190815260405194859360208086015260408501905161291c565b5160c060e084015261010083019061274e565b03601f198101835282612696565b6040519485809481936348c8949160e01b8352602060048401526024830190612856565b03925af180156115bf57611af3575b604051636fe7e6eb60e01b8152602090f35b3d805f833e611b028183612696565b8101602082820312610b0a5781516001600160401b038111610b0a57611b289201612a76565b5080611ae1565b6001602082829351805190865462ffffff75ffffffffffffffffffffffffffffffff00000000000060408785015160181b94015160301b1693169069ffffffffffffffffffff60b01b16179065ffffff000000161717855501920192019190611a3f565b825f528360205f2091820191015b818110611bae5750611a31565b5f8155600101611ba1565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b611bea926138b3565b90611976565b838663352d1ec160e11b5f5260045260245260445ffd5b611933565b50611c2560c8611c2081620d89e7196137b0565b6137d2565b92611921565b9094611c47611c418360e0610140510151612b30565b51612d14565b90611c598360a0610140510151612b30565b5160020b91611c69848751612b30565b5160020b9261ffff611c82866080610140510151612b30565b511690610160515f14611fb257611ca585915b6101605115611fac578096612f93565b90611caf81613483565b670de0b6b3a76400008402848104670de0b6b3a76400001485151715611bcd57611cd99086612db0565b935f975f5b828110611d3b57505050505050508211611d2c57600191611cff9197612c00565b91611d2261ffff611d17836080610140510151612b30565b511661010051612c00565b61010052016118ae565b6366bf045960e01b5f5260045ffd5b6101605115611f8657611d6e611d6562ffffff611d5b86828b1686612f13565b1660020b84612fb0565b610160516137e9565b8560020b8160020b03611d85575b50600101611cde565b611d8e81613483565b5f908a611e14575b60019392611dfe928d926001600160a01b03908116908a161015611e05576001600160801b03908a925b60405193611dcd85612629565b60020b845260020b6020840152166040820152611df7611df08561010051612c00565b8093612b30565b528b612b30565b5090611d7c565b6001600160801b03908a611dc0565b61016051909c929392915015611f74578b611e308a88836138f6565b915b8c888493610160515f14611f265791506001600160a01b038a811690831611611f1c575b6001600160a01b038216908115611f10578f956001600160a01b038281169260609290921b6fffffffffffffffffffffffffffffffff60601b169190611ea29084908784031684612f13565b948315611efc5790036001600160a01b03169009611ee4575b600196928282611ed793611dfe98979506151591040190612c00565b9e92509250929350611d96565b95919350600101918215610b0a57918d939195611ebb565b634e487b7160e01b5f52601260045260245ffd5b62bfc9215f526004601cfd5b50508d8890611e56565b92611dfe9560016001600160801b03611ed794829b97838060a09b999b1b031690838060a01b0316038060ff1d908101189216611f638382612e47565b928260601b91091515160190612c00565b8b611f808a82896138b3565b91611e32565b611d6e611fa762ffffff611f9d86828b1686612f13565b1660020b84612f93565b611d65565b86612f93565b611ca581611c95565b602090611fc6612be2565b82828601015201611885565b3d805f833e611fe18183612696565b810190602081830312610b0a578051906001600160401b038211610b0a57019061010082820312610b0a576040519161010083018381106001600160401b03821117611bb95760405261203381612985565b835261204160208201612abc565b6020840152612052604082016129e3565b6040840152612063606082016129f3565b606084015260808101516001600160401b038111610b0a57810182601f82011215610b0a57805190612094826128ea565b916120a26040519384612696565b80835260208084019160051b83010191858311610b0a57602001905b82821061219357505050608084015260a08101516001600160401b038111610b0a57826120ec918301612acb565b60a084015260c08101516001600160401b038111610b0a5782612110918301612acb565b60c084015260e0810151906001600160401b038211610b0a57019080601f83011215610b0a578151612141816128ea565b9261214f6040519485612696565b81845260208085019260051b820101928311610b0a57602001905b8282106121835750505060e0820152610140528261184d565b815181526020918201910161216a565b602080916121a084612abc565b8152019101906120be565b63fb9d975f60e01b5f5260045260245ffd5b90506020813d6020116121f4575b816121d860209383612696565b81010312610b0a5760ff6121ed600492612985565b9150611803565b3d91506121cb565b34610b0a5761220a366127d7565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303935061172d9250505057630a85dc2960e01b5f5260045ffd5b34610b0a576020366003190112610b0a5760043568ffffffffffffffffff198116809103610b0a576122826128d1565b505f52600160205260405f2060016040519161229d8361260e565b818060a01b038154168352019081546122b5816128ea565b926122c36040519485612696565b81845260208401905f5260205f205f915b8383106122f057602085018690526040518061134087826127a8565b60016020819260405161230281612629565b6001600160801b0386548060020b83528060181c60020b8584015260301c1660408201528152019201920191906122d4565b34610b0a57610140366003190112610b0a5761234e612568565b5060a0366023190112610b0a5760603660c3190112610b0a57610124356001600160401b038111610b0a5761238790369060040161257e565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361172d57630a85dc2960e01b5f5260045ffd5b34610b0a5760a0366003190112610b0a576040516123e581612644565b6004356001600160a01b0381168103610b0a5781526024356001600160a01b0381168103610b0a57602082015260443562ffffff81168103610b0a5760408201526064358060020b8103610b0a576060820152608435906001600160a01b0382168203610b0a5761246391608082015261245d6128d1565b5061295f565b5f52600160205260405f2060016040519161247d8361260e565b818060a01b03815416835201908154612495816128ea565b926124a36040519485612696565b81845260208401905f5260205f205f915b8383106124d057602085018690526040518061134087826127a8565b6001602081926040516124e281612629565b6001600160801b0386548060020b83528060181c60020b8584015260301c1660408201528152019201920191906124b4565b34610b0a57612522366125ab565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303915061172d905057630a85dc2960e01b5f5260045ffd5b600435906001600160a01b0382168203610b0a57565b9181601f84011215610b0a578235916001600160401b038311610b0a5760208381860195010111610b0a57565b90610160600319830112610b0a576004356001600160a01b0381168103610b0a579160a0602319820112610b0a57602491608060c319830112610b0a5760c49161014435906001600160401b038211610b0a5761260a9160040161257e565b9091565b604081019081106001600160401b03821117611bb957604052565b606081019081106001600160401b03821117611bb957604052565b60a081019081106001600160401b03821117611bb957604052565b608081019081106001600160401b03821117611bb957604052565b6101c081019081106001600160401b03821117611bb957604052565b90601f801991011681019081106001600160401b03821117611bb957604052565b60e435908160020b8203610b0a57565b60a0906023190112610b0a57604051906126e082612644565b816024356001600160a01b0381168103610b0a5781526044356001600160a01b0381168103610b0a57602082015260643562ffffff81168103610b0a5760408201526084358060020b8103610b0a57606082015260a435906001600160a01b0382168203610b0a5760800152565b90602080835192838152019201905f5b81811061276b5750505090565b909192602060606001926001600160801b0360408851805160020b84528581015160020b868501520151166040820152019401910191909161275e565b602080825282516001600160a01b03168282015291909101516040808301526127d4916060019061274e565b90565b906101a0600319830112610b0a576004356001600160a01b0381168103610b0a579160a0602319820112610b0a57602491608060c319830112610b0a5760c4916101443591610164359161018435906001600160401b038211610b0a5761260a9160040161257e565b60c435906001600160a01b0382168203610b0a57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b610120600319820112610b0a576004356001600160a01b0381168103610b0a579160a0602319830112610b0a5760249160c4359160e4359161010435906001600160401b038211610b0a5761260a9160040161257e565b604051906128de8261260e565b60606020835f81520152565b6001600160401b038111611bb95760051b60200190565b6001600160401b038111611bb957601f01601f191660200190565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60405161297060208201809361291c565b60a0815261297f60c082612696565b51902090565b519060ff82168203610b0a57565b906105dc8202918083046105dc1490151715611bcd57565b604051906129b88261265f565b5f6060838281528260208201528260408201520152565b51906001600160a01b0382168203610b0a57565b519062ffffff82168203610b0a57565b51908160020b8203610b0a57565b6024356001600160a01b03811690819003610b0a5781526044356001600160a01b03811690819003610b0a57602082015260643562ffffff8116809103610b0a5760408201526084358060020b809103610b0a57606082015260a4356001600160a01b0381169190829003610b0a5760800152565b81601f82011215610b0a57805190612a8d82612901565b92612a9b6040519485612696565b82845260208383010111610b0a57815f9260208093018386015e8301015290565b519061ffff82168203610b0a57565b9080601f83011215610b0a578151612ae2816128ea565b92612af06040519485612696565b81845260208085019260051b820101928311610b0a57602001905b828210612b185750505090565b60208091612b25846129f3565b815201910190612b0b565b8051821015612b445760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9190826040910312610b0a576020825192015190565b9061016092612b7f8360609361291c565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201526101406101208201525f6101408201520190565b90600f0b90600f0b019060016001607f1b0319821260016001607f1b03831317611bcd57565b60405190612bef82612629565b5f6040838281528260208201520152565b91908201809211611bcd57565b91908203918211611bcd57565b90816020910312610b0a575190565b6001600160a01b039182165f9081529282166020908152604093849020935163789add5560e11b815260048101949094529183916024918391165afa9081156115bf575f91612c76575090565b90506020813d602011612c9d575b81612c9160209383612696565b81010312610b0a575190565b3d9150612c84565b600160ff1b8114611bcd575f0390565b8054821015612b44575f5260205f2001905f90565b600f0b6f7fffffffffffffffffffffffffffffff198114611bcd575f0390565b60405190612cf782612644565b5f6080838281528260208201528260408201528260608201520152565b806b019d971e4fe8401e74000000025f19826b019d971e4fe8401e7400000009818082109103908082039182670de0b6b3a76400001115610b0a5714612da057670de0b6b3a76400007faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac10669936b019d971e4fe8401e740000000990828211900360ee1b910360121c170290565b50670de0b6b3a764000091500490565b90670de0b6b3a76400008202905f19670de0b6b3a7640000840992828085109403938085039485841115610b0a5714612e4057670de0b6b3a764000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b1115610b0a5714612e8757600160601b910990828211900360a01b910360601c1790565b50505060601c90565b90606082901b905f19600160601b840992828085109403938085039485841115610b0a5714612e40578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b91818302915f1981850993838086109503948086039586851115610b0a5714612f8b579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b600291820b910b0390627fffff198212627fffff831317611bcd57565b9060020b9060020b0190627fffff198212627fffff831317611bcd57565b9091906001600160a01b038116908161305c5750505f80808093855af115612ff35750565b6040516390bfb86560e01b81526001600160a01b0390911660048201525f602482018190526080604483015260a03d601f01601f191690810160648401523d6084840152903d9060a484013e808201600460a482015260c4633d2cec6f60e21b91015260e40190fd5b60205f604481949682604095865198899363a9059cbb60e01b855260018060a01b0316600485015260248401525af13d15601f3d116001855114161716928281528260208201520152156130ad5750565b6040516390bfb86560e01b8152600481019190915263a9059cbb60e01b602482015260806044820152601f3d01601f191660a0810160648301523d60848301523d5f60a484013e808201600460a482015260c4633c9fd93960e21b91015260e40190fd5b9061311a612cea565b5081516001600160a01b038281169291169081831015613191575b60018060a01b03168092149262ffffff602082015116604082015160020b91606060018060a01b0391015116926040519461316f86612644565b85526001600160a01b0316602085015260408401526060830152608082015291565b508190613135565b909392916020918115613295576132015f6401000276a4975b613232604051956131c287612629565b15158087528787018981526001600160a01b03909b16604080890191825251633cf3645360e21b81529b919a8c9889978896929492600488019061291c565b51151560a48601525160c4850152516001600160a01b031660e4840152610120610104840152610124830190612856565b03926001600160a01b03165af19283156115bf575f93613261575b505f130361325b57600f0b90565b60801d90565b9092506020813d60201161328d575b8161327d60209383612696565b81010312610b0a5751915f61324d565b3d9150613270565b6132015f73fffd8963efd1fc6a506488495d951d5263988d25976131b2565b9291906001600160801b036132c7612cea565b94169182156133685715613362576127106132e183612993565b045b84521561335c576127106132f682612993565b045b6020840190815261138882029082820461138803611bcd5761271060608601920482526101f48302918383046101f403611bcd5761334d61334d9261334d6133559661271060808b0197048752895190612c0d565b905190612c0d565b6040830152565b5f6132f8565b5f6132e3565b505050565b3d15613397573d9061337e82612901565b9161338c6040519384612696565b82523d5f602084013e565b606090565b9190918215613368576001600160a01b0316806133e657505f918291829182916001600160a01b03165af16133cf61336d565b50156133d757565b630db2c7f160e31b5f5260045ffd5b915f61343792819260405190602082019263a9059cbb60e01b845260018060a01b03166024830152604482015260448152613422606482612696565b519082865af161343061336d565b9083613998565b805190811515918261345f575b505061344d5750565b635274afe760e01b5f5260045260245ffd5b8192509060209181010312610b0a5760200151801590811503610b0a575f80613444565b60020b908160ff1d82810118620d89e8811161379d5763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116613781575b60048116613765575b60088116613749575b6010811661372d575b60208116613711575b604081166136f5575b608081166136d9575b61010081166136bd575b61020081166136a1575b6104008116613685575b6108008116613669575b611000811661364d575b6120008116613631575b6140008116613615575b61800081166135f9575b6201000081166135dd575b6202000081166135c2575b6204000081166135a7575b620800001661358e575b5f12613586575b0160201c90565b5f190461357f565b6b048a170391f7dc42444e8fa290910260801c90613578565b6d2216e584f5fa1ea926041bedfe9890920260801c9161356e565b916e5d6af8dedb81196699c329225ee6040260801c91613563565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91613558565b916f31be135f97d08fd981231505542fcfa60260801c9161354d565b916f70d869a156d2a1b890bb3df62baf32f70260801c91613543565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91613539565b916fd097f3bdfd2022b8845ad8f792aa58250260801c9161352f565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91613525565b916ff3392b0822b70005940c7a398e4b70f30260801c9161351b565b916ff987a7253ac413176f2b074cf7815e540260801c91613511565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91613507565b916ffe5dee046a99a2a811c461f1969c30530260801c916134fd565b916fff2ea16466c96a3843ec78b326b528610260801c916134f4565b916fff973b41fa98c081472e6896dfb254c00260801c916134eb565b916fffcb9843d60f6159c9db58835c9266440260801c916134e2565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916134d9565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916134d0565b916ffff97272373d413259a46990580e213a0260801c916134c7565b826345c3193d60e11b5f5260045260245ffd5b60020b9060020b908115611efc57627fffff1981145f19831416611bcd570590565b9060020b9060020b02908160020b918203611bcd57565b1561383b575f8160020b125f1461382c5761380760c8600192612f93565b60020b01627fffff8113627fffff19821217611bcd5760c8611c20816127d4936137b0565b60c8611c20816127d4936137b0565b5f8160020b125f146138565760c8611c20816127d4936137b0565b60c861386191612fb0565b60020b5f1901627fffff198112627fffff821317611bcd5760c8611c20816127d4936137b0565b6127d460c8611c2081620d89e86137b0565b6001600160a01b039182169082160391908211611bcd57565b6127d4926138eb9290916001600160a01b03808316908216116138f0575b6001600160a01b03916138e4919061389a565b1690612e90565b61394a565b906138d1565b6127d4926138eb929091906001600160a01b0380821690831611613944575b61393d61392e6001600160a01b03838116908516612e47565b926001600160a01b039261389a565b1691612f13565b90613915565b906001600160801b03821691820361395e57565b60405162461bcd60e51b81526020600482015260126024820152716c6971756964697479206f766572666c6f7760701b6044820152606490fd5b906139bc57508051156139ad57805190602001fd5b630a12f52160e11b5f5260045ffd5b815115806139ed575b6139cd575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156139c556fea2646970667358221220e5a203b32ff51b9fba4d80279a2becf4828e072c452ce8d412773daea18a795964736f6c634300081c0033000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b00000000000000000000000025271c98c1548c075c6dd463308c9a37135c842c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006ff5693b99212da76ad316178a184ab56d299b430000000000000000000000007c5f5a4bbd8fd63184577525326123b519429bdc