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_)
borrow
nonpayablefunction borrow(uint256 token0Amt_, uint256 token1Amt_, uint256 maxSharesAmt_, address to_) returns (uint256 shares_)
payback
payablefunction payback(uint256 token0Amt_, uint256 token1Amt_, uint256 minSharesAmt_, bool estimate_) payable returns (uint256 shares_)
paybackPerfectInOneToken
payablefunction paybackPerfectInOneToken(uint256 shares_, uint256 maxToken0_, uint256 maxToken1_, bool estimate_) payable returns (uint256 paybackAmt_)
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
0x6103606040523480156200001257600080fd5b5060405162005f6c38038062005f6c833981016040819052620000359162000522565b3060e052805160805260208101516001600160a01b0390811661018052604082015181166101a05260a08083015182169081905260c08084015190921691829052829182918291829110620000a6576040516317f71f0760e11b815261c76160048201526024015b60405180910390fd5b60a051620000b4906200031d565b610120526101005260c051620000ca906200031d565b61016052610140526060810151516001600160a01b03161562000100576060810151516001600160a01b03166101c05262000106565b306101c0525b6060810151602001516001600160a01b0316156200013a576060810151602001516001600160a01b03166101e05262000140565b306101e0525b6060810151604001516001600160a01b03161562000174576060810151604001516001600160a01b0316610200526200017a565b30610200525b60608082015101516001600160a01b031615620001ac5760608082015101516001600160a01b031661022052620001b2565b30610220525b6060810151608001516001600160a01b031615620001e6576060810151608001516001600160a01b031661024052620001ec565b30610240525b60808101516001600160a01b03166102605260e0810151610280526101008101516102a0526101208101516102c0526101408101516102e05261016081015161030052610180810151610320526101a081015161ffff101562000267576040516317f71f0760e11b815261c76260048201526024016200009d565b6101a00151610340525050506060810151516001600160a01b031615806200029f57506060810151602001516001600160a01b031615155b80620002bb57506060810151604001516001600160a01b031615155b80620002d6575060608082015101516001600160a01b031615155b80620002f257506060810151608001516001600160a01b031615155b1562000316576040516317f71f0760e11b815261c77260048201526024016200009d565b506200077b565b600080806200032c8462000385565b9050600c8111156200035e576001925062000349600c826200062e565b6200035690600a62000741565b91506200037f565b6200036b81600c6200062e565b6200037890600a62000741565b9250600191505b50915091565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146200041a57816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000411919062000756565b60ff166200041d565b60125b92915050565b6040516101c081016001600160401b03811182821017156200045557634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200047357600080fd5b919050565b600060a082840312156200048b57600080fd5b60405160a081016001600160401b0381118282101715620004bc57634e487b7160e01b600052604160045260246000fd5b604052905080620004cd836200045b565b8152620004dd602084016200045b565b6020820152620004f0604084016200045b565b604082015262000503606084016200045b565b606082015262000516608084016200045b565b60808201525092915050565b600061024082840312156200053657600080fd5b6200054062000423565b8251815262000552602084016200045b565b602082015262000565604084016200045b565b604082015262000579846060850162000478565b60608201526101006200058e8185016200045b565b6080830152610120620005a38186016200045b565b60a0840152610140620005b88187016200045b565b60c08501526101608087015160e086015261018080880151858701526101a0945084880151848701526101c0880151838701526101e088015182870152610200880151818701525050505061022084015181830152508091505092915050565b634e487b7160e01b600052601160045260246000fd5b818103818111156200041d576200041d62000618565b600181815b808511156200068557816000190482111562000669576200066962000618565b808516156200067757918102915b93841c939080029062000649565b509250929050565b6000826200069e575060016200041d565b81620006ad575060006200041d565b8160018114620006c65760028114620006d157620006f1565b60019150506200041d565b60ff841115620006e557620006e562000618565b50506001821b6200041d565b5060208310610133831016604e8410600b841016171562000716575081810a6200041d565b62000722838362000644565b806000190482111562000739576200073962000618565b029392505050565b60006200074f83836200068d565b9392505050565b6000602082840312156200076957600080fd5b815160ff811681146200074f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e051610300516103205161034051615583620009e960003960008181614a6f01528181614ad80152614b8501526000611ecd01526000611deb0152600081816102e50152613329015260006146b70152600081816102b101526132f901526000614687015260008181611a8a0152614d31015260005050600050506000505060005050600081816140220152818161412901526141ba0152600050506000818161095d01528181610ab201528181611e1501528181611ef701528181611f9c01528181612b4501528181612c9e01528181612ffd0152818161312f0152818161385a015261391f0152600081816103b40152818161106d015281816114380152818161204601528181612abb01528181612b1201528181612ed80152612f2f0152600081816103d50152818161104c015281816114590152818161206701528181612a9701528181612aee01528181612eb40152612f0b01526000818161032901528181610ee5015281816113a80152818161209d01528181612a640152612e8101526000818161034a01528181610ec4015281816113c9015281816120be01528181612a400152612e5d01526000818161012301528181610c880152611269015260008181610aee015281816111660152818161189c01528181612cc5015281816131580152614dca01526000818161099901528181610fde0152818161183401528181612b810152818161303f0152614da20152600060e801526155836000f3fe60806040526004361061005a5760003560e01c8063687669811161004357806368766981146100a4578063b5c736e4146100b7578063f4b9a3fb146100d657600080fd5b8063242011d51461005f57806330acd6fd14610091575b600080fd5b34801561006b57600080fd5b5061007f61007a366004615114565b61010a565b60405190815260200160405180910390f35b61007f61009f36600461517f565b610c6f565b61007f6100b236600461517f565b611250565b3480156100c357600080fd5b5061007f6100d23660046151b5565b5490565b3480156100e257600080fd5b5061007f7f000000000000000000000000000000000000000000000000000000000000000081565b600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610184576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c77360048201526024015b60405180910390fd5b600054600154610194828261196b565b33600090815260056020526040902054600181161580156101cd575073ffffffffffffffffffffffffffffffffffffffff851661dead14155b15610208576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c746600482015260240161017b565b6102506040518060a0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b73ffffffffffffffffffffffffffffffffffffffff8616156102725785610274565b335b73ffffffffffffffffffffffffffffffffffffffff166080820152600183811c81169003610c2d5760006102a885856119f6565b905060006102dc7f00000000000000000000000000000000000000000000000000000000000000008360c001516001611f53565b905060006103117f00000000000000000000000000000000000000000000000000000000000000008461010001516000611f53565b604085018390526060850181905290508b156103ac577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006103748e60016151fd565b61037e9190615210565b6103889190615256565b6103939060016151fd565b8085526103a0908d6120f7565b83516103ac9083612177565b8a1561043d577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006103ff8d60016151fd565b6104099190615210565b6104139190615256565b61041e9060016151fd565b6020850181905261042f908c6120f7565b61043d846020015182612177565b60045460009081906fffffffffffffffffffffffffffffffff1684158015906104665750600084115b156107bb5786511580159061047f575060008760200151115b15610608578651859061049a90670de0b6b3a7640000615210565b6104a49190615256565b9250838760200151670de0b6b3a76400006104bf9190615210565b6104c99190615256565b91508183111561052557670de0b6b3a76400006104e68284615210565b6104f09190615256565b9a50670de0b6b3a764000085610506848661526a565b6105109190615210565b61051a9190615256565b9250600091506105b5565b8282111561057f57670de0b6b3a76400006105408285615210565b61054a9190615256565b9a50670de0b6b3a764000084610560858561526a565b61056a9190615210565b6105749190615256565b9150600092506105b5565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c755600482015260240161017b565b806105c08c87615210565b6105ca9190615256565b6105d490866151fd565b9450806105e18c86615210565b6105eb9190615256565b6105f590856151fd565b93506106018b826151fd565b9050610632565b86511561061c578651925060009150610632565b60208701511561057f5760009250866020015191505b6000806b033b2e3c9fd0803ce8000000886080015110156106825761067588608001518960600151878a61066691906151fd565b610670888b6151fd565b6121d9565b90945092506106ed915050565b6106e68860800151760a70c3c40a64e6c51999090b65f67d92400000000000006106ac9190615256565b60408a01516106d290760a70c3c40a64e6c51999090b65f67d9240000000000000615256565b6106dc878a6151fd565b610670898c6151fd565b9450925050505b84156107075761070087878484896123eb565b9450610750565b831561071a5761070086888385886123eb565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c756600482015260240161017b565b670de0b6b3a76400006107638487615210565b61076d9190615256565b9450620f424061078660028d901c6201ffff16826151fd565b6107909087615210565b61079a9190615256565b94506107a6858e6151fd565b9c506107b285846151fd565b925050506107f1565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c777600482015260240161017b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215373ffffffffffffffffffffffffffffffffffffffff8d1601610863576040517fe8d35d06000000000000000000000000000000000000000000000000000000008152600481018c905260240161017b565b8c8b11156108a1576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c757600482015260240161017b565b66ffffffffffffff600989901c1660ff60018a901c161b92506108c4888461252c565b91506108d08b846151fd565b925081831115610910576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c74b600482015260240161017b565b61091b8884846125e8565b865115610a6d578651604088015161095891610936916151fd565b8860200151896060015161094a91906151fd565b8860200151620f42406126af565b8e92507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e157f000000000000000000000000000000000000000000000000000000000000000060008660008c60800151600067ffffffffffffffff8111156109dc576109dc61527d565b6040519080825280601f01601f191660200182016040528015610a06576020820181803683370190505b506040518763ffffffff1660e01b8152600401610a2896959493929190615310565b60408051808303816000875af1158015610a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6a919061535d565b50505b602087015115610bc25786516040880151610aad91610a8b916151fd565b88602001518960600151610a9f91906151fd565b8860200151620f424061271c565b8d92507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e157f000000000000000000000000000000000000000000000000000000000000000060008660008c60800151600067ffffffffffffffff811115610b3157610b3161527d565b6040519080825280601f01601f191660200182016040528015610b5b576020820181803683370190505b506040518763ffffffff1660e01b8152600401610b7d96959493929190615310565b60408051808303816000875af1158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbf919061535d565b50505b610bcb81612783565b7f7f81427bed699dc7e687c5ddae6061932938818f79fc0e68903d55ef75ca45618f8f8d604051610c0f939291909283526020830191909152604082015260600190565b60405180910390a1610c228a8a8861280d565b505050505050610c63565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73c600482015260240161017b565b50505050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610ce4576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c773600482015260240161017b565b600054600154610cf4828261196b565b3360009081526005602052604090205460018116158015610d13575084155b15610d4e576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c746600482015260240161017b565b600087118015610d5e5750600086115b80610d70575086158015610d70575085155b15610dab576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c752600482015260240161017b565b600182901c600116600103610c2d576000610dc684846119f6565b6004549091506fffffffffffffffffffffffffffffffff16610de88a8261324c565b6000806000610e0f8560800151866040015187606001518860c001518961010001516132b9565b80519091501580610e2257506020810151155b15610e5d576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c777600482015260240161017b565b6000610e6c8e86846000613401565b90508c1561100a57610e9a81608001518260a00151846000015185602001518560400151866060015161367c565b9350610ec2848360000151610eaf919061526a565b83602001518860200151620f424061271c565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610f0f8660016151fd565b610f199190615210565b610f239190615256565b610f2e9060016151fd565b9350620f4240610f4760028a901c6201ffff16826151fd565b610f519086615210565b610f5b9190615256565b93508399508a15610f9b576040517f73999506000000000000000000000000000000000000000000000000000000008152600481018b905260240161017b565b8c8a1115610fd9576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c758600482015260240161017b565b6110057f000000000000000000000000000000000000000000000000000000000000000060008c61377b565b61118d565b6110308160a001518260800151846020015185600001518560600151866040015161367c565b925061104a826000015184846020015161094a919061526a565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006110978560016151fd565b6110a19190615210565b6110ab9190615256565b6110b69060016151fd565b9250620f42406110cf60028a901c6201ffff16826151fd565b6110d99085615210565b6110e39190615256565b92508299508a15611123576040517f73999506000000000000000000000000000000000000000000000000000000008152600481018b905260240161017b565b8b8a1115611161576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c758600482015260240161017b565b61118d7f000000000000000000000000000000000000000000000000000000000000000060008c61377b565b66ffffffffffffff600988901c1660ff600189901c161b60006111b0898361252c565b90508f826111be919061526a565b91506111cb8983836125e8565b8f876111d7919061526a565b96506111e287612783565b8f90507f97dfa84cbffcf65b8d034f057439472bc93868a66cc0e728c2faffb00f8b4923818787604051611229939291909283526020830191909152604082015260600190565b60405180910390a161123c8b8b8a61280d565b50505050505050505b505050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036112c5576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c773600482015260240161017b565b6000546001546112d5828261196b565b33600090815260056020526040902054600181161580156112f4575084155b1561132f576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c746600482015260240161017b565b600182901c600116600103610c2d57600061134a84846119f6565b90506113776040518060800160405280600081526020016000815260200160008152602001600081525090565b600061139b8360800151846040015185606001518660c001518761010001516132b9565b9050808b1561142e5760017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060018f6113f5919061526a565b6113ff9190615210565b6114099190615256565b611413919061526a565b808452611420908d6120f7565b8251825161142e919061324c565b8a156114c35760017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611482838f61526a565b61148c9190615210565b6114969190615256565b6114a0919061526a565b602084018190526114b1908c6120f7565b6114c38360200151836020015161324c565b60008060006fffffffffffffffffffffffffffffffff600454169050600085600001511180156114f7575060008560200151115b156107bb57855115801590611510575060008660200151115b15611669578451865161152b90670de0b6b3a7640000615210565b6115359190615256565b925084602001518660200151670de0b6b3a76400006115549190615210565b61155e9190615256565b9150818311156115b757670de0b6b3a764000061157b8284615210565b6115859190615256565b8651909b5083906115969084615210565b6115a09190615256565b86516115ac919061526a565b925060009150611649565b8282111561161357670de0b6b3a76400006115d28285615210565b6115dc9190615256565b9a50818660200151846115ef9190615210565b6115f99190615256565b8660200151611608919061526a565b915060009250611649565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c759600482015260240161017b565b6116568b82876000613401565b93506116628b8261526a565b9050611693565b85511561167d578551925060009150611693565b6020860151156116135760009250856020015191505b82156116bd576116b68460000151856020015186608001518760a00151876139f1565b9250611716565b81156116e0576116b6846020015185600001518660a001518760800151866139f1565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c75a600482015260240161017b565b670de0b6b3a76400006117298285615210565b6117339190615256565b9250620f424061174c60028b901c6201ffff168261526a565b6117569085615210565b6117609190615256565b925061176c838c6151fd565b9a50611778838261526a565b90508b156117b5576040517fe8d35d06000000000000000000000000000000000000000000000000000000008152600481018c905260240161017b565b8c8b10156117f3576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c75b600482015260240161017b565b8e1561185b578551855161182c9161180a9161526a565b8760200151876020015161181e919061526a565b8960200151620f424061271c565b8e925061185b7f000000000000000000000000000000000000000000000000000000000000000060008561377b565b8d156118c35785518551611894916118729161526a565b87602001518760200151611886919061526a565b8960200151620f42406126af565b8d92506118c37f000000000000000000000000000000000000000000000000000000000000000060008561377b565b66ffffffffffffff600989901c1660ff60018a901c161b92506118e6888461252c565b91506118f28b8461526a565b92506118ff8884846125e8565b61190881612783565b7fb69f152a70520703fe7ab4872a0cb3928386b68cf3c6c83c5d1fc08d196991e88f8f8d60405161194c939291909283526020830191909152604082015260600190565b60405180910390a161195f8a8a8961280d565b50505050505050611245565b816001166001036119ac576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c739600482015260240161017b565b806003166000036119ed576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73d600482015260240161017b565b50600117600055565b611a456040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060f883901c600116600003611b2657633fffffff607084901c16905080600003611a85575063ffffffff605984901c1660ff605185901c161b611b33565b611aaf7f000000000000000000000000000000000000000000000000000000000000000082613b9e565b73ffffffffffffffffffffffffffffffffffffffff1663f763f7a66040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190615381565b9050611b33565b611b308484614008565b90505b63ffffffff603185901c1660ff602986901c161b601b84901c620fffff90811690602f86901c166001601a87901c81169003611b7c57611b74828288614104565b975090925090505b81620f424003620f4240850281611b9557611b95615227565b049150620f42409081038402046000620fffff604488901c1615611c9b57604487901c6103ff90811690604e89901c16605889901c62ffffff16600160438b901c81169003611bf157611be9838383614195565b919450925090505b6103e888870384820302048801871115611c465760798b901c6401ffffffff16420381811015611c385781818a89030281611c2e57611c2e615227565b0489019850611c3c565b8698505b6001945050611c97565b6103e885890383820302048803871015611c975760798b901c6401ffffffff16420381811015611c8d578181878b030281611c8357611c83615227565b0489039850611c91565b8598505b60019450505b5050505b620fffff60b488901c1660ff60ac89901c161b80861115611cc25780955060019150611ce6565b50620fffff60d088901c1660ff60c889901c161b80861015611ce657809550600191505b8115611d4f57620fffff601b89901c169350620fffff602f89901c169250601a88901c600116600103611d2657611d1e84848a614104565b995090945092505b83620f424003620f4240870281611d3f57611d3f615227565b049350620f424083810387020492505b8487526020870186905260408701849052606087018390526f4b3b4ca85a86c47a098a224000000000841015611d9457611d8a838502614204565b6080880152611dc3565b611db3670de0b6b3a76400008404670de0b6b3a7640000860402614204565b670de0b6b3a76400000260808801525b6040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152611e9b907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e4906024015b602060405180830381865afa158015611e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e969190615381565b6142b6565b60c089015260a08801526040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152611f3b907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e490602401611e55565b61010089015260e08801525094979650505050505050565b6040517fb5c736e400000000000000000000000000000000000000000000000000000000815260048101849052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b5c736e490602401602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120079190615381565b905067ffffffffffffffff600182901c16915060ff8216600883901c901b91508060011660010361203f5764e8d4a510008285020491505b8261209b577f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083028161209557612095615227565b046120ee565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008302816120ec576120ec615227565b045b95945050505050565b620f424082108061211357506bffffffffffffffffffffffff82115b8061211e5750606481105b8061213857506fffffffffffffffffffffffffffffffff81115b15612173576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c769600482015260240161017b565b5050565b612185633b9aca0082615256565b82108061219e575061219b633b9aca0082615210565b82115b15612173576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c767600482015260240161017b565b6000808080806b06765c793fa10079d0000000612202876b033b2e3c9fd0803ce8000000615210565b61220c8b8a615210565b612216919061539a565b61222091906153c1565b9050600061222e8789615210565b905074446c3b15f9926687d2c40534fdb564000000000000811061227257886122636b033b2e3c9fd0803ce800000083615256565b61226d9190615210565b612293565b6b033b2e3c9fd0803ce80000006122898a83615210565b6122939190615256565b90506122b16122a28380615429565b6122ac90836151fd565b614204565b6122bb9083615475565b94506122c78989615210565b6122dd866b033b2e3c9fd0803ce8000000615210565b6122e7919061526a565b9250620f424083101561232a576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76d600482015260240161017b565b6a084595161401484a00000085101561236f57826123488680615210565b61235e906b033b2e3c9fd0803ce8000000615210565b6123689190615256565b925061239c565b6123856b033b2e3c9fd0803ce800000084615256565b61238f8680615210565b6123999190615256565b92505b87856123a88286615210565b6123b29190615256565b6123bc919061526a565b93506123c887846151fd565b6123d28886615210565b6123dc9190615256565b95505050945094509450949050565b6000806123f9866002615210565b6124038488615210565b61240d8789615210565b612417878b615210565b61242191906151fd565b61242b91906151fd565b6124359190615256565b905060008684612445878b615210565b61244f9190615210565b6124599190615256565b905060006124758261246b8580615210565b6122ac919061526a565b61247f908461526a565b9050620f424061249060018261526a565b61249a9087615210565b6124a49190615256565b8111806124bc57506124b9620f424086615256565b81105b156124f7576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c770600482015260240161017b565b886125038260016151fd565b61251590670de0b6b3a7640000615210565b61251f9190615256565b9998505050505050505050565b60d082901c6103ff1660c883901c60ff161b613fff60a284901c166127108382020480840183811015612561575050506125e2565b608186901c6401ffffffff164203925066ffffffffffffff604987901c1660ff604188901c161b60b087901c62ffffff1661259c8585615210565b6125a69190615256565b6125b091906151fd565b9350808411156125be578093505b6103ff60e287901c1660ff60da88901c161b9250828411156125de578293505b5050505b92915050565b6125f38383836144c4565b90506126048260386008600161452c565b91506126158160386008600061452c565b90508167ffffffffffffffff600185901c1603612662576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76b600482015260240161017b565b3360009081526005602052604090207ffffffffffffffffffffffffc000000000000000000000000000000000000000190931660019290921b9190911760419190911b174260811b179055565b6126c5816b033b2e3c9fd0803ce8000000615210565b6126cf8386615210565b6126d99190615256565b831015612716576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73e600482015260240161017b565b50505050565b6127268183615210565b61273c846b033b2e3c9fd0803ce8000000615210565b6127469190615256565b841015612716576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c73e600482015260240161017b565b6004546fffffffffffffffffffffffffffffffff8116821180156127aa5750608081901c82115b156127e5576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c779600482015260240161017b565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001617600455565b60ff82901c60010361284f576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c763600482015260240161017b565b61287a6040518060800160405280600081526020016000815260200160008152602001600081525090565b6128b36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000846001166001036128e4576128e18460800151856040015186606001518760a001518860e00151614655565b92505b84600216600203612914576129118460800151856040015186606001518760c001518861010001516132b9565b91505b60038560031610156129a0578460011660011461295a57608082015160a083015161294b906b033b2e3c9fd0803ce8000000615210565b6129559190615256565b612984565b6040830151606084015161297a906b033b2e3c9fd0803ce8000000615210565b6129849190615256565b905061299581856020015188614790565b600055505050505050565b6000806000806129c46000886060015189604001518960a001518a60800151614c52565b90506000811315612ddb578093506129e58488604001518960600151614cd9565b92506129fa848760a001518860800151614cfb565b9150838760400151612a0c91906151fd565b838860600151612a1c919061526a565b612a32906b033b2e3c9fd0803ce8000000615210565b612a3c9190615256565b94507f0000000000000000000000000000000000000000000000000000000000000000612a897f000000000000000000000000000000000000000000000000000000000000000083615429565b612a9391906153c1565b90507f0000000000000000000000000000000000000000000000000000000000000000612ae07f000000000000000000000000000000000000000000000000000000000000000085615210565b612aea9190615256565b92507f0000000000000000000000000000000000000000000000000000000000000000612b377f000000000000000000000000000000000000000000000000000000000000000084615210565b612b419190615256565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e157f000000000000000000000000000000000000000000000000000000000000000083846000306040518060400160405280600e81526020017f534b49505f5452414e53464552530000000000000000000000000000000000008152508051906020012030604051602001612c1392919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401612c4396959493929190615310565b60408051808303816000875af1158015612c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c85919061535d565b505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f0000000000000000000000000000000000000000000000000000000000000000612ced86615495565b612cf686615495565b604080518082018252600e81527f534b49505f5452414e534645525300000000000000000000000000000000000060209182015281517f520f8ead5ba46586393d3a30de35560ff757e867d80fed46623eb8022af73ba391810191909152309181018290526000906060015b6040516020818303038152906040526040518763ffffffff1660e01b8152600401612d9296959493929190615310565b60408051808303816000875af1158015612db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd4919061535d565b50506131bd565b600081121561318757612ded81615495565b9350612e028487608001518860a00151614cd9565b9250612e178488606001518960400151614cfb565b9150838660800151612e2991906151fd565b838760a00151612e39919061526a565b612e4f906b033b2e3c9fd0803ce8000000615210565b612e599190615256565b94507f0000000000000000000000000000000000000000000000000000000000000000612ea67f000000000000000000000000000000000000000000000000000000000000000083615429565b612eb091906153c1565b90507f0000000000000000000000000000000000000000000000000000000000000000612efd7f000000000000000000000000000000000000000000000000000000000000000085615210565b612f079190615256565b92507f0000000000000000000000000000000000000000000000000000000000000000612f547f000000000000000000000000000000000000000000000000000000000000000084615210565b612f5e9190615256565b604080518082018252600e81527f534b49505f5452414e534645525300000000000000000000000000000000000060209182015281517f520f8ead5ba46586393d3a30de35560ff757e867d80fed46623eb8022af73ba3918101919091523081830181905282518083038401815260608301938490527fad967e15000000000000000000000000000000000000000000000000000000009093529294507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263ad967e159261306f927f0000000000000000000000000000000000000000000000000000000000000000928792839260009190606401615310565b60408051808303816000875af115801561308d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b1919061535d565b5050604080518082018252600e81527f534b49505f5452414e534645525300000000000000000000000000000000000060209182015281517f520f8ead5ba46586393d3a30de35560ff757e867d80fed46623eb8022af73ba3918101919091523091810182905273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163ad967e15917f00000000000000000000000000000000000000000000000000000000000000009186918891600091606001612d62565b6040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c75c600482015260240161017b565b608e89901c633fffffff16935083156131f55763ffffffff60318b901c1660ff60298c901c161b6131f385600288841189614d2c565b505b6132048589602001518c614790565b60005560408051828152602081018590527f063def03d41a2957d43156b97c271f3e4adea600722defb2cf6ebf9a27650056910160405180910390a150505050505050505050565b61271061325b8261270f615210565b6132659190615256565b82118061327e575061327b633b9aca0082615256565b82105b15612173576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c768600482015260240161017b565b6132f26040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006133207f0000000000000000000000000000000000000000000000000000000000000000856001611f53565b905060006133507f0000000000000000000000000000000000000000000000000000000000000000856000611f53565b8284526020840181905290506b033b2e3c9fd0803ce80000008810156133955761337c888784846121d9565b60a08701526080860152606085015260408401526133f6565b6133e16133b989760a70c3c40a64e6c51999090b65f67d9240000000000000615256565b6133da89760a70c3c40a64e6c51999090b65f67d9240000000000000615256565b83856121d9565b608087015260a0860152604085015260608401525b505095945050505050565b61343a6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b811561355c578251849061344f908790615210565b6134599190615256565b835161346591906151fd565b815260208301518490613479908790615210565b6134839190615256565b836020015161349291906151fd565b6020820152604083015184906134a9908790615210565b6134b39190615256565b83604001516134c291906151fd565b6040820152606083015184906134d9908790615210565b6134e39190615256565b83606001516134f291906151fd565b606082015260808301518490613509908790615210565b6135139190615256565b836080015161352291906151fd565b608082015260a08301518490613539908790615210565b6135439190615256565b8360a0015161355291906151fd565b60a0820152613674565b8251849061356b908790615210565b6135759190615256565b8351613581919061526a565b815260208301518490613595908790615210565b61359f9190615256565b83602001516135ae919061526a565b6020820152604083015184906135c5908790615210565b6135cf9190615256565b83604001516135de919061526a565b6040820152606083015184906135f5908790615210565b6135ff9190615256565b836060015161360e919061526a565b606082015260808301518490613625908790615210565b61362f9190615256565b836080015161363e919061526a565b608082015260a08301518490613655908790615210565b61365f9190615256565b8360a0015161366e919061526a565b60a08201525b949350505050565b600080613689848961526a565b90506000613697848961526a565b905060006136a5898b615210565b905060006136b38483615256565b905060006136c18484615256565b90506000896136d0868561526a565b6136da919061526a565b905060006136e882876151fd565b6136f28484615210565b6136fc9190615256565b9050613708818d61526a565b9750620f424061371960018261526a565b613723908e615210565b61372d9190615256565b88111561376a576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c771600482015260240161017b565b505050505050509695505050505050565b60008211801561378b5750600081115b1561379557600080fd5b7fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8416016139085760008083116137e157816137e3565b825b90508034111561380557613800336137fb833461526a565b614ed3565b613843565b80341015613843576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c748600482015260240161017b565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e1582868661388b87615495565b6040805160008082526020820190925281906040518863ffffffff1660e01b81526004016138be96959493929190615310565b604080518083038185885af11580156138db573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613900919061535d565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e15848461394f85615495565b60008061395c888a6151fd565b6040805160208101929092526001908201523360608201526080016040516020818303038152906040526040518763ffffffff1660e01b81526004016139a796959493929190615310565b60408051808303816000875af11580156139c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e9919061535d565b50505b505050565b600080856139ff8482615210565b613a098587615210565b613a13888a615210565b613a1d888c615210565b613a2791906151fd565b613a31919061526a565b613a3b919061526a565b613a459190615256565b9050600083613a55876004615210565b613a5f9190615210565b90506000600283613a7d613a738280615210565b6122ac90866151fd565b613a87919061526a565b613a919190615256565b9050620f4240613aa260018261526a565b613aac9087615210565b613ab69190615256565b811180613ace5750613acb620f424086615256565b81105b15613b09576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c771600482015260240161017b565b613b13818661526a565b9250613b1f81886151fd565b613b298288615210565b613b339190615256565b9150613b3f818a61526a565b613b5184670de0b6b3a7640000615210565b613b5b9190615256565b9250613b6782896151fd565b613b7983670de0b6b3a7640000615210565b613b839190615256565b9150818311613b92578261251f565b50979650505050505050565b6000606082600003613bb45760009150506125e2565b607f8311613c7d576040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602282015260f884901b7fff000000000000000000000000000000000000000000000000000000000000001660368201526037015b6040516020818303038152906040529050613ff9565b60ff8311613d5a576040517fd70000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f8100000000000000000000000000000000000000000000000000000000000000603682015260f884901b7fff00000000000000000000000000000000000000000000000000000000000000166037820152603801613c67565b61ffff8311613e38576040517fd80000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f820000000000000000000000000000000000000000000000000000000000000060368201527fffff00000000000000000000000000000000000000000000000000000000000060f085901b166037820152603901613c67565b62ffffff8311613f17576040517fd90000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f830000000000000000000000000000000000000000000000000000000000000060368201527fffffff000000000000000000000000000000000000000000000000000000000060e885901b166037820152603a01613c67565b6040517fda0000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f840000000000000000000000000000000000000000000000000000000000000060368201527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b166037820152603b0160405160208183030381529060405290505b80516020909101209392505050565b60405160248101839052604481018290526000906140ea907f0000000000000000000000000000000000000000000000000000000000000000907f2f850fb300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614f1f565b8060200190518101906140fd9190615381565b9392505050565b60405160248101849052604481018390526064810182905260009081908190614173907f0000000000000000000000000000000000000000000000000000000000000000907f0d7cf0ab0000000000000000000000000000000000000000000000000000000090608401614068565b80602001905181019061418691906154cd565b92509250925093509350939050565b60405160248101849052604481018390526064810182905260009081908190614173907f0000000000000000000000000000000000000000000000000000000000000000907fe8518a660000000000000000000000000000000000000000000000000000000090608401614068565b60b58171010000000000000000000000000000000000811061422b5760409190911b9060801c5b690100000000000000000081106142475760209190911b9060401c5b65010000000000811061425f5760109190911b9060201c5b630100000081106142755760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b67ffffffffffffffff605b82901c811690609b83901c168115806142d8575080155b15614314576040517fd50d751200000000000000000000000000000000000000000000000000000000815262011171600482015260240161017b565b61ffff8316603a84901c6401ffffffff16428181039160ea87901c617fff1691148061433e575082155b806143495750806001145b1561435657505050915091565b64496cebb80084840283020484019350617fff60db87901c1692508260010361438157505050915091565b826001166001036143d65760019290921c91826c7e37be2022c0914b2680000000816143af576143af615227565b049250612710601e87901c613fff166b033b2e3c9fd0803ce8000000850102049250614403565b60019290921c916305f5e100601e87901c613fff166127108501026b033b2e3c9fd0803ce8000000020492505b8060011660010361443a5760011c61271081016b033b2e3c9fd0803ce800000082028161443257614432615227565b049050614470565b60011c61271081016b033b2e3c9fd0803ce800000082028161445e5761445e615227565b046b033b2e3c9fd0803ce80000000390505b760a70c3c40a64e6c51999090b65f67d92400000000000008382026127100261ffff881691900402601087901c613fff16612710030292506801b5a660ea44b8000085840283020485019450505050915091565b612710613fff60a285901c16830204820160d084901c6103ff1660c885901c60ff161b808210156144f65790506140fd565b506103ff60e285901c1660ff60da86901c161b80821115614515578091505b8183111561452357506140fd565b50909392505050565b600080856fffffffffffffffffffffffffffffffff81111561454f5760809150811c5b67ffffffffffffffff811115614567576040918201911c5b63ffffffff81111561457b576020918201911c5b61ffff81111561458d576010918201911c5b60ff81111561459e576008918201911c5b600f8111156145af576004918201911c5b60038111156145c0576002918201911c5b60018111156145d0576001820191505b80156145dd576001820191505b50848110156145e95750835b848103905085811c6000821184161561463857600181019050806001871b0361463857506001908101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011b5b6001851b821061464757600080fd5b90931b909201949350505050565b6146806040518060800160405280600081526020016000815260200160008152602001600081525090565b60006146ae7f0000000000000000000000000000000000000000000000000000000000000000856001611f53565b905060006146de7f0000000000000000000000000000000000000000000000000000000000000000856000611f53565b90506b033b2e3c9fd0803ce800000088101561470f5761470088888484614f65565b60608501526040840152614766565b61475b61473389760a70c3c40a64e6c51999090b65f67d9240000000000000615256565b61475488760a70c3c40a64e6c51999090b65f67d9240000000000000615256565b8385614f65565b604085015260608401525b81835260208301819052604083018051909201909152606082018051909101905295945050505050565b6000806147a8607984901c6401ffffffff164261526a565b90506000806000836000036148905763ffffffff605987901c1660ff605188901c161b92506305f5e1006305f5e0ff8402048710806147f257506305f5e1006305f5e10184020487115b1561482d576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c76c600482015260240161017b565b63ffffffff600987901c1660ff600188901c161b925061484d8389615072565b50602961485f8960206008600061452c565b901b867ffffffffffffffffffffffffffffffffffffffffffffe0000000001ffffffffff16179450505050506140fd565b60c386901c60011660000361492a5763ffffffff603187901c1660ff602988901c161b92506148bf8389615072565b504260791b60516148d58960206008600061452c565b901b60296148e88b60206008600061452c565b7ffffffffffffffffffffffffffc000000000000000000000000000000000000018a166501fffffffffe60288c901c1617911b17171794506140fd9350505050565b63ffffffff600987901c811660ff600189901c81169190911b9450603188901c909116602988901c9091161b91506000614964838a615072565b905082670de0b6b3a764000085028161497f5761497f615227565b04670de0b6b3a764000003905060008112156149bf57600166b1a2bc2ec50000623fffff8360000302816149b5576149b5615227565b04901b91506149d8565b600166b1a2bc2ec50000623fffff830204901b60011791505b623fffff8511156149ea57623fffff94505b609a87901c623fffff16935060b087901c60071660b388901c61ffff166101ff861115614b25578115614ab65760299390931b600986901b1792614a2d826154fb565b9150614a3a826020615210565b600082815260066020526040902080549186901b90911790558115614a6957614a62826154fb565b9150614bc8565b600791507f00000000000000000000000000000000000000000000000000000000000000008160010181614a9f57614a9f615227565b066000818152600660205260408120559050614bc8565b6000818152600660208190526040909120805460099690961b958617905591507f00000000000000000000000000000000000000000000000000000000000000006001820181614b0857614b08615227565b06600081815260066020526040902060e988901b90559050614bc8565b85600985901b1793506007821015614b5a576000818152600660209081526040909120805491840286901b9091179055614b70565b600081815260066020526040902060e085901b90555b8115614b7f57614a62826154fb565b600791507f00000000000000000000000000000000000000000000000000000000000000008160010181614bb557614bb5615227565b0660008181526006602052604081205590505b8a955089945088935060b381901b60b083901b609a89901b4260791b6051614bf58a60206008600061452c565b901b6029614c088c60206008600061452c565b901b600164ffffffffff60298c901c16901b8a7ffffffffffffffff800000000000000000000000000000000000000000000000116171717171717179750505050505050506140fd565b600080614c74614c628688615210565b6122ac90670de0b6b3a7640000615210565b90506000614c85614c628587615210565b9050614c9181836151fd565b614c9b8288615210565b614ca5848b615210565b614caf8588615210565b614cb991906151fd565b614cc3919061539a565b614ccd91906153c1565b98975050505050505050565b6000838202838501808281614cf057614cf0615227565b049695505050505050565b600080614d088486615210565b90506000614d16868561526a565b9050614d228183615256565b9695505050505050565b614d567f000000000000000000000000000000000000000000000000000000000000000085613b9e565b6040517fd1f9be4e00000000000000000000000000000000000000000000000000000000815260048101859052831515602482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660448301527f00000000000000000000000000000000000000000000000000000000000000008116606483015260848201849052919091169063d1f9be4e9060a4016020604051808303816000875af1925050508015614e5e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252614e5b91810190615530565b60015b614e98573d808015614e8c576040519150601f19603f3d011682016040523d82523d6000602084013e614e91565b606091505b5050612716565b806139e9576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c744600482015260240161017b565b60008060008060008587614e20f19050806139ec576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a600482015260240161017b565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e81614f5d57806000803e806000fd5b505092915050565b60008080614f73878761526a565b90506000614f82826002615210565b614f98866b033b2e3c9fd0803ce8000000615210565b614fa2888b615210565b614fac91906151fd565b614fb69190615256565b90506000614fc48688615210565b905074446c3b15f9926687d2c40534fdb564000000000000811061500757614fec8382615256565b615002906b033b2e3c9fd0803ce8000000615210565b615028565b8261501e826b033b2e3c9fd0803ce8000000615210565b6150289190615256565b90506150376122a28380615210565b61504190836151fd565b94506b033b2e3c9fd0803ce800000061505a8a87615210565b6150649190615256565b935050505094509492505050565b600081615087670de0b6b3a764000085615210565b6150919190615256565b6150a390670de0b6b3a764000061539a565b905066b1a2bc2ec500008113806150d957507fffffffffffffffffffffffffffffffffffffffffffffffffff4e5d43d13b000081125b156125e2576040517f2fee3e0e00000000000000000000000000000000000000000000000000000000815261c760600482015260240161017b565b6000806000806080858703121561512a57600080fd5b843593506020850135925060408501359150606085013573ffffffffffffffffffffffffffffffffffffffff8116811461516357600080fd5b939692955090935050565b801515811461517c57600080fd5b50565b6000806000806080858703121561519557600080fd5b84359350602085013592506040850135915060608501356151638161516e565b6000602082840312156151c757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156125e2576125e26151ce565b80820281158282048414176125e2576125e26151ce565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261526557615265615227565b500490565b818103818111156125e2576125e26151ce565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815180845260005b818110156152d2576020818501810151868301820152016152b6565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352876020840152866040840152808616606084015280851660808401525060c060a0830152614ccd60c08301846152ac565b6000806040838503121561537057600080fd5b505080516020909101519092909150565b60006020828403121561539357600080fd5b5051919050565b81810360008312801583831316838312821617156153ba576153ba6151ce565b5092915050565b6000826153d0576153d0615227565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615424576154246151ce565b500590565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615615461576154616151ce565b81810583148215176125e2576125e26151ce565b8082018281126000831280158216821582161715614f5d57614f5d6151ce565b60007f800000000000000000000000000000000000000000000000000000000000000082036154c6576154c66151ce565b5060000390565b6000806000606084860312156154e257600080fd5b8351925060208401519150604084015190509250925092565b60008161550a5761550a6151ce565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006020828403121561554257600080fd5b81516140fd8161516e56fea2646970667358221220b0efdc4d48314879022c84f038aabe44b047aad6ec6023da768cd568af7789bb64736f6c63430008150033000000000000000000000000000000000000000000000000000000000000000600000000000000000000000052aa899454998be5b000ad077a46bbe360f4e49700000000000000000000000091716c4eda1fb55e84bf8b4c7085f84285c19085000000000000000000000000f9eaabaf2f706abeb83fff9f33b6fddbf027efae00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ec7b668baf70d4a4b0fc7941a7708a07b6d45be0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb40088d83ab1ff0d61d9c773517473b02a4d5062f2f9d483d301be71a52470cbd34d81f068df23bfb054d29632e29e4a1807ae82dab5fefd6640191af297e82446e0b932c53338ebea93a82c66822cf0b37c21cf8a22e57e0c33f1bd7e24066a1b1a7659c6aa110b81fe8a8a70ef6769bd0097da77a102bea813403e26f30fd92f97bae778107453c9fa4e71a644cd0a05ed4723a03b3b8af2d1b088c870a29ba1829a9003092132f585b6ccdd167c19fe9774dbdea4260287e8a8e8ca8185d70000000000000000000000000000000000000000000000000000000000000400