0 txs
50.8k calls
constructor
constructor(address _factory)
functions
balanceOf
viewfunction balanceOf(address _account, uint256 _id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] _accounts, uint256[] _ids) view returns (uint256[] batchBalances)
factory
viewfunction factory() view returns (address)
feeParameters
viewfunction feeParameters() view returns (tuple)
findFirstNonEmptyBinId
viewfunction findFirstNonEmptyBinId(uint24 _id, bool _swapForY) view returns (uint24)
getBin
viewfunction getBin(uint24 _id) view returns (uint256 reserveX, uint256 reserveY)
getGlobalFees
viewfunction getGlobalFees() view returns (uint128 feesXTotal, uint128 feesYTotal, uint128 feesXProtocol, uint128 feesYProtocol)
getOracleParameters
viewfunction getOracleParameters() view returns (uint256 oracleSampleLifetime, uint256 oracleSize, uint256 oracleActiveSize, uint256 oracleLastTimestamp, uint256 oracleId, uint256 min, uint256 max)
getOracleSampleFrom
viewfunction getOracleSampleFrom(uint256 _timeDelta) view returns (uint256 cumulativeId, uint256 cumulativeVolatilityAccumulated, uint256 cumulativeBinCrossed)
getReservesAndId
viewfunction getReservesAndId() view returns (uint256 reserveX, uint256 reserveY, uint256 activeId)
isApprovedForAll
viewfunction isApprovedForAll(address _owner, address _spender) view returns (bool)
name
purefunction name() pure returns (string)
pendingFees
viewfunction pendingFees(address _account, uint256[] _ids) view returns (uint256 amountX, uint256 amountY)
supportsInterface
viewfunction supportsInterface(bytes4 _interfaceId) view returns (bool)
symbol
purefunction symbol() pure returns (string)
tokenX
viewfunction tokenX() view returns (address)
tokenY
viewfunction tokenY() view returns (address)
totalSupply
viewfunction totalSupply(uint256 _id) view returns (uint256)
burn
nonpayablefunction burn(uint256[] _ids, uint256[] _amounts, address _to) returns (uint256 amountX, uint256 amountY)
collectFees
nonpayablefunction collectFees(address _account, uint256[] _ids) returns (uint256 amountX, uint256 amountY)
collectProtocolFees
nonpayablefunction collectProtocolFees() returns (uint128 amountX, uint128 amountY)
flashLoan
nonpayablefunction flashLoan(address _receiver, address _token, uint256 _amount, bytes _data)
forceDecay
nonpayablefunction forceDecay()
increaseOracleLength
nonpayablefunction increaseOracleLength(uint16 _newLength)
initialize
nonpayablefunction initialize(address _tokenX, address _tokenY, uint24 _activeId, uint16 _sampleLifetime, bytes32 _packedFeeParameters)
mint
nonpayablefunction mint(uint256[] _ids, uint256[] _distributionX, uint256[] _distributionY, address _to) returns (uint256, uint256, uint256[] liquidityMinted)
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address _from, address _to, uint256[] _ids, uint256[] _amounts)
safeTransferFrom
nonpayablefunction safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount)
setApprovalForAll
nonpayablefunction setApprovalForAll(address _spender, bool _approved)
setFeesParameters
nonpayablefunction setFeesParameters(bytes32 _packedFeeParameters)
swap
nonpayablefunction swap(bool _swapForY, address _to) returns (uint256 amountXOut, uint256 amountYOut)
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed sender, bool approved)
CompositionFee
event CompositionFee(address indexed sender, address indexed recipient, uint256 indexed id, uint256 feesX, uint256 feesY)
DepositedToBin
event DepositedToBin(address indexed sender, address indexed recipient, uint256 indexed id, uint256 amountX, uint256 amountY)
FeesCollected
event FeesCollected(address indexed sender, address indexed recipient, uint256 amountX, uint256 amountY)
FlashLoan
event FlashLoan(address indexed sender, address indexed receiver, address token, uint256 amount, uint256 fee)
OracleSizeIncreased
event OracleSizeIncreased(uint256 previousSize, uint256 newSize)
ProtocolFeesCollected
event ProtocolFeesCollected(address indexed sender, address indexed recipient, uint256 amountX, uint256 amountY)
Swap
event Swap(address indexed sender, address indexed recipient, uint256 indexed id, bool swapForY, uint256 amountIn, uint256 amountOut, uint256 volatilityAccumulated, uint256 fees)
TransferBatch
event TransferBatch(address indexed sender, address indexed from, address indexed to, uint256[] ids, uint256[] amounts)
TransferSingle
event TransferSingle(address indexed sender, address indexed from, address indexed to, uint256 id, uint256 amount)
WithdrawnFromBin
event WithdrawnFromBin(address indexed sender, address indexed recipient, uint256 indexed id, uint256 amountX, uint256 amountY)
errors
BinHelper__BinStepOverflows
error BinHelper__BinStepOverflows(uint256 bp)
BinHelper__IdOverflows
error BinHelper__IdOverflows()
LBPair__AddressZero
error LBPair__AddressZero()
LBPair__AddressZeroOrThis
error LBPair__AddressZeroOrThis()
LBPair__AlreadyInitialized
error LBPair__AlreadyInitialized()
LBPair__CompositionFactorFlawed
error LBPair__CompositionFactorFlawed(uint256 id)
LBPair__DistributionsOverflow
error LBPair__DistributionsOverflow()
LBPair__FlashLoanCallbackFailed
error LBPair__FlashLoanCallbackFailed()
LBPair__FlashLoanInvalidBalance
error LBPair__FlashLoanInvalidBalance()
LBPair__FlashLoanInvalidToken
error LBPair__FlashLoanInvalidToken()
LBPair__InsufficientAmounts
error LBPair__InsufficientAmounts()
LBPair__InsufficientLiquidityBurned
error LBPair__InsufficientLiquidityBurned(uint256 id)
LBPair__InsufficientLiquidityMinted
error LBPair__InsufficientLiquidityMinted(uint256 id)
LBPair__OnlyFactory
error LBPair__OnlyFactory()
LBPair__OnlyFeeRecipient
error LBPair__OnlyFeeRecipient(address feeRecipient, address sender)
LBPair__OnlyStrictlyIncreasingId
error LBPair__OnlyStrictlyIncreasingId()
LBPair__OracleNewSizeTooSmall
error LBPair__OracleNewSizeTooSmall(uint256 newSize, uint256 oracleSize)
LBPair__WrongLengths
error LBPair__WrongLengths()
LBToken__BurnExceedsBalance
error LBToken__BurnExceedsBalance(address from, uint256 id, uint256 amount)
LBToken__BurnFromAddress0
error LBToken__BurnFromAddress0()
LBToken__LengthMismatch
error LBToken__LengthMismatch(uint256 accountsLength, uint256 idsLength)
LBToken__MintToAddress0
error LBToken__MintToAddress0()
LBToken__SelfApproval
error LBToken__SelfApproval(address owner)
LBToken__SpenderNotApproved
error LBToken__SpenderNotApproved(address owner, address spender)
LBToken__TransferExceedsBalance
error LBToken__TransferExceedsBalance(address from, uint256 id, uint256 amount)
LBToken__TransferFromOrToAddress0
error LBToken__TransferFromOrToAddress0()
LBToken__TransferToSelf
error LBToken__TransferToSelf()
Math128x128__PowerUnderflow
error Math128x128__PowerUnderflow(uint256 x, int256 y)
Math512Bits__MulDivOverflow
error Math512Bits__MulDivOverflow(uint256 prod1, uint256 denominator)
Math512Bits__MulShiftOverflow
error Math512Bits__MulShiftOverflow(uint256 prod1, uint256 offset)
Math512Bits__OffsetOverflows
error Math512Bits__OffsetOverflows(uint256 offset)
Oracle__LookUpTimestampTooOld
error Oracle__LookUpTimestampTooOld(uint256 _minTimestamp, uint256 _lookUpTimestamp)
Oracle__NotInitialized
error Oracle__NotInitialized()
ReentrancyGuardUpgradeable__AlreadyInitialized
error ReentrancyGuardUpgradeable__AlreadyInitialized()
ReentrancyGuardUpgradeable__ReentrantCall
error ReentrancyGuardUpgradeable__ReentrantCall()
SafeCast__Exceeds112Bits
error SafeCast__Exceeds112Bits(uint256 x)
SafeCast__Exceeds128Bits
error SafeCast__Exceeds128Bits(uint256 x)
SafeCast__Exceeds24Bits
error SafeCast__Exceeds24Bits(uint256 x)
SafeCast__Exceeds40Bits
error SafeCast__Exceeds40Bits(uint256 x)
TokenHelper__CallFailed
error TokenHelper__CallFailed()
TokenHelper__NonContract
error TokenHelper__NonContract()
TokenHelper__TransferFailed
error TokenHelper__TransferFailed()
TreeMath__ErrorDepthSearch
error TreeMath__ErrorDepthSearch()
creation bytecode
0x60a06040523480156200001157600080fd5b506040516200601b3803806200601b83398101604081905262000034916200006e565b6001600160a01b0381166200005c576040516317be04b760e01b815260040160405180910390fd5b6001600160a01b0316608052620000a0565b6000602082840312156200008157600080fd5b81516001600160a01b03811681146200009957600080fd5b9392505050565b608051615f3c620000df6000396000818161063c0152818161185101528181612cea015281816130bf0152818161323d01526141a60152615f3c6000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80638f919a831161010f578063bd85b039116100a2578063d3b9fbe411610071578063d3b9fbe414610684578063e985e9c51461068c578063f7cff1f81461069f578063fba0ee64146106b257600080fd5b8063bd85b03914610617578063c45a015514610637578063c7bd65861461065e578063d32db4371461067157600080fd5b8063a21635a7116100de578063a21635a7146105a3578063a22cb465146105b6578063a582cdaa146105c9578063b7d19fc41461060457600080fd5b80638f919a83146103f357806395d89b411461041a57806398c7adf314610439578063a1af5b9a1461057b57600080fd5b80631b05b83e1161018757806354b5fc871161015657806354b5fc871461036e57806355182894146103815780635cffe9de146103be578063714c8592146103d157600080fd5b80631b05b83e146102ef578063225b20b9146103285780634e1273f41461033b57806353c059a01461035b57600080fd5b80630abe9688116101c35780630abe9688146102745780630acd451d1461029c5780630febdd49146102af57806316dc165b146102c457600080fd5b8062fdd58e146101e957806301ffc9a71461020f57806306fdde0314610232575b600080fd5b6101fc6101f73660046154c0565b6106c5565b6040519081526020015b60405180910390f35b61022261021d3660046154ec565b6106ed565b6040519015158152602001610206565b60408051808201909152601481527f4c697175696469747920426f6f6b20546f6b656e00000000000000000000000060208201525b6040516102069190615542565b610287610282366004615588565b610718565b60408051928352602083019190915201610206565b6102876102aa3660046155ef565b61072d565b6102c26102bd366004615673565b6109f8565b005b6004546102d7906001600160a01b031681565b6040516001600160a01b039091168152602001610206565b6007546006546001600160881b03601882901c811692169062ffffff165b60408051938452602084019290925290820152606001610206565b6102876103363660046156b9565b610b1c565b61034e61034936600461570e565b610da9565b60405161020691906157b5565b6102876103693660046157d6565b610e9f565b6102c261037c36600461580f565b611846565b6103896118c8565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610206565b6102c26103cc366004615828565b61193d565b6103e46103df3660046158c7565b611da0565b60405161020693929190615975565b610406610401366004615994565b612ca3565b60405162ffffff9091168152602001610206565b60408051808201909152600381526213109560ea1b6020820152610267565b61056e6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152506040805161018081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b8104831660808301526a0100000000000000000000810462ffffff90811660a0840152600160681b820490931660c0830152600160781b8104831660e0830152600160901b81048316610100830152600160a81b81048316610120830152600160c01b8104909216610140820152600160d81b90910464ffffffffff1661016082015290565b60405161020691906159c0565b610583612cb8565b604080516001600160801b03938416815292909116602083015201610206565b61030d6105b136600461580f565b612ee2565b6102c26105c4366004615ab2565b613064565b6105d1613073565b604080516001600160801b0395861681529385166020850152918416918301919091529091166060820152608001610206565b6005546102d7906001600160a01b031681565b6101fc61062536600461580f565b60009081526002602052604090205490565b6102d77f000000000000000000000000000000000000000000000000000000000000000081565b6102c261066c366004615ae2565b6130ab565b6102c261067f366004615afd565b6130b4565b6102c2613232565b61022261069a366004615b5d565b613318565b6102876106ad3660046156b9565b613324565b6102c26106c0366004615b7b565b613477565b6000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006106f882613608565b806106e757506001600160e01b0319821663a22f6d6d60e01b1492915050565b6000806107248361363e565b91509150915091565b6000806001600354146107535760405163802d9bf160e01b815260040160405180910390fd5b60026003558515806107655750858414155b15610783576040516306fed5ff60e01b815260040160405180910390fd5b6007546006546001600160881b03601882901c811692169062ffffff1660005b898110156109535760006107ce8c8c848181106107c2576107c2615c10565b90506020020135613688565b905060008a8a848181106107e4576107e4615c10565b905060200201359050806000141561081b57604051636715a79f60e11b815262ffffff831660048201526024015b60405180910390fd5b6000806108278461363e565b9150915060006108488562ffffff1660009081526002602052604090205490565b9050600080888762ffffff1611610875576108648685856136b6565b9b8c019b998a900399938490039390505b888762ffffff161061089d5761088c8686856136b6565b9c8d019c9a8b90039a948590039491505b841580156108a9575083155b156108be576108be600c62ffffff89166136e0565b6000878152600b60205260409020607085901b860190556108e53062ffffff891688613765565b8662ffffff168e6001600160a01b0316336001600160a01b03167fda5e7177dface55f5e0eff7dfc67420a1db4243ddfcf0ecc84ed93e034dd8cc28585604051610939929190918252602082015260400190565b60405180910390a4505050505050508060010190506107a3565b50600680547fffffffffffffffffffffffff0000000000000000000000000000000000ffffff1663010000006001600160881b0386811691909102919091179091556007805470ffffffffffffffffffffffffffffffffff19169184169190911790556004546109cd906001600160a01b0316878761386a565b6005546109e4906001600160a01b0316878661386a565b505060016003555090969095509350505050565b83836001600160a01b0382161580610a1757506001600160a01b038116155b15610a355760405163020d233960e51b815260040160405180910390fd5b806001600160a01b0316826001600160a01b03161415610a6857604051638696f16760e01b815260040160405180910390fd5b8533610a74828261391f565b610aa45760405163548f773d60e01b81526001600160a01b03808416600483015282166024820152604401610812565b33610ab18989898961396b565b876001600160a01b0316896001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051610b09929190918252602082015260400190565b60405180910390a4505050505050505050565b600080600160035414610b425760405163802d9bf160e01b815260040160405180910390fd5b60026003556001600160a01b0385161580610b6557506001600160a01b03851630145b15610b835760405163bdfe054560e01b815260040160405180910390fd5b6001600160a01b0385166000908152600f6020526040812080549190556001600160801b0381169250608081901c915060005b84811015610c92576000868683818110610bd257610bd2615c10565b9050602002013590506000610be789836106c5565b90508015610c88576000828152600b60209081526040808320815160808101835281546001600160701b038082168352600160701b90910416938101939093526001810154918301919091526002015460608201529080610c4a838d8787613a0b565b6001600160801b031691506001600160801b03169150610c6c838d8787613a96565b610c76828a615c3c565b9850610c828189615c3c565b97505050505b5050600101610bb6565b508215610cdc5760088054849190600090610cb79084906001600160801b0316615c54565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b8115610d255760098054839190600090610d009084906001600160801b0316615c54565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b600454610d3c906001600160a01b0316878561386a565b600554610d53906001600160a01b0316878461386a565b60408051848152602081018490526001600160a01b0388169133917f28a87b6059180e46de5fb9ab35eb043e8fe00ab45afcc7789e3934ecbbcde3ea910160405180910390a35060016003559094909350915050565b60608382808214610dd757604051639c802a7560e01b81526004810183905260248101829052604401610812565b8567ffffffffffffffff811115610df057610df0615c7c565b604051908082528060200260200182016040528015610e19578160200160208202803683370190505b50925060005b86811015610e9457610e6f888883818110610e3c57610e3c615c10565b9050602002016020810190610e519190615c92565b878784818110610e6357610e63615c10565b905060200201356106c5565b848281518110610e8157610e81615c10565b6020908102919091010152600101610e1f565b505050949350505050565b600080600160035414610ec55760405163802d9bf160e01b815260040160405180910390fd5b6002600355604080516101408101825260065462ffffff811682526001600160881b03630100000090910481166020808401919091526007549182168385015261ffff600160881b830481166060850152600160981b830481166080850152600160a81b8304811660a085015264ffffffffff600160b81b84041660c0850152600160e01b90920490911660e0830152825180840184526008546001600160801b038082168352600160801b9182900481168385015261010085019290925284518086019095526009548083168652041690830152610120810191909152600085610fe857604082015161012083015151600554610fe3926001600160a01b03909116916001600160881b03909116906001600160801b0316613af7565b611021565b602082015161010083015151600454611021926001600160a01b03909116916001600160881b03909116906001600160801b0316613af7565b9050806110415760405163256111db60e21b815260040160405180910390fd5b6040805161018081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b81048316608083015262ffffff6a01000000000000000000008204811660a0840152600160681b820490931660c0830152600160781b8104831660e0830152600160901b81048316610100830152600160a81b81048316610120830152600160c01b8104831661014083015264ffffffffff600160d81b90910416610160820152835190911661111b8282613b7b565b60005b845162ffffff166000908152600b6020908152604091829020825160808101845281546001600160701b038082168352600160701b909104169281019290925260018101549282019290925260029091015460608201528915801561118c575080516001600160701b031615155b806111ab57508980156111ab575060208101516001600160701b031615155b1561132c5760008060006111d7878a6000015162ffffff168f8b88613c3890949392919063ffffffff16565b9250925092506112228d6111f0578961012001516111f7565b8961010001515b828f6112188d6000015162ffffff1660009081526002602052604090205490565b8893929190613d5c565b611243898e61123086613ddd565b61123986613ddd565b8893929190613e0a565b8051611258906001600160801b031684615c3c565b6112629089615caf565b975061126e8286615c3c565b945083600b60008b6000015162ffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160701b0302191690836001600160701b03160217905550602082015181600001600e6101000a8154816001600160701b0302191690836001600160701b0316021790555060408201518160010155606082015181600201559050506113288c8a600001518f86868c610100015162ffffff1687600001516001600160801b0316613ec3565b5050505b841561134d57855161134190600c908c613f31565b62ffffff168652611353565b50611359565b5061111e565b60006113c4866080015161ffff16876060015161ffff168860c0015164ffffffffff168960e0015161ffff168a6000015162ffffff1689610100015162ffffff166113b68d6000015162ffffff168b6140e790919063ffffffff16565b6011969594939291906140fe565b90508560e0015161ffff16811415806113e6575060c086015164ffffffffff16155b1561142a5761ffff811660e08701526113fe42614176565b64ffffffffff1660c087015260a086015161ffff1681141561142a5760a08601805160010161ffff1690525b83600a60008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548161ffff021916908361ffff16021790555060608201518160000160066101000a81548161ffff021916908361ffff16021790555060808201518160000160086101000a81548161ffff021916908361ffff16021790555060a082015181600001600a6101000a81548162ffffff021916908362ffffff16021790555060c082015181600001600d6101000a81548161ffff021916908361ffff16021790555060e082015181600001600f6101000a81548162ffffff021916908362ffffff1602179055506101008201518160000160126101000a81548162ffffff021916908362ffffff1602179055506101208201518160000160156101000a81548162ffffff021916908362ffffff1602179055506101408201518160000160186101000a81548162ffffff021916908362ffffff16021790555061016082015181600001601b6101000a81548164ffffffffff021916908364ffffffffff16021790555090505085600660008201518160000160006101000a81548162ffffff021916908362ffffff16021790555060208201518160000160036101000a8154816001600160881b0302191690836001600160881b0316021790555060408201518160010160006101000a8154816001600160881b0302191690836001600160881b0316021790555060608201518160010160116101000a81548161ffff021916908361ffff16021790555060808201518160010160136101000a81548161ffff021916908361ffff16021790555060a08201518160010160156101000a81548161ffff021916908361ffff16021790555060c08201518160010160176101000a81548164ffffffffff021916908364ffffffffff16021790555060e082015181600101601c6101000a81548161ffff021916908361ffff1602179055506101008201518160020160008201518160000160006101000a8154816001600160801b0302191690836001600160801b0316021790555060208201518160000160106101000a8154816001600160801b0302191690836001600160801b0316021790555050506101208201518160030160008201518160000160006101000a8154816001600160801b0302191690836001600160801b0316021790555060208201518160000160106101000a8154816001600160801b0302191690836001600160801b0316021790555050509050508915611815576005549196508691611810906001600160a01b03168a8461386a565b611831565b6004549197508791611831906001600160a01b03168a8461386a565b50505050505060016003819055509250929050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461188f57604051632486085360e01b815260040160405180910390fd5b600a805471ffffffffffffffffffffffffffffffffffff831671ffffffffffffffffffffffffffffffffffff1990911617905550565b50565b600080600080600080600061190b60075461ffff608882901c811692609883901c82169260a881901c83169264ffffffffff60b883901c169260e09290921c1690565b939a5091985096509450925084156119235786611926565b60005b91506119328588615cc6565b905090919293949596565b6001600354146119605760405163802d9bf160e01b815260040160405180910390fd5b60026003556004546001600160a01b03908116908516811480159061199357506005546001600160a01b03868116911614155b156119b15760405163992dfe2760e01b815260040160405180910390fd5b60006119bc856141a1565b9050600060405180604001604052806119d48461425c565b6001600160801b03168152600a5460209091019061271090611a0190600160681b900461ffff1686615cc6565b611a0b9190615cfb565b6001600160801b031690526040516370a0823160e01b81523060048201529091506000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a849190615d1d565b9050611a9a6001600160a01b0389168a8961386a565b8151604051635dbacec560e01b81527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9916001600160a01b038c1691635dbacec591611af39133918e918e91908e908e90600401615d36565b6020604051808303816000875af1158015611b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b369190615d1d565b14611b5457604051634a57011360e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038a16906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615d1d565b8351909150611bd7906001600160801b031683615c3c565b8114611bf6576040516314e232bd60e01b815260040160405180910390fd5b60065462ffffff166000818152600260205260409020548515611d3157866001600160a01b03168b6001600160a01b03161415611cbd57600080611c546008546009546001600160801b038083169390821692608090811c92901c90565b5089519294509250611c859160089150611c6e9085615d9a565b60208a0151611c7d9085615d9a565b60801b169055565b611c8f8784614289565b6000858152600b602052604081206001018054909190611cb0908490615c3c565b90915550611d3192505050565b600080611ce46008546009546001600160801b038083169390821692608090811c92901c90565b8a519295509350611cfe9250600991611c6e915085615d9a565b611d088784614289565b6000858152600b602052604081206002018054909190611d29908490615c3c565b909155505050505b8451604080516001600160a01b038e81168252602082018e90526001600160801b03909316818301529051918e169133917f3659d15bd4bb92ab352a8d35bc3119ec6e7e0ab48e4d46201c8a28e02b6a8a86919081900360600190a35050600160035550505050505050505050565b6000806060600160035414611dc85760405163802d9bf160e01b815260040160405180910390fd5b6002600355881580611dda5750888714155b80611de55750888514155b15611e03576040516306fed5ff60e01b815260040160405180910390fd5b60006006604051806101400160405290816000820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160039054906101000a90046001600160881b03166001600160881b03166001600160881b031681526020016001820160009054906101000a90046001600160881b03166001600160881b03166001600160881b031681526020016001820160119054906101000a900461ffff1661ffff1661ffff1681526020016001820160139054906101000a900461ffff1661ffff1661ffff1681526020016001820160159054906101000a900461ffff1661ffff1661ffff1681526020016001820160179054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff168152602001600282016040518060400160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b0316815250508152602001600382016040518060400160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b0316815250508152505090506000600a604051806101800160405290816000820160009054906101000a900461ffff1661ffff1661ffff1681526020016000820160029054906101000a900461ffff1661ffff1661ffff1681526020016000820160049054906101000a900461ffff1661ffff1661ffff1681526020016000820160069054906101000a900461ffff1661ffff1661ffff1681526020016000820160089054906101000a900461ffff1661ffff1661ffff16815260200160008201600a9054906101000a900462ffffff1662ffffff1662ffffff16815260200160008201600d9054906101000a900461ffff1661ffff1661ffff16815260200160008201600f9054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160129054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160159054906101000a900462ffffff1662ffffff1662ffffff1681526020016000820160189054906101000a900462ffffff1662ffffff1662ffffff16815260200160008201601b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250509050612238604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60208301516101008401515160045461227a92612275926001600160a01b03909216916001600160881b03909116906001600160801b0316613af7565b613ddd565b6001600160701b031681526040830151610120840151516005546122c292612275926001600160a01b03909216916001600160881b03909116906001600160801b0316613af7565b6001600160701b031660208201528b67ffffffffffffffff8111156122e9576122e9615c7c565b604051908082528060200260200182016040528015612312578160200160208202803683370190505b50935060005b8c811015612a19576123358e8e838181106107c2576107c2615c10565b62ffffff1661010083018190526000908152600b6020908152604091829020825160808101845281546001600160701b03808216808452600160701b90920416938201939093526001820154938101939093526002015460608301521580156123a9575060208101516001600160701b0316155b1561242f57610100830151600881901c6000818152600e602090815260408083208054600160ff80891682901b90921790925560109690961c808552600d845291842080549690951681901b909517909355908052600c90527f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e880549290911b90911790555b8c8c8381811061244157612441615c10565b905060200201358360c0018181516124599190615c3c565b9052508a8a8381811061246e5761246e615c10565b905060200201358360e0018181516124869190615c3c565b905250670de0b6b3a76400008d8d848181106124a4576124a4615c10565b90506020020135846000015102816124be576124be615ce5565b04610120840152670de0b6b3a76400008b8b848181106124e0576124e0615c10565b90506020020135846020015102816124fa576124fa615ce5565b0461014084015261010083015184516000916125199161ffff166142c2565b9050856000015162ffffff168461010001511061280d57856000015162ffffff1684610100015114156127e05781516001600160701b031615158061256a575060208201516001600160701b031615155b156127db57610100840151600090815260026020526040812054905060008060008761014001516125ac89610120015160808861430a9092919063ffffffff16565b6125b69190615c3c565b905060006125c48286615c3c565b90506125ef89610120015188600001516001600160701b03166125e79190615c3c565b8390836136b6565b935061261289610140015188602001516001600160701b03166125e79190615c3c565b9250505061262e87610100015189613b7b90919063ffffffff16565b60408051808201909152600080825260208201528288610120015111156126cf5761267361266c848a6101200151038b61439990919063ffffffff16565b8a90614405565b905080600001516001600160801b031688610120018181516126959190615caf565b90525080516080890180516001600160801b03909216916126b7908390615c3c565b9052506101008a01516126cf90879083600188613d5c565b818861014001511115612755576126f961266c838a6101400151038b61439990919063ffffffff16565b905080600001516001600160801b0316886101400181815161271b9190615caf565b905250805160a0890180516001600160801b039092169161273d908390615c3c565b9052506101208a015161275590879083600088613d5c565b60008860800151118061276c575060008860a00151115b156127d6578761010001518e6001600160a01b0316336001600160a01b03167f56f8e764728c77dd99ffbc1b64e6d02e227e6ec8214f165d4ef31351de136a0d8b608001518c60a001516040516127cd929190918252602082015260400190565b60405180910390a45b505050505b61283a565b610140840151156127db57836101000151604051632262d0a160e21b815260040161081291815260200190565b6101208401511561283a57836101000151604051632262d0a160e21b815260040161081291815260200190565b600084610140015161285d86610120015160808561430a9092919063ffffffff16565b6128679190615c3c565b9050806128905784610100015160405163b42cd28760e01b815260040161081291815260200190565b808885815181106128a3576128a3615c10565b6020908102919091010152610120850151835184906128c3908390615dc5565b6001600160701b03169052506101408501516020840180516128e6908390615dc5565b6001600160701b03908116909152610120870180516020808c0180516001600160881b0393861601831690526101408a0180516040808f0180519288169290920190941690529251828b018051909101905291516060808b0180519092019091526101008a0180516000908152600b855283902089518154958b01518716600160701b026001600160e01b0319909616961695909517939093178455908701516001840155860151600290920191909155516129a591508c9083614451565b8461010001518b6001600160a01b0316336001600160a01b03167f4216cc3bd0c40a90259d92f800c06ede5c47765f41a488072b7e7104a1f95841886101200151896101400151604051612a03929190918252602082015260400190565b60405180910390a4836001019350505050612318565b50670de0b6b3a76400008160c001511180612a3f5750670de0b6b3a76400008160e00151115b15612a5d5760405163eee8ff2760e01b815260040160405180910390fd5b82516006805460208087015162ffffff90941673ffffffffffffffffffffffffffffffffffffffff199092169190911763010000006001600160881b0394851602179091556040808601516007805460608901516080808b015160a08c015160c08d015160e08e015197909a167fffffffffffffffffffffffffff0000000000000000000000000000000000000090951694909417600160881b61ffff94851602177fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff16600160981b918416919091027fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff1617600160a81b93831693909302929092177fffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b64ffffffffff909816979097027fffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1696909617600160e01b96909316959095029190911790556101008601518051908301516001600160801b03918216600160801b918316820217600855610120880151805194015193821693909116029190911760095590820151908201518251910190811015612c3f578151600454612c3f916001600160a01b03909116908a9084900361386a565b60008260a0015183606001510190508083602001511115612c7c576020830151600554612c7c916001600160a01b03909116908b9084900361386a565b505060408101516060909101516001600355909d909c50929a509198505050505050505050565b6000612cb1600c8484613f31565b9392505050565b600080600160035414612cde5760405163802d9bf160e01b815260040160405180910390fd5b600260038190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6a9190615de7565b9050336001600160a01b03821614612da657604051631ed01e0560e31b81526001600160a01b0382166004820152336024820152604401610812565b600080600080612dd06008546009546001600160801b038083169390821692608090811c92901c90565b93509350935093506001826001600160801b03161115612e2d57612df5600183615c54565b9650612e018785615c54565b600160801b81166008559350600454612e2d906001600160a01b0316866001600160801b038a1661386a565b6001816001600160801b03161115612e8257612e4a600182615c54565b9550612e568684615c54565b600160801b81166009559250600554612e82906001600160a01b0316866001600160801b03891661386a565b604080516001600160801b03808a168252881660208201526001600160a01b0387169133917f26b782206d6b531bf95d487110cfefdc443291f176f1977e94abcb7e67bd1b79910160405180910390a35050600160035550929391925050565b6000808080612ef18542615caf565b9050600080612f2e60075461ffff608882901c811692609883901c82169260a881901c83169264ffffffffff60b883901c169260e09290921c1690565b945050935050506000612f4f838386601161450f909392919063ffffffff16565b91995097509550905083811015613059576040805161018081018252600a5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152600160401b81048316608083015262ffffff6a01000000000000000000008204811660a0840152600160681b820490931660c0830152600160781b8104831660e0830152600160901b81048316610100830152600160a81b81048316610120830152600160c01b8104831661014083015264ffffffffff600160d81b9091041661016082015260065490911661303b8282613b7b565b61010090910151828603918202989098019762ffffff160295909501945b505050509193909250565b61306f33838361471a565b5050565b60008060008061309d6008546009546001600160801b038083169390821692608090811c92901c90565b935093509350935090919293565b6118c5816147c5565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146130fd57604051632486085360e01b815260040160405180910390fd5b6001600160a01b038516158061311a57506001600160a01b038416155b15613138576040516317be04b760e01b815260040160405180910390fd5b6004546001600160a01b031615613162576040516359e270a560e01b815260040160405180910390fd5b61316a61489a565b6004805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0388811691909117909255600580549091169186169190911790556006805462ffffff191662ffffff8516179055600780547fffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff16600160881b61ffff851602179055600a805471ffffffffffffffffffffffffffffffffffff191671ffffffffffffffffffffffffffffffffffff831617905561322b60026147c5565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461327b57604051632486085360e01b815260040160405180910390fd5b600a54612710906132a390600160a81b810462ffffff1690600160401b900461ffff16615cc6565b6132ad9190615cfb565b600a80546006547fffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff909116600160a81b62ffffff948516027fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16179216600160c01b02919091179055565b6000612cb1838361391f565b6000806001600160a01b03851630148061334557506001600160a01b038516155b156133555750600090508061346f565b6001600160a01b0385166000908152600f60205260409020546001600160801b0381169250608081901c91506000805b8581101561346b5760008787838181106133a1576133a1615c10565b9050602002013590508083101580156133b957508115155b156133d757604051630e15c23b60e31b815260040160405180910390fd5b60006133e38a836106c5565b90508015613460576000828152600b60209081526040808320815160808101835281546001600160701b038082168352600160701b90910416938101939093526001810154918301919091526002015460608201529080613446838e8787613a0b565b6001600160801b039182169b909b019a1698909801975050505b509150600101613385565b5050505b935093915050565b82818082146134a357604051639c802a7560e01b81526004810183905260248101829052604401610812565b87876001600160a01b03821615806134c257506001600160a01b038116155b156134e05760405163020d233960e51b815260040160405180910390fd5b806001600160a01b0316826001600160a01b0316141561351357604051638696f16760e01b815260040160405180910390fd5b893361351f828261391f565b61354f5760405163548f773d60e01b81526001600160a01b03808416600483015282166024820152604401610812565b60005b8981101561359e576135968d8d8d8d8581811061357157613571615c10565b905060200201358c8c8681811061358a5761358a615c10565b9050602002013561396b565b600101613552565b508a6001600160a01b03168c6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8d8d8d8d6040516135f29493929190615e53565b60405180910390a4505050505050505050505050565b60006001600160e01b031982166337eb4f6360e21b14806106e757506001600160e01b031982166301ffc9a760e01b1492915050565b6000818152600b60205260409020546001600160701b0381811691607081901c9161366884613ddd565b61367184613ddd565b6001600160701b0391821697911695509350505050565b8062ffffff811681146136b157604051631da527cf60e21b815260048101839052602401610812565b919050565b60008060006136c586866148a4565b915091506136d686868685856148c3565b9695505050505050565b600881901c600081815260028401602052604090208054600160ff85161b6000191816908190558061375f5750601082901c600081815260018581016020526040909120805460ff85169290921b6000191890911690819055908161322b5760008080526020869052604090208054600190921b600019189190911690555b50505050565b6001600160a01b03831661378c57604051631306fc5960e11b815260040160405180910390fd5b6000828152602081815260408083206001600160a01b0387168452909152902054818110156137e657604051625b387760e31b81526001600160a01b03851660048201526024810184905260448101839052606401610812565b6137f38460008585614976565b6000838152602081815260408083206001600160a01b0388168085529083528184208686039055868452600283528184208054879003905581518781529283018690529133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b801561391a57604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905260006138d88583614a78565b9050600081511180156138fc5750808060200190518101906138fa9190615e85565b155b1561322b5760405163197138bd60e11b815260040160405180910390fd5b505050565b6000816001600160a01b0316836001600160a01b03161480612cb15750506001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6000828152602081815260408083206001600160a01b0388168452909152902054818110156139c6576040516358b4690f60e01b81526001600160a01b03861660048201526024810184905260448101839052606401610812565b6139d285858585614976565b6000928352602083815260408085206001600160a01b039788168652909152808420918390039091559290931681522080549091019055565b6001600160a01b038316600090815260106020908152604080832085845282528083208151808301835281548082526001909201549381019390935290870151839291613a6d91613a5e9087608061430a565b613a689190615caf565b61425c565b60208201516060890151919450613a8a91613a5e9087608061430a565b91505094509492505050565b6040840151600090613aaa9083608061430a565b6060860151909150600090613ac19084608061430a565b6001600160a01b039590951660009081526010602090815260408083209683529590529390932090815560010192909255505050565b6040516370a0823160e01b81523060048201526000908284019081906001600160a01b038716906370a0823190602401602060405180830381865afa158015613b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b689190615d1d565b613b729190615caf565b95945050505050565b600082610160015164ffffffffff1642613b959190615caf565b9050826040015161ffff1681101580613bb8575061016083015164ffffffffff16155b15613c185762ffffff8216610140840152606083015161ffff16811015613c0f5761271083610100015162ffffff16846080015161ffff160281613bfe57613bfe615ce5565b0462ffffff16610120840152613c18565b60006101208401525b613c2142614176565b64ffffffffff1661016084015261391a8383614b43565b604080518082019091526000808252602082018190529081906000613c6587896000015161ffff166142c2565b90506000808715613c935760208b01516001600160701b03169150613c8c82608085614bb5565b9050613caf565b8a516001600160701b03169150613cac83836080614be7565b90505b613cb98a8a614b43565b613ccd613cc68b83614c19565b8b90614405565b80519094508790613ce7906001600160801b031683615c3c565b11613cf757809550819450613d4e565b613d04613cc68b89614c4b565b8051909450613d1c906001600160801b031688615caf565b955087613d3457613d2f86608085614c74565b613d40565b613d408387608061430a565b945081851115613d4e578194505b505050955095509592505050565b825184518590613d6d908390615d9a565b6001600160801b0390811690915260208086015190870180519091019091169052508115613db857613d9f8382614289565b85604001818151613db09190615c3c565b90525061322b565b613dc28382614289565b85606001818151613dd39190615c3c565b9052505050505050565b806001600160701b03811681146136b157604051631ce5dcf760e01b815260048101839052602401610812565b8215613e69578185600001818151613e229190615dc5565b6001600160701b03908116909152602087810180518590038316905286018051858316016001600160881b039081169091526040870180519285169092031690525061322b565b8185602001818151613e7b9190615dc5565b6001600160701b039081169091528651839003811687526020860180516001600160881b03858416909103811690915260408701805192861692909201169052505050505050565b60408051861515815260208101869052908101849052606081018390526080810182905262ffffff8716906001600160a01b0389169033907fc528cda9e500228b16ce84fadae290d9a49aecb17483110004c5af0a07f6fd739060a00160405180910390a450505050505050565b61ffff600883901c1691600090819060ff16838015613f4f57508015155b80613f64575083158015613f6457508060ff14155b15613faf5762ffffff851660009081526002870160205260409020549150613f8d828286614cb7565b90506000198114613faf5763ffffff00600886901b1681015b92505050612cb1565b5061ffff600885901c169360ff16838015613fc957508015155b80613fde575083158015613fde57508060ff14155b1561405b5762ffffff851660009081526001870160205260409020549150614007828286614cb7565b9050600019811461405b5762ffffff60089590951b63ffffff0016810194851660009081526002870160205260409020549150613fa6856140488487614ce6565b60ff1660089190911b63ffffff00160190565b6000808052602087905260409020549150614077828686614cb7565b905060001981141561409c576040516310d6486160e01b815260040160405180910390fd5b600081815260018701602052604090205491506140bd816140488487614ce6565b945085600262ffffff871660009081529101602052604090205491506136d6856140488487614ce6565b60008183116140f857828203612cb1565b50900390565b6000806141248585858d8a61ffff811061411a5761411a615c10565b0154929190614d04565b9050876141318842615caf565b1015801561413e57508615155b1561414f5788600187089150614153565b8591505b808a8361ffff811061416757614167615c10565b01555098975050505050505050565b8064ffffffffff811681146136b1576040516302dfd99760e01b815260048101839052602401610812565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634847cdc86040518163ffffffff1660e01b8152600401602060405180830381865afa158015614202573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142269190615d1d565b9050670de0b6b3a764000060018161423e8487615cc6565b6142489190615c3c565b6142529190615caf565b612cb19190615cfb565b806001600160801b03811681146136b15760405163089f6cfb60e21b815260048101839052602401610812565b600081608084602001516001600160801b031685600001516001600160801b031603901b816142ba576142ba615ce5565b049392505050565b600062ffffff8311156142e85760405163163d8bab60e21b815260040160405180910390fd5b627fffff198301614302816142fc85614dca565b90614e10565b949350505050565b600060ff82111561433157604051630b72ecf560e41b815260048101839052602401610812565b60008061433e86866148a4565b91509150816000146143505781841c92505b8015614390576001841b811061438357604051633d90990f60e01b81526004810182905260248101859052604401610812565b836101000381901b830192505b50509392505050565b6000806143a584615069565b905060006143bb670de0b6b3a764000080615cc6565b9050806001816143d3670de0b6b3a764000086615c3c565b6143dd8689615cc6565b6143e79190615cc6565b6143f19190615c3c565b6143fb9190615caf565b613b729190615cfb565b60408051808201909152600080825260208201526144228261425c565b6001600160801b0316815260c08301516127109061ffff168302046001600160801b0316602082015292915050565b6001600160a01b03831661447857604051632a97acbf60e11b815260040160405180910390fd5b6144856000848484614976565b600082815260026020526040812080548392906144a3908490615c3c565b90915550506000828152602081815260408083206001600160a01b0387168085529083528184208054860190558151868152928301859052929133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b6000808080866145325760405163c686b52f60e01b815260040160405180910390fd5b6000876001880890506000898261ffff811061455057614550615c10565b0154905061455d81615092565b95508686111561458a576040516340a02e1d60e01b81526004810187905260248101889052604401610812565b886001146146e057898861ffff81106145a5576145a5615c10565b015490506145b281615092565b9550868611156146e05760006145ca8b8a8a8d6150a5565b90925090508181146146de576000886145e283615092565b6145ec9190615caf565b905060006145f984615092565b614603908b615caf565b905060006146118284615c3c565b9050808261461e86615182565b6146289190615cc6565b8461463288615182565b61463c9190615cc6565b6146469190615c3c565b6146509190615cfb565b9850808261465d86615198565b6146679190615cc6565b8461467188615198565b61467b9190615cc6565b6146859190615c3c565b61468f9190615cfb565b9750808261469c866151ae565b6146a69190615cc6565b846146b0886151ae565b6146ba9190615cc6565b6146c49190615c3c565b6146ce9190615cfb565b96508a995050505050505061470f565b505b6146e981615092565b95506146f481615182565b94506146ff81615198565b935061470a816151ae565b925050505b945094509450949050565b816001600160a01b0316836001600160a01b031614156147585760405163782ee70760e01b81526001600160a01b0384166004820152602401610812565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60075461ffff600160981b9091048116908216811061480457604051635762a96b60e11b815261ffff8316600482015260248101829052604401610812565b600780547fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff16600160981b61ffff851602179055805b8261ffff16811015614859576148516011826151ba565b60010161483a565b506040805182815261ffff841660208201527f525a4241308ea122822834c841f67b00d5efc977ad9118724750f974f7f6531c910160405180910390a15050565b6148a26151db565b565b6000806000198385098385029250828110838203039150509250929050565b6000816148e1578383816148d9576148d9615ce5565b049050613b72565b83821061490b5760405163656b542b60e11b81526004810183905260248101859052604401610812565b600084868809600186198101871660008190038190049091018683119095039490940294038390049390931760029290940460038102831880820284030280820284030280820284030280820284030280820284030290810290920390910292909202949350505050565b826001600160a01b0316846001600160a01b03161461375f576000828152600b6020908152604091829020825160808101845281546001600160701b038082168352600160701b909104169281019290925260018101549282019290925260029091015460608201526001600160a01b03851615801590614a0057506001600160a01b0385163014155b15614a2b576000614a1186856106c5565b9050614a2982878684614a248882615caf565b615203565b505b6001600160a01b03841615801590614a4c57506001600160a01b0384163014155b1561322b576000614a5d85856106c5565b9050614a7082868684614a248882615c3c565b505050505050565b6060600080846001600160a01b031684604051614a959190615ea2565b6000604051808303816000865af19150503d8060008114614ad2576040519150601f19603f3d011682016040523d82523d6000602084013e614ad7565b606091505b50915091508115614b1c578051158015614af957506001600160a01b0385163b155b15614b1757604051635d97df8960e01b815260040160405180910390fd5b614302565b8051614b3b57604051632407429160e01b815260040160405180910390fd5b805181602001fd5b600082610120015162ffffff16612710614b7085610140015162ffffff16856140e790919063ffffffff16565b614b7a9190615cc6565b614b849190615c3c565b90508260e0015162ffffff168111614b9c5780614ba2565b8260e001515b62ffffff16610100909301929092525050565b6000614bc2848484614c74565b90508180614bd257614bd2615ce5565b6001841b850915612cb1576001019392505050565b6000614bf484848461430a565b90506001821b80614c0757614c07615ce5565b83850915612cb1576001019392505050565b600080614c2584615069565b90506000614c3b82670de0b6b3a7640000615caf565b9050806001816143e78588615cc6565b6000670de0b6b3a76400006001670de0b6b3a7640000614c6a86615069565b61423e9086615cc6565b600060ff831115614c9b57604051630b72ecf560e41b815260048101849052602401610812565b83831b61010084900385901c6136d6866001871b8685856148c3565b600081614cd257614b1784614ccd856001615ebe565b6152b1565b61430284614ce1600186615ee3565b6152df565b600081614cfb57614cf683615310565b612cb1565b612cb1836153a6565b600080614d1086615092565b614d1a9042615caf565b90506000818602614d2a88615182565b0190506000828602614d3b89615198565b0190506000838602614d4c8a6151ae565b0190506501fffffffffe42600190811b919091166d01fffffffffffffffe0000000000602986901b167501fffffffffffffffe00000000000000000000000000606986901b167ffffffffffffffffffffffe00000000000000000000000000000000000000000060a986901b16171717179998505050505050505050565b6000811580614dda575061271082115b15614dfb576040516374da1e1160e11b815260048101839052602401610812565b612710608083901b04600160801b0192915050565b6000808083614e285750600160801b91506106e79050565b50826000811215614e3a579015906000035b6210000081101561502a57600160801b9250846001600160801b03811115614e6457911591600019045b6001821615614e755792830260801c925b800260801c6002821615614e8b5792830260801c925b800260801c6004821615614ea15792830260801c925b800260801c6008821615614eb75792830260801c925b800260801c6010821615614ecd5792830260801c925b800260801c6020821615614ee35792830260801c925b800260801c6040821615614ef95792830260801c925b8002608090811c90821615614f105792830260801c925b800260801c610100821615614f275792830260801c925b800260801c610200821615614f3e5792830260801c925b800260801c610400821615614f555792830260801c925b800260801c610800821615614f6c5792830260801c925b800260801c611000821615614f835792830260801c925b800260801c612000821615614f9a5792830260801c925b800260801c614000821615614fb15792830260801c925b800260801c618000821615614fc85792830260801c925b800260801c62010000821615614fe05792830260801c925b800260801c62020000821615614ff85792830260801c925b800260801c620400008216156150105792830260801c925b800260801c620800008216156150285792830260801c925b505b8261505257604051630e9c7d6160e31b81526004810186905260248101859052604401610812565b8161505d5782613b72565b613b7283600019615cfb565b600061507482615435565b8251602084015161ffff9182169116026402540be400020192915050565b6000600182901c64ffffffffff166106e7565b600080600183828080805b85851061511d5785850160011c9350888b850892508b8361ffff81106150d8576150d8615c10565b015491506150e582615092565b9050898110156150fa578360010195506150b0565b8981111561510d576001840394506150b0565b5095508594506151799350505050565b8981101561514c5788600184089250818c8461ffff811061514057615140615c10565b01549098509650615172565b8b615157848b615481565b61ffff811061516857615168615c10565b0154975090955085905b5050505050505b94509492505050565b6000602982901c67ffffffffffffffff166106e7565b6000606982901c67ffffffffffffffff166106e7565b600060a982901c6106e7565b6001828261ffff81106151cf576151cf615c10565b01805490911790555050565b600354156151fc5760405163d80075c160e01b815260040160405180910390fd5b6001600355565b6001600160a01b0384166000908152600f6020526040812054906001600160801b03821690608083901c908061523b8a8a8a8a613a0b565b9150915061524b8a8a8a89613a96565b6152558285615d9a565b93506152618184615d9a565b6001600160a01b03999099166000908152600f602052604090206001600160801b039490941660809990991b6fffffffffffffffffffffffffffffffff1916989098179092555050505050505050565b60ff81169190911c90600082156152d557816152cc84615310565b0160ff16612cb1565b5060001992915050565b60ff8181031691821b91600090831561530557806152fc856153a6565b60ff1603614302565b506000199392505050565b6000608082901b156153245750608090811b905b604082901b1561533657604091821b91015b602082901b1561534857602091821b91015b601082901b1561535a57601091821b91015b600882901b1561536c57600891821b91015b600482901b1561537e57600491821b91015b600282901b1561539057600291821b91015b600182901b1561539e576001015b60ff03919050565b6000600160801b82106153bb5750608090811c905b600160401b82106153ce57604091821c91015b64010000000082106153e257602091821c91015b6201000082106153f457601091821c91015b610100821061540557600891821c91015b6010821061541557600491821c91015b6004821061542557600291821c91015b600282106136b157600101919050565b60008160a0015162ffffff166000146136b1576000826000015161ffff1683610100015162ffffff1602905060648360a0015162ffffff1682830202606301816142ba576142ba615ce5565b600081156106e75782801561549d5782600185030691506154a4565b6001830391505b5092915050565b6001600160a01b03811681146118c557600080fd5b600080604083850312156154d357600080fd5b82356154de816154ab565b946020939093013593505050565b6000602082840312156154fe57600080fd5b81356001600160e01b031981168114612cb157600080fd5b60005b83811015615531578181015183820152602001615519565b8381111561375f5750506000910152565b6020815260008251806020840152615561816040850160208701615516565b601f01601f19169190910160400192915050565b803562ffffff811681146136b157600080fd5b60006020828403121561559a57600080fd5b612cb182615575565b60008083601f8401126155b557600080fd5b50813567ffffffffffffffff8111156155cd57600080fd5b6020830191508360208260051b85010111156155e857600080fd5b9250929050565b60008060008060006060868803121561560757600080fd5b853567ffffffffffffffff8082111561561f57600080fd5b61562b89838a016155a3565b9097509550602088013591508082111561564457600080fd5b50615651888289016155a3565b9094509250506040860135615665816154ab565b809150509295509295909350565b6000806000806080858703121561568957600080fd5b8435615694816154ab565b935060208501356156a4816154ab565b93969395505050506040820135916060013590565b6000806000604084860312156156ce57600080fd5b83356156d9816154ab565b9250602084013567ffffffffffffffff8111156156f557600080fd5b615701868287016155a3565b9497909650939450505050565b6000806000806040858703121561572457600080fd5b843567ffffffffffffffff8082111561573c57600080fd5b615748888389016155a3565b9096509450602087013591508082111561576157600080fd5b5061576e878288016155a3565b95989497509550505050565b600081518084526020808501945080840160005b838110156157aa5781518752958201959082019060010161578e565b509495945050505050565b602081526000612cb1602083018461577a565b80151581146118c557600080fd5b600080604083850312156157e957600080fd5b82356157f4816157c8565b91506020830135615804816154ab565b809150509250929050565b60006020828403121561582157600080fd5b5035919050565b60008060008060006080868803121561584057600080fd5b853561584b816154ab565b9450602086013561585b816154ab565b935060408601359250606086013567ffffffffffffffff8082111561587f57600080fd5b818801915088601f83011261589357600080fd5b8135818111156158a257600080fd5b8960208285010111156158b457600080fd5b9699959850939650602001949392505050565b60008060008060008060006080888a0312156158e257600080fd5b873567ffffffffffffffff808211156158fa57600080fd5b6159068b838c016155a3565b909950975060208a013591508082111561591f57600080fd5b61592b8b838c016155a3565b909750955060408a013591508082111561594457600080fd5b506159518a828b016155a3565b9094509250506060880135615965816154ab565b8091505092959891949750929550565b838152826020820152606060408201526000613b72606083018461577a565b600080604083850312156159a757600080fd5b6159b083615575565b91506020830135615804816157c8565b815161ffff168152610180810160208301516159e2602084018261ffff169052565b5060408301516159f8604084018261ffff169052565b506060830151615a0e606084018261ffff169052565b506080830151615a24608084018261ffff169052565b5060a0830151615a3b60a084018262ffffff169052565b5060c0830151615a5160c084018261ffff169052565b5060e0830151615a6860e084018262ffffff169052565b506101008381015162ffffff908116918401919091526101208085015182169084015261014080850151909116908301526101609283015164ffffffffff16929091019190915290565b60008060408385031215615ac557600080fd5b82356159b0816154ab565b803561ffff811681146136b157600080fd5b600060208284031215615af457600080fd5b612cb182615ad0565b600080600080600060a08688031215615b1557600080fd5b8535615b20816154ab565b94506020860135615b30816154ab565b9350615b3e60408701615575565b9250615b4c60608701615ad0565b949793965091946080013592915050565b60008060408385031215615b7057600080fd5b82356157f4816154ab565b60008060008060008060808789031215615b9457600080fd5b8635615b9f816154ab565b95506020870135615baf816154ab565b9450604087013567ffffffffffffffff80821115615bcc57600080fd5b615bd88a838b016155a3565b90965094506060890135915080821115615bf157600080fd5b50615bfe89828a016155a3565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115615c4f57615c4f615c26565b500190565b60006001600160801b0383811690831681811015615c7457615c74615c26565b039392505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215615ca457600080fd5b8135612cb1816154ab565b600082821015615cc157615cc1615c26565b500390565b6000816000190483118215151615615ce057615ce0615c26565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615d1857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215615d2f57600080fd5b5051919050565b60006001600160a01b0380891683528088166020840152508560408301526001600160801b038516606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b60006001600160801b03808316818516808303821115615dbc57615dbc615c26565b01949350505050565b60006001600160701b03808316818516808303821115615dbc57615dbc615c26565b600060208284031215615df957600080fd5b8151612cb1816154ab565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115615e3657600080fd5b8260051b8083602087013760009401602001938452509192915050565b604081526000615e67604083018688615e04565b8281036020840152615e7a818587615e04565b979650505050505050565b600060208284031215615e9757600080fd5b8151612cb1816157c8565b60008251615eb4818460208701615516565b9190910192915050565b600060ff821660ff84168060ff03821115615edb57615edb615c26565b019392505050565b600060ff821660ff841680821015615efd57615efd615c26565b9003939250505056fea264697066735822122094cb6cc718f320a3975a3cfb38c7284372dddcb3591b2b760bf1fca6ef1d43b564736f6c634300080a00330000000000000000000000001886d09c9ade0c5db822d85d21678db67b6c2982