From 1642d5f26ab166837d031ec52a8aab689ae61b80 Mon Sep 17 00:00:00 2001 From: christn Date: Mon, 11 Nov 2024 16:24:50 +0100 Subject: [PATCH] feat(MorphoLeverageStrategyExtension): Add method to exit collateral position after disengaging (#191) --- .../MorphoLeverageStrategyExtension.sol | 22 +++++++++++ external/abi/set/MorphoLeverageModule.json | 38 +++++++++++++------ .../morphoLeverageStrategyExtension.spec.ts | 18 ++++++++- 3 files changed, 65 insertions(+), 13 deletions(-) diff --git a/contracts/adapters/MorphoLeverageStrategyExtension.sol b/contracts/adapters/MorphoLeverageStrategyExtension.sol index 1c72edd9..192dfd5e 100644 --- a/contracts/adapters/MorphoLeverageStrategyExtension.sol +++ b/contracts/adapters/MorphoLeverageStrategyExtension.sol @@ -191,6 +191,7 @@ contract MorphoLeverageStrategyExtension is BaseExtension { event ExchangeRemoved( string _exchangeName ); + event CollateralWithdrawn(); /* ============ Modifiers ============ */ @@ -459,6 +460,16 @@ contract MorphoLeverageStrategyExtension is BaseExtension { ); } + /** + * OPERATOR ONLY: Withdraw all collateral from morpho + * + * Note: Can only be executed after fully deleveraging / disengaging the strategy. Will revert otherwise. + */ + function exitCollateralPosition() external onlyOperator { + _exitCollateralPosition(); + emit CollateralWithdrawn(); + } + /** * OPERATOR ONLY: Set methodology settings and check new settings are valid. Note: Need to pass in existing parameters if only changing a few settings. Must not be * in a rebalance. @@ -773,6 +784,17 @@ contract MorphoLeverageStrategyExtension is BaseExtension { invokeManager(address(strategy.leverageModule), enterPositionCallData); } + function _exitCollateralPosition() + internal + { + bytes memory exitPositionCallData = abi.encodeWithSignature( + "exitCollateralPosition(address)", + address(strategy.setToken) + ); + + invokeManager(address(strategy.leverageModule), exitPositionCallData); + } + /** * Calculate notional rebalance quantity, whether to chunk rebalance based on max trade size and max borrow and invoke lever on MorphoLeverageModule * diff --git a/external/abi/set/MorphoLeverageModule.json b/external/abi/set/MorphoLeverageModule.json index 39c84549..76be65c8 100644 --- a/external/abi/set/MorphoLeverageModule.json +++ b/external/abi/set/MorphoLeverageModule.json @@ -376,6 +376,20 @@ "type": "function", "gas": "0xa7d8c0" }, + { + "inputs": [ + { + "internalType": "contract ISetToken", + "name": "_setToken", + "type": "address" + } + ], + "name": "exitCollateralPosition", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function", + "gas": "0xa7d8c0" + }, { "inputs": [ { @@ -709,30 +723,30 @@ "gas": "0xa7d8c0" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620055f8380380620055f88339810160408190526200003491620000c6565b600080546001600160a01b0319166001600160a01b038416178155600180556200005d620000c2565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060601b6001600160601b031916608052506200011d565b3390565b60008060408385031215620000d9578182fd5b8251620000e68162000104565b6020840151909250620000f98162000104565b809150509250929050565b6001600160a01b03811681146200011a57600080fd5b50565b60805160601c61548662000172600039806115dd5280611a975280611afc5280611bf95280611d62528061209a52806120ff528061217652806121db528061255952806125f252806134dc52506154866000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a5841194116100c3578063da35e2831161007c578063da35e283146102aa578063e93353a3146102ce578063ee78244f146102e1578063f25fcc9f146102f4578063f2fde38b14610307578063f77c47911461031a57610158565b8063a584119414610254578063b1dd4d9214610267578063c137f4d71461027c578063c153dd0714610185578063c690a74c1461028f578063d8fbc833146102a257610158565b80635b136512116101155780635b136512146101e95780635c990306146101fc578063715018a61461020f5780637bb3526514610217578063847ef08d146102375780638da5cb5b1461023f57610158565b80630fb96b211461015d57806311976c04146101725780633fe6106b1461018557806348a2f01b146101985780635199e418146101c357806356b27e1a146101d6575b600080fd5b61017061016b3660046146da565b610322565b005b6101706101803660046147a9565b6105a4565b6101706101933660046146af565b610771565b6101ab6101a636600461440c565b610789565b6040516101ba9392919061538b565b60405180910390f35b6101706101d1366004614547565b610827565b6101706101e43660046147a9565b610899565b6101706101f73660046145ea565b610a3d565b61017061020a366004614617565b610b42565b610170610dbd565b61022a61022536600461472c565b610e3c565b6040516101ba9190614aff565b61017061107d565b6102476111d9565b6040516101ba91906149ac565b61017061026236600461440c565b6111e8565b61026f61122b565b6040516101ba9190614af4565b61017061028a3660046146da565b611234565b61017061029d3660046145b2565b611493565b6102476115db565b6102bd6102b836600461440c565b6115ff565b6040516101ba9594939291906149da565b6101706102dc36600461440c565b611641565b61026f6102ef36600461440c565b611775565b61022a61030236600461440c565b61178a565b61017061031536600461440c565b61181d565b6102476118d4565b8361032c816118e3565b610334614275565b506001600160a01b03808616600090815260036020818152604092839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093529082015490921660608301526004015460808201528280156103b35750836001600160a01b031681602001516001600160a01b0316145b1561048f576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906103e990889030906004016149c0565b60206040518083038186803b15801561040157600080fd5b505afa158015610415573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610439919061484f565b9050600081136104645760405162461bcd60e51b815260040161045b90614c59565b60405180910390fd5b600061047f8761047384611a28565b9063ffffffff611a4e16565b905061048c888483611a81565b50505b8261059c57836001600160a01b031681600001516001600160a01b0316146104c95760405162461bcd60e51b815260040161045b90614bf3565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906104fa90889030906004016149c0565b60206040518083038186803b15801561051257600080fd5b505afa158015610526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054a919061484f565b90506000811261056c5760405162461bcd60e51b815260040161045b90614c59565b600061058c876104736105878560001963ffffffff611b5416565b611a28565b9050610599888483611bbf565b50505b505050505050565b600260015414156105c75760405162461bcd60e51b815260040161045b90615248565b6002600155846105d681611c25565b6105de614275565b506001600160a01b03808716600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906106575760405162461bcd60e51b815260040161045b9061521c565b61065f6142a3565b61067788836020015184600001518a8a8a6000611c70565b905061068c8160000151838360600151611d28565b60006106a2828460200151856000015188611d8e565b905060006106b58a85600001518461201c565b905060006106c9838363ffffffff61203f16565b90506106dc846000015186836000612081565b6106ea848660000151612236565b83516106f5906122ec565b84600001516001600160a01b031685602001516001600160a01b03168c6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd48760200151886060015186886040516107589493929190614b1f565b60405180910390a4505060018055505050505050505050565b8161077b816118e3565b610784836111e8565b505050565b6000806000610796614275565b506001600160a01b03808516600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061080f5760405162461bcd60e51b815260040161045b9061521c565b6108198582612529565b935093509350509193909250565b61082f612672565b6002546001600160a01b0390811691161461085c5760405162461bcd60e51b815260040161045b90614ffe565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b600260015414156108bc5760405162461bcd60e51b815260040161045b90615248565b6002600155846108cb81611c25565b6108d3614275565b506001600160a01b03808716600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061094c5760405162461bcd60e51b815260040161045b9061521c565b6109546142a3565b61096c88836000015184602001518a8a8a6001611c70565b90506109818160000151838360600151611bbf565b6000610997828460000151856020015188611d8e565b905060006109aa8a85602001518461201c565b905060006109be838363ffffffff61203f16565b90506109cf84600001518683611a81565b83516109da906122ec565b84602001516001600160a01b031685600001516001600160a01b03168c6001600160a01b03167f359f8b62a966cfd521a3815681266407201b20a7c334925faa49e7d9d5dd57ab8760200151886060015186886040516107589493929190614b1f565b81610a4781611c25565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c90610a739085906004016149ac565b60206040518083038186803b158015610a8b57600080fd5b505afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190614563565b610adf5760405162461bcd60e51b815260040161045b90614ed5565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610b0b9086906004016149ac565b600060405180830381600087803b158015610b2557600080fd5b505af1158015610b39573d6000803e3d6000fd5b50505050505050565b8133610b4e8282612676565b83610b58816126a0565b60055460ff16610b9a576001600160a01b03851660009081526004602052604090205460ff16610b9a5760405162461bcd60e51b815260040161045b90615033565b846001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bd557600080fd5b505af1158015610be9573d6000803e3d6000fd5b50505050846001600160a01b031663d7f1b27c610c326040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b815250612761565b6040518263ffffffff1660e01b8152600401610c4e91906149ac565b60206040518083038186803b158015610c6657600080fd5b505afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190614563565b610cba5760405162461bcd60e51b815260040161045b90614ed5565b6060856001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b158015610cf557600080fd5b505afa158015610d09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d31919081019061449c565b905060005b8151811015610db257818181518110610d4b57fe5b60200260200101516001600160a01b031663d9b1b6e0886040518263ffffffff1660e01b8152600401610d7e91906149ac565b600060405180830381600087803b158015610d9857600080fd5b505af1925050508015610da9575060015b50600101610d36565b5061059c8686612778565b610dc5612672565b6002546001600160a01b03908116911614610df25760405162461bcd60e51b815260040161045b90614ffe565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b600060026001541415610e615760405162461bcd60e51b815260040161045b90615248565b600260015584610e7081611c25565b610e78614275565b506001600160a01b03808716600090815260036020818152604092839020835160a08101855281548616815260018201548616928101839052600282015486169481019490945291820154909316606083015260040154608082015290610ef15760405162461bcd60e51b815260040161045b9061521c565b6000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f64919061484f565b90506000610f78888363ffffffff611a4e16565b9050600080610f878b86612529565b9250925050610f946142a3565b610fad8c8760200151886000015187878f60008c612848565b9050610fc28160000151878360600151611d28565b610fd681876020015188600001518c611d8e565b508051610fe590878585612081565b610ff3818760000151612236565b8051610ffe906122ec565b85600001516001600160a01b031686602001516001600160a01b03168d6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd4846020015185606001518860006040516110629493929190614b1f565b60405180910390a45050600180559998505050505050505050565b3361108781611c4b565b33611091816111e8565b6001600160a01b038116600081815260036020819052604080832080546001600160a01b03199081168255600182018054821690556002820180548216905592810180549093169092556004918201839055805163b2494df360e01b815290516060949363b2494df39383810193919291829003018186803b15801561111657600080fd5b505afa15801561112a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611152919081019061449c565b905060005b81518110156111d35781818151811061116c57fe5b60200260200101516001600160a01b031663e0799620846040518263ffffffff1660e01b815260040161119f91906149ac565b600060405180830381600087803b1580156111b957600080fd5b505af19250505080156111ca575060015b50600101611157565b50505050565b6002546001600160a01b031690565b6002600154141561120b5760405162461bcd60e51b815260040161045b90615248565b60026001558061121a81611c4b565b611223826122ec565b505060018055565b60055460ff1681565b8361123e816118e3565b611246614275565b506001600160a01b03808616600090815260036020818152604092839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093529082015490921660608301526004015460808201528280156112c55750836001600160a01b031681602001516001600160a01b0316145b1561138c576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906112fb90889030906004016149c0565b60206040518083038186803b15801561131357600080fd5b505afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b919061484f565b90506000811361136d5760405162461bcd60e51b815260040161045b90614c59565b600061137c8761047384611a28565b9050611389888483611d28565b50505b8261059c57836001600160a01b031681600001516001600160a01b0316146113c65760405162461bcd60e51b815260040161045b90614bf3565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906113f790889030906004016149c0565b60206040518083038186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611447919061484f565b9050600081126114695760405162461bcd60e51b815260040161045b90614c59565b6000611484876104736105878560001963ffffffff611b5416565b90506105998884836000612081565b61149b612672565b6002546001600160a01b039081169116146114c85760405162461bcd60e51b815260040161045b90614ffe565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906114f89085906004016149ac565b60206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190614563565b8061156b57506001600160a01b03821660009081526004602052604090205460ff165b6115875760405162461bcd60e51b815260040161045b90614fd4565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003602081905260009182526040909120805460018201546002830154938301546004909301546001600160a01b039283169491831693918316929091169085565b8061164b81611c25565b611653614275565b506001600160a01b038083166000908152600360208181526040808420815160a0810183528154871681526001820154871693810184905260028201548716818401529381015490951660608401526004948501546080840152516370a0823160e01b8152919390916370a08231916116ce918891016149ac565b60206040518083038186803b1580156116e657600080fd5b505afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e919061484f565b9050600081116117405760405162461bcd60e51b815260040161045b90614f9d565b61174b848383611a81565b602082015161176c906001600160a01b03861690600063ffffffff61295b16565b6111d3846111e8565b60046020526000908152604090205460ff1681565b6000611794614275565b506001600160a01b03808316600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061180d5760405162461bcd60e51b815260040161045b9061521c565b61181681612acf565b9392505050565b611825612672565b6002546001600160a01b039081169116146118525760405162461bcd60e51b815260040161045b90614ffe565b6001600160a01b0381166118785760405162461bcd60e51b815260040161045b90614cd8565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e52906119119033906004016149ac565b60206040518083038186803b15801561192957600080fd5b505afa15801561193d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119619190614830565b600281111561196c57fe5b146119895760405162461bcd60e51b815260040161045b90614e9e565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e389906119b99033906004016149ac565b60206040518083038186803b1580156119d157600080fd5b505afa1580156119e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a099190614563565b611a255760405162461bcd60e51b815260040161045b9061515e565b50565b600080821215611a4a5760405162461bcd60e51b815260040161045b90614e69565b5090565b6000611a78670de0b6b3a7640000611a6c858563ffffffff612ad616565b9063ffffffff612b1016565b90505b92915050565b6020820151611ac2906001600160a01b038516907f00000000000000000000000000000000000000000000000000000000000000008463ffffffff612b5216565b6040516310adc72560e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__906342b71c9490611b28906001600160a01b038716907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614b7f565b60006040518083038186803b158015611b4057600080fd5b505af4158015610b39573d6000803e3d6000fd5b600082611b6357506000611a7b565b82600019148015611b775750600160ff1b82145b15611b945760405162461bcd60e51b815260040161045b90615061565b82820282848281611ba157fe5b0514611a785760405162461bcd60e51b815260040161045b90615061565b60405163169bcf0960e11b815273__$68b4132a7897cba73622ed001dedc8ba85$__90632d379e1290611b28906001600160a01b038716907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614b7f565b611c2f8133612c19565b611c4b5760405162461bcd60e51b815260040161045b906151e5565b611c5481612ca7565b611a255760405162461bcd60e51b815260040161045b90614c90565b611c786142a3565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611cb357600080fd5b505afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb919061484f565b9050611d1b898989611d038a8663ffffffff611a4e16565b611d138a8763ffffffff611a4e16565b898988612848565b9998505050505050505050565b604051631007f97160e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063401fe5c490611b28906001600160a01b038716907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614b7f565b60008085600001519050600086606001519050611e328688602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a9190614428565b6001600160a01b03851691908463ffffffff612b5216565b600080606089602001516001600160a01b031663e171fcab8a8a88888f608001518d6040518763ffffffff1660e01b8152600401611e7596959493929190614a0d565b60006040518083038186803b158015611e8d57600080fd5b505afa158015611ea1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ec99190810190614444565b925092509250846001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401611eff93929190614acd565b600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f55919081019061457f565b506000611fe88b60e001518a6001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401611f8c91906149ac565b60206040518083038186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdc919061484f565b9063ffffffff61203f16565b90508a6080015181101561200e5760405162461bcd60e51b815260040161045b90614de2565b9a9950505050505050505050565b60008061202a600084612dab565b9050612037858583612e40565b949350505050565b6000611a7883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee7565b80156121635782516120c5906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff612b5216565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061212e906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088906000908890600401614b45565b60006040518083038186803b15801561214657600080fd5b505af415801561215a573d6000803e3d6000fd5b505050506111d3565b82516121a1906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff612b5216565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061220a906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088908890600090600401614b45565b60006040518083038186803b15801561222257600080fd5b505af4158015610599573d6000803e3d6000fd5b81516040516370a0823160e01b81526000916001600160a01b038416916370a0823191612265916004016149ac565b60206040518083038186803b15801561227d57600080fd5b505afa158015612291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b5919061484f565b90508260e00151811461078457604083015160e0840151845161059c926001600160a01b039091169185919063ffffffff612f1316565b6122f4614275565b506001600160a01b03808216600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061236d5760405162461bcd60e51b815260040161045b9061521c565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123a857600080fd5b505afa1580156123bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e0919061484f565b90506000806123f0858585613054565b915091506000856001600160a01b03166322ebeba48660200151306040518363ffffffff1660e01b81526004016124289291906149c0565b60206040518083038186803b15801561244057600080fd5b505afa158015612454573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612478919061484f565b905082811461249057612490868660200151856130c6565b84516040516308bafae960e21b81526000916001600160a01b038916916322ebeba4916124c19130906004016149c0565b60206040518083038186803b1580156124d957600080fd5b505afa1580156124ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612511919061484f565b9050808314610b3957610b39878760000151856130c6565b60008060008061253885612acf565b905061254261430c565b6040516349e2903160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906393c52062906125909085908b90600401614b08565b60606040518083038186803b1580156125a857600080fd5b505afa1580156125bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e091906148f5565b905060008061261e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168963ffffffff6130f516565b6020870151919550935061264592506001600160801b03169050838363ffffffff61338216565b955082604001516001600160801b0316965082602001516001600160801b03169450505050509250925092565b3390565b6126808282612c19565b61269c5760405162461bcd60e51b815260040161045b906151e5565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906126d09084906004016149ac565b60206040518083038186803b1580156126e857600080fd5b505afa1580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127209190614563565b61273c5760405162461bcd60e51b815260040161045b906151a2565b612745816133b9565b611a255760405162461bcd60e51b815260040161045b90614d55565b60008061276d836133e8565b9050611816816133f3565b6000612783826134b0565b6001600160a01b03848116600081815260036020818152604092839020885181546001600160a01b0319908116918816919091178255918901516001820180548416918816919091179055888401516002820180548416918816919091179055606089015192810180549092169290951691909117905560808601516004909301929092559051919250907ffc8bae3ed1ee6eb61577be9bbfed36601a07b31902c2e2ff54e924d8ecb3f6c99061283b908490614aff565b60405180910390a2505050565b6128506142a3565b6128586142a3565b6040518061010001604052808b6001600160a01b0316815260200161287c87612761565b6001600160a01b03168152602001848152602001888152602001878152602001856128a7578a6128a9565b895b6001600160a01b03168152602001856128c257896128c4565b8a5b6001600160a01b03168152602001896001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016128fe91906149ac565b60206040518083038186803b15801561291657600080fd5b505afa15801561292a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294e919061484f565b90529050611d1b81613597565b6000612967848461366a565b9050801580156129775750600082115b156129ee5761298684846136f1565b6129e9576040516304e3532760e41b81526001600160a01b03851690634e353270906129b69086906004016149ac565b600060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b505050505b612a6b565b8080156129f9575081155b15612a6b57612a0884846136f1565b612a6b57604051636f86c89760e01b81526001600160a01b03851690636f86c89790612a389086906004016149ac565b600060405180830381600087803b158015612a5257600080fd5b505af1158015612a66573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784612a848561377d565b6040518363ffffffff1660e01b8152600401612aa1929190614ab4565b600060405180830381600087803b158015612abb57600080fd5b505af1158015610599573d6000803e3d6000fd5b60a0902090565b600082612ae557506000611a7b565b82820282848281612af257fe5b0414611a785760405162461bcd60e51b815260040161045b90614f5c565b6000611a7883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a2565b60608282604051602401612b67929190614ab4565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612bc39087906000908690600401614acd565b600060405180830381600087803b158015612bdd57600080fd5b505af1158015612bf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261059c919081019061457f565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b158015612c5e57600080fd5b505afa158015612c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c969190614428565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90612cd89085906004016149ac565b60206040518083038186803b158015612cf057600080fd5b505afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190614563565b8015611a7b57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90612d5b9030906004016149ac565b60206040518083038186803b158015612d7357600080fd5b505afa158015612d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190614563565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f90612dde9030908890600401614ab4565b60206040518083038186803b158015612df657600080fd5b505afa158015612e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2e919061484f565b9050612037838263ffffffff611a4e16565b801561078457610784826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9757600080fd5b505afa158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf9190614428565b6001600160a01b03861691908463ffffffff6137d916565b60008184841115612f0b5760405162461bcd60e51b815260040161045b9190614bb4565b505050900390565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612f4591906149ac565b60206040518083038186803b158015612f5d57600080fd5b505afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061484f565b90506000613018896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b8152600401612fc891906149ac565b60206040518083038186803b158015612fe057600080fd5b505afa158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610587919061484f565b9050600082156130355761302e8888858561391b565b9050613039565b5060005b6130448a8a8361295b565b9199909850909650945050505050565b60008082613067575060009050806130be565b6000806130748787612529565b50909250905061309261308d838763ffffffff61396a16565b61377d565b93506130b96000196130ad61308d848963ffffffff61398816565b9063ffffffff611b5416565b925050505b935093915050565b604080516020810190915260008152610784906001600160a01b0385169084903090859063ffffffff6139e716565b600080600080600061310686612acf565b905061311061432c565b604051632e3071cd60e11b81526001600160a01b03891690635c60e39a9061313c908590600401614aff565b60c06040518083038186803b15801561315457600080fd5b505afa158015613168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318c9190614867565b60808101519091506001600160801b0316420380158015906131ba575060408201516001600160801b031615155b80156131d2575060608801516001600160a01b031615155b1561334e576060880151604051638c00bf6b60e01b81526000916001600160a01b031690638c00bf6b9061320c908c908790600401615324565b60206040518083038186803b15801561322457600080fd5b505afa158015613238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325c919061484f565b9050600061328d613273838563ffffffff613fa016565b60408601516001600160801b03169063ffffffff61401216565b905061329881614027565b604085018051919091016001600160801b031690526132b681614027565b84516001600160801b0391018116855260a0850151161561334b5760006132f38560a001516001600160801b03168361401290919063ffffffff16565b905060006133288287600001516001600160801b03160387602001516001600160801b0316846140509092919063ffffffff16565b905061333381614027565b602087018051919091016001600160801b0316905250505b50505b508051602082015160408301516060909301516001600160801b039283169b9183169a509282169850911695509350505050565b600061203761339884600163ffffffff61408716565b6133ab84620f424063ffffffff61408716565b86919063ffffffff6140ac16565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790612d5b9030906004016149ac565b805160209091012090565b60008054819061340b906001600160a01b03166140d6565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401613438929190614ab4565b60206040518083038186803b15801561345057600080fd5b505afa158015613464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134889190614428565b90506001600160a01b038116611a7b5760405162461bcd60e51b815260040161045b90614db3565b60006134bb82612acf565b90506134c561432c565b604051632e3071cd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c60e39a90613511908590600401614aff565b60c06040518083038186803b15801561352957600080fd5b505afa15801561353d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135619190614867565b905080608001516001600160801b0316600014156135915760405162461bcd60e51b815260040161045b90614bc7565b50919050565b80516001600160a01b03908116600090815260036020526040902060010154166135d35760405162461bcd60e51b815260040161045b90614e0d565b80516001600160a01b039081166000908152600360205260409020541661360c5760405162461bcd60e51b815260040161045b90614e3d565b8060c001516001600160a01b03168160a001516001600160a01b031614156136465760405162461bcd60e51b815260040161045b906152ad565b6000816060015111611a255760405162461bcd60e51b815260040161045b90614d8c565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161369991906149ac565b60206040518083038186803b1580156136b157600080fd5b505afa1580156136c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e9919061484f565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b815260040161372091906149ac565b60006040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613774919081019061449c565b51119392505050565b6000600160ff1b8210611a4a5760405162461bcd60e51b815260040161045b90615116565b600081836137c35760405162461bcd60e51b815260040161045b9190614bb4565b5060008385816137cf57fe5b0495945050505050565b80156111d3576040516370a0823160e01b81526000906001600160a01b038516906370a082319061380e9088906004016149ac565b60206040518083038186803b15801561382657600080fd5b505afa15801561383a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385e919061484f565b905061386c85858585614155565b6040516370a0823160e01b81526000906001600160a01b038616906370a082319061389b9089906004016149ac565b60206040518083038186803b1580156138b357600080fd5b505afa1580156138c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138eb919061484f565b90506138fd828463ffffffff61203f16565b811461059c5760405162461bcd60e51b815260040161045b906150a8565b60008061393e613931848863ffffffff611a4e16565b869063ffffffff61203f16565b905061396086613954868463ffffffff61203f16565b9063ffffffff61396a16565b9695505050505050565b6000611a7882611a6c85670de0b6b3a764000063ffffffff612ad616565b6000816139a75760405162461bcd60e51b815260040161045b906152fa565b600083116139b6576000611a78565b611a7860016139db84611a6c83611fdc89670de0b6b3a764000063ffffffff612ad616565b9063ffffffff61408716565b8115613cdc5760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990613a199087906004016149ac565b60206040518083038186803b158015613a3157600080fd5b505afa158015613a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a699190614563565b613b30576040516304e3532760e41b81526001600160a01b03861690634e35327090613a999087906004016149ac565b600060405180830381600087803b158015613ab357600080fd5b505af1158015613ac7573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee5599150613af990879087906004016149c0565b600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b50505050613c13565b604051637d96659360e01b81526001600160a01b03861690637d96659390613b5e90879087906004016149c0565b60206040518083038186803b158015613b7657600080fd5b505afa158015613b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bae9190614563565b613c135760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee55990613be090879087906004016149c0565b600060405180830381600087803b158015613bfa57600080fd5b505af1158015613c0e573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc190613c4390879087908790600401614a90565b600060405180830381600087803b158015613c5d57600080fd5b505af1158015613c71573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe19150613ca590879087908690600401614a5b565b600060405180830381600087803b158015613cbf57600080fd5b505af1158015613cd3573d6000803e3d6000fd5b50505050613f99565b805115613cfb5760405162461bcd60e51b815260040161045b906150df565b6040516308bafae960e21b81526001600160a01b038616906322ebeba490613d2990879087906004016149c0565b60206040518083038186803b158015613d4157600080fd5b505afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d79919061484f565b15613f995760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390613dad9088906004016149ac565b60006040518083038186803b158015613dc557600080fd5b505afa158015613dd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e01919081019061449c565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90613e309088906004016149ac565b60206040518083038186803b158015613e4857600080fd5b505afa158015613e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e80919061484f565b158015613e8e575080516001145b15613f3757836001600160a01b031681600081518110613eaa57fe5b60200260200101516001600160a01b031614613ed85760405162461bcd60e51b815260040161045b90614f0c565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790613f049088906004016149ac565b600060405180830381600087803b158015613f1e57600080fd5b505af1158015613f32573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f07790613f6590889088906004016149c0565b600060405180830381600087803b158015613f7f57600080fd5b505af1158015613f93573d6000803e3d6000fd5b50505050505b5050505050565b600080613fb3848463ffffffff612ad616565b90506000613fda8280613fd5670de0b6b3a7640000600263ffffffff612ad616565b61425f565b90506000613ffc8284613fd5670de0b6b3a7640000600363ffffffff612ad616565b9050613960816139db858563ffffffff61408716565b6000611a788383670de0b6b3a764000061425f565b60006001600160801b03821115611a4a5760405162461bcd60e51b815260040161045b9061527f565b600061203761406883620f424063ffffffff61408716565b61407985600163ffffffff61408716565b86919063ffffffff61425f16565b600082820183811015611a785760405162461bcd60e51b815260040161045b90614d1e565b600061203782611a6c6140c682600163ffffffff61203f16565b6139db888863ffffffff612ad616565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690614105908490600401614aff565b60206040518083038186803b15801561411d57600080fd5b505afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190614428565b80156111d35760608282604051602401614170929190614ab4565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506060906001600160a01b03871690638f6f0332906141cf9088906000908790600401614acd565b600060405180830381600087803b1580156141e957600080fd5b505af11580156141fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614225919081019061457f565b80519091501561059c57808060200190518101906142439190614563565b61059c5760405162461bcd60e51b815260040161045b90614c2a565b600061203782611a6c868663ffffffff612ad616565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b8051611a7b81615418565b600082601f83011261437c578081fd5b813561438f61438a826153c8565b6153a1565b91508082528360208285010111156143a657600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126143cf578081fd5b81516143dd61438a826153c8565b91508082528360208285010111156143f457600080fd5b6144058160208401602086016153ec565b5092915050565b60006020828403121561441d578081fd5b8135611a7881615418565b600060208284031215614439578081fd5b8151611a7881615418565b600080600060608486031215614458578182fd5b835161446381615418565b60208501516040860151919450925067ffffffffffffffff811115614486578182fd5b614492868287016143bf565b9150509250925092565b600060208083850312156144ae578182fd5b825167ffffffffffffffff808211156144c5578384fd5b81850186601f8201126144d6578485fd5b80519250818311156144e6578485fd5b83830291506144f68483016153a1565b8381528481019082860184840187018a1015614510578788fd5b8794505b8585101561453a576145268a82614361565b835260019490940193918601918601614514565b5098975050505050505050565b600060208284031215614558578081fd5b8135611a788161542d565b600060208284031215614574578081fd5b8151611a788161542d565b600060208284031215614590578081fd5b815167ffffffffffffffff8111156145a6578182fd5b612037848285016143bf565b600080604083850312156145c4578182fd5b82356145cf81615418565b915060208301356145df8161542d565b809150509250929050565b600080604083850312156145fc578182fd5b823561460781615418565b915060208301356145df81615418565b60008082840360c081121561462a578283fd5b833561463581615418565b925060a0601f1982011215614648578182fd5b5061465360a06153a1565b602084013561466181615418565b8152604084013561467181615418565b6020820152606084013561468481615418565b6040820152608084013561469781615418565b606082015260a0939093013560808401525092909150565b600080604083850312156146c1578182fd5b82356146cc81615418565b946020939093013593505050565b600080600080608085870312156146ef578182fd5b84356146fa81615418565b935060208501359250604085013561471181615418565b915060608501356147218161542d565b939692955090935050565b60008060008060808587031215614741578182fd5b843561474c81615418565b935060208501359250604085013567ffffffffffffffff8082111561476f578384fd5b61477b8883890161436c565b93506060870135915080821115614790578283fd5b5061479d8782880161436c565b91505092959194509250565b600080600080600060a086880312156147c0578283fd5b85356147cb81615418565b94506020860135935060408601359250606086013567ffffffffffffffff808211156147f5578283fd5b61480189838a0161436c565b93506080880135915080821115614816578283fd5b506148238882890161436c565b9150509295509295909350565b600060208284031215614841578081fd5b815160038110611a78578182fd5b600060208284031215614860578081fd5b5051919050565b600060c08284031215614878578081fd5b61488260c06153a1565b825161488d8161543b565b8152602083015161489d8161543b565b602082015260408301516148b08161543b565b604082015260608301516148c38161543b565b606082015260808301516148d68161543b565b608082015260a08301516148e98161543b565b60a08201529392505050565b600060608284031215614906578081fd5b61491060606153a1565b8251815260208301516149228161543b565b602082015260408301516149358161543b565b60408201529392505050565b600081518084526149598160208601602086016153ec565b601f01601f19169290920160200192915050565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a00190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090614a4f90830184614941565b98975050505050505050565b6001600160a01b03848116825283166020820152606060408201819052600090614a8790830184614941565b95945050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152614a876060830184614941565b901515815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b038681168252851660208201526101208101614b6b604083018661496d565b60e082019390935261010001529392505050565b6001600160a01b038581168252841660208201526101008101614ba5604083018561496d565b8260e083015295945050505050565b600060208252611a786020830184614941565b60208082526012908201527113585c9ad95d081b9bdd0818dc99585d195960721b604082015260600190565b60208082526017908201527f4465627420636f6d706f6e656e74206d69736d61746368000000000000000000604082015260600190565b602080825260159082015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601a908201527f436f6d706f6e656e74206d757374206265206e65676174697665000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252600d908201526c05175616e74697479206973203609c1b604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252601190820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604082015260600190565b60208082526016908201527510dbdb1b185d195c985b081b9bdd08195b98589b195960521b604082015260600190565b602080825260129082015271109bdc9c9bddc81b9bdd08195b98589b195960721b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f436f6c6c61746572616c2062616c616e63652069732030000000000000000000604082015260600190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526012908201527110dbdb1b185d195c985b081b9bdd081cd95d60721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526014908201527313505617d55253950c4c8e17d15610d15151115160621b604082015260600190565b6020808252602d908201527f436f6c6c61746572616c20616e6420626f72726f77206173736574206d75737460408201526c08189948191a5999995c995b9d609a1b606082015260800190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b6101608101615333828561496d565b6001600160801b038084511660a08401528060208501511660c08401528060408501511660e084015280606085015116610100840152806080850151166101208401528060a085015116610140840152509392505050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156153c057600080fd5b604052919050565b600067ffffffffffffffff8211156153de578081fd5b50601f01601f191660200190565b60005b838110156154075781810151838201526020016153ef565b838111156111d35750506000910152565b6001600160a01b0381168114611a2557600080fd5b8015158114611a2557600080fd5b6001600160801b0381168114611a2557600080fdfea2646970667358221220e6473242f805740368c97ae48e597ddf564bac546affb0d5435a79111ad75ae564736f6c634300060a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063a5841194116100c3578063da35e2831161007c578063da35e283146102aa578063e93353a3146102ce578063ee78244f146102e1578063f25fcc9f146102f4578063f2fde38b14610307578063f77c47911461031a57610158565b8063a584119414610254578063b1dd4d9214610267578063c137f4d71461027c578063c153dd0714610185578063c690a74c1461028f578063d8fbc833146102a257610158565b80635b136512116101155780635b136512146101e95780635c990306146101fc578063715018a61461020f5780637bb3526514610217578063847ef08d146102375780638da5cb5b1461023f57610158565b80630fb96b211461015d57806311976c04146101725780633fe6106b1461018557806348a2f01b146101985780635199e418146101c357806356b27e1a146101d6575b600080fd5b61017061016b3660046146da565b610322565b005b6101706101803660046147a9565b6105a4565b6101706101933660046146af565b610771565b6101ab6101a636600461440c565b610789565b6040516101ba9392919061538b565b60405180910390f35b6101706101d1366004614547565b610827565b6101706101e43660046147a9565b610899565b6101706101f73660046145ea565b610a3d565b61017061020a366004614617565b610b42565b610170610dbd565b61022a61022536600461472c565b610e3c565b6040516101ba9190614aff565b61017061107d565b6102476111d9565b6040516101ba91906149ac565b61017061026236600461440c565b6111e8565b61026f61122b565b6040516101ba9190614af4565b61017061028a3660046146da565b611234565b61017061029d3660046145b2565b611493565b6102476115db565b6102bd6102b836600461440c565b6115ff565b6040516101ba9594939291906149da565b6101706102dc36600461440c565b611641565b61026f6102ef36600461440c565b611775565b61022a61030236600461440c565b61178a565b61017061031536600461440c565b61181d565b6102476118d4565b8361032c816118e3565b610334614275565b506001600160a01b03808616600090815260036020818152604092839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093529082015490921660608301526004015460808201528280156103b35750836001600160a01b031681602001516001600160a01b0316145b1561048f576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906103e990889030906004016149c0565b60206040518083038186803b15801561040157600080fd5b505afa158015610415573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610439919061484f565b9050600081136104645760405162461bcd60e51b815260040161045b90614c59565b60405180910390fd5b600061047f8761047384611a28565b9063ffffffff611a4e16565b905061048c888483611a81565b50505b8261059c57836001600160a01b031681600001516001600160a01b0316146104c95760405162461bcd60e51b815260040161045b90614bf3565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906104fa90889030906004016149c0565b60206040518083038186803b15801561051257600080fd5b505afa158015610526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054a919061484f565b90506000811261056c5760405162461bcd60e51b815260040161045b90614c59565b600061058c876104736105878560001963ffffffff611b5416565b611a28565b9050610599888483611bbf565b50505b505050505050565b600260015414156105c75760405162461bcd60e51b815260040161045b90615248565b6002600155846105d681611c25565b6105de614275565b506001600160a01b03808716600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906106575760405162461bcd60e51b815260040161045b9061521c565b61065f6142a3565b61067788836020015184600001518a8a8a6000611c70565b905061068c8160000151838360600151611d28565b60006106a2828460200151856000015188611d8e565b905060006106b58a85600001518461201c565b905060006106c9838363ffffffff61203f16565b90506106dc846000015186836000612081565b6106ea848660000151612236565b83516106f5906122ec565b84600001516001600160a01b031685602001516001600160a01b03168c6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd48760200151886060015186886040516107589493929190614b1f565b60405180910390a4505060018055505050505050505050565b8161077b816118e3565b610784836111e8565b505050565b6000806000610796614275565b506001600160a01b03808516600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061080f5760405162461bcd60e51b815260040161045b9061521c565b6108198582612529565b935093509350509193909250565b61082f612672565b6002546001600160a01b0390811691161461085c5760405162461bcd60e51b815260040161045b90614ffe565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b600260015414156108bc5760405162461bcd60e51b815260040161045b90615248565b6002600155846108cb81611c25565b6108d3614275565b506001600160a01b03808716600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061094c5760405162461bcd60e51b815260040161045b9061521c565b6109546142a3565b61096c88836000015184602001518a8a8a6001611c70565b90506109818160000151838360600151611bbf565b6000610997828460000151856020015188611d8e565b905060006109aa8a85602001518461201c565b905060006109be838363ffffffff61203f16565b90506109cf84600001518683611a81565b83516109da906122ec565b84602001516001600160a01b031685600001516001600160a01b03168c6001600160a01b03167f359f8b62a966cfd521a3815681266407201b20a7c334925faa49e7d9d5dd57ab8760200151886060015186886040516107589493929190614b1f565b81610a4781611c25565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c90610a739085906004016149ac565b60206040518083038186803b158015610a8b57600080fd5b505afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190614563565b610adf5760405162461bcd60e51b815260040161045b90614ed5565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610b0b9086906004016149ac565b600060405180830381600087803b158015610b2557600080fd5b505af1158015610b39573d6000803e3d6000fd5b50505050505050565b8133610b4e8282612676565b83610b58816126a0565b60055460ff16610b9a576001600160a01b03851660009081526004602052604090205460ff16610b9a5760405162461bcd60e51b815260040161045b90615033565b846001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bd557600080fd5b505af1158015610be9573d6000803e3d6000fd5b50505050846001600160a01b031663d7f1b27c610c326040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b815250612761565b6040518263ffffffff1660e01b8152600401610c4e91906149ac565b60206040518083038186803b158015610c6657600080fd5b505afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190614563565b610cba5760405162461bcd60e51b815260040161045b90614ed5565b6060856001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b158015610cf557600080fd5b505afa158015610d09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d31919081019061449c565b905060005b8151811015610db257818181518110610d4b57fe5b60200260200101516001600160a01b031663d9b1b6e0886040518263ffffffff1660e01b8152600401610d7e91906149ac565b600060405180830381600087803b158015610d9857600080fd5b505af1925050508015610da9575060015b50600101610d36565b5061059c8686612778565b610dc5612672565b6002546001600160a01b03908116911614610df25760405162461bcd60e51b815260040161045b90614ffe565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b600060026001541415610e615760405162461bcd60e51b815260040161045b90615248565b600260015584610e7081611c25565b610e78614275565b506001600160a01b03808716600090815260036020818152604092839020835160a08101855281548616815260018201548616928101839052600282015486169481019490945291820154909316606083015260040154608082015290610ef15760405162461bcd60e51b815260040161045b9061521c565b6000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f64919061484f565b90506000610f78888363ffffffff611a4e16565b9050600080610f878b86612529565b9250925050610f946142a3565b610fad8c8760200151886000015187878f60008c612848565b9050610fc28160000151878360600151611d28565b610fd681876020015188600001518c611d8e565b508051610fe590878585612081565b610ff3818760000151612236565b8051610ffe906122ec565b85600001516001600160a01b031686602001516001600160a01b03168d6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd4846020015185606001518860006040516110629493929190614b1f565b60405180910390a45050600180559998505050505050505050565b3361108781611c4b565b33611091816111e8565b6001600160a01b038116600081815260036020819052604080832080546001600160a01b03199081168255600182018054821690556002820180548216905592810180549093169092556004918201839055805163b2494df360e01b815290516060949363b2494df39383810193919291829003018186803b15801561111657600080fd5b505afa15801561112a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611152919081019061449c565b905060005b81518110156111d35781818151811061116c57fe5b60200260200101516001600160a01b031663e0799620846040518263ffffffff1660e01b815260040161119f91906149ac565b600060405180830381600087803b1580156111b957600080fd5b505af19250505080156111ca575060015b50600101611157565b50505050565b6002546001600160a01b031690565b6002600154141561120b5760405162461bcd60e51b815260040161045b90615248565b60026001558061121a81611c4b565b611223826122ec565b505060018055565b60055460ff1681565b8361123e816118e3565b611246614275565b506001600160a01b03808616600090815260036020818152604092839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093529082015490921660608301526004015460808201528280156112c55750836001600160a01b031681602001516001600160a01b0316145b1561138c576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906112fb90889030906004016149c0565b60206040518083038186803b15801561131357600080fd5b505afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b919061484f565b90506000811361136d5760405162461bcd60e51b815260040161045b90614c59565b600061137c8761047384611a28565b9050611389888483611d28565b50505b8261059c57836001600160a01b031681600001516001600160a01b0316146113c65760405162461bcd60e51b815260040161045b90614bf3565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906113f790889030906004016149c0565b60206040518083038186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611447919061484f565b9050600081126114695760405162461bcd60e51b815260040161045b90614c59565b6000611484876104736105878560001963ffffffff611b5416565b90506105998884836000612081565b61149b612672565b6002546001600160a01b039081169116146114c85760405162461bcd60e51b815260040161045b90614ffe565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906114f89085906004016149ac565b60206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190614563565b8061156b57506001600160a01b03821660009081526004602052604090205460ff165b6115875760405162461bcd60e51b815260040161045b90614fd4565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003602081905260009182526040909120805460018201546002830154938301546004909301546001600160a01b039283169491831693918316929091169085565b8061164b81611c25565b611653614275565b506001600160a01b038083166000908152600360208181526040808420815160a0810183528154871681526001820154871693810184905260028201548716818401529381015490951660608401526004948501546080840152516370a0823160e01b8152919390916370a08231916116ce918891016149ac565b60206040518083038186803b1580156116e657600080fd5b505afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e919061484f565b9050600081116117405760405162461bcd60e51b815260040161045b90614f9d565b61174b848383611a81565b602082015161176c906001600160a01b03861690600063ffffffff61295b16565b6111d3846111e8565b60046020526000908152604090205460ff1681565b6000611794614275565b506001600160a01b03808316600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061180d5760405162461bcd60e51b815260040161045b9061521c565b61181681612acf565b9392505050565b611825612672565b6002546001600160a01b039081169116146118525760405162461bcd60e51b815260040161045b90614ffe565b6001600160a01b0381166118785760405162461bcd60e51b815260040161045b90614cd8565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e52906119119033906004016149ac565b60206040518083038186803b15801561192957600080fd5b505afa15801561193d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119619190614830565b600281111561196c57fe5b146119895760405162461bcd60e51b815260040161045b90614e9e565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e389906119b99033906004016149ac565b60206040518083038186803b1580156119d157600080fd5b505afa1580156119e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a099190614563565b611a255760405162461bcd60e51b815260040161045b9061515e565b50565b600080821215611a4a5760405162461bcd60e51b815260040161045b90614e69565b5090565b6000611a78670de0b6b3a7640000611a6c858563ffffffff612ad616565b9063ffffffff612b1016565b90505b92915050565b6020820151611ac2906001600160a01b038516907f00000000000000000000000000000000000000000000000000000000000000008463ffffffff612b5216565b6040516310adc72560e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__906342b71c9490611b28906001600160a01b038716907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614b7f565b60006040518083038186803b158015611b4057600080fd5b505af4158015610b39573d6000803e3d6000fd5b600082611b6357506000611a7b565b82600019148015611b775750600160ff1b82145b15611b945760405162461bcd60e51b815260040161045b90615061565b82820282848281611ba157fe5b0514611a785760405162461bcd60e51b815260040161045b90615061565b60405163169bcf0960e11b815273__$68b4132a7897cba73622ed001dedc8ba85$__90632d379e1290611b28906001600160a01b038716907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614b7f565b611c2f8133612c19565b611c4b5760405162461bcd60e51b815260040161045b906151e5565b611c5481612ca7565b611a255760405162461bcd60e51b815260040161045b90614c90565b611c786142a3565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611cb357600080fd5b505afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb919061484f565b9050611d1b898989611d038a8663ffffffff611a4e16565b611d138a8763ffffffff611a4e16565b898988612848565b9998505050505050505050565b604051631007f97160e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063401fe5c490611b28906001600160a01b038716907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614b7f565b60008085600001519050600086606001519050611e328688602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a9190614428565b6001600160a01b03851691908463ffffffff612b5216565b600080606089602001516001600160a01b031663e171fcab8a8a88888f608001518d6040518763ffffffff1660e01b8152600401611e7596959493929190614a0d565b60006040518083038186803b158015611e8d57600080fd5b505afa158015611ea1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ec99190810190614444565b925092509250846001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401611eff93929190614acd565b600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f55919081019061457f565b506000611fe88b60e001518a6001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401611f8c91906149ac565b60206040518083038186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdc919061484f565b9063ffffffff61203f16565b90508a6080015181101561200e5760405162461bcd60e51b815260040161045b90614de2565b9a9950505050505050505050565b60008061202a600084612dab565b9050612037858583612e40565b949350505050565b6000611a7883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee7565b80156121635782516120c5906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff612b5216565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061212e906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088906000908890600401614b45565b60006040518083038186803b15801561214657600080fd5b505af415801561215a573d6000803e3d6000fd5b505050506111d3565b82516121a1906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff612b5216565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061220a906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088908890600090600401614b45565b60006040518083038186803b15801561222257600080fd5b505af4158015610599573d6000803e3d6000fd5b81516040516370a0823160e01b81526000916001600160a01b038416916370a0823191612265916004016149ac565b60206040518083038186803b15801561227d57600080fd5b505afa158015612291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b5919061484f565b90508260e00151811461078457604083015160e0840151845161059c926001600160a01b039091169185919063ffffffff612f1316565b6122f4614275565b506001600160a01b03808216600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061236d5760405162461bcd60e51b815260040161045b9061521c565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123a857600080fd5b505afa1580156123bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e0919061484f565b90506000806123f0858585613054565b915091506000856001600160a01b03166322ebeba48660200151306040518363ffffffff1660e01b81526004016124289291906149c0565b60206040518083038186803b15801561244057600080fd5b505afa158015612454573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612478919061484f565b905082811461249057612490868660200151856130c6565b84516040516308bafae960e21b81526000916001600160a01b038916916322ebeba4916124c19130906004016149c0565b60206040518083038186803b1580156124d957600080fd5b505afa1580156124ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612511919061484f565b9050808314610b3957610b39878760000151856130c6565b60008060008061253885612acf565b905061254261430c565b6040516349e2903160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906393c52062906125909085908b90600401614b08565b60606040518083038186803b1580156125a857600080fd5b505afa1580156125bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e091906148f5565b905060008061261e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168963ffffffff6130f516565b6020870151919550935061264592506001600160801b03169050838363ffffffff61338216565b955082604001516001600160801b0316965082602001516001600160801b03169450505050509250925092565b3390565b6126808282612c19565b61269c5760405162461bcd60e51b815260040161045b906151e5565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906126d09084906004016149ac565b60206040518083038186803b1580156126e857600080fd5b505afa1580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127209190614563565b61273c5760405162461bcd60e51b815260040161045b906151a2565b612745816133b9565b611a255760405162461bcd60e51b815260040161045b90614d55565b60008061276d836133e8565b9050611816816133f3565b6000612783826134b0565b6001600160a01b03848116600081815260036020818152604092839020885181546001600160a01b0319908116918816919091178255918901516001820180548416918816919091179055888401516002820180548416918816919091179055606089015192810180549092169290951691909117905560808601516004909301929092559051919250907ffc8bae3ed1ee6eb61577be9bbfed36601a07b31902c2e2ff54e924d8ecb3f6c99061283b908490614aff565b60405180910390a2505050565b6128506142a3565b6128586142a3565b6040518061010001604052808b6001600160a01b0316815260200161287c87612761565b6001600160a01b03168152602001848152602001888152602001878152602001856128a7578a6128a9565b895b6001600160a01b03168152602001856128c257896128c4565b8a5b6001600160a01b03168152602001896001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016128fe91906149ac565b60206040518083038186803b15801561291657600080fd5b505afa15801561292a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294e919061484f565b90529050611d1b81613597565b6000612967848461366a565b9050801580156129775750600082115b156129ee5761298684846136f1565b6129e9576040516304e3532760e41b81526001600160a01b03851690634e353270906129b69086906004016149ac565b600060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b505050505b612a6b565b8080156129f9575081155b15612a6b57612a0884846136f1565b612a6b57604051636f86c89760e01b81526001600160a01b03851690636f86c89790612a389086906004016149ac565b600060405180830381600087803b158015612a5257600080fd5b505af1158015612a66573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784612a848561377d565b6040518363ffffffff1660e01b8152600401612aa1929190614ab4565b600060405180830381600087803b158015612abb57600080fd5b505af1158015610599573d6000803e3d6000fd5b60a0902090565b600082612ae557506000611a7b565b82820282848281612af257fe5b0414611a785760405162461bcd60e51b815260040161045b90614f5c565b6000611a7883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a2565b60608282604051602401612b67929190614ab4565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612bc39087906000908690600401614acd565b600060405180830381600087803b158015612bdd57600080fd5b505af1158015612bf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261059c919081019061457f565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b158015612c5e57600080fd5b505afa158015612c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c969190614428565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90612cd89085906004016149ac565b60206040518083038186803b158015612cf057600080fd5b505afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d289190614563565b8015611a7b57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90612d5b9030906004016149ac565b60206040518083038186803b158015612d7357600080fd5b505afa158015612d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190614563565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f90612dde9030908890600401614ab4565b60206040518083038186803b158015612df657600080fd5b505afa158015612e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2e919061484f565b9050612037838263ffffffff611a4e16565b801561078457610784826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9757600080fd5b505afa158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf9190614428565b6001600160a01b03861691908463ffffffff6137d916565b60008184841115612f0b5760405162461bcd60e51b815260040161045b9190614bb4565b505050900390565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612f4591906149ac565b60206040518083038186803b158015612f5d57600080fd5b505afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061484f565b90506000613018896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b8152600401612fc891906149ac565b60206040518083038186803b158015612fe057600080fd5b505afa158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610587919061484f565b9050600082156130355761302e8888858561391b565b9050613039565b5060005b6130448a8a8361295b565b9199909850909650945050505050565b60008082613067575060009050806130be565b6000806130748787612529565b50909250905061309261308d838763ffffffff61396a16565b61377d565b93506130b96000196130ad61308d848963ffffffff61398816565b9063ffffffff611b5416565b925050505b935093915050565b604080516020810190915260008152610784906001600160a01b0385169084903090859063ffffffff6139e716565b600080600080600061310686612acf565b905061311061432c565b604051632e3071cd60e11b81526001600160a01b03891690635c60e39a9061313c908590600401614aff565b60c06040518083038186803b15801561315457600080fd5b505afa158015613168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318c9190614867565b60808101519091506001600160801b0316420380158015906131ba575060408201516001600160801b031615155b80156131d2575060608801516001600160a01b031615155b1561334e576060880151604051638c00bf6b60e01b81526000916001600160a01b031690638c00bf6b9061320c908c908790600401615324565b60206040518083038186803b15801561322457600080fd5b505afa158015613238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325c919061484f565b9050600061328d613273838563ffffffff613fa016565b60408601516001600160801b03169063ffffffff61401216565b905061329881614027565b604085018051919091016001600160801b031690526132b681614027565b84516001600160801b0391018116855260a0850151161561334b5760006132f38560a001516001600160801b03168361401290919063ffffffff16565b905060006133288287600001516001600160801b03160387602001516001600160801b0316846140509092919063ffffffff16565b905061333381614027565b602087018051919091016001600160801b0316905250505b50505b508051602082015160408301516060909301516001600160801b039283169b9183169a509282169850911695509350505050565b600061203761339884600163ffffffff61408716565b6133ab84620f424063ffffffff61408716565b86919063ffffffff6140ac16565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790612d5b9030906004016149ac565b805160209091012090565b60008054819061340b906001600160a01b03166140d6565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401613438929190614ab4565b60206040518083038186803b15801561345057600080fd5b505afa158015613464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134889190614428565b90506001600160a01b038116611a7b5760405162461bcd60e51b815260040161045b90614db3565b60006134bb82612acf565b90506134c561432c565b604051632e3071cd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c60e39a90613511908590600401614aff565b60c06040518083038186803b15801561352957600080fd5b505afa15801561353d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135619190614867565b905080608001516001600160801b0316600014156135915760405162461bcd60e51b815260040161045b90614bc7565b50919050565b80516001600160a01b03908116600090815260036020526040902060010154166135d35760405162461bcd60e51b815260040161045b90614e0d565b80516001600160a01b039081166000908152600360205260409020541661360c5760405162461bcd60e51b815260040161045b90614e3d565b8060c001516001600160a01b03168160a001516001600160a01b031614156136465760405162461bcd60e51b815260040161045b906152ad565b6000816060015111611a255760405162461bcd60e51b815260040161045b90614d8c565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161369991906149ac565b60206040518083038186803b1580156136b157600080fd5b505afa1580156136c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e9919061484f565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b815260040161372091906149ac565b60006040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613774919081019061449c565b51119392505050565b6000600160ff1b8210611a4a5760405162461bcd60e51b815260040161045b90615116565b600081836137c35760405162461bcd60e51b815260040161045b9190614bb4565b5060008385816137cf57fe5b0495945050505050565b80156111d3576040516370a0823160e01b81526000906001600160a01b038516906370a082319061380e9088906004016149ac565b60206040518083038186803b15801561382657600080fd5b505afa15801561383a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385e919061484f565b905061386c85858585614155565b6040516370a0823160e01b81526000906001600160a01b038616906370a082319061389b9089906004016149ac565b60206040518083038186803b1580156138b357600080fd5b505afa1580156138c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138eb919061484f565b90506138fd828463ffffffff61203f16565b811461059c5760405162461bcd60e51b815260040161045b906150a8565b60008061393e613931848863ffffffff611a4e16565b869063ffffffff61203f16565b905061396086613954868463ffffffff61203f16565b9063ffffffff61396a16565b9695505050505050565b6000611a7882611a6c85670de0b6b3a764000063ffffffff612ad616565b6000816139a75760405162461bcd60e51b815260040161045b906152fa565b600083116139b6576000611a78565b611a7860016139db84611a6c83611fdc89670de0b6b3a764000063ffffffff612ad616565b9063ffffffff61408716565b8115613cdc5760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990613a199087906004016149ac565b60206040518083038186803b158015613a3157600080fd5b505afa158015613a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a699190614563565b613b30576040516304e3532760e41b81526001600160a01b03861690634e35327090613a999087906004016149ac565b600060405180830381600087803b158015613ab357600080fd5b505af1158015613ac7573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee5599150613af990879087906004016149c0565b600060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b50505050613c13565b604051637d96659360e01b81526001600160a01b03861690637d96659390613b5e90879087906004016149c0565b60206040518083038186803b158015613b7657600080fd5b505afa158015613b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bae9190614563565b613c135760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee55990613be090879087906004016149c0565b600060405180830381600087803b158015613bfa57600080fd5b505af1158015613c0e573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc190613c4390879087908790600401614a90565b600060405180830381600087803b158015613c5d57600080fd5b505af1158015613c71573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe19150613ca590879087908690600401614a5b565b600060405180830381600087803b158015613cbf57600080fd5b505af1158015613cd3573d6000803e3d6000fd5b50505050613f99565b805115613cfb5760405162461bcd60e51b815260040161045b906150df565b6040516308bafae960e21b81526001600160a01b038616906322ebeba490613d2990879087906004016149c0565b60206040518083038186803b158015613d4157600080fd5b505afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d79919061484f565b15613f995760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390613dad9088906004016149ac565b60006040518083038186803b158015613dc557600080fd5b505afa158015613dd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e01919081019061449c565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90613e309088906004016149ac565b60206040518083038186803b158015613e4857600080fd5b505afa158015613e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e80919061484f565b158015613e8e575080516001145b15613f3757836001600160a01b031681600081518110613eaa57fe5b60200260200101516001600160a01b031614613ed85760405162461bcd60e51b815260040161045b90614f0c565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790613f049088906004016149ac565b600060405180830381600087803b158015613f1e57600080fd5b505af1158015613f32573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f07790613f6590889088906004016149c0565b600060405180830381600087803b158015613f7f57600080fd5b505af1158015613f93573d6000803e3d6000fd5b50505050505b5050505050565b600080613fb3848463ffffffff612ad616565b90506000613fda8280613fd5670de0b6b3a7640000600263ffffffff612ad616565b61425f565b90506000613ffc8284613fd5670de0b6b3a7640000600363ffffffff612ad616565b9050613960816139db858563ffffffff61408716565b6000611a788383670de0b6b3a764000061425f565b60006001600160801b03821115611a4a5760405162461bcd60e51b815260040161045b9061527f565b600061203761406883620f424063ffffffff61408716565b61407985600163ffffffff61408716565b86919063ffffffff61425f16565b600082820183811015611a785760405162461bcd60e51b815260040161045b90614d1e565b600061203782611a6c6140c682600163ffffffff61203f16565b6139db888863ffffffff612ad616565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690614105908490600401614aff565b60206040518083038186803b15801561411d57600080fd5b505afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190614428565b80156111d35760608282604051602401614170929190614ab4565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506060906001600160a01b03871690638f6f0332906141cf9088906000908790600401614acd565b600060405180830381600087803b1580156141e957600080fd5b505af11580156141fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614225919081019061457f565b80519091501561059c57808060200190518101906142439190614563565b61059c5760405162461bcd60e51b815260040161045b90614c2a565b600061203782611a6c868663ffffffff612ad616565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b8051611a7b81615418565b600082601f83011261437c578081fd5b813561438f61438a826153c8565b6153a1565b91508082528360208285010111156143a657600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126143cf578081fd5b81516143dd61438a826153c8565b91508082528360208285010111156143f457600080fd5b6144058160208401602086016153ec565b5092915050565b60006020828403121561441d578081fd5b8135611a7881615418565b600060208284031215614439578081fd5b8151611a7881615418565b600080600060608486031215614458578182fd5b835161446381615418565b60208501516040860151919450925067ffffffffffffffff811115614486578182fd5b614492868287016143bf565b9150509250925092565b600060208083850312156144ae578182fd5b825167ffffffffffffffff808211156144c5578384fd5b81850186601f8201126144d6578485fd5b80519250818311156144e6578485fd5b83830291506144f68483016153a1565b8381528481019082860184840187018a1015614510578788fd5b8794505b8585101561453a576145268a82614361565b835260019490940193918601918601614514565b5098975050505050505050565b600060208284031215614558578081fd5b8135611a788161542d565b600060208284031215614574578081fd5b8151611a788161542d565b600060208284031215614590578081fd5b815167ffffffffffffffff8111156145a6578182fd5b612037848285016143bf565b600080604083850312156145c4578182fd5b82356145cf81615418565b915060208301356145df8161542d565b809150509250929050565b600080604083850312156145fc578182fd5b823561460781615418565b915060208301356145df81615418565b60008082840360c081121561462a578283fd5b833561463581615418565b925060a0601f1982011215614648578182fd5b5061465360a06153a1565b602084013561466181615418565b8152604084013561467181615418565b6020820152606084013561468481615418565b6040820152608084013561469781615418565b606082015260a0939093013560808401525092909150565b600080604083850312156146c1578182fd5b82356146cc81615418565b946020939093013593505050565b600080600080608085870312156146ef578182fd5b84356146fa81615418565b935060208501359250604085013561471181615418565b915060608501356147218161542d565b939692955090935050565b60008060008060808587031215614741578182fd5b843561474c81615418565b935060208501359250604085013567ffffffffffffffff8082111561476f578384fd5b61477b8883890161436c565b93506060870135915080821115614790578283fd5b5061479d8782880161436c565b91505092959194509250565b600080600080600060a086880312156147c0578283fd5b85356147cb81615418565b94506020860135935060408601359250606086013567ffffffffffffffff808211156147f5578283fd5b61480189838a0161436c565b93506080880135915080821115614816578283fd5b506148238882890161436c565b9150509295509295909350565b600060208284031215614841578081fd5b815160038110611a78578182fd5b600060208284031215614860578081fd5b5051919050565b600060c08284031215614878578081fd5b61488260c06153a1565b825161488d8161543b565b8152602083015161489d8161543b565b602082015260408301516148b08161543b565b604082015260608301516148c38161543b565b606082015260808301516148d68161543b565b608082015260a08301516148e98161543b565b60a08201529392505050565b600060608284031215614906578081fd5b61491060606153a1565b8251815260208301516149228161543b565b602082015260408301516149358161543b565b60408201529392505050565b600081518084526149598160208601602086016153ec565b601f01601f19169290920160200192915050565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a00190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090614a4f90830184614941565b98975050505050505050565b6001600160a01b03848116825283166020820152606060408201819052600090614a8790830184614941565b95945050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152614a876060830184614941565b901515815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b038681168252851660208201526101208101614b6b604083018661496d565b60e082019390935261010001529392505050565b6001600160a01b038581168252841660208201526101008101614ba5604083018561496d565b8260e083015295945050505050565b600060208252611a786020830184614941565b60208082526012908201527113585c9ad95d081b9bdd0818dc99585d195960721b604082015260600190565b60208082526017908201527f4465627420636f6d706f6e656e74206d69736d61746368000000000000000000604082015260600190565b602080825260159082015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601a908201527f436f6d706f6e656e74206d757374206265206e65676174697665000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252600d908201526c05175616e74697479206973203609c1b604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252601190820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604082015260600190565b60208082526016908201527510dbdb1b185d195c985b081b9bdd08195b98589b195960521b604082015260600190565b602080825260129082015271109bdc9c9bddc81b9bdd08195b98589b195960721b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f436f6c6c61746572616c2062616c616e63652069732030000000000000000000604082015260600190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526012908201527110dbdb1b185d195c985b081b9bdd081cd95d60721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526014908201527313505617d55253950c4c8e17d15610d15151115160621b604082015260600190565b6020808252602d908201527f436f6c6c61746572616c20616e6420626f72726f77206173736574206d75737460408201526c08189948191a5999995c995b9d609a1b606082015260800190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b6101608101615333828561496d565b6001600160801b038084511660a08401528060208501511660c08401528060408501511660e084015280606085015116610100840152806080850151166101208401528060a085015116610140840152509392505050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156153c057600080fd5b604052919050565b600067ffffffffffffffff8211156153de578081fd5b50601f01601f191660200190565b60005b838110156154075781810151838201526020016153ef565b838111156111d35750506000910152565b6001600160a01b0381168114611a2557600080fd5b8015158114611a2557600080fd5b6001600160801b0381168114611a2557600080fdfea2646970667358221220e6473242f805740368c97ae48e597ddf564bac546affb0d5435a79111ad75ae564736f6c634300060a0033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162005b6838038062005b688339810160408190526200003491620000c6565b600080546001600160a01b0319166001600160a01b038416178155600180556200005d620000c2565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060601b6001600160601b031916608052506200011d565b3390565b60008060408385031215620000d9578182fd5b8251620000e68162000104565b6020840151909250620000f98162000104565b809150509250929050565b6001600160a01b03811681146200011a57600080fd5b50565b60805160601c6159f16200017760003980611873528061196f5280611fc7528061202c5280612129528061229252806125ca528061262f52806126a6528061270b5280612a7d5280612b165280613a1e52506159f16000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063a5841194116100de578063da35e28311610097578063ee78244f11610071578063ee78244f1461030f578063f25fcc9f14610322578063f2fde38b14610335578063f77c47911461034857610173565b8063da35e283146102c5578063e758a2b5146102e9578063e93353a3146102fc57610173565b8063a58411941461026f578063b1dd4d9214610282578063c137f4d714610297578063c153dd07146101a0578063c690a74c146102aa578063d8fbc833146102bd57610173565b80635b136512116101305780635b136512146102045780635c99030614610217578063715018a61461022a5780637bb3526514610232578063847ef08d146102525780638da5cb5b1461025a57610173565b80630fb96b211461017857806311976c041461018d5780633fe6106b146101a057806348a2f01b146101b35780635199e418146101de57806356b27e1a146101f1575b600080fd5b61018b610186366004614c14565b610350565b005b61018b61019b366004614ce3565b6105d2565b61018b6101ae366004614be9565b6108c6565b6101c66101c1366004614946565b6108de565b6040516101d5939291906158f6565b60405180910390f35b61018b6101ec366004614a81565b61097c565b61018b6101ff366004614ce3565b6109ee565b61018b610212366004614b24565b610bab565b61018b610225366004614b51565b610cb0565b61018b610f2b565b610245610240366004614c66565b610faa565b6040516101d59190615033565b61018b611313565b61026261146f565b6040516101d59190614ee0565b61018b61027d366004614946565b61147e565b61028a6114c1565b6040516101d59190615028565b61018b6102a5366004614c14565b6114ca565b61018b6102b8366004614aec565b611729565b610262611871565b6102d86102d3366004614946565b611895565b6040516101d5959493929190614f0e565b61018b6102f7366004614946565b6118d7565b61018b61030a366004614946565b611b71565b61028a61031d366004614946565b611ca5565b610245610330366004614946565b611cba565b61018b610343366004614946565b611d4d565b610262611e04565b8361035a81611e13565b610362614798565b506001600160a01b03808616600090815260036020818152604092839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093529082015490921660608301526004015460808201528280156103e15750836001600160a01b031681602001516001600160a01b0316145b156104bd576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906104179088903090600401614ef4565b60206040518083038186803b15801561042f57600080fd5b505afa158015610443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104679190614d89565b9050600081136104925760405162461bcd60e51b81526004016104899061518d565b60405180910390fd5b60006104ad876104a184611f58565b9063ffffffff611f7e16565b90506104ba888483611fb1565b50505b826105ca57836001600160a01b031681600001516001600160a01b0316146104f75760405162461bcd60e51b815260040161048990615127565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906105289088903090600401614ef4565b60206040518083038186803b15801561054057600080fd5b505afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190614d89565b90506000811261059a5760405162461bcd60e51b81526004016104899061518d565b60006105ba876104a16105b58560001963ffffffff61208416565b611f58565b90506105c78884836120ef565b50505b505050505050565b600260015414156105f55760405162461bcd60e51b8152600401610489906157b3565b60026001558461060481612155565b61060c614798565b506001600160a01b03808716600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906106855760405162461bcd60e51b815260040161048990615787565b61068d6147c6565b6106a588836020015184600001518a8a8a60006121a0565b905060008160a001516001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016106d99190614ee0565b60206040518083038186803b1580156106f157600080fd5b505afa158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190614d89565b905061073e8260000151848460600151612258565b60006107548385602001518660000151896122be565b905060006107678b86600001518461254c565b9050600061077b838363ffffffff61256f16565b905061078e8560000151878360006125b1565b6107a68c86604001518760e001518960000151612766565b60a085015185516040516370a0823160e01b81526000926001600160a01b0316916370a08231916107da9190600401614ee0565b60206040518083038186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a9190614d89565b9050801561083d5761083d8d8883611fb1565b855161084890612810565b86600001516001600160a01b031687602001516001600160a01b03168e6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd489602001518a6060015187896040516108ab9493929190615053565b60405180910390a45050600180555050505050505050505050565b816108d081611e13565b6108d98361147e565b505050565b60008060006108eb614798565b506001600160a01b03808516600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906109645760405162461bcd60e51b815260040161048990615787565b61096e8582612a4d565b935093509350509193909250565b610984612b96565b6002546001600160a01b039081169116146109b15760405162461bcd60e51b815260040161048990615569565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b60026001541415610a115760405162461bcd60e51b8152600401610489906157b3565b600260015584610a2081612155565b610a28614798565b506001600160a01b03808716600090815260036020818152604092839020835160a08101855281548616815260018201548616928101839052600282015486169481019490945291820154909316606083015260040154608082015290610aa15760405162461bcd60e51b815260040161048990615787565b610aa96147c6565b610ac188836000015184602001518a8a8a60016121a0565b9050610ad681600001518383606001516120ef565b6000610aec8284600001518560200151886122be565b90506000610aff8a85602001518461254c565b90506000610b13838363ffffffff61256f16565b9050610b2484600001518683611fb1565b8351610b2f90612810565b84602001516001600160a01b031685600001516001600160a01b03168c6001600160a01b03167f359f8b62a966cfd521a3815681266407201b20a7c334925faa49e7d9d5dd57ab876020015188606001518688604051610b929493929190615053565b60405180910390a4505060018055505050505050505050565b81610bb581612155565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c90610be1908590600401614ee0565b60206040518083038186803b158015610bf957600080fd5b505afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190614a9d565b610c4d5760405162461bcd60e51b815260040161048990615440565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610c79908690600401614ee0565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b50505050505050565b8133610cbc8282612b9a565b83610cc681612bc4565b60055460ff16610d08576001600160a01b03851660009081526004602052604090205460ff16610d085760405162461bcd60e51b81526004016104899061559e565b846001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d4357600080fd5b505af1158015610d57573d6000803e3d6000fd5b50505050846001600160a01b031663d7f1b27c610da06040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b815250612c85565b6040518263ffffffff1660e01b8152600401610dbc9190614ee0565b60206040518083038186803b158015610dd457600080fd5b505afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190614a9d565b610e285760405162461bcd60e51b815260040161048990615440565b6060856001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e9f91908101906149d6565b905060005b8151811015610f2057818181518110610eb957fe5b60200260200101516001600160a01b031663d9b1b6e0886040518263ffffffff1660e01b8152600401610eec9190614ee0565b600060405180830381600087803b158015610f0657600080fd5b505af1925050508015610f17575060015b50600101610ea4565b506105ca8686612c9c565b610f33612b96565b6002546001600160a01b03908116911614610f605760405162461bcd60e51b815260040161048990615569565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b600060026001541415610fcf5760405162461bcd60e51b8152600401610489906157b3565b600260015584610fde81612155565b610fe6614798565b506001600160a01b03808716600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061105f5760405162461bcd60e51b815260040161048990615787565b6000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561109a57600080fd5b505afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d29190614d89565b905060006110e6888363ffffffff611f7e16565b90506000806110f58b86612a4d565b92509250506111026147c6565b61111b8c8760200151886000015187878f60008c612d6c565b905060008160a001516001600160a01b03166370a082318e6040518263ffffffff1660e01b815260040161114f9190614ee0565b60206040518083038186803b15801561116757600080fd5b505afa15801561117b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119f9190614d89565b90506111b48260000151888460600151612258565b6111c882886020015189600001518d6122be565b5081516111d7908886866125b1565b6111ef8d83604001518460e001518a60000151612766565b60a082015182516040516370a0823160e01b81526000926001600160a01b0316916370a08231916112239190600401614ee0565b60206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190614d89565b90508015611286576112868e8983611fb1565b825161129190612810565b87600001516001600160a01b031688602001516001600160a01b03168f6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd4866020015187606001518a60006040516112f59493929190615053565b60405180910390a450506001805550909a9950505050505050505050565b3361131d8161217b565b336113278161147e565b6001600160a01b038116600081815260036020819052604080832080546001600160a01b03199081168255600182018054821690556002820180548216905592810180549093169092556004918201839055805163b2494df360e01b815290516060949363b2494df39383810193919291829003018186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e891908101906149d6565b905060005b81518110156114695781818151811061140257fe5b60200260200101516001600160a01b031663e0799620846040518263ffffffff1660e01b81526004016114359190614ee0565b600060405180830381600087803b15801561144f57600080fd5b505af1925050508015611460575060015b506001016113ed565b50505050565b6002546001600160a01b031690565b600260015414156114a15760405162461bcd60e51b8152600401610489906157b3565b6002600155806114b08161217b565b6114b982612810565b505060018055565b60055460ff1681565b836114d481611e13565b6114dc614798565b506001600160a01b03808616600090815260036020818152604092839020835160a0810185528154861681526001820154861692810192909252600281015485169382019390935290820154909216606083015260040154608082015282801561155b5750836001600160a01b031681602001516001600160a01b0316145b15611622576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906115919088903090600401614ef4565b60206040518083038186803b1580156115a957600080fd5b505afa1580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e19190614d89565b9050600081136116035760405162461bcd60e51b81526004016104899061518d565b6000611612876104a184611f58565b905061161f888483612258565b50505b826105ca57836001600160a01b031681600001516001600160a01b03161461165c5760405162461bcd60e51b815260040161048990615127565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba49061168d9088903090600401614ef4565b60206040518083038186803b1580156116a557600080fd5b505afa1580156116b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116dd9190614d89565b9050600081126116ff5760405162461bcd60e51b81526004016104899061518d565b600061171a876104a16105b58560001963ffffffff61208416565b90506105c788848360006125b1565b611731612b96565b6002546001600160a01b0390811691161461175e5760405162461bcd60e51b815260040161048990615569565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061178e908590600401614ee0565b60206040518083038186803b1580156117a657600080fd5b505afa1580156117ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117de9190614a9d565b8061180157506001600160a01b03821660009081526004602052604090205460ff165b61181d5760405162461bcd60e51b81526004016104899061553f565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003602081905260009182526040909120805460018201546002830154938301546004909301546001600160a01b039283169491831693918316929091169085565b806118e181612155565b6118e9614798565b506001600160a01b038083166000908152600360208181526040808420815160a0810183528154871681526001820154871693810193909352600281015486169183019190915291820154909316606084015260040154608083015261194e82612e7f565b905061195861482f565b6040516349e2903160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906393c52062906119a6908590899060040161503c565b60606040518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f69190614e29565b905080602001516001600160801b0316600014611a255760405162461bcd60e51b8152600401610489906152e7565b611a3d858483604001516001600160801b0316612258565b611a4685612810565b60208301516040516370a0823160e01b81526000916001600160a01b0316906370a0823190611a79908990600401614ee0565b60206040518083038186803b158015611a9157600080fd5b505afa158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190614d89565b90506000611b4e876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0957600080fd5b505afa158015611b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b419190614d89565b839063ffffffff612e8616565b6020860151909150610ca7906001600160a01b038916908363ffffffff612ea416565b80611b7b81612155565b611b83614798565b506001600160a01b038083166000908152600360208181526040808420815160a0810183528154871681526001820154871693810184905260028201548716818401529381015490951660608401526004948501546080840152516370a0823160e01b8152919390916370a0823191611bfe91889101614ee0565b60206040518083038186803b158015611c1657600080fd5b505afa158015611c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4e9190614d89565b905060008111611c705760405162461bcd60e51b815260040161048990615508565b611c7b848383611fb1565b6020820151611c9c906001600160a01b03861690600063ffffffff612ea416565b6114698461147e565b60046020526000908152604090205460ff1681565b6000611cc4614798565b506001600160a01b03808316600090815260036020818152604092839020835160a08101855281548616815260018201548616928101839052600282015486169481019490945291820154909316606083015260040154608082015290611d3d5760405162461bcd60e51b815260040161048990615787565b611d4681612e7f565b9392505050565b611d55612b96565b6002546001600160a01b03908116911614611d825760405162461bcd60e51b815260040161048990615569565b6001600160a01b038116611da85760405162461bcd60e51b81526004016104899061520c565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290611e41903390600401614ee0565b60206040518083038186803b158015611e5957600080fd5b505afa158015611e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e919190614d6a565b6002811115611e9c57fe5b14611eb95760405162461bcd60e51b815260040161048990615409565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611ee9903390600401614ee0565b60206040518083038186803b158015611f0157600080fd5b505afa158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f399190614a9d565b611f555760405162461bcd60e51b8152600401610489906156c9565b50565b600080821215611f7a5760405162461bcd60e51b8152600401610489906153d4565b5090565b6000611fa8670de0b6b3a7640000611f9c858563ffffffff61301816565b9063ffffffff61305216565b90505b92915050565b6020820151611ff2906001600160a01b038516907f00000000000000000000000000000000000000000000000000000000000000008463ffffffff61309416565b6040516310adc72560e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__906342b71c9490612058906001600160a01b038716907f000000000000000000000000000000000000000000000000000000000000000090879087906004016150b3565b60006040518083038186803b15801561207057600080fd5b505af4158015610ca7573d6000803e3d6000fd5b60008261209357506000611fab565b826000191480156120a75750600160ff1b82145b156120c45760405162461bcd60e51b8152600401610489906155cc565b828202828482816120d157fe5b0514611fa85760405162461bcd60e51b8152600401610489906155cc565b60405163169bcf0960e11b815273__$68b4132a7897cba73622ed001dedc8ba85$__90632d379e1290612058906001600160a01b038716907f000000000000000000000000000000000000000000000000000000000000000090879087906004016150b3565b61215f813361315b565b61217b5760405162461bcd60e51b815260040161048990615750565b612184816131e9565b611f555760405162461bcd60e51b8152600401610489906151c4565b6121a86147c6565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121e357600080fd5b505afa1580156121f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221b9190614d89565b905061224b8989896122338a8663ffffffff611f7e16565b6122438a8763ffffffff611f7e16565b898988612d6c565b9998505050505050505050565b604051631007f97160e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063401fe5c490612058906001600160a01b038716907f000000000000000000000000000000000000000000000000000000000000000090879087906004016150b3565b600080856000015190506000866060015190506123628688602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b15801561231257600080fd5b505afa158015612326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234a9190614962565b6001600160a01b03851691908463ffffffff61309416565b600080606089602001516001600160a01b031663e171fcab8a8a88888f608001518d6040518763ffffffff1660e01b81526004016123a596959493929190614f41565b60006040518083038186803b1580156123bd57600080fd5b505afa1580156123d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123f9919081019061497e565b925092509250846001600160a01b0316638f6f03328484846040518463ffffffff1660e01b815260040161242f93929190615001565b600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124859190810190614ab9565b5060006125188b60e001518a6001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016124bc9190614ee0565b60206040518083038186803b1580156124d457600080fd5b505afa1580156124e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250c9190614d89565b9063ffffffff61256f16565b90508a6080015181101561253e5760405162461bcd60e51b81526004016104899061534d565b9a9950505050505050505050565b60008061255a6000846132ed565b9050612567858583613382565b949350505050565b6000611fa883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613429565b80156126935782516125f5906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61309416565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061265e906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088906000908890600401615079565b60006040518083038186803b15801561267657600080fd5b505af415801561268a573d6000803e3d6000fd5b50505050611469565b82516126d1906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61309416565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061273a906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088908890600090600401615079565b60006040518083038186803b15801561275257600080fd5b505af41580156105c7573d6000803e3d6000fd5b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190612795908890600401614ee0565b60206040518083038186803b1580156127ad57600080fd5b505afa1580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190614d89565b9050828114612809576105c76001600160a01b03861683868663ffffffff61345516565b5050505050565b612818614798565b506001600160a01b03808216600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906128915760405162461bcd60e51b815260040161048990615787565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129049190614d89565b9050600080612914858585613596565b915091506000856001600160a01b03166322ebeba48660200151306040518363ffffffff1660e01b815260040161294c929190614ef4565b60206040518083038186803b15801561296457600080fd5b505afa158015612978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299c9190614d89565b90508281146129b4576129b486866020015185613608565b84516040516308bafae960e21b81526000916001600160a01b038916916322ebeba4916129e5913090600401614ef4565b60206040518083038186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a359190614d89565b9050808314610ca757610ca787876000015185613608565b600080600080612a5c85612e7f565b9050612a6661482f565b6040516349e2903160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906393c5206290612ab49085908b9060040161503c565b60606040518083038186803b158015612acc57600080fd5b505afa158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190614e29565b9050600080612b426001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168963ffffffff61363716565b60208701519195509350612b6992506001600160801b03169050838363ffffffff6138c416565b955082604001516001600160801b0316965082602001516001600160801b03169450505050509250925092565b3390565b612ba4828261315b565b612bc05760405162461bcd60e51b815260040161048990615750565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90612bf4908490600401614ee0565b60206040518083038186803b158015612c0c57600080fd5b505afa158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190614a9d565b612c605760405162461bcd60e51b81526004016104899061570d565b612c69816138fb565b611f555760405162461bcd60e51b815260040161048990615289565b600080612c918361392a565b9050611d4681613935565b6000612ca7826139f2565b6001600160a01b03848116600081815260036020818152604092839020885181546001600160a01b0319908116918816919091178255918901516001820180548416918816919091179055888401516002820180548416918816919091179055606089015192810180549092169290951691909117905560808601516004909301929092559051919250907ffc8bae3ed1ee6eb61577be9bbfed36601a07b31902c2e2ff54e924d8ecb3f6c990612d5f908490615033565b60405180910390a2505050565b612d746147c6565b612d7c6147c6565b6040518061010001604052808b6001600160a01b03168152602001612da087612c85565b6001600160a01b0316815260200184815260200188815260200187815260200185612dcb578a612dcd565b895b6001600160a01b0316815260200185612de65789612de8565b8a5b6001600160a01b03168152602001896001600160a01b03166370a082318d6040518263ffffffff1660e01b8152600401612e229190614ee0565b60206040518083038186803b158015612e3a57600080fd5b505afa158015612e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e729190614d89565b9052905061224b81613ad9565b60a0902090565b6000611fa882611f9c85670de0b6b3a764000063ffffffff61301816565b6000612eb08484613bac565b905080158015612ec05750600082115b15612f3757612ecf8484613c33565b612f32576040516304e3532760e41b81526001600160a01b03851690634e35327090612eff908690600401614ee0565b600060405180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050505b612fb4565b808015612f42575081155b15612fb457612f518484613c33565b612fb457604051636f86c89760e01b81526001600160a01b03851690636f86c89790612f81908690600401614ee0565b600060405180830381600087803b158015612f9b57600080fd5b505af1158015612faf573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784612fcd85613cbf565b6040518363ffffffff1660e01b8152600401612fea929190614fe8565b600060405180830381600087803b15801561300457600080fd5b505af11580156105c7573d6000803e3d6000fd5b60008261302757506000611fab565b8282028284828161303457fe5b0414611fa85760405162461bcd60e51b8152600401610489906154c7565b6000611fa883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ce4565b606082826040516024016130a9929190614fe8565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906131059087906000908690600401615001565b600060405180830381600087803b15801561311f57600080fd5b505af1158015613133573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105ca9190810190614ab9565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156131a057600080fd5b505afa1580156131b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d89190614962565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061321a908590600401614ee0565b60206040518083038186803b15801561323257600080fd5b505afa158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a9190614a9d565b8015611fab57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c9061329d903090600401614ee0565b60206040518083038186803b1580156132b557600080fd5b505afa1580156132c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190614a9d565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f906133209030908890600401614fe8565b60206040518083038186803b15801561333857600080fd5b505afa15801561334c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133709190614d89565b9050612567838263ffffffff611f7e16565b80156108d9576108d9826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b1580156133d957600080fd5b505afa1580156133ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134119190614962565b6001600160a01b03861691908463ffffffff613d1b16565b6000818484111561344d5760405162461bcd60e51b815260040161048991906150e8565b505050900390565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016134879190614ee0565b60206040518083038186803b15801561349f57600080fd5b505afa1580156134b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d79190614d89565b9050600061355a896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b815260040161350a9190614ee0565b60206040518083038186803b15801561352257600080fd5b505afa158015613536573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b59190614d89565b9050600082156135775761357088888585613e5d565b905061357b565b5060005b6135868a8a83612ea4565b9199909850909650945050505050565b600080826135a957506000905080613600565b6000806135b68787612a4d565b5090925090506135d46135cf838763ffffffff612e8616565b613cbf565b93506135fb6000196135ef6135cf848963ffffffff613eac16565b9063ffffffff61208416565b925050505b935093915050565b6040805160208101909152600081526108d9906001600160a01b0385169084903090859063ffffffff613f0b16565b600080600080600061364886612e7f565b905061365261484f565b604051632e3071cd60e11b81526001600160a01b03891690635c60e39a9061367e908590600401615033565b60c06040518083038186803b15801561369657600080fd5b505afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce9190614da1565b60808101519091506001600160801b0316420380158015906136fc575060408201516001600160801b031615155b8015613714575060608801516001600160a01b031615155b15613890576060880151604051638c00bf6b60e01b81526000916001600160a01b031690638c00bf6b9061374e908c90879060040161588f565b60206040518083038186803b15801561376657600080fd5b505afa15801561377a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379e9190614d89565b905060006137cf6137b5838563ffffffff6144c316565b60408601516001600160801b03169063ffffffff61453516565b90506137da8161454a565b604085018051919091016001600160801b031690526137f88161454a565b84516001600160801b0391018116855260a0850151161561388d5760006138358560a001516001600160801b03168361453590919063ffffffff16565b9050600061386a8287600001516001600160801b03160387602001516001600160801b0316846145739092919063ffffffff16565b90506138758161454a565b602087018051919091016001600160801b0316905250505b50505b508051602082015160408301516060909301516001600160801b039283169b9183169a509282169850911695509350505050565b60006125676138da84600163ffffffff6145aa16565b6138ed84620f424063ffffffff6145aa16565b86919063ffffffff6145cf16565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f79061329d903090600401614ee0565b805160209091012090565b60008054819061394d906001600160a01b03166145f9565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b815260040161397a929190614fe8565b60206040518083038186803b15801561399257600080fd5b505afa1580156139a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ca9190614962565b90506001600160a01b038116611fab5760405162461bcd60e51b81526004016104899061531e565b60006139fd82612e7f565b9050613a0761484f565b604051632e3071cd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c60e39a90613a53908590600401615033565b60c06040518083038186803b158015613a6b57600080fd5b505afa158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190614da1565b905080608001516001600160801b031660001415613ad35760405162461bcd60e51b8152600401610489906150fb565b50919050565b80516001600160a01b0390811660009081526003602052604090206001015416613b155760405162461bcd60e51b815260040161048990615378565b80516001600160a01b0390811660009081526003602052604090205416613b4e5760405162461bcd60e51b8152600401610489906153a8565b8060c001516001600160a01b03168160a001516001600160a01b03161415613b885760405162461bcd60e51b815260040161048990615818565b6000816060015111611f555760405162461bcd60e51b8152600401610489906152c0565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b8152600401613bdb9190614ee0565b60206040518083038186803b158015613bf357600080fd5b505afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b9190614d89565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b8152600401613c629190614ee0565b60006040518083038186803b158015613c7a57600080fd5b505afa158015613c8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cb691908101906149d6565b51119392505050565b6000600160ff1b8210611f7a5760405162461bcd60e51b815260040161048990615681565b60008183613d055760405162461bcd60e51b815260040161048991906150e8565b506000838581613d1157fe5b0495945050505050565b8015611469576040516370a0823160e01b81526000906001600160a01b038516906370a0823190613d50908890600401614ee0565b60206040518083038186803b158015613d6857600080fd5b505afa158015613d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da09190614d89565b9050613dae85858585614678565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190613ddd908990600401614ee0565b60206040518083038186803b158015613df557600080fd5b505afa158015613e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2d9190614d89565b9050613e3f828463ffffffff61256f16565b81146105ca5760405162461bcd60e51b815260040161048990615613565b600080613e80613e73848863ffffffff611f7e16565b869063ffffffff61256f16565b9050613ea286613e96868463ffffffff61256f16565b9063ffffffff612e8616565b9695505050505050565b600081613ecb5760405162461bcd60e51b815260040161048990615865565b60008311613eda576000611fa8565b611fa86001613eff84611f9c8361250c89670de0b6b3a764000063ffffffff61301816565b9063ffffffff6145aa16565b81156142005760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990613f3d908790600401614ee0565b60206040518083038186803b158015613f5557600080fd5b505afa158015613f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8d9190614a9d565b614054576040516304e3532760e41b81526001600160a01b03861690634e35327090613fbd908790600401614ee0565b600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee559915061401d9087908790600401614ef4565b600060405180830381600087803b15801561403757600080fd5b505af115801561404b573d6000803e3d6000fd5b50505050614137565b604051637d96659360e01b81526001600160a01b03861690637d966593906140829087908790600401614ef4565b60206040518083038186803b15801561409a57600080fd5b505afa1580156140ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140d29190614a9d565b6141375760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee559906141049087908790600401614ef4565b600060405180830381600087803b15801561411e57600080fd5b505af1158015614132573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc19061416790879087908790600401614fc4565b600060405180830381600087803b15801561418157600080fd5b505af1158015614195573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe191506141c990879087908690600401614f8f565b600060405180830381600087803b1580156141e357600080fd5b505af11580156141f7573d6000803e3d6000fd5b50505050612809565b80511561421f5760405162461bcd60e51b81526004016104899061564a565b6040516308bafae960e21b81526001600160a01b038616906322ebeba49061424d9087908790600401614ef4565b60206040518083038186803b15801561426557600080fd5b505afa158015614279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429d9190614d89565b156128095760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad03906142d1908890600401614ee0565b60006040518083038186803b1580156142e957600080fd5b505afa1580156142fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261432591908101906149d6565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90614354908890600401614ee0565b60206040518083038186803b15801561436c57600080fd5b505afa158015614380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a49190614d89565b1580156143b2575080516001145b1561445b57836001600160a01b0316816000815181106143ce57fe5b60200260200101516001600160a01b0316146143fc5760405162461bcd60e51b815260040161048990615477565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790614428908890600401614ee0565b600060405180830381600087803b15801561444257600080fd5b505af1158015614456573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f077906144899088908890600401614ef4565b600060405180830381600087803b1580156144a357600080fd5b505af11580156144b7573d6000803e3d6000fd5b50505050505050505050565b6000806144d6848463ffffffff61301816565b905060006144fd82806144f8670de0b6b3a7640000600263ffffffff61301816565b614782565b9050600061451f82846144f8670de0b6b3a7640000600363ffffffff61301816565b9050613ea281613eff858563ffffffff6145aa16565b6000611fa88383670de0b6b3a7640000614782565b60006001600160801b03821115611f7a5760405162461bcd60e51b8152600401610489906157ea565b600061256761458b83620f424063ffffffff6145aa16565b61459c85600163ffffffff6145aa16565b86919063ffffffff61478216565b600082820183811015611fa85760405162461bcd60e51b815260040161048990615252565b600061256782611f9c6145e982600163ffffffff61256f16565b613eff888863ffffffff61301816565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690614628908490600401615033565b60206040518083038186803b15801561464057600080fd5b505afa158015614654573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190614962565b80156114695760608282604051602401614693929190614fe8565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506060906001600160a01b03871690638f6f0332906146f29088906000908790600401615001565b600060405180830381600087803b15801561470c57600080fd5b505af1158015614720573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147489190810190614ab9565b8051909150156105ca57808060200190518101906147669190614a9d565b6105ca5760405162461bcd60e51b81526004016104899061515e565b600061256782611f9c868663ffffffff61301816565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b8051611fab81615983565b600082601f83011261489f578081fd5b81356148b26148ad82615933565b61590c565b91508082528360208285010111156148c957600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126148f2578081fd5b81516149006148ad82615933565b915080825283602082850101111561491757600080fd5b614928816020840160208601615957565b5092915050565b80516001600160801b0381168114611fab57600080fd5b600060208284031215614957578081fd5b8135611fa881615983565b600060208284031215614973578081fd5b8151611fa881615983565b600080600060608486031215614992578182fd5b835161499d81615983565b60208501516040860151919450925067ffffffffffffffff8111156149c0578182fd5b6149cc868287016148e2565b9150509250925092565b600060208083850312156149e8578182fd5b825167ffffffffffffffff808211156149ff578384fd5b81850186601f820112614a10578485fd5b8051925081831115614a20578485fd5b8383029150614a3084830161590c565b8381528481019082860184840187018a1015614a4a578788fd5b8794505b85851015614a7457614a608a82614884565b835260019490940193918601918601614a4e565b5098975050505050505050565b600060208284031215614a92578081fd5b8135611fa881615998565b600060208284031215614aae578081fd5b8151611fa881615998565b600060208284031215614aca578081fd5b815167ffffffffffffffff811115614ae0578182fd5b612567848285016148e2565b60008060408385031215614afe578182fd5b8235614b0981615983565b91506020830135614b1981615998565b809150509250929050565b60008060408385031215614b36578182fd5b8235614b4181615983565b91506020830135614b1981615983565b60008082840360c0811215614b64578283fd5b8335614b6f81615983565b925060a0601f1982011215614b82578182fd5b50614b8d60a061590c565b6020840135614b9b81615983565b81526040840135614bab81615983565b60208201526060840135614bbe81615983565b60408201526080840135614bd181615983565b606082015260a0939093013560808401525092909150565b60008060408385031215614bfb578182fd5b8235614c0681615983565b946020939093013593505050565b60008060008060808587031215614c29578182fd5b8435614c3481615983565b9350602085013592506040850135614c4b81615983565b91506060850135614c5b81615998565b939692955090935050565b60008060008060808587031215614c7b578182fd5b8435614c8681615983565b935060208501359250604085013567ffffffffffffffff80821115614ca9578384fd5b614cb58883890161488f565b93506060870135915080821115614cca578283fd5b50614cd78782880161488f565b91505092959194509250565b600080600080600060a08688031215614cfa578283fd5b8535614d0581615983565b94506020860135935060408601359250606086013567ffffffffffffffff80821115614d2f578283fd5b614d3b89838a0161488f565b93506080880135915080821115614d50578283fd5b50614d5d8882890161488f565b9150509295509295909350565b600060208284031215614d7b578081fd5b815160038110611fa8578182fd5b600060208284031215614d9a578081fd5b5051919050565b600060c08284031215614db2578081fd5b614dbc60c061590c565b614dc6848461492f565b8152614dd5846020850161492f565b6020820152614de7846040850161492f565b6040820152614df9846060850161492f565b6060820152614e0b846080850161492f565b6080820152614e1d8460a0850161492f565b60a08201529392505050565b600060608284031215614e3a578081fd5b614e44606061590c565b825181526020830151614e56816159a6565b60208201526040830151614e69816159a6565b60408201529392505050565b60008151808452614e8d816020860160208601615957565b601f01601f19169290920160200192915050565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a00190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090614f8390830184614e75565b98975050505050505050565b6001600160a01b03848116825283166020820152606060408201819052600090614fbb90830184614e75565b95945050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152614fbb6060830184614e75565b901515815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b03868116825285166020820152610120810161509f6040830186614ea1565b60e082019390935261010001529392505050565b6001600160a01b0385811682528416602082015261010081016150d96040830185614ea1565b8260e083015295945050505050565b600060208252611fa86020830184614e75565b60208082526012908201527113585c9ad95d081b9bdd0818dc99585d195960721b604082015260600190565b60208082526017908201527f4465627420636f6d706f6e656e74206d69736d61746368000000000000000000604082015260600190565b602080825260159082015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601a908201527f436f6d706f6e656e74206d757374206265206e65676174697665000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252600d908201526c05175616e74697479206973203609c1b604082015260600190565b60208082526018908201527f426f72726f772062616c616e6365206d75737420626520300000000000000000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252601190820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604082015260600190565b60208082526016908201527510dbdb1b185d195c985b081b9bdd08195b98589b195960521b604082015260600190565b602080825260129082015271109bdc9c9bddc81b9bdd08195b98589b195960721b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f436f6c6c61746572616c2062616c616e63652069732030000000000000000000604082015260600190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526012908201527110dbdb1b185d195c985b081b9bdd081cd95d60721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526014908201527313505617d55253950c4c8e17d15610d15151115160621b604082015260600190565b6020808252602d908201527f436f6c6c61746572616c20616e6420626f72726f77206173736574206d75737460408201526c08189948191a5999995c995b9d609a1b606082015260800190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b610160810161589e8285614ea1565b6001600160801b038084511660a08401528060208501511660c08401528060408501511660e084015280606085015116610100840152806080850151166101208401528060a085015116610140840152509392505050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561592b57600080fd5b604052919050565b600067ffffffffffffffff821115615949578081fd5b50601f01601f191660200190565b60005b8381101561597257818101518382015260200161595a565b838111156114695750506000910152565b6001600160a01b0381168114611f5557600080fd5b8015158114611f5557600080fd5b6001600160801b0381168114611f5557600080fdfea2646970667358221220b10a0830284b513e8628263914e5634ef3c99b62e618bb35073227c9f752528364736f6c634300060a0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063a5841194116100de578063da35e28311610097578063ee78244f11610071578063ee78244f1461030f578063f25fcc9f14610322578063f2fde38b14610335578063f77c47911461034857610173565b8063da35e283146102c5578063e758a2b5146102e9578063e93353a3146102fc57610173565b8063a58411941461026f578063b1dd4d9214610282578063c137f4d714610297578063c153dd07146101a0578063c690a74c146102aa578063d8fbc833146102bd57610173565b80635b136512116101305780635b136512146102045780635c99030614610217578063715018a61461022a5780637bb3526514610232578063847ef08d146102525780638da5cb5b1461025a57610173565b80630fb96b211461017857806311976c041461018d5780633fe6106b146101a057806348a2f01b146101b35780635199e418146101de57806356b27e1a146101f1575b600080fd5b61018b610186366004614c14565b610350565b005b61018b61019b366004614ce3565b6105d2565b61018b6101ae366004614be9565b6108c6565b6101c66101c1366004614946565b6108de565b6040516101d5939291906158f6565b60405180910390f35b61018b6101ec366004614a81565b61097c565b61018b6101ff366004614ce3565b6109ee565b61018b610212366004614b24565b610bab565b61018b610225366004614b51565b610cb0565b61018b610f2b565b610245610240366004614c66565b610faa565b6040516101d59190615033565b61018b611313565b61026261146f565b6040516101d59190614ee0565b61018b61027d366004614946565b61147e565b61028a6114c1565b6040516101d59190615028565b61018b6102a5366004614c14565b6114ca565b61018b6102b8366004614aec565b611729565b610262611871565b6102d86102d3366004614946565b611895565b6040516101d5959493929190614f0e565b61018b6102f7366004614946565b6118d7565b61018b61030a366004614946565b611b71565b61028a61031d366004614946565b611ca5565b610245610330366004614946565b611cba565b61018b610343366004614946565b611d4d565b610262611e04565b8361035a81611e13565b610362614798565b506001600160a01b03808616600090815260036020818152604092839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093529082015490921660608301526004015460808201528280156103e15750836001600160a01b031681602001516001600160a01b0316145b156104bd576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906104179088903090600401614ef4565b60206040518083038186803b15801561042f57600080fd5b505afa158015610443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104679190614d89565b9050600081136104925760405162461bcd60e51b81526004016104899061518d565b60405180910390fd5b60006104ad876104a184611f58565b9063ffffffff611f7e16565b90506104ba888483611fb1565b50505b826105ca57836001600160a01b031681600001516001600160a01b0316146104f75760405162461bcd60e51b815260040161048990615127565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906105289088903090600401614ef4565b60206040518083038186803b15801561054057600080fd5b505afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190614d89565b90506000811261059a5760405162461bcd60e51b81526004016104899061518d565b60006105ba876104a16105b58560001963ffffffff61208416565b611f58565b90506105c78884836120ef565b50505b505050505050565b600260015414156105f55760405162461bcd60e51b8152600401610489906157b3565b60026001558461060481612155565b61060c614798565b506001600160a01b03808716600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906106855760405162461bcd60e51b815260040161048990615787565b61068d6147c6565b6106a588836020015184600001518a8a8a60006121a0565b905060008160a001516001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016106d99190614ee0565b60206040518083038186803b1580156106f157600080fd5b505afa158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190614d89565b905061073e8260000151848460600151612258565b60006107548385602001518660000151896122be565b905060006107678b86600001518461254c565b9050600061077b838363ffffffff61256f16565b905061078e8560000151878360006125b1565b6107a68c86604001518760e001518960000151612766565b60a085015185516040516370a0823160e01b81526000926001600160a01b0316916370a08231916107da9190600401614ee0565b60206040518083038186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082a9190614d89565b9050801561083d5761083d8d8883611fb1565b855161084890612810565b86600001516001600160a01b031687602001516001600160a01b03168e6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd489602001518a6060015187896040516108ab9493929190615053565b60405180910390a45050600180555050505050505050505050565b816108d081611e13565b6108d98361147e565b505050565b60008060006108eb614798565b506001600160a01b03808516600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906109645760405162461bcd60e51b815260040161048990615787565b61096e8582612a4d565b935093509350509193909250565b610984612b96565b6002546001600160a01b039081169116146109b15760405162461bcd60e51b815260040161048990615569565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b60026001541415610a115760405162461bcd60e51b8152600401610489906157b3565b600260015584610a2081612155565b610a28614798565b506001600160a01b03808716600090815260036020818152604092839020835160a08101855281548616815260018201548616928101839052600282015486169481019490945291820154909316606083015260040154608082015290610aa15760405162461bcd60e51b815260040161048990615787565b610aa96147c6565b610ac188836000015184602001518a8a8a60016121a0565b9050610ad681600001518383606001516120ef565b6000610aec8284600001518560200151886122be565b90506000610aff8a85602001518461254c565b90506000610b13838363ffffffff61256f16565b9050610b2484600001518683611fb1565b8351610b2f90612810565b84602001516001600160a01b031685600001516001600160a01b03168c6001600160a01b03167f359f8b62a966cfd521a3815681266407201b20a7c334925faa49e7d9d5dd57ab876020015188606001518688604051610b929493929190615053565b60405180910390a4505060018055505050505050505050565b81610bb581612155565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c90610be1908590600401614ee0565b60206040518083038186803b158015610bf957600080fd5b505afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190614a9d565b610c4d5760405162461bcd60e51b815260040161048990615440565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610c79908690600401614ee0565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b50505050505050565b8133610cbc8282612b9a565b83610cc681612bc4565b60055460ff16610d08576001600160a01b03851660009081526004602052604090205460ff16610d085760405162461bcd60e51b81526004016104899061559e565b846001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d4357600080fd5b505af1158015610d57573d6000803e3d6000fd5b50505050846001600160a01b031663d7f1b27c610da06040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b815250612c85565b6040518263ffffffff1660e01b8152600401610dbc9190614ee0565b60206040518083038186803b158015610dd457600080fd5b505afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190614a9d565b610e285760405162461bcd60e51b815260040161048990615440565b6060856001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e9f91908101906149d6565b905060005b8151811015610f2057818181518110610eb957fe5b60200260200101516001600160a01b031663d9b1b6e0886040518263ffffffff1660e01b8152600401610eec9190614ee0565b600060405180830381600087803b158015610f0657600080fd5b505af1925050508015610f17575060015b50600101610ea4565b506105ca8686612c9c565b610f33612b96565b6002546001600160a01b03908116911614610f605760405162461bcd60e51b815260040161048990615569565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b600060026001541415610fcf5760405162461bcd60e51b8152600401610489906157b3565b600260015584610fde81612155565b610fe6614798565b506001600160a01b03808716600090815260036020818152604092839020835160a0810185528154861681526001820154861692810183905260028201548616948101949094529182015490931660608301526004015460808201529061105f5760405162461bcd60e51b815260040161048990615787565b6000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561109a57600080fd5b505afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d29190614d89565b905060006110e6888363ffffffff611f7e16565b90506000806110f58b86612a4d565b92509250506111026147c6565b61111b8c8760200151886000015187878f60008c612d6c565b905060008160a001516001600160a01b03166370a082318e6040518263ffffffff1660e01b815260040161114f9190614ee0565b60206040518083038186803b15801561116757600080fd5b505afa15801561117b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119f9190614d89565b90506111b48260000151888460600151612258565b6111c882886020015189600001518d6122be565b5081516111d7908886866125b1565b6111ef8d83604001518460e001518a60000151612766565b60a082015182516040516370a0823160e01b81526000926001600160a01b0316916370a08231916112239190600401614ee0565b60206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190614d89565b90508015611286576112868e8983611fb1565b825161129190612810565b87600001516001600160a01b031688602001516001600160a01b03168f6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd4866020015187606001518a60006040516112f59493929190615053565b60405180910390a450506001805550909a9950505050505050505050565b3361131d8161217b565b336113278161147e565b6001600160a01b038116600081815260036020819052604080832080546001600160a01b03199081168255600182018054821690556002820180548216905592810180549093169092556004918201839055805163b2494df360e01b815290516060949363b2494df39383810193919291829003018186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e891908101906149d6565b905060005b81518110156114695781818151811061140257fe5b60200260200101516001600160a01b031663e0799620846040518263ffffffff1660e01b81526004016114359190614ee0565b600060405180830381600087803b15801561144f57600080fd5b505af1925050508015611460575060015b506001016113ed565b50505050565b6002546001600160a01b031690565b600260015414156114a15760405162461bcd60e51b8152600401610489906157b3565b6002600155806114b08161217b565b6114b982612810565b505060018055565b60055460ff1681565b836114d481611e13565b6114dc614798565b506001600160a01b03808616600090815260036020818152604092839020835160a0810185528154861681526001820154861692810192909252600281015485169382019390935290820154909216606083015260040154608082015282801561155b5750836001600160a01b031681602001516001600160a01b0316145b15611622576040516308bafae960e21b81526000906001600160a01b038816906322ebeba4906115919088903090600401614ef4565b60206040518083038186803b1580156115a957600080fd5b505afa1580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e19190614d89565b9050600081136116035760405162461bcd60e51b81526004016104899061518d565b6000611612876104a184611f58565b905061161f888483612258565b50505b826105ca57836001600160a01b031681600001516001600160a01b03161461165c5760405162461bcd60e51b815260040161048990615127565b6040516308bafae960e21b81526000906001600160a01b038816906322ebeba49061168d9088903090600401614ef4565b60206040518083038186803b1580156116a557600080fd5b505afa1580156116b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116dd9190614d89565b9050600081126116ff5760405162461bcd60e51b81526004016104899061518d565b600061171a876104a16105b58560001963ffffffff61208416565b90506105c788848360006125b1565b611731612b96565b6002546001600160a01b0390811691161461175e5760405162461bcd60e51b815260040161048990615569565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061178e908590600401614ee0565b60206040518083038186803b1580156117a657600080fd5b505afa1580156117ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117de9190614a9d565b8061180157506001600160a01b03821660009081526004602052604090205460ff165b61181d5760405162461bcd60e51b81526004016104899061553f565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003602081905260009182526040909120805460018201546002830154938301546004909301546001600160a01b039283169491831693918316929091169085565b806118e181612155565b6118e9614798565b506001600160a01b038083166000908152600360208181526040808420815160a0810183528154871681526001820154871693810193909352600281015486169183019190915291820154909316606084015260040154608083015261194e82612e7f565b905061195861482f565b6040516349e2903160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906393c52062906119a6908590899060040161503c565b60606040518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f69190614e29565b905080602001516001600160801b0316600014611a255760405162461bcd60e51b8152600401610489906152e7565b611a3d858483604001516001600160801b0316612258565b611a4685612810565b60208301516040516370a0823160e01b81526000916001600160a01b0316906370a0823190611a79908990600401614ee0565b60206040518083038186803b158015611a9157600080fd5b505afa158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190614d89565b90506000611b4e876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0957600080fd5b505afa158015611b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b419190614d89565b839063ffffffff612e8616565b6020860151909150610ca7906001600160a01b038916908363ffffffff612ea416565b80611b7b81612155565b611b83614798565b506001600160a01b038083166000908152600360208181526040808420815160a0810183528154871681526001820154871693810184905260028201548716818401529381015490951660608401526004948501546080840152516370a0823160e01b8152919390916370a0823191611bfe91889101614ee0565b60206040518083038186803b158015611c1657600080fd5b505afa158015611c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4e9190614d89565b905060008111611c705760405162461bcd60e51b815260040161048990615508565b611c7b848383611fb1565b6020820151611c9c906001600160a01b03861690600063ffffffff612ea416565b6114698461147e565b60046020526000908152604090205460ff1681565b6000611cc4614798565b506001600160a01b03808316600090815260036020818152604092839020835160a08101855281548616815260018201548616928101839052600282015486169481019490945291820154909316606083015260040154608082015290611d3d5760405162461bcd60e51b815260040161048990615787565b611d4681612e7f565b9392505050565b611d55612b96565b6002546001600160a01b03908116911614611d825760405162461bcd60e51b815260040161048990615569565b6001600160a01b038116611da85760405162461bcd60e51b81526004016104899061520c565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290611e41903390600401614ee0565b60206040518083038186803b158015611e5957600080fd5b505afa158015611e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e919190614d6a565b6002811115611e9c57fe5b14611eb95760405162461bcd60e51b815260040161048990615409565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611ee9903390600401614ee0565b60206040518083038186803b158015611f0157600080fd5b505afa158015611f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f399190614a9d565b611f555760405162461bcd60e51b8152600401610489906156c9565b50565b600080821215611f7a5760405162461bcd60e51b8152600401610489906153d4565b5090565b6000611fa8670de0b6b3a7640000611f9c858563ffffffff61301816565b9063ffffffff61305216565b90505b92915050565b6020820151611ff2906001600160a01b038516907f00000000000000000000000000000000000000000000000000000000000000008463ffffffff61309416565b6040516310adc72560e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__906342b71c9490612058906001600160a01b038716907f000000000000000000000000000000000000000000000000000000000000000090879087906004016150b3565b60006040518083038186803b15801561207057600080fd5b505af4158015610ca7573d6000803e3d6000fd5b60008261209357506000611fab565b826000191480156120a75750600160ff1b82145b156120c45760405162461bcd60e51b8152600401610489906155cc565b828202828482816120d157fe5b0514611fa85760405162461bcd60e51b8152600401610489906155cc565b60405163169bcf0960e11b815273__$68b4132a7897cba73622ed001dedc8ba85$__90632d379e1290612058906001600160a01b038716907f000000000000000000000000000000000000000000000000000000000000000090879087906004016150b3565b61215f813361315b565b61217b5760405162461bcd60e51b815260040161048990615750565b612184816131e9565b611f555760405162461bcd60e51b8152600401610489906151c4565b6121a86147c6565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121e357600080fd5b505afa1580156121f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221b9190614d89565b905061224b8989896122338a8663ffffffff611f7e16565b6122438a8763ffffffff611f7e16565b898988612d6c565b9998505050505050505050565b604051631007f97160e21b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063401fe5c490612058906001600160a01b038716907f000000000000000000000000000000000000000000000000000000000000000090879087906004016150b3565b600080856000015190506000866060015190506123628688602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b15801561231257600080fd5b505afa158015612326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234a9190614962565b6001600160a01b03851691908463ffffffff61309416565b600080606089602001516001600160a01b031663e171fcab8a8a88888f608001518d6040518763ffffffff1660e01b81526004016123a596959493929190614f41565b60006040518083038186803b1580156123bd57600080fd5b505afa1580156123d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123f9919081019061497e565b925092509250846001600160a01b0316638f6f03328484846040518463ffffffff1660e01b815260040161242f93929190615001565b600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124859190810190614ab9565b5060006125188b60e001518a6001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016124bc9190614ee0565b60206040518083038186803b1580156124d457600080fd5b505afa1580156124e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250c9190614d89565b9063ffffffff61256f16565b90508a6080015181101561253e5760405162461bcd60e51b81526004016104899061534d565b9a9950505050505050505050565b60008061255a6000846132ed565b9050612567858583613382565b949350505050565b6000611fa883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613429565b80156126935782516125f5906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61309416565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061265e906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088906000908890600401615079565b60006040518083038186803b15801561267657600080fd5b505af415801561268a573d6000803e3d6000fd5b50505050611469565b82516126d1906001600160a01b038616907f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61309416565b60405163354efce360e01b815273__$68b4132a7897cba73622ed001dedc8ba85$__9063354efce39061273a906001600160a01b038816907f00000000000000000000000000000000000000000000000000000000000000009088908890600090600401615079565b60006040518083038186803b15801561275257600080fd5b505af41580156105c7573d6000803e3d6000fd5b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190612795908890600401614ee0565b60206040518083038186803b1580156127ad57600080fd5b505afa1580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190614d89565b9050828114612809576105c76001600160a01b03861683868663ffffffff61345516565b5050505050565b612818614798565b506001600160a01b03808216600090815260036020818152604092839020835160a081018552815486168152600182015486169281018390526002820154861694810194909452918201549093166060830152600401546080820152906128915760405162461bcd60e51b815260040161048990615787565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129049190614d89565b9050600080612914858585613596565b915091506000856001600160a01b03166322ebeba48660200151306040518363ffffffff1660e01b815260040161294c929190614ef4565b60206040518083038186803b15801561296457600080fd5b505afa158015612978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299c9190614d89565b90508281146129b4576129b486866020015185613608565b84516040516308bafae960e21b81526000916001600160a01b038916916322ebeba4916129e5913090600401614ef4565b60206040518083038186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a359190614d89565b9050808314610ca757610ca787876000015185613608565b600080600080612a5c85612e7f565b9050612a6661482f565b6040516349e2903160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906393c5206290612ab49085908b9060040161503c565b60606040518083038186803b158015612acc57600080fd5b505afa158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190614e29565b9050600080612b426001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168963ffffffff61363716565b60208701519195509350612b6992506001600160801b03169050838363ffffffff6138c416565b955082604001516001600160801b0316965082602001516001600160801b03169450505050509250925092565b3390565b612ba4828261315b565b612bc05760405162461bcd60e51b815260040161048990615750565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90612bf4908490600401614ee0565b60206040518083038186803b158015612c0c57600080fd5b505afa158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190614a9d565b612c605760405162461bcd60e51b81526004016104899061570d565b612c69816138fb565b611f555760405162461bcd60e51b815260040161048990615289565b600080612c918361392a565b9050611d4681613935565b6000612ca7826139f2565b6001600160a01b03848116600081815260036020818152604092839020885181546001600160a01b0319908116918816919091178255918901516001820180548416918816919091179055888401516002820180548416918816919091179055606089015192810180549092169290951691909117905560808601516004909301929092559051919250907ffc8bae3ed1ee6eb61577be9bbfed36601a07b31902c2e2ff54e924d8ecb3f6c990612d5f908490615033565b60405180910390a2505050565b612d746147c6565b612d7c6147c6565b6040518061010001604052808b6001600160a01b03168152602001612da087612c85565b6001600160a01b0316815260200184815260200188815260200187815260200185612dcb578a612dcd565b895b6001600160a01b0316815260200185612de65789612de8565b8a5b6001600160a01b03168152602001896001600160a01b03166370a082318d6040518263ffffffff1660e01b8152600401612e229190614ee0565b60206040518083038186803b158015612e3a57600080fd5b505afa158015612e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e729190614d89565b9052905061224b81613ad9565b60a0902090565b6000611fa882611f9c85670de0b6b3a764000063ffffffff61301816565b6000612eb08484613bac565b905080158015612ec05750600082115b15612f3757612ecf8484613c33565b612f32576040516304e3532760e41b81526001600160a01b03851690634e35327090612eff908690600401614ee0565b600060405180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050505b612fb4565b808015612f42575081155b15612fb457612f518484613c33565b612fb457604051636f86c89760e01b81526001600160a01b03851690636f86c89790612f81908690600401614ee0565b600060405180830381600087803b158015612f9b57600080fd5b505af1158015612faf573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784612fcd85613cbf565b6040518363ffffffff1660e01b8152600401612fea929190614fe8565b600060405180830381600087803b15801561300457600080fd5b505af11580156105c7573d6000803e3d6000fd5b60008261302757506000611fab565b8282028284828161303457fe5b0414611fa85760405162461bcd60e51b8152600401610489906154c7565b6000611fa883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ce4565b606082826040516024016130a9929190614fe8565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906131059087906000908690600401615001565b600060405180830381600087803b15801561311f57600080fd5b505af1158015613133573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105ca9190810190614ab9565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156131a057600080fd5b505afa1580156131b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d89190614962565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061321a908590600401614ee0565b60206040518083038186803b15801561323257600080fd5b505afa158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a9190614a9d565b8015611fab57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c9061329d903090600401614ee0565b60206040518083038186803b1580156132b557600080fd5b505afa1580156132c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190614a9d565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f906133209030908890600401614fe8565b60206040518083038186803b15801561333857600080fd5b505afa15801561334c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133709190614d89565b9050612567838263ffffffff611f7e16565b80156108d9576108d9826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b1580156133d957600080fd5b505afa1580156133ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134119190614962565b6001600160a01b03861691908463ffffffff613d1b16565b6000818484111561344d5760405162461bcd60e51b815260040161048991906150e8565b505050900390565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016134879190614ee0565b60206040518083038186803b15801561349f57600080fd5b505afa1580156134b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d79190614d89565b9050600061355a896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b815260040161350a9190614ee0565b60206040518083038186803b15801561352257600080fd5b505afa158015613536573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b59190614d89565b9050600082156135775761357088888585613e5d565b905061357b565b5060005b6135868a8a83612ea4565b9199909850909650945050505050565b600080826135a957506000905080613600565b6000806135b68787612a4d565b5090925090506135d46135cf838763ffffffff612e8616565b613cbf565b93506135fb6000196135ef6135cf848963ffffffff613eac16565b9063ffffffff61208416565b925050505b935093915050565b6040805160208101909152600081526108d9906001600160a01b0385169084903090859063ffffffff613f0b16565b600080600080600061364886612e7f565b905061365261484f565b604051632e3071cd60e11b81526001600160a01b03891690635c60e39a9061367e908590600401615033565b60c06040518083038186803b15801561369657600080fd5b505afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce9190614da1565b60808101519091506001600160801b0316420380158015906136fc575060408201516001600160801b031615155b8015613714575060608801516001600160a01b031615155b15613890576060880151604051638c00bf6b60e01b81526000916001600160a01b031690638c00bf6b9061374e908c90879060040161588f565b60206040518083038186803b15801561376657600080fd5b505afa15801561377a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379e9190614d89565b905060006137cf6137b5838563ffffffff6144c316565b60408601516001600160801b03169063ffffffff61453516565b90506137da8161454a565b604085018051919091016001600160801b031690526137f88161454a565b84516001600160801b0391018116855260a0850151161561388d5760006138358560a001516001600160801b03168361453590919063ffffffff16565b9050600061386a8287600001516001600160801b03160387602001516001600160801b0316846145739092919063ffffffff16565b90506138758161454a565b602087018051919091016001600160801b0316905250505b50505b508051602082015160408301516060909301516001600160801b039283169b9183169a509282169850911695509350505050565b60006125676138da84600163ffffffff6145aa16565b6138ed84620f424063ffffffff6145aa16565b86919063ffffffff6145cf16565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f79061329d903090600401614ee0565b805160209091012090565b60008054819061394d906001600160a01b03166145f9565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b815260040161397a929190614fe8565b60206040518083038186803b15801561399257600080fd5b505afa1580156139a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ca9190614962565b90506001600160a01b038116611fab5760405162461bcd60e51b81526004016104899061531e565b60006139fd82612e7f565b9050613a0761484f565b604051632e3071cd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c60e39a90613a53908590600401615033565b60c06040518083038186803b158015613a6b57600080fd5b505afa158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190614da1565b905080608001516001600160801b031660001415613ad35760405162461bcd60e51b8152600401610489906150fb565b50919050565b80516001600160a01b0390811660009081526003602052604090206001015416613b155760405162461bcd60e51b815260040161048990615378565b80516001600160a01b0390811660009081526003602052604090205416613b4e5760405162461bcd60e51b8152600401610489906153a8565b8060c001516001600160a01b03168160a001516001600160a01b03161415613b885760405162461bcd60e51b815260040161048990615818565b6000816060015111611f555760405162461bcd60e51b8152600401610489906152c0565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b8152600401613bdb9190614ee0565b60206040518083038186803b158015613bf357600080fd5b505afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b9190614d89565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b8152600401613c629190614ee0565b60006040518083038186803b158015613c7a57600080fd5b505afa158015613c8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cb691908101906149d6565b51119392505050565b6000600160ff1b8210611f7a5760405162461bcd60e51b815260040161048990615681565b60008183613d055760405162461bcd60e51b815260040161048991906150e8565b506000838581613d1157fe5b0495945050505050565b8015611469576040516370a0823160e01b81526000906001600160a01b038516906370a0823190613d50908890600401614ee0565b60206040518083038186803b158015613d6857600080fd5b505afa158015613d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613da09190614d89565b9050613dae85858585614678565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190613ddd908990600401614ee0565b60206040518083038186803b158015613df557600080fd5b505afa158015613e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2d9190614d89565b9050613e3f828463ffffffff61256f16565b81146105ca5760405162461bcd60e51b815260040161048990615613565b600080613e80613e73848863ffffffff611f7e16565b869063ffffffff61256f16565b9050613ea286613e96868463ffffffff61256f16565b9063ffffffff612e8616565b9695505050505050565b600081613ecb5760405162461bcd60e51b815260040161048990615865565b60008311613eda576000611fa8565b611fa86001613eff84611f9c8361250c89670de0b6b3a764000063ffffffff61301816565b9063ffffffff6145aa16565b81156142005760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990613f3d908790600401614ee0565b60206040518083038186803b158015613f5557600080fd5b505afa158015613f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f8d9190614a9d565b614054576040516304e3532760e41b81526001600160a01b03861690634e35327090613fbd908790600401614ee0565b600060405180830381600087803b158015613fd757600080fd5b505af1158015613feb573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee559915061401d9087908790600401614ef4565b600060405180830381600087803b15801561403757600080fd5b505af115801561404b573d6000803e3d6000fd5b50505050614137565b604051637d96659360e01b81526001600160a01b03861690637d966593906140829087908790600401614ef4565b60206040518083038186803b15801561409a57600080fd5b505afa1580156140ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140d29190614a9d565b6141375760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee559906141049087908790600401614ef4565b600060405180830381600087803b15801561411e57600080fd5b505af1158015614132573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc19061416790879087908790600401614fc4565b600060405180830381600087803b15801561418157600080fd5b505af1158015614195573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe191506141c990879087908690600401614f8f565b600060405180830381600087803b1580156141e357600080fd5b505af11580156141f7573d6000803e3d6000fd5b50505050612809565b80511561421f5760405162461bcd60e51b81526004016104899061564a565b6040516308bafae960e21b81526001600160a01b038616906322ebeba49061424d9087908790600401614ef4565b60206040518083038186803b15801561426557600080fd5b505afa158015614279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429d9190614d89565b156128095760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad03906142d1908890600401614ee0565b60006040518083038186803b1580156142e957600080fd5b505afa1580156142fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261432591908101906149d6565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90614354908890600401614ee0565b60206040518083038186803b15801561436c57600080fd5b505afa158015614380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a49190614d89565b1580156143b2575080516001145b1561445b57836001600160a01b0316816000815181106143ce57fe5b60200260200101516001600160a01b0316146143fc5760405162461bcd60e51b815260040161048990615477565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790614428908890600401614ee0565b600060405180830381600087803b15801561444257600080fd5b505af1158015614456573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f077906144899088908890600401614ef4565b600060405180830381600087803b1580156144a357600080fd5b505af11580156144b7573d6000803e3d6000fd5b50505050505050505050565b6000806144d6848463ffffffff61301816565b905060006144fd82806144f8670de0b6b3a7640000600263ffffffff61301816565b614782565b9050600061451f82846144f8670de0b6b3a7640000600363ffffffff61301816565b9050613ea281613eff858563ffffffff6145aa16565b6000611fa88383670de0b6b3a7640000614782565b60006001600160801b03821115611f7a5760405162461bcd60e51b8152600401610489906157ea565b600061256761458b83620f424063ffffffff6145aa16565b61459c85600163ffffffff6145aa16565b86919063ffffffff61478216565b600082820183811015611fa85760405162461bcd60e51b815260040161048990615252565b600061256782611f9c6145e982600163ffffffff61256f16565b613eff888863ffffffff61301816565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690614628908490600401615033565b60206040518083038186803b15801561464057600080fd5b505afa158015614654573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190614962565b80156114695760608282604051602401614693929190614fe8565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506060906001600160a01b03871690638f6f0332906146f29088906000908790600401615001565b600060405180830381600087803b15801561470c57600080fd5b505af1158015614720573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147489190810190614ab9565b8051909150156105ca57808060200190518101906147669190614a9d565b6105ca5760405162461bcd60e51b81526004016104899061515e565b600061256782611f9c868663ffffffff61301816565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b8051611fab81615983565b600082601f83011261489f578081fd5b81356148b26148ad82615933565b61590c565b91508082528360208285010111156148c957600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126148f2578081fd5b81516149006148ad82615933565b915080825283602082850101111561491757600080fd5b614928816020840160208601615957565b5092915050565b80516001600160801b0381168114611fab57600080fd5b600060208284031215614957578081fd5b8135611fa881615983565b600060208284031215614973578081fd5b8151611fa881615983565b600080600060608486031215614992578182fd5b835161499d81615983565b60208501516040860151919450925067ffffffffffffffff8111156149c0578182fd5b6149cc868287016148e2565b9150509250925092565b600060208083850312156149e8578182fd5b825167ffffffffffffffff808211156149ff578384fd5b81850186601f820112614a10578485fd5b8051925081831115614a20578485fd5b8383029150614a3084830161590c565b8381528481019082860184840187018a1015614a4a578788fd5b8794505b85851015614a7457614a608a82614884565b835260019490940193918601918601614a4e565b5098975050505050505050565b600060208284031215614a92578081fd5b8135611fa881615998565b600060208284031215614aae578081fd5b8151611fa881615998565b600060208284031215614aca578081fd5b815167ffffffffffffffff811115614ae0578182fd5b612567848285016148e2565b60008060408385031215614afe578182fd5b8235614b0981615983565b91506020830135614b1981615998565b809150509250929050565b60008060408385031215614b36578182fd5b8235614b4181615983565b91506020830135614b1981615983565b60008082840360c0811215614b64578283fd5b8335614b6f81615983565b925060a0601f1982011215614b82578182fd5b50614b8d60a061590c565b6020840135614b9b81615983565b81526040840135614bab81615983565b60208201526060840135614bbe81615983565b60408201526080840135614bd181615983565b606082015260a0939093013560808401525092909150565b60008060408385031215614bfb578182fd5b8235614c0681615983565b946020939093013593505050565b60008060008060808587031215614c29578182fd5b8435614c3481615983565b9350602085013592506040850135614c4b81615983565b91506060850135614c5b81615998565b939692955090935050565b60008060008060808587031215614c7b578182fd5b8435614c8681615983565b935060208501359250604085013567ffffffffffffffff80821115614ca9578384fd5b614cb58883890161488f565b93506060870135915080821115614cca578283fd5b50614cd78782880161488f565b91505092959194509250565b600080600080600060a08688031215614cfa578283fd5b8535614d0581615983565b94506020860135935060408601359250606086013567ffffffffffffffff80821115614d2f578283fd5b614d3b89838a0161488f565b93506080880135915080821115614d50578283fd5b50614d5d8882890161488f565b9150509295509295909350565b600060208284031215614d7b578081fd5b815160038110611fa8578182fd5b600060208284031215614d9a578081fd5b5051919050565b600060c08284031215614db2578081fd5b614dbc60c061590c565b614dc6848461492f565b8152614dd5846020850161492f565b6020820152614de7846040850161492f565b6040820152614df9846060850161492f565b6060820152614e0b846080850161492f565b6080820152614e1d8460a0850161492f565b60a08201529392505050565b600060608284031215614e3a578081fd5b614e44606061590c565b825181526020830151614e56816159a6565b60208201526040830151614e69816159a6565b60408201529392505050565b60008151808452614e8d816020860160208601615957565b601f01601f19169290920160200192915050565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a00190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090614f8390830184614e75565b98975050505050505050565b6001600160a01b03848116825283166020820152606060408201819052600090614fbb90830184614e75565b95945050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152614fbb6060830184614e75565b901515815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b03868116825285166020820152610120810161509f6040830186614ea1565b60e082019390935261010001529392505050565b6001600160a01b0385811682528416602082015261010081016150d96040830185614ea1565b8260e083015295945050505050565b600060208252611fa86020830184614e75565b60208082526012908201527113585c9ad95d081b9bdd0818dc99585d195960721b604082015260600190565b60208082526017908201527f4465627420636f6d706f6e656e74206d69736d61746368000000000000000000604082015260600190565b602080825260159082015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601a908201527f436f6d706f6e656e74206d757374206265206e65676174697665000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252600d908201526c05175616e74697479206973203609c1b604082015260600190565b60208082526018908201527f426f72726f772062616c616e6365206d75737420626520300000000000000000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252601190820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604082015260600190565b60208082526016908201527510dbdb1b185d195c985b081b9bdd08195b98589b195960521b604082015260600190565b602080825260129082015271109bdc9c9bddc81b9bdd08195b98589b195960721b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f436f6c6c61746572616c2062616c616e63652069732030000000000000000000604082015260600190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526012908201527110dbdb1b185d195c985b081b9bdd081cd95d60721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526014908201527313505617d55253950c4c8e17d15610d15151115160621b604082015260600190565b6020808252602d908201527f436f6c6c61746572616c20616e6420626f72726f77206173736574206d75737460408201526c08189948191a5999995c995b9d609a1b606082015260800190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b610160810161589e8285614ea1565b6001600160801b038084511660a08401528060208501511660c08401528060408501511660e084015280606085015116610100840152806080850151166101208401528060a085015116610140840152509392505050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561592b57600080fd5b604052919050565b600067ffffffffffffffff821115615949578081fd5b50601f01601f191660200190565b60005b8381101561597257818101518382015260200161595a565b838111156114695750506000910152565b6001600160a01b0381168114611f5557600080fd5b8015158114611f5557600080fd5b6001600160801b0381168114611f5557600080fdfea2646970667358221220b10a0830284b513e8628263914e5634ef3c99b62e618bb35073227c9f752528364736f6c634300060a0033", "linkReferences": { "contracts/protocol/integration/lib/Morpho.sol": { "Morpho": [ { "length": 20, - "start": 7235 + "start": 8568 }, { "length": 20, - "start": 7488 + "start": 8821 }, { "length": 20, - "start": 7849 + "start": 9182 }, { "length": 20, - "start": 8774 + "start": 10107 }, { "length": 20, - "start": 8994 + "start": 10327 } ] } @@ -742,23 +756,23 @@ "Morpho": [ { "length": 20, - "start": 6865 + "start": 8193 }, { "length": 20, - "start": 7118 + "start": 8446 }, { "length": 20, - "start": 7479 + "start": 8807 }, { "length": 20, - "start": 8404 + "start": 9732 }, { "length": 20, - "start": 8624 + "start": 9952 } ] } diff --git a/test/integration/ethereum/morphoLeverageStrategyExtension.spec.ts b/test/integration/ethereum/morphoLeverageStrategyExtension.spec.ts index 6292a0e1..4ee9fd5d 100644 --- a/test/integration/ethereum/morphoLeverageStrategyExtension.spec.ts +++ b/test/integration/ethereum/morphoLeverageStrategyExtension.spec.ts @@ -270,7 +270,7 @@ if (process.env.INTEGRATIONTEST) { const [, borrowShares, collateral] = await morpho.position(marketId, setToken.address); const collateralTokenBalance = await wsteth.balanceOf(setToken.address); const collateralTotalBalance = collateralTokenBalance.add(collateral); - const [, , totalBorrowAssets, totalBorrowShares, , ] = await morpho.market(marketId); + const [, , totalBorrowAssets, totalBorrowShares, ,] = await morpho.market(marketId); const borrowAssets = sharesToAssetsUp(borrowShares, totalBorrowAssets, totalBorrowShares); return { collateralTotalBalance, borrowAssets }; } @@ -3622,6 +3622,22 @@ if (process.env.INTEGRATIONTEST) { expect(BigNumber.from(newSecondPosition.unit)).to.gt(ZERO); expect(newSecondPosition.module).to.eq(ADDRESS_ZERO); }); + + it("can run exitCollateralPosition afterwards", async () => { + await subject(); + + const [, , collateralBefore] = await morpho.position(marketId, setToken.address); + await leverageStrategyExtension.exitCollateralPosition(); + const [, , collateralAfter] = await morpho.position(marketId, setToken.address); + expect(await wsteth.balanceOf(setToken.address)).to.eq(collateralBefore); + expect(collateralAfter).to.eq(ZERO); + }); + + it("can't run exitCollateralPosition without disengaging", async () => { + await expect(leverageStrategyExtension.exitCollateralPosition()).to.be.revertedWith( + "Borrow balance must be 0", + ); + }); }, ); });