0 txs
7.37m 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)
getActiveId
viewfunction getActiveId() view returns (uint24 activeId)
getBin
viewfunction getBin(uint24 id) view returns (uint128 binReserveX, uint128 binReserveY)
getBinStep
purefunction getBinStep() pure returns (uint16)
getFactory
viewfunction getFactory() view returns (address factory)
getIdFromPrice
purefunction getIdFromPrice(uint256 price) pure returns (uint24 id)
getNextNonEmptyBin
viewfunction getNextNonEmptyBin(bool swapForY, uint24 id) view returns (uint24 nextId)
getOracleParameters
viewfunction getOracleParameters() view returns (uint8 sampleLifetime, uint16 size, uint16 activeSize, uint40 lastUpdated, uint40 firstTimestamp)
getOracleSampleAt
viewfunction getOracleSampleAt(uint40 lookupTimestamp) view returns (uint64 cumulativeId, uint64 cumulativeVolatility, uint64 cumulativeBinCrossed)
getPriceFromId
purefunction getPriceFromId(uint24 id) pure returns (uint256 price)
getProtocolFees
viewfunction getProtocolFees() view returns (uint128 protocolFeeX, uint128 protocolFeeY)
getReserves
viewfunction getReserves() view returns (uint128 reserveX, uint128 reserveY)
getStaticFeeParameters
viewfunction getStaticFeeParameters() view returns (uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator)
getSwapIn
viewfunction getSwapIn(uint128 amountOut, bool swapForY) view returns (uint128 amountIn, uint128 amountOutLeft, uint128 fee)
getSwapOut
viewfunction getSwapOut(uint128 amountIn, bool swapForY) view returns (uint128 amountInLeft, uint128 amountOut, uint128 fee)
getTokenX
purefunction getTokenX() pure returns (address tokenX)
getTokenY
purefunction getTokenY() pure returns (address tokenY)
getVariableFeeParameters
viewfunction getVariableFeeParameters() view returns (uint24 volatilityAccumulator, uint24 volatilityReference, uint24 idReference, uint40 timeOfLastUpdate)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address spender) view returns (bool)
name
viewfunction name() view returns (string)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
approveForAll
nonpayablefunction approveForAll(address spender, bool approved)
batchTransferFrom
nonpayablefunction batchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts)
burn
nonpayablefunction burn(address from, address to, uint256[] ids, uint256[] amountsToBurn) returns (bytes32[] amounts)
collectProtocolFees
nonpayablefunction collectProtocolFees() returns (bytes32 collectedProtocolFees)
flashLoan
nonpayablefunction flashLoan(address receiver, bytes32 amounts, bytes data)
forceDecay
nonpayablefunction forceDecay()
increaseOracleLength
nonpayablefunction increaseOracleLength(uint16 newLength)
initialize
nonpayablefunction initialize(uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator, uint24 activeId)
mint
nonpayablefunction mint(address to, bytes32[] liquidityConfigs, address refundTo) returns (bytes32 amountsReceived, bytes32 amountsLeft, uint256[] liquidityMinted)
setStaticFeeParameters
nonpayablefunction setStaticFeeParameters(uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator)
swap
nonpayablefunction swap(bool swapForY, address to) returns (bytes32 amountsOut)
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed sender, bool approved)
CollectedProtocolFees
event CollectedProtocolFees(address indexed feeRecipient, bytes32 protocolFees)
CompositionFees
event CompositionFees(address indexed sender, uint24 id, bytes32 totalFees, bytes32 protocolFees)
DepositedToBins
event DepositedToBins(address indexed sender, address indexed to, uint256[] ids, bytes32[] amounts)
FlashLoan
event FlashLoan(address indexed sender, address indexed receiver, uint24 activeId, bytes32 amounts, bytes32 totalFees, bytes32 protocolFees)
ForcedDecay
event ForcedDecay(address indexed sender, uint24 idReference, uint24 volatilityReference)
OracleLengthIncreased
event OracleLengthIncreased(address indexed sender, uint16 oracleLength)
StaticFeeParametersSet
event StaticFeeParametersSet(address indexed sender, uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator)
Swap
event Swap(address indexed sender, address indexed to, uint24 id, bytes32 amountsIn, bytes32 amountsOut, uint24 volatilityAccumulator, bytes32 totalFees, bytes32 protocolFees)
TransferBatch
event TransferBatch(address indexed sender, address indexed from, address indexed to, uint256[] ids, uint256[] amounts)
WithdrawnFromBins
event WithdrawnFromBins(address indexed sender, address indexed to, uint256[] ids, bytes32[] amounts)
errors
AddressHelper__CallFailed
error AddressHelper__CallFailed()
AddressHelper__NonContract
error AddressHelper__NonContract()
BinHelper__CompositionFactorFlawed
error BinHelper__CompositionFactorFlawed(uint24 id)
BinHelper__LiquidityOverflow
error BinHelper__LiquidityOverflow()
FeeHelper__FeeTooLarge
error FeeHelper__FeeTooLarge()
LBPair__AddressZero
error LBPair__AddressZero()
LBPair__AlreadyInitialized
error LBPair__AlreadyInitialized()
LBPair__EmptyMarketConfigs
error LBPair__EmptyMarketConfigs()
LBPair__FlashLoanCallbackFailed
error LBPair__FlashLoanCallbackFailed()
LBPair__FlashLoanInsufficientAmount
error LBPair__FlashLoanInsufficientAmount()
LBPair__InsufficientAmountIn
error LBPair__InsufficientAmountIn()
LBPair__InsufficientAmountOut
error LBPair__InsufficientAmountOut()
LBPair__InvalidInput
error LBPair__InvalidInput()
LBPair__InvalidStaticFeeParameters
error LBPair__InvalidStaticFeeParameters()
LBPair__MaxTotalFeeExceeded
error LBPair__MaxTotalFeeExceeded()
LBPair__OnlyFactory
error LBPair__OnlyFactory()
LBPair__OnlyProtocolFeeRecipient
error LBPair__OnlyProtocolFeeRecipient()
LBPair__OutOfLiquidity
error LBPair__OutOfLiquidity()
LBPair__TokenNotSupported
error LBPair__TokenNotSupported()
LBPair__ZeroAmount
error LBPair__ZeroAmount(uint24 id)
LBPair__ZeroAmountsOut
error LBPair__ZeroAmountsOut(uint24 id)
LBPair__ZeroBorrowAmount
error LBPair__ZeroBorrowAmount()
LBPair__ZeroShares
error LBPair__ZeroShares(uint24 id)
LBToken__AddressThisOrZero
error LBToken__AddressThisOrZero()
LBToken__BurnExceedsBalance
error LBToken__BurnExceedsBalance(address from, uint256 id, uint256 amount)
LBToken__InvalidLength
error LBToken__InvalidLength()
LBToken__SelfApproval
error LBToken__SelfApproval(address owner)
LBToken__SpenderNotApproved
error LBToken__SpenderNotApproved(address from, address spender)
LBToken__TransferExceedsBalance
error LBToken__TransferExceedsBalance(address from, uint256 id, uint256 amount)
LiquidityConfigurations__InvalidConfig
error LiquidityConfigurations__InvalidConfig()
OracleHelper__InvalidOracleId
error OracleHelper__InvalidOracleId()
OracleHelper__LookUpTimestampTooOld
error OracleHelper__LookUpTimestampTooOld()
OracleHelper__NewLengthTooSmall
error OracleHelper__NewLengthTooSmall()
PackedUint128Math__AddOverflow
error PackedUint128Math__AddOverflow()
PackedUint128Math__MultiplierTooLarge
error PackedUint128Math__MultiplierTooLarge()
PackedUint128Math__SubUnderflow
error PackedUint128Math__SubUnderflow()
PairParametersHelper__InvalidParameter
error PairParametersHelper__InvalidParameter()
ReentrancyGuard__ReentrantCall
error ReentrancyGuard__ReentrantCall()
SafeCast__Exceeds128Bits
error SafeCast__Exceeds128Bits()
SafeCast__Exceeds24Bits
error SafeCast__Exceeds24Bits()
SafeCast__Exceeds40Bits
error SafeCast__Exceeds40Bits()
TokenHelper__TransferFailed
error TokenHelper__TransferFailed()
Uint128x128Math__LogUnderflow
error Uint128x128Math__LogUnderflow()
Uint128x128Math__PowUnderflow
error Uint128x128Math__PowUnderflow(uint256 x, int256 y)
Uint256x256Math__MulDivOverflow
error Uint256x256Math__MulDivOverflow()
Uint256x256Math__MulShiftOverflow
error Uint256x256Math__MulShiftOverflow()
creation bytecode
0x60a06040523480156200001157600080fd5b50604051620058a3380380620058a383398101604081905262000034916200004b565b6001600160a01b031660805260016004556200007d565b6000602082840312156200005e57600080fd5b81516001600160a01b03811681146200007657600080fd5b9392505050565b6080516157e7620000bc6000396000818161047001528181610a1601528181610f9f015281816111c5015281816118b0015261328901526157e76000f3fe608060405234801561001057600080fd5b50600436106102255760003560e01c80638d7024e51161012a578063d3b9fbe4116100bd578063e584b6541161008c578063e985e9c511610071578063e985e9c514610634578063ea3446bf14610657578063f5e293291461066a57600080fd5b8063e584b6541461060e578063e77366f81461062157600080fd5b8063d3b9fbe4146105de578063d8dfcea0146105e6578063da10610c146105ee578063dbe65edc1461060657600080fd5b8063abcd7830116100f9578063abcd78301461055b578063bd85b03914610598578063c7bd6586146105b8578063c9939f5e146105cb57600080fd5b80638d7024e5146104d257806395d89b411461050d578063a1af5b9a1461052c578063a41a01fb1461053457600080fd5b806347973bff116101bd578063551828941161018c5780637ca0de30116101715780637ca0de301461041c57806388cc58e41461046e5780638940a16a1461049457600080fd5b806355182894146103c45780636653851a1461040957600080fd5b806347973bff1461036b5780634c7cffbd1461037e5780634e1273f41461039157806353c059a0146103b157600080fd5b80630abe9688116101f95780630abe9688146102e357806317f11ecc1461031957806317fad7fc14610334578063383d15c51461034957600080fd5b8062fdd58e1461022a57806305e8746d1461025057806306fdde03146102795780630902f1ac146102bb575b600080fd5b61023d610238366004614e47565b61067d565b6040519081526020015b60405180910390f35b3660011981013560f01c90033560601c5b6040516001600160a01b039091168152602001610247565b60408051808201909152601481527f4c697175696469747920426f6f6b20546f6b656e00000000000000000000000060208201525b6040516102479190614e9f565b6102c36106ab565b604080516001600160801b03938416815292909116602083015201610247565b6102c36102f1366004614ee5565b62ffffff166000908152600760205260409020546001600160801b0381169160809190911c90565b6103216106e5565b60405161ffff9091168152602001610247565b610347610342366004614f45565b610706565b005b61035c610357366004614fda565b61075f565b6040516102479392919061507d565b6103476103793660046150ae565b610a0b565b61023d61038c366004614ee5565b610aaa565b6103a461039f366004615145565b610ada565b60405161024791906151b1565b61023d6103bf3660046151d2565b610bc6565b6103cc610eed565b6040805160ff909616865261ffff9485166020870152939092169284019290925264ffffffffff918216606084015216608082015260a001610247565b61034761041736600461520b565b610f94565b610424610ff8565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015262ffffff9081166080850152931660a08301529190911660c082015260e001610247565b7f0000000000000000000000000000000000000000000000000000000000000000610261565b6104a76104a2366004615291565b611060565b6040805167ffffffffffffffff94851681529284166020840152921691810191909152606001610247565b6104da611156565b6040805162ffffff95861681529385166020850152919093169082015264ffffffffff9091166060820152608001610247565b60408051808201909152600381526213109560ea1b60208201526102ae565b61023d611196565b6105476105423660046152b8565b611362565b60405162ffffff9091168152602001610247565b61056e6105693660046152e4565b611375565b604080516001600160801b0394851681529284166020840152921691810191909152606001610247565b61023d6105a636600461531e565b60009081526001602052604090205490565b6103476105c6366004615337565b611516565b6103a46105d9366004614f45565b61158a565b6103476118a5565b6102c361195b565b3660011981013560f01c90036014013560601c610261565b610547611976565b61034761061c366004615352565b611983565b61056e61062f3660046152e4565b611992565b610647610642366004615370565b611ad3565b6040519015158152602001610247565b61034761066536600461538e565b611adf565b61054761067836600461531e565b611e3f565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b905090565b6000806106dc6106c8600654600554611e6a90919063ffffffff16565b6001600160801b0381169160809190911c90565b90939092509050565b60006106a660003660011981013560f090811c90910360280135901c905090565b85336107128282611ea4565b6107475760405163548f773d60e01b81526001600160a01b038084166004830152821660248201526044015b60405180910390fd5b610755888888888888611ef0565b5050505050505050565b600080606060016003541461078757604051635db5c7cd60e11b815260040160405180910390fd5b6002600355866001600160a01b03811615806107ab57506001600160a01b03811630145b156107c9576040516345c210e760e11b815260040160405180910390fd5b856107e75760405163296db0d960e01b815260040160405180910390fd5b600060405180606001604052808989905067ffffffffffffffff81111561081057610810615417565b604051908082528060200260200182016040528015610839578160200160208202803683370190505b5081526020018867ffffffffffffffff81111561085857610858615417565b604051908082528060200260200182016040528015610881578160200160208202803683370190505b5081526020018867ffffffffffffffff8111156108a0576108a0615417565b6040519080825280602002602001820160405280156108c9578160200160208202803683370190505b5090526005549091506108f5813660011981013560f01c90038035606090811c9160140135901c61209c565b95506109048989888d866120dc565b945061091a6109138787611e6a565b8290612211565b600555841561094757610947853660011981013560f01c90038035606090811c9160140135901c8a61224b565b81604001519350896001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8560000151886040516109a292919061542d565b60405180910390a4815160208301516040516001600160a01b038d169233927f87f1f9dcf5e8089a3e00811b6a008d8f30293a3da878cb1fe8c90ca376402f8a926109ee92919061542d565b60405180910390a350505060016003819055509450945094915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a5457604051632486085360e01b815260040160405180910390fd5b6004548015610a76576040516359e270a560e01b815260040160405180910390fd5b610a7e6122b1565b610a9f610a93610a8e83856122bd565b61230c565b8a8a8a8a8a8a8a612360565b505050505050505050565b60006106a0610ace60003660011981013560f090811c90910360280135901c905090565b62ffffff8416906124e7565b60608382808214610afe576040516340311ffd60e11b815260040160405180910390fd5b8567ffffffffffffffff811115610b1757610b17615417565b604051908082528060200260200182016040528015610b40578160200160208202803683370190505b50925060005b86811015610bbb57610b96888883818110610b6357610b63615452565b9050602002016020810190610b789190615468565b878784818110610b8a57610b8a615452565b9050602002013561067d565b848281518110610ba857610ba8615452565b6020908102919091010152600101610b46565b505050949350505050565b6000600160035414610beb57604051635db5c7cd60e11b815260040160405180910390fd5b6002600355600554600654600085610c1f57610c1a3660011981013560f01c90036014013560601c849061251e565b610c39565b610c393660011981013560f01c90033560601c8490612553565b905080610c5957604051637df801c760e01b815260040160405180910390fd5b610c638382612211565b6004549093506000610c8a60003660011981013560f090811c90910360280135901c905090565b90506000610c9783612582565b9050610ca28361258e565b92505b62ffffff8116600090815260076020526040902054610cc5818b15612603565b610df757610cd38483612632565b93506000806000610cf587878f888c896126ba9095949392919063ffffffff16565b919450925090508215610df357610d0c8884611e6a565b9750610d188b83612211565b9a506000610d33610d2889612882565b839061ffff16612892565b90508015610d5457610d458a82612211565b9950610d518482611e6a565b93505b610d6883610d628787612211565b90611e6a565b62ffffff87166000908152600760205260409020556001600160a01b038d16337fad7d6f97abf51ce18e17a38f4d70e975be9c0708474987bb3e26ad21bd93ca70888787610db58e612905565b6040805162ffffff9586168152602081019490945283019190915290911660608201526080810186905260a0810185905260c00160405180910390a3505b5050505b84610e025750610e4c565b6000610e0e8b84612916565b905062ffffff81161580610e26575062ffffff818116145b15610e4457604051631a6d7fb160e31b815260040160405180910390fd5b915050610ca5565b86610e6a5760405163439df85d60e11b815260040160405180910390fd5b610e748688611e6a565b6005556006859055610e88600b8483612938565b9250610e9483826122bd565b6004558815610ec057610ebb3660011981013560f01c90036014013560601c88908a612a48565b610edb565b610edb3660011981013560f01c90033560601c88908a612a88565b50506001600355509295945050505050565b60045460789060009081908190819081610f0682612a99565b905061ffff811615610f8b576000610f1f600b83612aa9565b96509050610f2c81612b07565b9650610f3781612b13565b945064ffffffffff8516610f4a57600095505b61ffff861615610f8957610f7b8661ffff168361ffff1681610f6e57610f6e615485565b600b916001910601612b34565b9050610f8681612b13565b93505b505b50509091929394565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdd57604051632486085360e01b815260040160405180910390fd5b610fef60045488888888888888612360565b50505050505050565b600080600080600080600080600454905061101281612b07565b975061101d81612b7d565b965061102881612b8d565b955061103381612b9d565b945061103e81612bad565b935061104981612882565b925061105481612bbe565b91505090919293949596565b6000806000806004549050600061107682612a99565b905061ffff8116158061108f5750428664ffffffffff16115b156110a6576000806000945094509450505061114f565b60006110b4600b8389612bcf565b91985096509450905064ffffffffff808816908216101561114b576110e26110db84612582565b8490612cf2565b5060006110ef82896154b1565b90508064ffffffffff1661110285612582565b62ffffff1661111191906154d7565b61111b9088615507565b96508064ffffffffff1661112e85612905565b62ffffff1661113d91906154d7565b6111479087615507565b9550505b5050505b9193909250565b6000806000806000600454905061116c81612905565b945061117781612d09565b935061118281612d1a565b925061118d81612d2b565b91505090919293565b60006001600354146111bb57604051635db5c7cd60e11b815260040160405180910390fd5b60026003819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112459190615533565b6001600160a01b0316336001600160a01b03161461127657604051630f8937c560e21b815260040160405180910390fd5b6006546001600160801b038116608082901c60006112d18261129957600061129c565b60015b60ff166000856001600160801b0316116112b75760006112ba565b60015b60ff169060801b6001600160801b03919091161790565b90506112dd8482611e6a565b945084156113545760068190556005546112f79086611e6a565b60055561131e853660011981013560f01c90038035606090811c9160140135901c3361224b565b60405185815233907f3f41a5ddc53701cc7db577ade4f1fca9838a8ec0b5ea50b9f0f5d17bc4554e329060200160405180910390a25b505060016003555090919050565b600061136e8383612916565b9392505050565b600454600090839082908161139f60003660011981013560f090811c90910360280135901c905090565b905060006113ac83612582565b90506113b78361258e565b92505b62ffffff81166000908152600760205260408120546113da908915612d3e565b90506001600160801b038116156114c05760006113fc62ffffff8416856124e7565b90506000876001600160801b0316836001600160801b03161161141f5782611421565b875b905061142d8685612632565b955060008a6114505761144b6001600160801b038316846080612d5e565b611465565b6114656001600160801b038316608085612d94565b905060006114738888612dca565b9050600061148a6001600160801b03841683612de9565b90506114968184615550565b6114a0908d615550565b9b506114ac848c615572565b9a506114b8818b615550565b995050505050505b6001600160801b0386166114d4575061150c565b60006114e08984612916565b905062ffffff811615806114f8575062ffffff818116145b1561150457505061150c565b9150506113ba565b5050509250925092565b600454600061152482612a99565b905061ffff81166115405750600161153c8282612e5b565b6004555b61154c600b8285612eaa565b60405161ffff8416815233907fc975541e72d695746a43ba65745d79963a23082637c8f4609354d9bcf70194d69060200160405180910390a2505050565b60606001600354146115af57604051635db5c7cd60e11b815260040160405180910390fd5b600260035586336115c08282611ea4565b6115f05760405163548f773d60e01b81526001600160a01b0380841660048301528216602482015260440161073e565b8515806115fd5750858414155b1561161b57604051633ab7870760e01b815260040160405180910390fd5b8567ffffffffffffffff81111561163457611634615417565b60405190808252806020026020018201604052801561165d578160200160208202803683370190505b5092506000805b878110156117b357600061168f8a8a8481811061168357611683615452565b90506020020135612f93565b905060008888848181106116a5576116a5615452565b90506020020135905080600014156116d757604051636996a92560e01b815262ffffff8316600482015260240161073e565b62ffffff8216600090815260076020908152604080832054600190925282205490915061170a8f8562ffffff1685612fbe565b600061171783858461303f565b90508061173e5760405163fd44792960e01b815262ffffff8616600482015260240161073e565b6117488382611e6a565b92508382141561175f5761175d6008866130b7565b505b62ffffff85166000908152600760205260409020839055895181908b908890811061178c5761178c615452565b60209081029190910101526117a18782612211565b96508560010195505050505050611664565b506005546117c19082611e6a565b6005556117e8813660011981013560f01c90038035606090811c9160140135901c8c61224b565b60006001600160a01b03168a6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b60405161183c94939291906155e1565b60405180910390a4886001600160a01b0316336001600160a01b03167fa32e146844d6144a22e94c586715a1317d58a8aa3581ec33d040113ddcb243508a8a8860405161188b93929190615608565b60405180910390a350506001600355509695505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118ee57604051632486085360e01b815260040160405180910390fd5b6004546119026118fd8261230c565b613155565b600455337f282afaeeae84c1d85ad1424a3aa2ddbedaeefca3b1e53d889d15265fe44db7fc61193083612d1a565b61193984612d09565b6040805162ffffff93841681529290911660208301520160405180910390a250565b60065460009081906001600160801b0381169060801c6106dc565b60006106a6600454612582565b61198e33838361318a565b5050565b60008080806119aa6001600160801b03871686613273565b60045490915060006119d160003660011981013560f090811c90910360280135901c905090565b905060006119de83612582565b90506119e98361258e565b92505b62ffffff8116600090815260076020526040902054611a0c818a15612603565b611a7957611a1a8483612632565b935060008080611a2e8488888f898d6126ba565b919450925090508215611a7557611a458884611e6a565b9750611a52828d15612d3e565b611a5c908b615550565b9950611a68818d612d3e565b611a72908a615550565b98505b5050505b84611a845750611abc565b6000611a908a84612916565b905062ffffff81161580611aa8575062ffffff818116145b15611ab4575050611abc565b9150506119ec565b611ac68489612d3e565b9650505050509250925092565b600061136e8383611ea4565b600160035414611b0257604051635db5c7cd60e11b815260040160405180910390fd5b600260035582611b255760405163727ab02160e11b815260040160405180910390fd5b6005546004546000611b3686613284565b9050611b5c863660011981013560f01c90038035606090811c9160140135901c8a61224b565b6000806001600160a01b038916631faa6b8760e01b333660011981013560f01c90033560601c3660011981013560f01c90036014013560601c8c888d8d604051602401611baf979695949392919061562e565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611c1a9190615692565b6000604051808303816000865af19150503d8060008114611c57576040519150601f19603f3d011682016040523d82523d6000602084013e611c5c565b606091505b5091509150811580611c7057508051602014155b80611cae57507fab5c473bce5960a8292e9c8db82f9272504caab4e9ef09553fc112f82b62a3c281806020019051810190611cab91906156ae565b14155b15611ccc57604051634a57011360e01b815260040160405180910390fd5b6000611cf1813660011981013560f01c90038035606090811c9160140135901c61209c565b9050611d07611d008786612211565b829061338c565b15611d2557604051630e3c717160e11b815260040160405180910390fd5b611d2f8187611e6a565b93506000611d3c86612582565b90506000611d5b8262ffffff1660009081526001602052604090205490565b15611d7c57611d77611d6c88612882565b879061ffff16612892565b611d7e565b855b6005849055600654909150611d939082612211565b600655611dbe611da38783611e6a565b62ffffff841660009081526007602052604090205490612211565b62ffffff83166000818152600760209081526040918290209390935580519182529181018d9052908101879052606081018290526001600160a01b038d169033907fd126bd9d94daca8e55ffd8283fac05394aec8326c6b1639e1e8a445fbe8bbc7d9060800160405180910390a35050600160035550505050505050505050565b60006106a0611e6360003660011981013560f090811c90910360280135901c905090565b83906133d0565b80820382811180611e8657506001600160801b03808416908216115b156106a05760405163e599af5560e01b815260040160405180910390fd5b6000816001600160a01b0316836001600160a01b0316148061136e5750506001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b8281808214611f12576040516340311ffd60e11b815260040160405180910390fd5b866001600160a01b0381161580611f3157506001600160a01b03811630145b15611f4f576040516345c210e760e11b815260040160405180910390fd5b6001600160a01b03808a16600090815260208190526040808220928b1682528120905b888110156120335760008a8a83818110611f8e57611f8e615452565b9050602002013590506000898984818110611fab57611fab615452565b600085815260208981526040909120549102929092013592505081811015612008578e83836040516358b4690f60e01b815260040161073e939291906001600160a01b039390931683526020830191909152604082015260600190565b6000928352602086815260408085209284900390925585905290912080549091019055600101611f72565b50896001600160a01b03168b6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8c8c8c8c60405161208794939291906155e1565b60405180910390a45050505050505050505050565b60006120d484610d626120ae85613415565b6120b787613415565b6001600160801b03169060801b6001600160801b03919091161790565b949350505050565b6000806120fe60003660011981013560f090811c90910360280135901c905090565b600454909150600061210f82612582565b905086935060005b888110156122045760008061214d8a8d8d8681811061213857612138615452565b9050602002013561348490919063ffffffff16565b915091506000806000612163898886888c6134cd565b919450925090506121748a83611e6a565b99508362ffffff168b60000151878151811061219257612192615452565b602002602001018181525050808b6020015187815181106121b5576121b5615452565b602002602001018181525050828b6040015187815181106121d8576121d8615452565b6020026020010181815250506121f48c8562ffffff16856136ca565b8560010195505050505050612117565b5050505095945050505050565b8181018281108061222d57506001600160801b03808416908216105b156106a0576040516316692de960e01b815260040160405180910390fd5b6001600160801b038416608085901c811561227d5761227d6001600160a01b038616846001600160801b038516613717565b6001600160801b038116156122a9576122a96001600160a01b038516846001600160801b038416613717565b505050505050565b6122bb6001600355565b565b60007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83167fffffff000000000000000000000000000000000000000000000000000000000060e884901b161761136e565b60008061231883612582565b90507fffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffff831675ffffff00000000000000000000000000000000000000609883901b161761136e565b61ffff8716158015612374575061ffff8616155b8015612382575061ffff8516155b8015612390575061ffff8416155b801561239f575062ffffff8316155b80156123ad575061ffff8216155b80156123bc575062ffffff8116155b156123da576040516331375e0360e11b815260040160405180910390fd5b6123ea88888888888888886137cd565b9750600061240d60003660011981013560f090811c90910360280135901c905090565b9050600061241b8a846138cd565b90506000612429828461392b565b612433838561396b565b61243d91906156c7565b905067016345785d8a0000811115612468576040516372db9c0b60e11b815260040160405180910390fd5b50505060048890556040805161ffff8981168252888116602083015287811682840152868116606083015262ffffff868116608084015290851660a0830152831660c0820152905133917fd09e5ddc721ff14c5c1e66a305cbba1fd70b82c5232bc391aad6f55e62e4b046919081900360e00190a25050505050505050565b600061271061ffff60801b608084901b1604600160801b0162ffffff8416627fffff1901612515828261398f565b95945050505050565b60008061252b8460801c90565b90506120d48161253a85613415565b6125449190615572565b6001600160801b031660801b90565b60006001600160801b0383166120d48161256c85613415565b6125769190615572565b6001600160801b031690565b600060e882901c6106a0565b60008061259a83612d2b565b6125ab9064ffffffffff16426156df565b90506125b683612b7d565b61ffff1681106125fa576125c98361230c565b92506125d483612b8d565b61ffff1681106125ee576125e9836000613be8565b6125f7565b6125f783613155565b92505b61136e83613c56565b600081612623576126148360801c90565b6001600160801b03161561136e565b50506001600160801b03161590565b60008061263e84612d1a565b62ffffff169050600080828562ffffff1611612661578462ffffff16830361266a565b828562ffffff16035b9150612710820261267a87612d09565b62ffffff16019050600061268d87612bbe565b62ffffff1690508082116126a157816126a3565b805b91506126af87836138cd565b979650505050505050565b60008080806126ce62ffffff8716896124e7565b905060006126dd8b8915612d3e565b9050600088612708576127036126fe6001600160801b038416856080612d5e565b613caf565b612720565b6127206126fe6001600160801b038416608086612d94565b9050600061272e8c8c612dca565b905060006127456001600160801b03841683612de9565b90506127518184615550565b9250600061275f8a8d612d3e565b9050600080856001600160801b0316836001600160801b03161061278a575084915082905085612800565b61279d6001600160801b03841686613cd9565b915060006127ab8385615572565b6001600160801b031690508e6127cf576127ca6126fe8260808c613d39565b6127de565b6127de6126fe828b6080613d63565b9150876001600160801b0316826001600160801b031611156127fe578791505b505b8d61283a57612818836001600160801b031660801b90565b6001600160801b038216612835846001600160801b031660801b90565b612862565b6001600160801b038316612857826001600160801b031660801b90565b6001600160801b0384165b809b50819c50829d50505050505050505050505096509650969350505050565b60006106a082604e1c613fff1690565b60006001600160801b0382166128aa575060006106a0565b6127106001600160801b0383168110156128d757604051631514a94960e21b815260040160405180910390fd5b6001600160801b03848116840282900490608086811c86028490049183169082901b175b9695505050505050565b60006106a08260701c620fffff1690565b60008261292d57612928600883613dd1565b61136e565b61136e600883613f1d565b60008061294484612a99565b905061ffff8116612958578391505061136e565b60006129648683612b34565b905060006129718261404d565b9050600061297e83614059565b61298b9060ff16836156f6565b90508064ffffffffff1661299e42614068565b64ffffffffff161115612a3c5760008060006129db8464ffffffffff1642038a6129c78d612905565b6129d18e8e614090565b8a939291906140c0565b92509250925060006129ec87612b07565b905064ffffffffff861642036078811115612a1c575096879006600101964295506000612a198c8a612e5b565b9b505b612a2a82868686858c614125565b97505050505050612a3c8885856141c9565b50949695505050505050565b6000612a548460801c90565b90506001600160801b03811615612a8257612a826001600160a01b038416836001600160801b038416613717565b50505050565b60006001600160801b038416612a54565b60006106a08260d81c61ffff1690565b600080612ab68484612b34565b9150612ac182612b07565b90508061ffff168361ffff1614612b0057612ae4612adf8583612b34565b612b07565b90508061ffff168361ffff1611612afb5780612afd565b825b90505b9250929050565b600061ffff82166106a0565b6000612b1e82614059565b60ff16612b2a8361404d565b6106a091906156f6565b60008161ffff8116612b595760405163944e113960e01b815260040160405180910390fd5b8361ffff60001985018116908110612b7357612b73615452565b0154949350505050565b60006106a08260101c610fff1690565b60006106a082601c1c610fff1690565b60006106a08260281c613fff1690565b60006106a08260361c62ffffff1690565b60006106a082605c1c620fffff1690565b600080600080600080612be28989612aa9565b909250905064ffffffffff8716612c198a612bfd848c615716565b61ffff1661ffff8110612c1257612c12615452565b0154612b13565b64ffffffffff161115612c3f57604051631c4e7f9560e21b815260040160405180910390fd5b612c4882612b13565b95508664ffffffffff168664ffffffffff1611612c8a5785612c698361420f565b612c7284614225565b612c7b8561423b565b95509550955095505050612ce9565b869550600080612c9c8b8b8b86614251565b91509150600089612cac83612b13565b612cb691906154b1565b90506000612cc384612b13565b612ccd908c6154b1565b9050612cdb848484846143a0565b919a50985096505050505050505b93509350935093565b6000612cfd8361258e565b925061136e8383612632565b60006106a08260841c620fffff1690565b60006106a08260981c62ffffff1690565b60006106a08260b01c64ffffffffff1690565b600081612d4f576129288360801c90565b6001600160801b03831661136e565b6000612d6b848484613d63565b9050600160ff83161b80612d8157612d81615485565b8385091561136e576120d46001826156c7565b6000612da1848484613d39565b90508180612db157612db1615485565b600160ff85161b85091561136e576120d46001826156c7565b600061136e612dd9848461392b565b612de3858561396b565b01613caf565b60008167016345785d8a0000816001600160801b03161115612e1e57604051638630bc6b60e01b815260040160405180910390fd5b6001600160801b03808416670de0b6b3a76400008190039182916000199188160282010181612e4f57612e4f615485565b049250505b5092915050565b60007fffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff83167cffff00000000000000000000000000000000000000000000000000000060d884901b161761136e565b6000612eb68484612b34565b90506000612ec382612b07565b90508261ffff168161ffff1610612eed57604051632c57574160e21b815260040160405180910390fd5b60008461ffff168261ffff1614612f1e5761ffff821615612f1757612f128683612b34565b612f20565b6000612f20565b825b90506000612f2d82612b07565b61ffff169050808661ffff1611612f445780612f4a565b8561ffff165b905061ffff83165b8561ffff16811015612f7c5781888261ffff8110612f7257612f72615452565b0155600101612f52565b50610fef878761ffff8681168818908916176141c9565b8062ffffff81168114612fb957604051639b63641560e01b815260040160405180910390fd5b919050565b6001600160a01b03831660009081526020818152604080832085845291829052909120548281101561301b57604051625b387760e31b81526001600160a01b0386166004820152602481018590526044810184905260640161073e565b60009384526001602090815260408086208054869003905592905292209103905550565b60006001600160801b038416608085901c828083156130725761306f6126fe886001600160801b038716896144fe565b91505b6001600160801b0383161561309b576130986126fe886001600160801b038616896144fe565b90505b608081901b6001600160801b0383161798975050505050505050565b61ffff600882901c166000818152600284016020526040812054909190600160ff85161b19811680821461314957600083815260028701602052604090208190558061313d5750600882901c600081815260018781016020526040909120805460ff86169290921b1990911690819055908161313b578654600160ff83161b191687555b505b600193505050506106a0565b50600095945050505050565b60008061316183612905565b62ffffff169050600061317384612b9d565b61ffff169050612710828202046125158582613be8565b826001600160a01b03811615806131a957506001600160a01b03811630145b156131c7576040516345c210e760e11b815260040160405180910390fd5b826001600160a01b0316846001600160a01b031614156132055760405163782ee70760e01b81526001600160a01b038516600482015260240161073e565b6001600160a01b03848116600081815260026020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b600081612d4f576129288360801b90565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fd90c2be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330991906156ae565b90506001600160801b0383811690608085901c90670de0b6b3a763ffff9061334290670de0b6b3a7640000908616850283015b04613caf565b9250613374670de0b6b3a764000082866001600160801b0316856001600160801b031602018161333c5761333c615485565b915050608081901b6001600160801b03831617612515565b60006001600160801b0383811690608085811c9185169085901c818410806126af5750806001600160801b0316836001600160801b03161094505050505092915050565b600061271061ffff60801b608084901b1604600160801b01816133f28261451e565b6133fb8661451e565b6134059190615737565b9050612515816280000001612f93565b6040516370a0823160e01b81523060048201526000906106a0906001600160a01b038416906370a0823190602401602060405180830381865afa158015613460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fe91906156ae565b600080600080600061349587614629565b670de0b6b3a764000060808a811c90930281900490921b6001600160801b03998a169093029190910490971617979596505050505050565b62ffffff831660008181526007602052604081205490918291829182906134f4908b6124e7565b905060006135138962ffffff1660009081526001602052604090205490565b9050613521838984846146cc565b909650945084935062ffffff898116908b16141561364b57613543878a612cf2565b9650600061355584898e89868c6147f2565b905080156136455760006135738461356d8985611e6a565b906148e4565b9050600061358186866148e4565b905061358e8285836144fe565b985060006135a961359e8c612882565b859061ffff16612892565b905080156135cf576135bb8882611e6a565b6006549098506135cb9082612211565b6006555b6135db600b8c8f612938565b9a508a600481905550336001600160a01b03167f3f0b46725027bb418b2005f4683538eccdbcdf1de2b8649a29dbd9c507d16ff48e86846040516136399392919062ffffff9390931683526020830191909152604082015260600190565b60405180910390a25050505b50613656565b613656858b8b614900565b851580613661575083155b1561368657604051634c98d35760e11b815262ffffff8a16600482015260240161073e565b806136985761369660088a61496b565b505b6136a28385612211565b62ffffff90991660009081526007602052604090209890985550929891975095509350505050565b600082815260016020526040812080548392906136e89084906156c7565b90915550506001600160a01b039092166000908152602081815260408083209383529290522080549091019055565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905290600090613784908616836149f5565b9050600081511180156137a85750808060200190518101906137a69190615765565b155b156137c65760405163197138bd60e11b815260040160405180910390fd5b5050505050565b60008561ffff168761ffff1611806137ea5750610fff8661ffff16115b806137fa57506127108561ffff16115b8061380a57506109c48361ffff16115b8061381c5750620fffff8262ffffff16115b1561383a57604051631c07203f60e01b815260040160405180910390fd5b5060109590951b630fff00001661ffff9690961695909517601c9390931b64fff0000000169290921760289190911b663fff0000000000161760369190911b693fffffc00000000000001617604e9290921b6b0fffc00000000000000000001691909117605c9190911b6dfffff0000000000000000000000016176dffffffffffffffffffffffffffff19919091161790565b6000620fffff8262ffffff1611156138f857604051631c07203f60e01b815260040160405180910390fd5b700fffff0000000000000000000000000000198316700fffff0000000000000000000000000000607084901b161761136e565b60008061393784612bad565b62ffffff1690508015612e545760008361ffff1661395486612905565b62ffffff1602905060646063828002840201612e4f565b60008161ffff1661397b84612b07565b61ffff16026402540be40002905092915050565b60008080836139a75750600160801b91506106a09050565b508260008112156139b9579015906000035b62100000811015613ba957600160801b9250846001600160801b038111156139e357911591600019045b60018216156139f45792830260801c925b800260801c6002821615613a0a5792830260801c925b800260801c6004821615613a205792830260801c925b800260801c6008821615613a365792830260801c925b800260801c6010821615613a4c5792830260801c925b800260801c6020821615613a625792830260801c925b800260801c6040821615613a785792830260801c925b8002608090811c90821615613a8f5792830260801c925b800260801c610100821615613aa65792830260801c925b800260801c610200821615613abd5792830260801c925b800260801c610400821615613ad45792830260801c925b800260801c610800821615613aeb5792830260801c925b800260801c611000821615613b025792830260801c925b800260801c612000821615613b195792830260801c925b800260801c614000821615613b305792830260801c925b800260801c618000821615613b475792830260801c925b800260801c62010000821615613b5f5792830260801c925b800260801c62020000821615613b775792830260801c925b800260801c62040000821615613b8f5792830260801c925b800260801c62080000821615613ba75792830260801c925b505b82613bd157604051631dba598d60e11b8152600481018690526024810185905260440161073e565b81613bdc5782612515565b61251583600019615782565b6000620fffff8262ffffff161115613c1357604051631c07203f60e01b815260040160405180910390fd5b7fffffffffffffffffffffffffff00000fffffffffffffffffffffffffffffffff831672fffff000000000000000000000000000000000608484901b161761136e565b600080613c6242614068565b90507fffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffffff83167affffffffff0000000000000000000000000000000000000000000060b083901b161761136e565b806001600160801b0381168114612fb957604051632f45db3d60e21b815260040160405180910390fd5b60008167016345785d8a0000816001600160801b03161115613d0e57604051638630bc6b60e01b815260040160405180910390fd5b670de0b6b3a7640000670de0b6b3a763ffff6001600160801b03868116908616020104949350505050565b600060ff831684811b9061ffff6101008290031686901c906128fb9087906001901b868585614ac0565b6000806000613d728686614b69565b9150915081600014613d88578360ff1682901c92505b8015613dc857600160ff85161b8110613db457604051638e471a8960e01b815260040160405180910390fd5b8360ff166101000361ffff1681901b830192505b50509392505050565b60008061ffff600884901c1660ff808516908114613e265760008281526002870160205260408120549350613e068483614b88565b90506000198114613e245760089290921b90911792506106a0915050565b505b5060ff80821690600883901c908214613ea05760008181526001880160205260408120549450613e568584614b88565b90506000198114613e9e57600882901b8117600081815260028a01602052604090205495509350613e8685614b97565b60ff1660088560001c901b17955050505050506106a0565b505b60ff81811692508214613f1057865493506000613ebd8584614b88565b90506000198114613f0e5760008181526001890160205260409020549450905080613ee785614b97565b60ff16600883901b17600081815260028a01602052604090205495509350613e8685614b97565b505b5060009695505050505050565b60008061ffff600884901c1660ff84168015613f705760008281526002870160205260408120549350613f508483614c33565b90506000198114613f6e5760089290921b90911792506106a0915050565b505b5060ff8116600882901c8115613fcf5760008181526001880160205260408120549450613f9d8584614c33565b90506000198114613fcd57600882901b8117600081815260028a01602052604090205495509350613e8685614c43565b505b60ff81169150811561403e57865493506000613feb8584614c33565b9050600019811461403c576000818152600189016020526040902054945090508061401585614c43565b60ff16600883901b17600081815260028a01602052604090205495509350613e8685614c43565b505b5062ffffff9695505050505050565b600060d882901c6106a0565b60006106a08260d01c60ff1690565b8064ffffffffff81168114612fb9576040516350dbfc8760e11b815260040160405180910390fd5b60008061409c84612582565b90508062ffffff168362ffffff16116140b7578281036120d4565b90910392915050565b64ffffffffff841662ffffff8481168202918482168102918416026140e48861420f565b6140ee9084615507565b92506140f988614225565b6141039083615507565b915061410e8861423b565b6141189082615507565b9050955095509592505050565b60d082901b7aff000000000000000000000000000000000000000000000000000016609084901b79ffffffffffffffff00000000000000000000000000000000000016605086901b71ffffffffffffffff0000000000000000000016601088901b69ffffffffffffffff00001661ffff8a161717171760d882901b7fffffffffff0000000000000000000000000000000000000000000000000000001681176126af565b8161ffff81166141ec5760405163944e113960e01b815260040160405180910390fd5b818461ffff6000198601811690811061420757614207615452565b015550505050565b60006106a08260101c67ffffffffffffffff1690565b60006106a08260501c67ffffffffffffffff1690565b60006106a08260901c67ffffffffffffffff1690565b6000808080614261600186615796565b61ffff16905060008060008961ffff1690505b83851161431f576000600161428986886156c7565b901c9050888183089a508b61ffff808d169081106142a9576142a9615452565b015493506142b684612b13565b92508964ffffffffff168364ffffffffff1611156142e0576142d96001826156df565b9450614319565b8964ffffffffff168364ffffffffff161015614308576143018160016156c7565b9550614319565b838497509750505050505050614397565b50614274565b8164ffffffffff168964ffffffffff16101561436d5761ffff8a16614342578799505b8a61ffff6000198c01811690811061435c5761435c615452565b015483965096505050505050614397565b8760018b089950828b61ffff808d1690811061438b5761438b615452565b01549650965050505050505b94509492505050565b6000806000806143af8861420f565b67ffffffffffffffff16905060006143c689614225565b67ffffffffffffffff16905060006143dd8a61423b565b67ffffffffffffffff16905064ffffffffff871661440157919450925090506144f4565b600061440c8a61420f565b67ffffffffffffffff16905060006144238b614225565b67ffffffffffffffff169050600061443a8c61423b565b67ffffffffffffffff16905064ffffffffff8b1661446257919750955093506144f492505050565b600061447864ffffffffff808d16908e166156c7565b9050808b64ffffffffff1685028d64ffffffffff168902018161449d5761449d615485565b049950808b64ffffffffff1684028d64ffffffffff16880201816144c3576144c3615485565b049850808b64ffffffffff1683028d64ffffffffff16870201816144e9576144e9615485565b049750505050505050505b9450945094915050565b600080600061450d8686614b69565b915091506128fb8686868585614ac0565b600081600114156145325750607f19919050565b816145505760405163125946cf60e11b815260040160405180910390fd5b60019190911c9060006f80000000000000000000000000000000831061457857506001614593565b5060001982600160fe1b8161458f5761458f615485565b0492505b60006145a2607f85901c614c43565b707f80000000000000000000000000000000607f82901b16935060ff16905083811c6f80000000000000000000000000000000811461461e576f400000000000000000000000000000005b600081131561461c57908002607f1c90600160801b8210614614579384019360019190911c905b60011d6145ed565b505b50500260011b919050565b600080806146418460581c67ffffffffffffffff1690565b92506146578460181c67ffffffffffffffff1690565b91505062ffffff831672ffffffffffffffffffffffffffffffffffffff8411806146925750670de0b6b3a76400008367ffffffffffffffff16115b806146ae5750670de0b6b3a76400008267ffffffffffffffff16115b1561114f57604051637752557f60e11b815260040160405180910390fd5b6000806001600160801b038516608086901c826146ea838389614cde565b90508515806146f7575080155b15614709579350869250614397915050565b60006147158a896148e4565b90508061472a57509350869250614397915050565b6147358288836144fe565b9550600061474487838a614d49565b9050808311156147e357600061475a82856156df565b9050600160801b811061479b57608081901c858111614779578061477b565b855b905061478781876156df565b9550614797608082901b836156df565b9150505b8981106147cf5760006147ae8b83615782565b90508681116147bd57806147bf565b865b90506147cb81886156df565b9650505b608085901b6001600160801b038716179a50505b50949997985050505050505050565b600081614801575060006128fb565b6001600160801b038416608085901c6000806148336106c86148238d8b612211565b8861482e818c6156c7565b61303f565b91509150836001600160801b0316826001600160801b031611156148965760006148796148608c8c612dca565b61486a8487615572565b6001600160801b031690614d66565b905061488e816001600160801b031660801b90565b9550506148d6565b826001600160801b0316816001600160801b031611156148d65760006148c96148bf8c8c612dca565b61486a8588615572565b6001600160801b03169550505b505050509695505050505050565b60006001600160801b038316608084901c612515828286614cde565b8162ffffff168162ffffff1610801561491c5750608083901b15155b8061494157508162ffffff168162ffffff1611801561494157506001600160801b0383115b156149665760405163227bd87160e21b815262ffffff8216600482015260240161073e565b505050565b61ffff600882901c166000818152600284016020526040812054909190600160ff85161b811780821461314957600083815260028701602052604090208190558161313d57600883901c600081815260018089016020526040909120805460ff87169290921b8217905592508261313b578654600160ff83161b17875550600193505050506106a0565b6060600080846001600160a01b031684604051614a129190615692565b6000604051808303816000865af19150503d8060008114614a4f576040519150601f19603f3d011682016040523d82523d6000602084013e614a54565b606091505b50915091508115614a99578051158015614a7657506001600160a01b0385163b155b15614a9457604051633b99915360e21b815260040160405180910390fd5b6120d4565b8051614ab8576040516373483fab60e11b815260040160405180910390fd5b805181602001fd5b600081614ade57838381614ad657614ad6615485565b049050612515565b838210614afe576040516313eae71560e01b815260040160405180910390fd5b600084868809600186198101871660008190038190049091018683119095039490940294038390049390931760029290940460038102831880820284030280820284030280820284030280820284030280820284030290810290920390910292909202949350505050565b6000806000198385098385029250828110838203039150509250929050565b600061136e8360018401614dd0565b60008160801b8015614bab57608091508092505b8260401b90508015614bbe579150604001815b8260201b90508015614bd1579150602001815b8260101b90508015614be4579150601001815b8260081b90508015614bf7579150600801815b8260041b90508015614c0a579150600401815b8260021b90508015614c1d579150600201815b508160011b15614c2b576001015b60ff03919050565b600061136e836000198401614dfe565b60006001600160801b03821115614c5c5750608090811c905b67ffffffffffffffff821115614c7457604091821c91015b63ffffffff821115614c8857602091821c91015b61ffff821115614c9a57601091821c91015b60ff821115614cab57600891821c91015b600f821115614cbc57600491821c91015b6003821115614ccd57600291821c91015b6001821115612fb957600101919050565b60008315614d19575080830281848281614cfa57614cfa615485565b0414614d19576040516363f1e01f60e01b815260040160405180910390fd5b821561136e5760809290921b9182018281101561136e576040516363f1e01f60e01b815260040160405180910390fd5b6000614d568484846144fe565b90508180612d8157612d81615485565b60008167016345785d8a0000816001600160801b03161115614d9b57604051638630bc6b60e01b815260040160405180910390fd5b6ec097ce7bc90715b34b9f1000000000806001600160801b03868116908616908102670de0b6b3a76400009190910102612e4f565b60ff81169190911c9060008215614df45781614deb84614b97565b0160ff1661136e565b5060001992915050565b60ff8181031691821b916000908315614e245780614e1b85614c43565b60ff16036120d4565b506000199392505050565b6001600160a01b0381168114614e4457600080fd5b50565b60008060408385031215614e5a57600080fd5b8235614e6581614e2f565b946020939093013593505050565b60005b83811015614e8e578181015183820152602001614e76565b83811115612a825750506000910152565b6020815260008251806020840152614ebe816040850160208701614e73565b601f01601f19169190910160400192915050565b803562ffffff81168114612fb957600080fd5b600060208284031215614ef757600080fd5b61136e82614ed2565b60008083601f840112614f1257600080fd5b50813567ffffffffffffffff811115614f2a57600080fd5b6020830191508360208260051b8501011115612b0057600080fd5b60008060008060008060808789031215614f5e57600080fd5b8635614f6981614e2f565b95506020870135614f7981614e2f565b9450604087013567ffffffffffffffff80821115614f9657600080fd5b614fa28a838b01614f00565b90965094506060890135915080821115614fbb57600080fd5b50614fc889828a01614f00565b979a9699509497509295939492505050565b60008060008060608587031215614ff057600080fd5b8435614ffb81614e2f565b9350602085013567ffffffffffffffff81111561501757600080fd5b61502387828801614f00565b909450925050604085013561503781614e2f565b939692955090935050565b600081518084526020808501945080840160005b8381101561507257815187529582019590820190600101615056565b509495945050505050565b8381528260208201526060604082015260006125156060830184615042565b803561ffff81168114612fb957600080fd5b600080600080600080600080610100898b0312156150cb57600080fd5b6150d48961509c565b97506150e260208a0161509c565b96506150f060408a0161509c565b95506150fe60608a0161509c565b945061510c60808a01614ed2565b935061511a60a08a0161509c565b925061512860c08a01614ed2565b915061513660e08a01614ed2565b90509295985092959890939650565b6000806000806040858703121561515b57600080fd5b843567ffffffffffffffff8082111561517357600080fd5b61517f88838901614f00565b9096509450602087013591508082111561519857600080fd5b506151a587828801614f00565b95989497509550505050565b60208152600061136e6020830184615042565b8015158114614e4457600080fd5b600080604083850312156151e557600080fd5b82356151f0816151c4565b9150602083013561520081614e2f565b809150509250929050565b600080600080600080600060e0888a03121561522657600080fd5b61522f8861509c565b965061523d6020890161509c565b955061524b6040890161509c565b94506152596060890161509c565b935061526760808901614ed2565b925061527560a0890161509c565b915061528360c08901614ed2565b905092959891949750929550565b6000602082840312156152a357600080fd5b813564ffffffffff8116811461136e57600080fd5b600080604083850312156152cb57600080fd5b82356152d6816151c4565b9150612afd60208401614ed2565b600080604083850312156152f757600080fd5b82356001600160801b038116811461530e57600080fd5b91506020830135615200816151c4565b60006020828403121561533057600080fd5b5035919050565b60006020828403121561534957600080fd5b61136e8261509c565b6000806040838503121561536557600080fd5b823561530e81614e2f565b6000806040838503121561538357600080fd5b82356151f081614e2f565b600080600080606085870312156153a457600080fd5b84356153af81614e2f565b935060208501359250604085013567ffffffffffffffff808211156153d357600080fd5b818701915087601f8301126153e757600080fd5b8135818111156153f657600080fd5b88602082850101111561540857600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b6040815260006154406040830185615042565b82810360208401526125158185615042565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561547a57600080fd5b813561136e81614e2f565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600064ffffffffff838116908316818110156154cf576154cf61549b565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156154fe576154fe61549b565b02949350505050565b600067ffffffffffffffff80831681851680830382111561552a5761552a61549b565b01949350505050565b60006020828403121561554557600080fd5b815161136e81614e2f565b60006001600160801b0380831681851680830382111561552a5761552a61549b565b60006001600160801b03838116908316818110156154cf576154cf61549b565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156155c457600080fd5b8260051b8083602087013760009401602001938452509192915050565b6040815260006155f5604083018688615592565b82810360208401526126af818587615592565b60408152600061561c604083018587615592565b82810360208401526128fb8185615042565b60006001600160a01b03808a168352808916602084015280881660408401525085606083015284608083015260c060a08301528260c0830152828460e0840137600060e0848401015260e0601f19601f850116830101905098975050505050505050565b600082516156a4818460208701614e73565b9190910192915050565b6000602082840312156156c057600080fd5b5051919050565b600082198211156156da576156da61549b565b500190565b6000828210156156f1576156f161549b565b500390565b600064ffffffffff80831681851680830382111561552a5761552a61549b565b600061ffff8084168061572b5761572b615485565b92169190910692915050565b60008261574657615746615485565b600160ff1b8214600019841416156157605761576061549b565b500590565b60006020828403121561577757600080fd5b815161136e816151c4565b60008261579157615791615485565b500490565b600061ffff838116908316818110156154cf576154cf61549b56fea2646970667358221220d89757dadf42e84c08dc0e0eef789947a36340de9dfa97ce0a40171838a35fc064736f6c634300080a00330000000000000000000000008e42f2f4101563bf679975178e880fd87d3efd4e