0 txs
1 call
constructor
constructor((uint256 dexId, address liquidity, address factory, (address shift, address admin, address colOperations, address debtOperations, address perfectOperationsAndSwapOut) implementations, address deployerContract, address token0, address token1, bytes32 supplyToken0Slot, bytes32 borrowToken0Slot, bytes32 supplyToken1Slot, bytes32 borrowToken1Slot, bytes32 exchangePriceToken0Slot, bytes32 exchangePriceToken1Slot, uint256 oracleMapping) constantViews_)
functions
DEX_ID
viewfunction DEX_ID() view returns (uint256)
readFromStorage
viewfunction readFromStorage(bytes32 slot_) view returns (uint256 result_)
deposit
payablefunction deposit(uint256 token0Amt_, uint256 token1Amt_, uint256 minSharesAmt_, bool estimate_) payable returns (uint256 shares_)
withdraw
nonpayablefunction withdraw(uint256 token0Amt_, uint256 token1Amt_, uint256 maxSharesAmt_, address to_) returns (uint256 shares_)
withdrawPerfectInOneToken
nonpayablefunction withdrawPerfectInOneToken(uint256 shares_, uint256 minToken0_, uint256 minToken1_, address to_) returns (uint256 withdrawAmt_)
events
LogArbitrage
event LogArbitrage(int256 routing, uint256 amtOut)
LogBorrowDebtLiquidity
event LogBorrowDebtLiquidity(uint256 amount0, uint256 amount1, uint256 shares)
LogBorrowPerfectDebtLiquidity
event LogBorrowPerfectDebtLiquidity(uint256 shares, uint256 token0Amt, uint256 token1Amt)
LogDepositColLiquidity
event LogDepositColLiquidity(uint256 amount0, uint256 amount1, uint256 shares)
LogDepositPerfectColLiquidity
event LogDepositPerfectColLiquidity(uint256 shares, uint256 token0Amt, uint256 token1Amt)
LogPaybackDebtInOneToken
event LogPaybackDebtInOneToken(uint256 shares, uint256 token0Amt, uint256 token1Amt)
LogPaybackDebtLiquidity
event LogPaybackDebtLiquidity(uint256 amount0, uint256 amount1, uint256 shares)
LogPaybackPerfectDebtLiquidity
event LogPaybackPerfectDebtLiquidity(uint256 shares, uint256 token0Amt, uint256 token1Amt)
LogWithdrawColInOneToken
event LogWithdrawColInOneToken(uint256 shares, uint256 token0Amt, uint256 token1Amt)
LogWithdrawColLiquidity
event LogWithdrawColLiquidity(uint256 amount0, uint256 amount1, uint256 shares)
LogWithdrawPerfectColLiquidity
event LogWithdrawPerfectColLiquidity(uint256 shares, uint256 token0Amt, uint256 token1Amt)
Swap
event Swap(bool swap0to1, uint256 amountIn, uint256 amountOut, address to)
errors
FluidDexError
error FluidDexError(uint256 errorId_)
FluidDexFactoryError
error FluidDexFactoryError(uint256 errorId)
FluidDexLiquidityOutput
error FluidDexLiquidityOutput(uint256 shares_)
FluidDexPerfectLiquidityOutput
error FluidDexPerfectLiquidityOutput(uint256 token0Amt, uint256 token1Amt)
FluidDexPricesAndExchangeRates
error FluidDexPricesAndExchangeRates((uint256 lastStoredPrice, uint256 centerPrice, uint256 upperRange, uint256 lowerRange, uint256 geometricMean, uint256 supplyToken0ExchangePrice, uint256 borrowToken0ExchangePrice, uint256 supplyToken1ExchangePrice, uint256 borrowToken1ExchangePrice) pex_)
FluidDexSingleTokenOutput
error FluidDexSingleTokenOutput(uint256 tokenAmt)
FluidDexSwapResult
error FluidDexSwapResult(uint256 amountOut)
FluidLiquidityCalcsError
error FluidLiquidityCalcsError(uint256 errorId_)
FluidSafeTransferError
error FluidSafeTransferError(uint256 errorId_)
creation bytecode
0x6103606040523480156200001257600080fd5b5060405162005fe138038062005fe1833981016040819052620000359162000522565b3060e052805160805260208101516001600160a01b0390811661018052604082015181166101a05260a08083015182169081905260c08084015190921691829052829182918291829110620000a6576040516317f71f0760e11b815261c76160048201526024015b60405180910390fd5b60a051620000b4906200031d565b610120526101005260c051620000ca906200031d565b61016052610140526060810151516001600160a01b03161562000100576060810151516001600160a01b03166101c05262000106565b306101c0525b6060810151602001516001600160a01b0316156200013a576060810151602001516001600160a01b03166101e05262000140565b306101e0525b6060810151604001516001600160a01b03161562000174576060810151604001516001600160a01b0316610200526200017a565b30610200525b60608082015101516001600160a01b031615620001ac5760608082015101516001600160a01b031661022052620001b2565b30610220525b6060810151608001516001600160a01b031615620001e6576060810151608001516001600160a01b031661024052620001ec565b30610240525b60808101516001600160a01b03166102605260e0810151610280526101008101516102a0526101208101516102c0526101408101516102e05261016081015161030052610180810151610320526101a081015161ffff101562000267576040516317f71f0760e11b815261c76260048201526024016200009d565b6101a00151610340525050506060810151516001600160a01b031615806200029f57506060810151602001516001600160a01b031615155b80620002bb57506060810151604001516001600160a01b031615155b80620002d6575060608082015101516001600160a01b031615155b80620002f257506060810151608001516001600160a01b031615155b1562000316576040516317f71f0760e11b815261c77260048201526024016200009d565b506200077b565b600080806200032c8462000385565b9050600c8111156200035e576001925062000349600c826200062e565b6200035690600a62000741565b91506200037f565b6200036b81600c6200062e565b6200037890600a62000741565b9250600191505b50915091565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146200041a57816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000411919062000756565b60ff166200041d565b60125b92915050565b6040516101c081016001600160401b03811182821017156200045557634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200047357600080fd5b919050565b600060a082840312156200048b57600080fd5b60405160a081016001600160401b0381118282101715620004bc57634e487b7160e01b600052604160045260246000fd5b604052905080620004cd836200045b565b8152620004dd602084016200045b565b6020820152620004f0604084016200045b565b604082015262000503606084016200045b565b606082015262000516608084016200045b565b60808201525092915050565b600061024082840312156200053657600080fd5b6200054062000423565b8251815262000552602084016200045b565b602082015262000565604084016200045b565b604082015262000579846060850162000478565b60608201526101006200058e8185016200045b565b6080830152610120620005a38186016200045b565b60a0840152610140620005b88187016200045b565b60c08501526101608087015160e086015261018080880151858701526101a0945084880151848701526101c0880151838701526101e088015182870152610200880151818701525050505061022084015181830152508091505092915050565b634e487b7160e01b600052601160045260246000fd5b818103818111156200041d576200041d62000618565b600181815b808511156200068557816000190482111562000669576200066962000618565b808516156200067757918102915b93841c939080029062000649565b509250929050565b6000826200069e575060016200041d565b81620006ad575060006200041d565b8160018114620006c65760028114620006d157620006f1565b60019150506200041d565b60ff841115620006e557620006e562000618565b50506001821b6200041d565b5060208310610133831016604e8410600b841016171562000716575081810a6200041d565b62000722838362000644565b806000190482111562000739576200073962000618565b029392505050565b60006200074f83836200068d565b9392505050565b6000602082840312156200076957600080fd5b815160ff811681146200074f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e0516103005161032051610340516155ea620009f760003960008181614a3101528181614a9a0152614b4701526000612163015260006120810152600061467a015260008181610bf401526122bc0152600061464a015260008181610bc0015261228c015260008181611d200152614cd101526000505060005050600050506000505060008181613fef015281816140f6015261418701526000505060008181610797015281816108950152818161126001528181611392015281816120ab0152818161218d01528181612b5601528181612caf0152818161300e01528181613140015281816132a6015281816139d40152613a990152600081816105a601528181610cae015281816116c401528181612acc01528181612b2301528181612ee901528181612f40015261335001526000818161058501528181610ccf015281816116e501528181612aa801528181612aff01528181612ec501528181612f1c015261337101526000818161040a01528181610c370152818161163401528181612a7501528181612e9201526133a70152600081816103e901528181610c580152818161165501528181612a5101528181612e6e01526133c801526000818161013001528181610a3901526114fa0152600081816108bc015281816113b901528181611b3201528181612cd6015281816131690152614d6a0152600081816107be0152818161128701528181611aca01528181612b92015281816130500152614d420152600060f501526155ea6000f3fe60806040526004361061005a5760003560e01c8063d331bef711610043578063d331bef7146100b0578063e980e1eb146100d0578063f4b9a3fb146100e357600080fd5b80634c89bfd41461005f578063b5c736e414610091575b600080fd5b34801561006b57600080fd5b5061007f61007a3660046151aa565b610117565b60405190815260200160405180910390f35b34801561009d57600080fd5b5061007f6100ac366004615204565b5490565b3480156100bc57600080fd5b5061007f6100cb3660046151aa565b610a20565b61007f6100de36600461522e565b6114e1565b3480156100ef57600080fd5b5061007f7f000000000000000000000000000000000000000000000000000000000000000081565b600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610191576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c77360048201526024015b60405180910390fd5b6000546001546101a18282611c01565b33600090815260036020526040902054600181161580156101da575073ffffffffffffffffffffffffffffffffffffffff851661dead14155b15610215576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7456004820152602401610188565b73ffffffffffffffffffffffffffffffffffffffff8516156102375784610239565b335b945060008711801561024b5750600086115b8061025d57508615801561025d575085155b15610298576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7526004820152602401610188565b816001166001036109df5760006102af8484611c8c565b6002549091506fffffffffffffffffffffffffffffffff166102d18a826121e9565b60008060006102f78560800151866040015187606001518860a001518960e0015161225a565b8051909150158061030a57506020810151155b15610345576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7766004820152602401610188565b60006103548e86846000612395565b805183519192506001916103689190615293565b6103729190615293565b935060018160200151836020015161038a9190615293565b6103949190615293565b92508c15610538576103af8382606001518360400151612542565b6103b990856152a6565b9350600092506103e58483600001516103d29190615293565b83602001518860200151620f4240612564565b60017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006104338388615293565b61043d91906152b9565b61044791906152ff565b6104519190615293565b9350620f424061046a60028a901c6201ffff1682615293565b61047490866152b9565b61047e91906152ff565b99508993507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215373ffffffffffffffffffffffffffffffffffffffff8c16016104f5576040517fe8d35d06000000000000000000000000000000000000000000000000000000008152600481018b9052602401610188565b8c8a1015610533576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7516004820152602401610188565b6106cf565b61054b8482604001518360600151612542565b61055590846152a6565b92506000935061058182600001518484602001516105739190615293565b8860200151620f42406125d1565b60017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006105cf8387615293565b6105d991906152b9565b6105e391906152ff565b6105ed9190615293565b9250620f424061060660028a901c6201ffff1682615293565b61061090856152b9565b61061a91906152ff565b99508992507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215373ffffffffffffffffffffffffffffffffffffffff8c1601610691576040517fe8d35d06000000000000000000000000000000000000000000000000000000008152600481018b9052602401610188565b8b8a10156106cf576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7516004820152602401610188565b66ffffffffffffff600988901c1660ff600189901c161b60006106f28983612638565b90508f826107009190615293565b915080821015610740576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7496004820152602401610188565b61074b8983836126cd565b8f876107579190615293565b965061076287612794565b5073ffffffffffffffffffffffffffffffffffffffff8c168e1561087e5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f00000000000000000000000000000000000000000000000000000000000000006107e689615313565b60408051600080825260208201928390527fffffffff0000000000000000000000000000000000000000000000000000000060e087901b169092526108359392919087908290602481016153af565b60408051808303816000875af1158015610853573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087791906153fc565b5050610978565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f00000000000000000000000000000000000000000000000000000000000000006108e488615313565b60408051600080825260208201928390527fffffffff0000000000000000000000000000000000000000000000000000000060e087901b169092526109339392919087908290602481016153af565b60408051808303816000875af1158015610951573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097591906153fc565b50505b8f90507fc98f37914e06db36c18654484db85c4bb864575a1b9f8181133ff33dea2d34f38187876040516109bf939291909283526020830191909152604082015260600190565b60405180910390a16109d28b8b8a61281e565b5050505050505050610a15565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73b6004820152602401610188565b505050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a95576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7736004820152602401610188565b600054600154610aa58282611c01565b3360009081526003602052604090205460018116158015610ade575073ffffffffffffffffffffffffffffffffffffffff851661dead14155b15610b19576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7456004820152602401610188565b610b616040518060a0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b73ffffffffffffffffffffffffffffffffffffffff861615610b835785610b85565b335b73ffffffffffffffffffffffffffffffffffffffff166080820152600180841690036109df576000610bb78585611c8c565b90506000610beb7f00000000000000000000000000000000000000000000000000000000000000008360a00151600161325d565b90506000610c1f7f00000000000000000000000000000000000000000000000000000000000000008460e00151600061325d565b604085018390526060850181905290508b15610ca6577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008d6001010281610c8957610c896152d0565b04600101808552610c9a908d613401565b8351610ca690836121e9565b8a15610d23577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008c6001010281610d0057610d006152d0565b0460010160208501819052610d15908c613401565b610d238460200151826121e9565b60025460009081906fffffffffffffffffffffffffffffffff168415801590610d4c5750600084115b156110a057865115801590610d65575060008760200151115b15610eee5786518590610d8090670de0b6b3a76400006152b9565b610d8a91906152ff565b9250838760200151670de0b6b3a7640000610da591906152b9565b610daf91906152ff565b915081831115610e0b57670de0b6b3a7640000610dcc82846152b9565b610dd691906152ff565b9a50670de0b6b3a764000085610dec8486615293565b610df691906152b9565b610e0091906152ff565b925060009150610e9b565b82821115610e6557670de0b6b3a7640000610e2682856152b9565b610e3091906152ff565b9a50670de0b6b3a764000084610e468585615293565b610e5091906152b9565b610e5a91906152ff565b915060009250610e9b565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7526004820152602401610188565b80610ea68c876152b9565b610eb091906152ff565b610eba9086615293565b945080610ec78c866152b9565b610ed191906152ff565b610edb9085615293565b9350610ee78b82615293565b9050610f52565b865115610f02578651925060009150610f52565b602087015115610f1c576000925086602001519150610f52565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7536004820152602401610188565b6000806b033b2e3c9fd0803ce800000088608001511015610f9f57610f9588608001518960400151878a610f869190615293565b610f90888b615293565b61347d565b9092509050611008565b6110038860800151760a70c3c40a64e6c51999090b65f67d9240000000000000610fc991906152ff565b60608a0151610fef90760a70c3c40a64e6c51999090b65f67d92400000000000006152ff565b610ff9878a615293565b610f90898c615293565b925090505b84156110225761101b8787848489613599565b9450611035565b8315610f1c5761101b8688838588613599565b670de0b6b3a764000061104884876152b9565b61105291906152ff565b9450620f424061106b60028d901c6201ffff16826152a6565b61107590876152b9565b61107f91906152ff565b945061108b858e6152a6565b9c506110978584615293565b925050506110d6565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7766004820152602401610188565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215373ffffffffffffffffffffffffffffffffffffffff8d1601611148576040517fe8d35d06000000000000000000000000000000000000000000000000000000008152600481018c9052602401610188565b8c8b1115611186576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7546004820152602401610188565b66ffffffffffffff600989901c1660ff60018a901c161b92506111a98884612638565b91506111b58b84615293565b9250818310156111f5576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7496004820152602401610188565b6112008884846126cd565b61120981612794565b86511561134657865160408801516112469161122491615293565b886020015189606001516112389190615293565b8860200151620f4240612564565b8e925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f00000000000000000000000000000000000000000000000000000000000000006112af86615313565b60808b015160408051600080825260208201928390527fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16909252611301949392908290602481016153af565b60408051808303816000875af115801561131f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134391906153fc565b50505b60208701511561147857865160408801516113789161136491615293565b886020015189606001516105739190615293565b8d925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f00000000000000000000000000000000000000000000000000000000000000006113e186615313565b60808b015160408051600080825260208201928390527fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16909252611433949392908290602481016153af565b60408051808303816000875af1158015611451573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147591906153fc565b50505b7fb61c7f3b23fe9335cc6c6a6e7036457758470877e61a19a5b4924e1ff82896248f8f8d6040516114bc939291909283526020830191909152604082015260600190565b60405180910390a16114cf8a8a8861281e565b50505050505050505050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611556576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7736004820152602401610188565b6000546001546115668282611c01565b3360009081526003602052604090205460018116158015611585575084155b156115c0576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7456004820152602401610188565b816001166001036109df5760006115d78484611c8c565b90506116046040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116278360800151846040015185606001518660a001518760e0015161225a565b9050808b156116ba5760017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060018f6116819190615293565b61168b91906152b9565b61169591906152ff565b61169f9190615293565b8084526116ac908d613401565b825182516116ba91906136e6565b8a1561174f5760017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061170e838f615293565b61171891906152b9565b61172291906152ff565b61172c9190615293565b6020840181905261173d908c613401565b61174f836020015183602001516136e6565b60008060006fffffffffffffffffffffffffffffffff60025416905060008560000151118015611783575060008560200151115b156110a05785511580159061179c575060008660200151115b156118ff57845186516117b790670de0b6b3a76400006152b9565b6117c191906152ff565b925084602001518660200151670de0b6b3a76400006117e091906152b9565b6117ea91906152ff565b91508183111561184957670de0b6b3a764000061180782846152b9565b61181191906152ff565b8551909b50670de0b6b3a76400009061182a8486615293565b61183491906152b9565b61183e91906152ff565b9250600091506118df565b828211156118a957670de0b6b3a764000061186482856152b9565b61186e91906152ff565b9a50670de0b6b3a76400008560200151848461188a9190615293565b61189491906152b9565b61189e91906152ff565b9150600092506118df565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c74e6004820152602401610188565b6118ec8b82876001612395565b93506118f88b826152a6565b9050611929565b855115611913578551925060009150611929565b6020860151156118a95760009250856020015191505b82156119535761194c838560600151866040015187600001518860200151613748565b92506119ac565b81156119765761194c828560400151866060015187602001518860000151613748565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c74f6004820152602401610188565b670de0b6b3a76400006119bf82856152b9565b6119c991906152ff565b9250620f42406119e260028b901c6201ffff1682615293565b6119ec90856152b9565b6119f691906152ff565b9250611a02838c6152a6565b9a50611a0e83826152a6565b90508b15611a4b576040517fe8d35d06000000000000000000000000000000000000000000000000000000008152600481018c9052602401610188565b8c8b1015611a89576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7506004820152602401610188565b8e15611af15785518551611ac291611aa0916152a6565b87602001518760200151611ab491906152a6565b8960200151620f42406125d1565b8e9250611af17f00000000000000000000000000000000000000000000000000000000000000008460006138f5565b8d15611b595785518551611b2a91611b08916152a6565b87602001518760200151611b1c91906152a6565b8960200151620f4240612564565b8d9250611b597f00000000000000000000000000000000000000000000000000000000000000008460006138f5565b66ffffffffffffff600989901c1660ff60018a901c161b9250611b7c8884612638565b9150611b888b846152a6565b9250611b958884846126cd565b611b9e81612794565b7fbfea92097a2487d6a5ccf7b7adc36b6002238f3106568ba4359770f4b67365a48f8f8d604051611be2939291909283526020830191909152604082015260600190565b60405180910390a1611bf58a8a8961281e565b50505050505050610a15565b81600116600103611c42576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7396004820152602401610188565b80600316600003611c83576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73d6004820152602401610188565b50600117600055565b611cdb6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060f883901c600116600003611dbc57633fffffff607084901c16905080600003611d1b575063ffffffff605984901c1660ff605185901c161b611dc9565b611d457f000000000000000000000000000000000000000000000000000000000000000082613b6b565b73ffffffffffffffffffffffffffffffffffffffff1663f763f7a66040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db59190615420565b9050611dc9565b611dc68484613fd5565b90505b63ffffffff603185901c1660ff602986901c161b601b84901c620fffff90811690602f86901c166001601a87901c81169003611e1257611e0a8282886140d1565b975090925090505b81620f424003620f4240850281611e2b57611e2b6152d0565b049150620f42409081038402046000620fffff604488901c1615611f3157604487901c6103ff90811690604e89901c16605889901c62ffffff16600160438b901c81169003611e8757611e7f838383614162565b919450925090505b6103e888870384820302048801871115611edc5760798b901c6401ffffffff16420381811015611ece5781818a89030281611ec457611ec46152d0565b0489019850611ed2565b8698505b6001945050611f2d565b6103e885890383820302048803871015611f2d5760798b901c6401ffffffff16420381811015611f23578181878b030281611f1957611f196152d0565b0489039850611f27565b8598505b60019450505b5050505b620fffff60b488901c1660ff60ac89901c161b80861115611f585780955060019150611f7c565b50620fffff60d088901c1660ff60c889901c161b80861015611f7c57809550600191505b8115611fe557620fffff601b89901c169350620fffff602f89901c169250601a88901c600116600103611fbc57611fb484848a6140d1565b995090945092505b83620f424003620f4240870281611fd557611fd56152d0565b049350620f424083810387020492505b8487526020870186905260408701849052606087018390526f4b3b4ca85a86c47a098a22400000000084101561202a576120208385026141d1565b6080880152612059565b612049670de0b6b3a76400008404670de0b6b3a76400008604026141d1565b670de0b6b3a76400000260808801525b6040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152612131907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e4906024015b602060405180830381865afa158015612108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212c9190615420565b614283565b60c089015260a08801526040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201526121d1907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e4906024016120eb565b61010089015260e08801525094979650505050505050565b6127106121f88261270f6152b9565b61220291906152ff565b82118061221b5750612218633b9aca00826152ff565b82105b15612256576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7686004820152602401610188565b5050565b6122856040518060800160405280600081526020016000815260200160008152602001600081525090565b60006122b37f000000000000000000000000000000000000000000000000000000000000000085600161325d565b905060006122e37f000000000000000000000000000000000000000000000000000000000000000085600061325d565b90506b033b2e3c9fd0803ce8000000881015612314576123058888848461347d565b6060850152604084015261236b565b61236061233889760a70c3c40a64e6c51999090b65f67d92400000000000006152ff565b61235988760a70c3c40a64e6c51999090b65f67d92400000000000006152ff565b838561347d565b604085015260608401525b81835260208301819052604083018051909201909152606082018051909101905295945050505050565b6123c06040518060800160405280600081526020016000815260200160008152602001600081525090565b811561248257825184906123d59087906152b9565b6123df91906152ff565b83516123eb91906152a6565b8152602083015184906123ff9087906152b9565b61240991906152ff565b836020015161241891906152a6565b60208201526040830151849061242f9087906152b9565b61243991906152ff565b836040015161244891906152a6565b60408201526060830151849061245f9087906152b9565b61246991906152ff565b836060015161247891906152a6565b606082015261253a565b825184906124919087906152b9565b61249b91906152ff565b83516124a79190615293565b8152602083015184906124bb9087906152b9565b6124c591906152ff565b83602001516124d49190615293565b6020820152604083015184906124eb9087906152b9565b6124f591906152ff565b83604001516125049190615293565b60408201526060830151849061251b9087906152b9565b61252591906152ff565b83606001516125349190615293565b60608201525b949350505050565b6000838202838501808281612559576125596152d0565b049695505050505050565b61256e81836152b9565b612584846b033b2e3c9fd0803ce80000006152b9565b61258e91906152ff565b8410156125cb576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73e6004820152602401610188565b50505050565b6125e7816b033b2e3c9fd0803ce80000006152b9565b6125f183866152b9565b6125fb91906152ff565b8310156125cb576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73e6004820152602401610188565b600066ffffffffffffff604984901c1660ff604185901c161b8082036126625760009150506126c7565b612710613fff60a286901c168402046401ffffffff608186901c16420362ffffff60b087901c1661269382846152b9565b61269d91906152ff565b90508083116126ad5760006126b1565b8083035b935050808403838111156126c3578093505b5050505b92915050565b6126d8838383614491565b90506126e9826038600860006144e1565b91506126fa816038600860006144e1565b90508167ffffffffffffffff600185901c1603612747576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76b6004820152602401610188565b3360009081526003602052604090207ffffffffffffffffffffffffc000000000000000000000000000000000000000190931660019290921b9190911760419190911b174260811b179055565b6002546fffffffffffffffffffffffffffffffff8116821180156127bb5750608081901c82115b156127f6576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7786004820152602401610188565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001617600255565b60ff82901c600103612860576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7636004820152602401610188565b61288b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6128c46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000846001166001036128f5576128f28460800151856040015186606001518760a001518860e0015161225a565b92505b84600216600203612925576129228460800151856040015186606001518760c0015188610100015161460a565b91505b60038560031610156129b1578460011660011461296b57608082015160a083015161295c906b033b2e3c9fd0803ce80000006152b9565b61296691906152ff565b612995565b6040830151606084015161298b906b033b2e3c9fd0803ce80000006152b9565b61299591906152ff565b90506129a681856020015188614752565b600055505050505050565b6000806000806129d56000886060015189604001518960a001518a60800151614c14565b90506000811315612dec578093506129f68488604001518960600151612542565b9250612a0b848760a001518860800151614c9b565b9150838760400151612a1d91906152a6565b838860600151612a2d9190615293565b612a43906b033b2e3c9fd0803ce80000006152b9565b612a4d91906152ff565b94507f0000000000000000000000000000000000000000000000000000000000000000612a9a7f000000000000000000000000000000000000000000000000000000000000000083615439565b612aa49190615485565b90507f0000000000000000000000000000000000000000000000000000000000000000612af17f0000000000000000000000000000000000000000000000000000000000000000856152b9565b612afb91906152ff565b92507f0000000000000000000000000000000000000000000000000000000000000000612b487f0000000000000000000000000000000000000000000000000000000000000000846152b9565b612b5291906152ff565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e157f000000000000000000000000000000000000000000000000000000000000000083846000306040518060400160405280600e81526020017f534b49505f5452414e53464552530000000000000000000000000000000000008152508051906020012030604051602001612c2492919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401612c54969594939291906153af565b60408051808303816000875af1158015612c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9691906153fc565b505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f0000000000000000000000000000000000000000000000000000000000000000612cfe86615313565b612d0786615313565b604080518082018252600e81527f534b49505f5452414e534645525300000000000000000000000000000000000060209182015281517f520f8ead5ba46586393d3a30de35560ff757e867d80fed46623eb8022af73ba391810191909152309181018290526000906060015b6040516020818303038152906040526040518763ffffffff1660e01b8152600401612da3969594939291906153af565b60408051808303816000875af1158015612dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de591906153fc565b50506131ce565b600081121561319857612dfe81615313565b9350612e138487608001518860a00151612542565b9250612e288488606001518960400151614c9b565b9150838660800151612e3a91906152a6565b838760a00151612e4a9190615293565b612e60906b033b2e3c9fd0803ce80000006152b9565b612e6a91906152ff565b94507f0000000000000000000000000000000000000000000000000000000000000000612eb77f000000000000000000000000000000000000000000000000000000000000000083615439565b612ec19190615485565b90507f0000000000000000000000000000000000000000000000000000000000000000612f0e7f0000000000000000000000000000000000000000000000000000000000000000856152b9565b612f1891906152ff565b92507f0000000000000000000000000000000000000000000000000000000000000000612f657f0000000000000000000000000000000000000000000000000000000000000000846152b9565b612f6f91906152ff565b604080518082018252600e81527f534b49505f5452414e534645525300000000000000000000000000000000000060209182015281517f520f8ead5ba46586393d3a30de35560ff757e867d80fed46623eb8022af73ba3918101919091523081830181905282518083038401815260608301938490527fad967e15000000000000000000000000000000000000000000000000000000009093529294507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263ad967e1592613080927f00000000000000000000000000000000000000000000000000000000000000009287928392600091906064016153af565b60408051808303816000875af115801561309e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c291906153fc565b5050604080518082018252600e81527f534b49505f5452414e534645525300000000000000000000000000000000000060209182015281517f520f8ead5ba46586393d3a30de35560ff757e867d80fed46623eb8022af73ba3918101919091523091810182905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163ad967e15917f00000000000000000000000000000000000000000000000000000000000000009186918891600091606001612d73565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c75c6004820152602401610188565b608e89901c633fffffff16935083156132065763ffffffff60318b901c1660ff60298c901c161b61320485600288841189614ccc565b505b6132158589602001518c614752565b60005560408051828152602081018590527f063def03d41a2957d43156b97c271f3e4adea600722defb2cf6ebf9a27650056910160405180910390a150505050505050505050565b6040517fb5c736e400000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b5c736e490602401602060405180830381865afa1580156132ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133119190615420565b905067ffffffffffffffff600182901c16915060ff8216600883901c901b9150806001166001036133495764e8d4a510008285020491505b826133a5577f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083028161339f5761339f6152d0565b046133f8565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008302816133f6576133f66152d0565b045b95945050505050565b620f424082108061341d57506bffffffffffffffffffffffff82115b806134285750606481105b8061344257506fffffffffffffffffffffffffffffffff81115b15612256576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7696004820152602401610188565b6000808061348b8787615293565b9050600061349a8260026152b9565b6134b0866b033b2e3c9fd0803ce80000006152b9565b6134ba888b6152b9565b6134c491906152a6565b6134ce91906152ff565b905060006134dc86886152b9565b905074446c3b15f9926687d2c40534fdb564000000000000811061351f5761350483826152ff565b61351a906b033b2e3c9fd0803ce80000006152b9565b613540565b82613536826b033b2e3c9fd0803ce80000006152b9565b61354091906152ff565b905061355e61354f83806152b9565b61355990836152a6565b6141d1565b61356890836152a6565b94506b033b2e3c9fd0803ce80000006135818a876152b9565b61358b91906152ff565b935050505094509492505050565b6000806135a78660026152b9565b6135b185896152b9565b876135bd8a60026152b9565b6135c791906152b9565b6135d1888a6152b9565b6135db91906152a6565b6135e591906152a6565b6135ef91906152ff565b9050600083888861360088836152b9565b61360a91906152ff565b61361491906152a6565b61361e91906152b9565b9050600061363a8261363085806152b9565b6135599190615293565b6136449084615293565b9050620f4240613655600182615293565b61365f90876152b9565b61366991906152ff565b811180613681575061367e620f4240866152ff565b81105b156136bc576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76f6004820152602401610188565b886136cf82670de0b6b3a76400006152b9565b6136d991906152ff565b9998505050505050505050565b6136f4633b9aca00826152ff565b82108061370d575061370a633b9aca00826152b9565b82115b15612256576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7676004820152602401610188565b6000808261375681896152b9565b61376085886152b9565b61376a878a6152b9565b6137748a8c6152b9565b61377e91906152a6565b61378891906152a6565b6137929190615293565b61379c91906152ff565b90506000856137ac8960046152b9565b6137b691906152b9565b905060006002836137d46137ca82806152b9565b61355990866152a6565b6137de9190615293565b6137e891906152ff565b9050620f42406137f9600182615293565b613803908b6152b9565b61380d91906152ff565b8111806138255750613822620f42408a6152ff565b81105b15613860576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76e6004820152602401610188565b61386a818a615293565b925061387681886152a6565b613880828a6152b9565b61388a91906152ff565b915061389681876152a6565b6138a884670de0b6b3a76400006152b9565b6138b291906152ff565b92506138be8286615293565b6138d083670de0b6b3a76400006152b9565b6138da91906152ff565b91508183116138e957826136d9565b50979650505050505050565b6000821180156139055750600081115b1561390f57600080fd5b7fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff841601613a8257600080831161395b578161395d565b825b90508034111561397f5761397a336139758334615293565b614e73565b6139bd565b803410156139bd576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7486004820152602401610188565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e15828686613a0587615313565b6040805160008082526020820190925281906040518863ffffffff1660e01b8152600401613a38969594939291906153af565b604080518083038185885af1158015613a55573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a7a91906153fc565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e158484613ac985615313565b600080613ad6888a6152a6565b6040805160208101929092526001908201523360608201526080016040516020818303038152906040526040518763ffffffff1660e01b8152600401613b21969594939291906153af565b60408051808303816000875af1158015613b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6391906153fc565b50505b505050565b6000606082600003613b815760009150506126c7565b607f8311613c4a576040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602282015260f884901b7fff000000000000000000000000000000000000000000000000000000000000001660368201526037015b6040516020818303038152906040529050613fc6565b60ff8311613d27576040517fd70000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f8100000000000000000000000000000000000000000000000000000000000000603682015260f884901b7fff00000000000000000000000000000000000000000000000000000000000000166037820152603801613c34565b61ffff8311613e05576040517fd80000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f820000000000000000000000000000000000000000000000000000000000000060368201527fffff00000000000000000000000000000000000000000000000000000000000060f085901b166037820152603901613c34565b62ffffff8311613ee4576040517fd90000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f830000000000000000000000000000000000000000000000000000000000000060368201527fffffff000000000000000000000000000000000000000000000000000000000060e885901b166037820152603a01613c34565b6040517fda0000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f840000000000000000000000000000000000000000000000000000000000000060368201527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b166037820152603b0160405160208183030381529060405290505b80516020909101209392505050565b60405160248101839052604481018290526000906140b7907f0000000000000000000000000000000000000000000000000000000000000000907f2f850fb300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614ebf565b8060200190518101906140ca9190615420565b9392505050565b60405160248101849052604481018390526064810182905260009081908190614140907f0000000000000000000000000000000000000000000000000000000000000000907f0d7cf0ab0000000000000000000000000000000000000000000000000000000090608401614035565b80602001905181019061415391906154ed565b92509250925093509350939050565b60405160248101849052604481018390526064810182905260009081908190614140907f0000000000000000000000000000000000000000000000000000000000000000907fe8518a660000000000000000000000000000000000000000000000000000000090608401614035565b60b5817101000000000000000000000000000000000081106141f85760409190911b9060801c5b690100000000000000000081106142145760209190911b9060401c5b65010000000000811061422c5760109190911b9060201c5b630100000081106142425760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b67ffffffffffffffff605b82901c811690609b83901c168115806142a5575080155b156142e1576040517fd50d7512000000000000000000000000000000000000000000000000000000008152620111716004820152602401610188565b61ffff8316603a84901c6401ffffffff16428181039160ea87901c617fff1691148061430b575082155b806143165750806001145b1561432357505050915091565b64496cebb80084840283020484019350617fff60db87901c1692508260010361434e57505050915091565b826001166001036143a35760019290921c91826c7e37be2022c0914b26800000008161437c5761437c6152d0565b049250612710601e87901c613fff166b033b2e3c9fd0803ce80000008501020492506143d0565b60019290921c916305f5e100601e87901c613fff166127108501026b033b2e3c9fd0803ce8000000020492505b806001166001036144075760011c61271081016b033b2e3c9fd0803ce80000008202816143ff576143ff6152d0565b04905061443d565b60011c61271081016b033b2e3c9fd0803ce800000082028161442b5761442b6152d0565b046b033b2e3c9fd0803ce80000000390505b760a70c3c40a64e6c51999090b65f67d92400000000000008382026127100261ffff881691900402601087901c613fff16612710030292506801b5a660ea44b8000085840283020485019450505050915091565b60006103ff60d085901c1660ff60c886901c161b808410156144b75760009150506140ca565b50612710613fff60a286901c168402048303828111156144d85790506140ca565b50909392505050565b600080856fffffffffffffffffffffffffffffffff8111156145045760809150811c5b67ffffffffffffffff81111561451c576040918201911c5b63ffffffff811115614530576020918201911c5b61ffff811115614542576010918201911c5b60ff811115614553576008918201911c5b600f811115614564576004918201911c5b6003811115614575576002918201911c5b6001811115614585576001820191505b8015614592576001820191505b508481101561459e5750835b848103905085811c600082118416156145ed57600181019050806001871b036145ed57506001908101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011b5b6001851b82106145fc57600080fd5b90931b909201949350505050565b6146436040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006146717f000000000000000000000000000000000000000000000000000000000000000085600161325d565b905060006146a17f000000000000000000000000000000000000000000000000000000000000000085600061325d565b8284526020840181905290506b033b2e3c9fd0803ce80000008810156146e6576146cd88878484614f05565b60a0870152608086015260608501526040840152614747565b61473261470a89760a70c3c40a64e6c51999090b65f67d92400000000000006152ff565b61472b89760a70c3c40a64e6c51999090b65f67d92400000000000006152ff565b8385614f05565b608087015260a0860152604085015260608401525b505095945050505050565b60008061476a607984901c6401ffffffff1642615293565b90506000806000836000036148525763ffffffff605987901c1660ff605188901c161b92506305f5e1006305f5e0ff8402048710806147b457506305f5e1006305f5e10184020487115b156147ef576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76c6004820152602401610188565b63ffffffff600987901c1660ff600188901c161b925061480f8389615108565b506029614821896020600860006144e1565b901b867ffffffffffffffffffffffffffffffffffffffffffffe0000000001ffffffffff16179450505050506140ca565b60c386901c6001166000036148ec5763ffffffff603187901c1660ff602988901c161b92506148818389615108565b504260791b6051614897896020600860006144e1565b901b60296148aa8b6020600860006144e1565b7ffffffffffffffffffffffffffc000000000000000000000000000000000000018a166501fffffffffe60288c901c1617911b17171794506140ca9350505050565b63ffffffff600987901c811660ff600189901c81169190911b9450603188901c909116602988901c9091161b91506000614926838a615108565b905082670de0b6b3a7640000850281614941576149416152d0565b04670de0b6b3a7640000039050600081121561498157600166b1a2bc2ec50000623fffff836000030281614977576149776152d0565b04901b915061499a565b600166b1a2bc2ec50000623fffff830204901b60011791505b623fffff8511156149ac57623fffff94505b609a87901c623fffff16935060b087901c60071660b388901c61ffff166101ff861115614ae7578115614a785760299390931b600986901b17926149ef8261551b565b91506149fc8260206152b9565b600082815260066020526040902080549186901b90911790558115614a2b57614a248261551b565b9150614b8a565b600791507f00000000000000000000000000000000000000000000000000000000000000008160010181614a6157614a616152d0565b066000818152600660205260408120559050614b8a565b6000818152600660208190526040909120805460099690961b958617905591507f00000000000000000000000000000000000000000000000000000000000000006001820181614aca57614aca6152d0565b06600081815260066020526040902060e988901b90559050614b8a565b85600985901b1793506007821015614b1c576000818152600660209081526040909120805491840286901b9091179055614b32565b600081815260066020526040902060e085901b90555b8115614b4157614a248261551b565b600791507f00000000000000000000000000000000000000000000000000000000000000008160010181614b7757614b776152d0565b0660008181526006602052604081205590505b8a955089945088935060b381901b60b083901b609a89901b4260791b6051614bb78a6020600860006144e1565b901b6029614bca8c6020600860006144e1565b901b600164ffffffffff60298c901c16901b8a7ffffffffffffffff800000000000000000000000000000000000000000000000116171717171717179750505050505050506140ca565b600080614c36614c2486886152b9565b61355990670de0b6b3a76400006152b9565b90506000614c47614c2485876152b9565b9050614c5381836152a6565b614c5d82886152b9565b614c67848b6152b9565b614c7185886152b9565b614c7b91906152a6565b614c859190615550565b614c8f9190615485565b98975050505050505050565b600080614ca884866152b9565b90506000614cb68685615293565b9050614cc281836152ff565b9695505050505050565b614cf67f000000000000000000000000000000000000000000000000000000000000000085613b6b565b6040517fd1f9be4e00000000000000000000000000000000000000000000000000000000815260048101859052831515602482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660448301527f00000000000000000000000000000000000000000000000000000000000000008116606483015260848201849052919091169063d1f9be4e9060a4016020604051808303816000875af1925050508015614dfe575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252614dfb91810190615577565b60015b614e38573d808015614e2c576040519150601f19603f3d011682016040523d82523d6000602084013e614e31565b606091505b50506125cb565b80613b63576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7446004820152602401610188565b60008060008060008587614e20f1905080613b66576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610188565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e81614efd57806000803e806000fd5b505092915050565b6000808080806b06765c793fa10079d0000000614f2e876b033b2e3c9fd0803ce80000006152b9565b614f388b8a6152b9565b614f429190615550565b614f4c9190615485565b90506000614f5a87896152b9565b905074446c3b15f9926687d2c40534fdb5640000000000008110614f9e5788614f8f6b033b2e3c9fd0803ce8000000836152ff565b614f9991906152b9565b614fbf565b6b033b2e3c9fd0803ce8000000614fb58a836152b9565b614fbf91906152ff565b9050614fce61354f8380615439565b614fd89083615594565b9450614fe489896152b9565b614ffa866b033b2e3c9fd0803ce80000006152b9565b6150049190615293565b9250620f4240831015615047576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76d6004820152602401610188565b6a084595161401484a00000085101561508c578261506586806152b9565b61507b906b033b2e3c9fd0803ce80000006152b9565b61508591906152ff565b92506150b9565b6150a26b033b2e3c9fd0803ce8000000846152ff565b6150ac86806152b9565b6150b691906152ff565b92505b87856150c582866152b9565b6150cf91906152ff565b6150d99190615293565b93506150e587846152a6565b6150ef88866152b9565b6150f991906152ff565b95505050945094509450949050565b60008161511d670de0b6b3a7640000856152b9565b61512791906152ff565b61513990670de0b6b3a7640000615550565b905066b1a2bc2ec5000081138061516f57507fffffffffffffffffffffffffffffffffffffffffffffffffff4e5d43d13b000081125b156126c7576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c7606004820152602401610188565b600080600080608085870312156151c057600080fd5b843593506020850135925060408501359150606085013573ffffffffffffffffffffffffffffffffffffffff811681146151f957600080fd5b939692955090935050565b60006020828403121561521657600080fd5b5035919050565b801515811461522b57600080fd5b50565b6000806000806080858703121561524457600080fd5b84359350602085013592506040850135915060608501356151f98161521d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156126c7576126c7615264565b808201808211156126c7576126c7615264565b80820281158282048414176126c7576126c7615264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261530e5761530e6152d0565b500490565b60007f8000000000000000000000000000000000000000000000000000000000000000820361534457615344615264565b5060000390565b6000815180845260005b8181101561537157602081850181015186830182015201615355565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352876020840152866040840152808616606084015280851660808401525060c060a0830152614c8f60c083018461534b565b6000806040838503121561540f57600080fd5b505080516020909101519092909150565b60006020828403121561543257600080fd5b5051919050565b808202600082127f80000000000000000000000000000000000000000000000000000000000000008414161561547157615471615264565b81810583148215176126c7576126c7615264565b600082615494576154946152d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156154e8576154e8615264565b500590565b60008060006060848603121561550257600080fd5b8351925060208401519150604084015190509250925092565b60008161552a5761552a615264565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b818103600083128015838313168383128216171561557057615570615264565b5092915050565b60006020828403121561558957600080fd5b81516140ca8161521d565b8082018281126000831280158216821582161715614efd57614efd61526456fea264697066735822122018d2df9aae8438d617d2fe5a9ecf2589cf866f06b4dc005d1e415e1226b8422564736f6c63430008150033000000000000000000000000000000000000000000000000000000000000000700000000000000000000000052aa899454998be5b000ad077a46bbe360f4e49700000000000000000000000091716c4eda1fb55e84bf8b4c7085f84285c19085000000000000000000000000f9eaabaf2f706abeb83fff9f33b6fddbf027efae00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ec7b668baf70d4a4b0fc7941a7708a07b6d45be000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb04628164d61d060ac0d4aff54807d619fd50fbc07dba9afb340d76984c48aead458083c1e698fb9cfe991b73e0d2c0d43465c745bba52921aacc96bb511cec284f1d5a7f0bc7602c15d4a042dcf635c6d60d9cbbe92b1d78a5b3cfa3f1d0d0f0a65a82ca02676ae92f038aefc1f91d575028b97405fafdcdbbb8ce78efd91be65712334a6cd5c4420e4fbfbf777a12bad4b6cb599c88eddb329888a71aba446a1829a9003092132f585b6ccdd167c19fe9774dbdea4260287e8a8e8ca8185d70000000000000000000000000000000000000000000000000000000000000400