@venusprotocol/venus-protocol 7.6.0-dev.2 → 7.6.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol/AccessControlledV8.dbg.json +1 -1
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/solidity-utilities/contracts/MaxLoopsLimitHelper.sol/MaxLoopsLimitHelper.dbg.json +1 -1
- package/artifacts/@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol/TimeManagerV8.dbg.json +1 -1
- package/artifacts/build-info/{db82b17d0da6752b00ad696fe36aa8fb.json → f873604cc800d476500cd733aebbcd98.json} +1 -1
- package/artifacts/contracts/Admin/VBNBAdmin.sol/VBNBAdmin.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/IProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/IWBNB.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/VBNBAdminStorage.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/VTokenInterface.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/MoveDebtDelegate.sol/MoveDebtDelegate.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/MoveDebtDelegate.sol/MoveDebtDelegate.json +2 -2
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate.json +2 -2
- package/artifacts/contracts/Governance/TokenRedeemer.sol/TokenRedeemer.dbg.json +1 -1
- package/artifacts/contracts/Governance/TokenRedeemer.sol/TokenRedeemer.json +71 -5
- package/artifacts/contracts/InterfacesV8.sol/IComptroller.dbg.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/ILiquidator.dbg.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IVAIController.dbg.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IVBNB.dbg.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IVBNB.json +83 -0
- package/artifacts/contracts/InterfacesV8.sol/IVBep20.dbg.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IVBep20.json +52 -1
- package/artifacts/contracts/InterfacesV8.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IVToken.json +70 -0
- package/artifacts/contracts/InterfacesV8.sol/IWBNB.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/BUSDLiquidator.sol/BUSDLiquidator.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/BUSDLiquidator.sol/BUSDLiquidator.json +2 -2
- package/artifacts/contracts/Liquidator/Liquidator.sol/Liquidator.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Liquidator.sol/Liquidator.json +2 -2
- package/artifacts/contracts/Liquidator/LiquidatorStorage.sol/LiquidatorStorage.dbg.json +1 -1
- package/artifacts/contracts/PegStability/IVAI.sol/IVAI.dbg.json +1 -1
- package/artifacts/contracts/PegStability/PegStability.sol/PegStability.dbg.json +1 -1
- package/artifacts/contracts/Swap/IRouterHelper.sol/IRouterHelper.dbg.json +1 -1
- package/artifacts/contracts/Swap/RouterHelper.sol/RouterHelper.dbg.json +1 -1
- package/artifacts/contracts/Swap/SwapRouter.sol/SwapRouter.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IPancakePair.sol/IPancakePair.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IPancakeSwapV2Factory.sol/IPancakeSwapV2Factory.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IPancakeSwapV2Router.sol/IPancakeSwapV2Router.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IVBNB.sol/IVBNB.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IVtoken.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IWBNB.sol/IWBNB.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/InterfaceComptroller.sol/InterfaceComptroller.dbg.json +1 -1
- package/artifacts/contracts/Swap/lib/PancakeLibrary.sol/PancakeLibrary.dbg.json +1 -1
- package/artifacts/contracts/Swap/lib/TransferHelper.sol/TransferHelper.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IPoolRegistry.sol/PoolRegistryInterface.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IPrime.sol/IPrime.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IPrimeLiquidityProvider.sol/IPrimeLiquidityProvider.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IVToken.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IXVSVault.sol/IXVSVault.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/InterfaceComptroller.sol/InterfaceComptroller.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Prime.sol/Prime.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/PrimeLiquidityProvider.sol/PrimeLiquidityProvider.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/PrimeLiquidityProviderStorage.sol/PrimeLiquidityProviderStorageV1.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/PrimeStorage.sol/PrimeStorageV1.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/libs/FixedMath.sol/FixedMath.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/libs/FixedMath0x.sol/FixedMath0x.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/libs/Scores.sol/Scores.dbg.json +1 -1
- package/artifacts/contracts/lib/Currency.sol/CurrencyLibrary.dbg.json +4 -0
- package/artifacts/contracts/lib/Currency.sol/CurrencyLibrary.json +29 -0
- package/artifacts/contracts/test/AccessControlManagerMock.sol/AccessControlManagerMock.dbg.json +1 -1
- package/artifacts/contracts/test/LiquidatorHarness.sol/LiquidatorHarness.dbg.json +1 -1
- package/artifacts/contracts/test/LiquidatorHarness.sol/LiquidatorHarness.json +2 -2
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IComptroller.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IIncomeDestination.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IMockProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IPoolRegistry.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IPrime.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/MaxLoopsLimitHelper.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/MockProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/test/PrimeScenario.sol/PrimeScenario.dbg.json +1 -1
- package/contracts/Governance/TokenRedeemer.sol +126 -20
- package/contracts/InterfacesV8.sol +10 -2
- package/contracts/lib/Currency.sol +82 -0
- package/deploy/012-deploy-token-redeemer.ts +2 -1
- package/deployments/bscmainnet/JumpRateModel_base0bps_slope10000bps_jump25000bps_kink8000bps.json +380 -0
- package/deployments/bscmainnet/JumpRateModel_base0bps_slope10000bps_jump50000bps_kink8000bps.json +380 -0
- package/deployments/bscmainnet/TokenRedeemer.json +105 -34
- package/deployments/bscmainnet/solcInputs/2aa2b00074af0ac8497255c1ed59bc86.json +348 -0
- package/deployments/bscmainnet/solcInputs/6fc684307aeb3185be94f869ed923bc8.json +348 -0
- package/deployments/bscmainnet.json +572 -4
- package/deployments/bscmainnet_addresses.json +3 -1
- package/dist/deploy/012-deploy-token-redeemer.js +2 -1
- package/dist/deployments/bscmainnet.json +572 -4
- package/dist/deployments/bscmainnet_addresses.json +3 -1
- package/dist/typechain/contracts/Governance/TokenRedeemer.d.ts +29 -1
- package/dist/typechain/contracts/InterfacesV8.sol/IVBNB.d.ts +73 -1
- package/dist/typechain/contracts/InterfacesV8.sol/IVBep20.d.ts +46 -6
- package/dist/typechain/contracts/InterfacesV8.sol/IVToken.d.ts +57 -1
- package/dist/typechain/contracts/index.d.ts +2 -0
- package/dist/typechain/contracts/lib/Currency.sol/CurrencyLibrary.d.ts +42 -0
- package/dist/typechain/contracts/lib/Currency.sol/CurrencyLibrary.js +3 -0
- package/dist/typechain/contracts/lib/Currency.sol/index.d.ts +1 -0
- package/dist/typechain/contracts/lib/Currency.sol/index.js +2 -0
- package/dist/typechain/contracts/lib/index.d.ts +2 -0
- package/dist/typechain/contracts/lib/index.js +3 -0
- package/dist/typechain/factories/contracts/DelegateBorrowers/MoveDebtDelegate__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/DelegateBorrowers/MoveDebtDelegate__factory.js +1 -1
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate__factory.js +1 -1
- package/dist/typechain/factories/contracts/Governance/TokenRedeemer__factory.d.ts +57 -6
- package/dist/typechain/factories/contracts/Governance/TokenRedeemer__factory.js +74 -8
- package/dist/typechain/factories/contracts/InterfacesV8.sol/IVBNB__factory.d.ts +62 -0
- package/dist/typechain/factories/contracts/InterfacesV8.sol/IVBNB__factory.js +83 -0
- package/dist/typechain/factories/contracts/InterfacesV8.sol/IVBep20__factory.d.ts +39 -1
- package/dist/typechain/factories/contracts/InterfacesV8.sol/IVBep20__factory.js +52 -1
- package/dist/typechain/factories/contracts/InterfacesV8.sol/IVToken__factory.d.ts +52 -0
- package/dist/typechain/factories/contracts/InterfacesV8.sol/IVToken__factory.js +70 -0
- package/dist/typechain/factories/contracts/Liquidator/BUSDLiquidator__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/Liquidator/BUSDLiquidator__factory.js +1 -1
- package/dist/typechain/factories/contracts/Liquidator/Liquidator__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/Liquidator/Liquidator__factory.js +1 -1
- package/dist/typechain/factories/contracts/index.d.ts +1 -0
- package/dist/typechain/factories/contracts/index.js +2 -1
- package/dist/typechain/factories/contracts/lib/Currency.sol/CurrencyLibrary__factory.d.ts +35 -0
- package/dist/typechain/factories/contracts/lib/Currency.sol/CurrencyLibrary__factory.js +58 -0
- package/dist/typechain/factories/contracts/lib/Currency.sol/index.d.ts +1 -0
- package/dist/typechain/factories/contracts/lib/Currency.sol/index.js +8 -0
- package/dist/typechain/factories/contracts/lib/index.d.ts +1 -0
- package/dist/typechain/factories/contracts/lib/index.js +30 -0
- package/dist/typechain/factories/contracts/test/LiquidatorHarness__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/test/LiquidatorHarness__factory.js +1 -1
- package/dist/typechain/index.d.ts +2 -0
- package/dist/typechain/index.js +6 -4
- package/package.json +1 -1
|
@@ -1029,8 +1029,8 @@
|
|
|
1029
1029
|
"type": "receive"
|
|
1030
1030
|
}
|
|
1031
1031
|
],
|
|
1032
|
-
"bytecode": "0x6101006040523480156200001257600080fd5b50604051620034f5380380620034f58339810160408190526200003591620001fa565b8282826200004382620000f8565b6200004e83620000f8565b6200005981620000f8565b6001600160a01b0380831660805281811660e052831660a081905260408051639254f5e560e01b81529051639254f5e5916004808201926020929091908290030181865afa158015620000b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d691906200024e565b6001600160a01b031660c052620000ec62000123565b50505050505062000275565b6001600160a01b03811662000120576040516342bcdf7f60e11b815260040160405180910390fd5b50565b600054610100900460ff1615620001905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620001e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200012057600080fd5b6000806000606084860312156200021057600080fd5b83516200021d81620001e4565b60208501519093506200023081620001e4565b60408501519092506200024381620001e4565b809150509250925092565b6000602082840312156200026157600080fd5b81516200026e81620001e4565b9392505050565b60805160a05160c05160e05161319e620003576000396000818161059f015281816125ca0152818161264b015281816126c1015261272c01526000818161047d01528181610b8a01528181611720015281816117c2015281816118fe0152818161196901528181611a0f01528181611a440152611a9a01526000818161035d01528181610963015281816117930152818161186601528181611b3d015281816120cf015281816121d70152818161269f015261289801526000818161031101528181610a7601528181610afd01528181611e770152611f91015261319e6000f3fe6080604052600436106101f25760003560e01c80638da5cb5b1161010d578063b8332db7116100a0578063e9a44fd91161006f578063e9a44fd9146105df578063f2531ea1146105ff578063f2fde38b1461061f578063f52421b31461063f578063f7dcd96e1461065f57600080fd5b8063b8332db714610543578063bbd98d7014610558578063d02eb3f41461058d578063e30c3978146105c157600080fd5b8063b09c7742116100dc578063b09c7742146104bf578063b26461de146104d4578063b4988fd014610504578063b4a0bdf31461052457600080fd5b80638da5cb5b146104375780638e3525fc146104555780639254f5e51461046b578063a093796a1461049f57600080fd5b80635fe3b567116101855780637debe3fe116101545780637debe3fe146103b35780638722ddf2146103d35780638765adcb146103f757806389a2bc251461041757600080fd5b80635fe3b5671461034b57806364fd70781461037f578063715018a61461039257806379ba50971461039e57600080fd5b806336eab4ae116101c157806336eab4ae1461027557806344b3716a146102a457806347a6a971146102df5780635ba3792d146102ff57600080fd5b80630d060ea8146101fe5780630e32cb8614610215578063107568df1461023557806311ec4b7a1461025557600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067f565b005b34801561022157600080fd5b50610213610230366004612ce5565b61075e565b34801561024157600080fd5b50610213610250366004612ce5565b610772565b34801561026157600080fd5b50610213610270366004612ce5565b610783565b34801561028157600080fd5b5060cd5461028f9060ff1681565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b5061028f6102bf366004612d09565b60ca60209081526000928352604080842090915290825290205460ff1681565b3480156102eb57600080fd5b506102136102fa366004612d09565b610852565b34801561030b57600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029b565b34801561035757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b61021361038d366004612d42565b610926565b34801561021357600080fd5b3480156103aa57600080fd5b50610213610ce3565b3480156103bf57600080fd5b506102136103ce366004612d09565b610d5a565b3480156103df57600080fd5b506103e960cc5481565b60405190815260200161029b565b34801561040357600080fd5b50610213610412366004612ce5565b610e4f565b34801561042357600080fd5b50610213610432366004612d95565b610f1a565b34801561044357600080fd5b506033546001600160a01b0316610333565b34801561046157600080fd5b506103e960c95481565b34801561047757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ab57600080fd5b506102136104ba366004612d95565b610fa2565b3480156104cb57600080fd5b50610213611049565b3480156104e057600080fd5b5061028f6104ef366004612ce5565b60cb6020526000908152604090205460ff1681565b34801561051057600080fd5b5061021361051f366004612dae565b611128565b34801561053057600080fd5b50610102546001600160a01b0316610333565b34801561054f57600080fd5b5061021361123e565b34801561056457600080fd5b50610578610573366004612df0565b611258565b6040805192835260208301919091520161029b565b34801561059957600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cd57600080fd5b506065546001600160a01b0316610333565b3480156105eb57600080fd5b5060cf54610333906001600160a01b031681565b34801561060b57600080fd5b5061057861061a366004612d95565b6112ac565b34801561062b57600080fd5b5061021361063a366004612ce5565b6112c1565b34801561064b57600080fd5b5061021361065a366004612d95565b611332565b34801561066b57600080fd5b5061033361067a366004612d95565b6113b1565b6106bd6040518060400160405280601881526020017f7061757365466f7263655641494c6971756964617465282900000000000000008152506113db565b60cd5460ff166107275760405162461bcd60e51b815260206004820152602a60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526918591e4814185d5cd95960b21b60648201526084015b60405180910390fd5b60cd805460ff1916905560405133907f42388332be4beb2ad2ff83017119b9d702ce7fbaf67e18e53a137508cf967e4390600090a2565b61076661147a565b61076f816114d4565b50565b61077a61147a565b61076f8161159a565b6107c16040518060400160405280601c81526020017f72657374726963744c69717569646174696f6e286164647265737329000000008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16156108065760405163404fe9fb60e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610873604051806060016040528060248152602001613121602491396113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff166108cc5760405163435aad4360e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b61092e6115ff565b61093783611658565b610941833361167f565b604051638e8f294b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612e31565b50509050806109fd57604051635a9a1eb960e11b81526001600160a01b038316600482015260240161071e565b610a0785856116fe565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190612e6d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610b6057348414610ad65760405163dd97100160e01b81526004810185905234602482015260440161071e565b604051635572051560e11b81526001600160a01b03868116600483015284811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b5050505050610bdd565b3415610b885760405163dd97100160e01b81526000600482015234602482015260440161071e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610bd157610bcc858585611965565b610bdd565b610bdd86868686611b1b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612e6d565b90506000610c568383612e9c565b9050600080610c658784611d04565b91509150610c71611ec4565b604080518981526001600160a01b038c8116602083015291810184905260608101839052818916918b169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a4505050505050610cdb6001609755565b50505050565b565b60655433906001600160a01b03168114610d515760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161071e565b61076f816120a9565b610d986040518060400160405280601f81526020017f616464546f416c6c6f776c69737428616464726573732c6164647265737329008152506113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1615610df25760405163071df39160e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610e8d6040518060400160405280601e81526020017f756e72657374726963744c69717569646174696f6e28616464726573732900008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16610ed157604051633bf9d98960e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610f586040518060400160405280601b81526020017f736574547265617375727950657263656e742875696e743235362900000000008152506113db565b610f61816120c2565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b610fc3604051806060016040528060248152602001613145602491396113db565b600081116110085760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206368756e6b2073697a6560701b604482015260640161071e565b60d05460408051918252602082018390527fe5eef53e396f0cb79322e15e72b6c6613ae3e62c9079f5a12f2c410867c28b2c910160405180910390a160d055565b6110876040518060400160405280601981526020017f726573756d65466f7263655641494c69717569646174652829000000000000008152506113db565b60cd5460ff16156110ee5760405162461bcd60e51b815260206004820152602b60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526a18591e481c995cdd5b595960aa1b606482015260840161071e565b60cd805460ff1916600117905560405133907fd4b8f320ada24d048ee6c25c53a31aa20b2ea37fa25542e6e239c80d31d5b60b90600090a2565b600054610100900460ff16158080156111485750600054600160ff909116105b806111625750303b158015611162575060005460ff166001145b6111c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071e565b6000805460ff1916600117905580156111e8576000805461ff0019166101001790555b6111f3848484612186565b8015610cdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6112466115ff565b61124e611ec4565b610ce16001609755565b6000806112658484611d04565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b6000806112b8836121d0565b91509150915091565b6112c961147a565b606580546001600160a01b0383166001600160a01b031990911681179091556112fa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6113706040518060400160405280601e81526020017f7365744d696e4c6971756964617461626c655641492875696e743235362900008152506113db565b60cc5460408051918252602082018390527f8df018dc5fe866d192a3f4d9f16dbfdb38f58a7470a65b92262ccc008c55fff0910160405180910390a160cc55565b60ce81815481106113c157600080fd5b6000918252602090912001546001600160a01b0316905081565b610102546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061140f9033908690600401612f0b565b602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612f2f565b90508061147657333083604051634a3fa29360e01b815260040161071e93929190612f4a565b5050565b6033546001600160a01b03163314610ce15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071e565b6001600160a01b0381166115385760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164604482015264647265737360d81b606482015260840161071e565b61010280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0910160405180910390a15050565b6115a381611658565b60cf546040516001600160a01b038084169216907fafec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b90600090a360cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6002609754036116515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071e565b6002609755565b6001600160a01b03811661076f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff1680156116cd57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b156114765760405163074c80eb60e51b81526001600160a01b0380841660048301528216602482015260440161071e565b604051633c617c9160e11b81526001600160a01b0382811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906378c2f92290602401602060405180830381865afa158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d9190612e6d565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e85a29607f000000000000000000000000000000000000000000000000000000000000000060056040518363ffffffff1660e01b8152600401611800929190612f95565b602060405180830381865afa15801561181d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118419190612f2f565b60405163460d60c560e11b81526001600160a01b0386811660048301529192506000917f00000000000000000000000000000000000000000000000000000000000000001690638c1ac18a90602401602060405180830381865afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612f2f565b905080806118dc5750815b806118ea575060cd5460ff16155b806118f6575060cc5483105b8061193257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b1561193e575050505050565b60cc546040516329eb1e8760e01b815261071e918591600401918252602082015260400190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612fc2565b9050611a006001600160a01b038216333086612286565b611a356001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006122f1565b611a696001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856122f1565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015611ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b089190612fdf565b509050611b1481612406565b5050505050565b604051638e8f294b60e01b81526001600160a01b0385811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa9190612e31565b5050905080611bd757604051635a9a1eb960e11b81526001600160a01b038616600482015260240161071e565b6000856001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3b9190612fc2565b90506000611c4b8233308861242a565b9050611c626001600160a01b0383168860006122f1565b611c766001600160a01b03831688836122f1565b604051637af1e23160e11b81526001600160a01b038781166004830152602482018390528581166044830152611cfb919089169063f5e3c462906064016020604051808303816000875af1158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190612e6d565b612406565b50505050505050565b600080611d10836121d0565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190612f2f565b611db25760405163241165bb60e21b81523060048201523360248201526044810182905260640161071e565b600082118015611dc95750611dc78483612533565b155b15611e755760005b60ce54811015611e1a57846001600160a01b031660ce8281548110611df857611df8613003565b6000918252602090912001546001600160a01b031614611e1a57600101611dd1565b60ce548103611e6f5760ce80546001810182556000919091527fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a0180546001600160a01b0319166001600160a01b0387161790555b506112a5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603611ebb57611eb66125c3565b6112a5565b6112a584612781565b60ce5460d054600090821015611eda5781611ede565b60d0545b9050805b801561209d57600060ce611ef7600184612e9c565b81548110611f0757611f07613003565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7e9190612e6d565b9050611f8a8282612533565b15612092577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611fd557611fd06125c3565b611fde565b611fde82612781565b60ce8054611fee90600190612e9c565b81548110611ffe57611ffe613003565b6000918252602090912001546001600160a01b031660ce612020600186612e9c565b8154811061203057612030613003565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060ce80548061206f5761206f613019565b600082815260209020810160001990810180546001600160a01b03191690550190555b505060001901611ee2565b505050565b6001609755565b606580546001600160a01b031916905561076f8161293c565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214f9190612e6d565b6121599190612e9c565b90508082111561147657604051635659cb3b60e01b8152600481018290526024810183905260440161071e565b600054610100900460ff166121ad5760405162461bcd60e51b815260040161071e9061302f565b6121b561298e565b6121bd6129bd565b6121c783826129ec565b61209d82612a2a565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122579190612e6d565b90508060c95485612268919061307a565b6122729190613099565b925061227e8385612e9c565b915050915091565b6040516001600160a01b0380851660248301528316604482015260648101829052610cdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a51565b80158061236b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123699190612e6d565b155b6123d65760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063095ea7b360e01b906064016122ba565b8061240e5750565b60405163125a96ab60e01b81526004810182905260240161071e565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015612475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124999190612e6d565b90506124b06001600160a01b038716868686612286565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156124f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251d9190612e6d565b6125279190612e9c565b9150505b949350505050565b60405163db006a7560e01b8152600481018290526000906001600160a01b0384169063db006a75906024016020604051808303816000875af1925050508015612599575060408051601f3d908101601f1916820190925261259691810190612e6d565b60015b6125a5575060006125bd565b806000036125b75760019150506125bd565b60009150505b92915050565b60004790507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561262357600080fd5b505af1158015612637573d6000803e3d6000fd5b505060cf5461267793506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116935016905083612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906126ec907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001906004016130bb565b600060405180830381600087803b15801561270657600080fd5b505af115801561271a573d6000803e3d6000fd5b50506040518381526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a350565b6000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190612fc2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128539190612e6d565b60cf54909150612870906001600160a01b03848116911683612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906128c5907f00000000000000000000000000000000000000000000000000000000000000009086906001906004016130bb565b600060405180830381600087803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a3505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166129b55760405162461bcd60e51b815260040161071e9061302f565b610ce1612b56565b600054610100900460ff166129e45760405162461bcd60e51b815260040161071e9061302f565b610ce1612b86565b600054610100900460ff16612a135760405162461bcd60e51b815260040161071e9061302f565b612a1c826120c2565b60c98290556114768161159a565b600054610100900460ff166107665760405162461bcd60e51b815260040161071e9061302f565b6000612aa6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612bad9092919063ffffffff16565b9050805160001480612ac7575080806020019051810190612ac79190612f2f565b61209d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063a9059cbb60e01b906064016122ba565b600054610100900460ff16612b7d5760405162461bcd60e51b815260040161071e9061302f565b610ce1336120a9565b600054610100900460ff166120a25760405162461bcd60e51b815260040161071e9061302f565b606061252b848460008585600080866001600160a01b03168587604051612bd491906130f1565b60006040518083038185875af1925050503d8060008114612c11576040519150601f19603f3d011682016040523d82523d6000602084013e612c16565b606091505b5091509150612c2787838387612c32565b979650505050505050565b60608315612ca1578251600003612c9a576001600160a01b0385163b612c9a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161071e565b508161252b565b61252b8383815115612cb65781518083602001fd5b8060405162461bcd60e51b815260040161071e919061310d565b6001600160a01b038116811461076f57600080fd5b600060208284031215612cf757600080fd5b8135612d0281612cd0565b9392505050565b60008060408385031215612d1c57600080fd5b8235612d2781612cd0565b91506020830135612d3781612cd0565b809150509250929050565b60008060008060808587031215612d5857600080fd5b8435612d6381612cd0565b93506020850135612d7381612cd0565b9250604085013591506060850135612d8a81612cd0565b939692955090935050565b600060208284031215612da757600080fd5b5035919050565b600080600060608486031215612dc357600080fd5b833592506020840135612dd581612cd0565b91506040840135612de581612cd0565b809150509250925092565b60008060408385031215612e0357600080fd5b8235612e0e81612cd0565b946020939093013593505050565b80518015158114612e2c57600080fd5b919050565b600080600060608486031215612e4657600080fd5b612e4f84612e1c565b925060208401519150612e6460408501612e1c565b90509250925092565b600060208284031215612e7f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612eae57612eae612e86565b500390565b60005b83811015612ece578181015183820152602001612eb6565b83811115610cdb5750506000910152565b60008151808452612ef7816020860160208601612eb3565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061252b90830184612edf565b600060208284031215612f4157600080fd5b612d0282612e1c565b6001600160a01b03848116825283166020820152606060408201819052600090612f7690830184612edf565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03831681526040810160098310612fb557612fb5612f7f565b8260208301529392505050565b600060208284031215612fd457600080fd5b8151612d0281612cd0565b60008060408385031215612ff257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600081600019048311821515161561309457613094612e86565b500290565b6000826130b657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0384811682528316602082015260608101600283106130e3576130e3612f7f565b826040830152949350505050565b60008251613103818460208701612eb3565b9190910192915050565b602081526000612d026020830184612edf56fe72656d6f766546726f6d416c6c6f776c69737428616464726573732c616464726573732973657450656e64696e6752656465656d4368756e6b4c656e6774682875696e7432353629a264697066735822122031ffa44e37df8deda22f81e767db2e6d3d68948f4afc968bcba1d17f046a6daf64736f6c634300080d0033",
|
|
1033
|
-
"deployedBytecode": "0x6080604052600436106101f25760003560e01c80638da5cb5b1161010d578063b8332db7116100a0578063e9a44fd91161006f578063e9a44fd9146105df578063f2531ea1146105ff578063f2fde38b1461061f578063f52421b31461063f578063f7dcd96e1461065f57600080fd5b8063b8332db714610543578063bbd98d7014610558578063d02eb3f41461058d578063e30c3978146105c157600080fd5b8063b09c7742116100dc578063b09c7742146104bf578063b26461de146104d4578063b4988fd014610504578063b4a0bdf31461052457600080fd5b80638da5cb5b146104375780638e3525fc146104555780639254f5e51461046b578063a093796a1461049f57600080fd5b80635fe3b567116101855780637debe3fe116101545780637debe3fe146103b35780638722ddf2146103d35780638765adcb146103f757806389a2bc251461041757600080fd5b80635fe3b5671461034b57806364fd70781461037f578063715018a61461039257806379ba50971461039e57600080fd5b806336eab4ae116101c157806336eab4ae1461027557806344b3716a146102a457806347a6a971146102df5780635ba3792d146102ff57600080fd5b80630d060ea8146101fe5780630e32cb8614610215578063107568df1461023557806311ec4b7a1461025557600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067f565b005b34801561022157600080fd5b50610213610230366004612ce5565b61075e565b34801561024157600080fd5b50610213610250366004612ce5565b610772565b34801561026157600080fd5b50610213610270366004612ce5565b610783565b34801561028157600080fd5b5060cd5461028f9060ff1681565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b5061028f6102bf366004612d09565b60ca60209081526000928352604080842090915290825290205460ff1681565b3480156102eb57600080fd5b506102136102fa366004612d09565b610852565b34801561030b57600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029b565b34801561035757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b61021361038d366004612d42565b610926565b34801561021357600080fd5b3480156103aa57600080fd5b50610213610ce3565b3480156103bf57600080fd5b506102136103ce366004612d09565b610d5a565b3480156103df57600080fd5b506103e960cc5481565b60405190815260200161029b565b34801561040357600080fd5b50610213610412366004612ce5565b610e4f565b34801561042357600080fd5b50610213610432366004612d95565b610f1a565b34801561044357600080fd5b506033546001600160a01b0316610333565b34801561046157600080fd5b506103e960c95481565b34801561047757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ab57600080fd5b506102136104ba366004612d95565b610fa2565b3480156104cb57600080fd5b50610213611049565b3480156104e057600080fd5b5061028f6104ef366004612ce5565b60cb6020526000908152604090205460ff1681565b34801561051057600080fd5b5061021361051f366004612dae565b611128565b34801561053057600080fd5b50610102546001600160a01b0316610333565b34801561054f57600080fd5b5061021361123e565b34801561056457600080fd5b50610578610573366004612df0565b611258565b6040805192835260208301919091520161029b565b34801561059957600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cd57600080fd5b506065546001600160a01b0316610333565b3480156105eb57600080fd5b5060cf54610333906001600160a01b031681565b34801561060b57600080fd5b5061057861061a366004612d95565b6112ac565b34801561062b57600080fd5b5061021361063a366004612ce5565b6112c1565b34801561064b57600080fd5b5061021361065a366004612d95565b611332565b34801561066b57600080fd5b5061033361067a366004612d95565b6113b1565b6106bd6040518060400160405280601881526020017f7061757365466f7263655641494c6971756964617465282900000000000000008152506113db565b60cd5460ff166107275760405162461bcd60e51b815260206004820152602a60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526918591e4814185d5cd95960b21b60648201526084015b60405180910390fd5b60cd805460ff1916905560405133907f42388332be4beb2ad2ff83017119b9d702ce7fbaf67e18e53a137508cf967e4390600090a2565b61076661147a565b61076f816114d4565b50565b61077a61147a565b61076f8161159a565b6107c16040518060400160405280601c81526020017f72657374726963744c69717569646174696f6e286164647265737329000000008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16156108065760405163404fe9fb60e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610873604051806060016040528060248152602001613121602491396113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff166108cc5760405163435aad4360e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b61092e6115ff565b61093783611658565b610941833361167f565b604051638e8f294b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612e31565b50509050806109fd57604051635a9a1eb960e11b81526001600160a01b038316600482015260240161071e565b610a0785856116fe565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190612e6d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610b6057348414610ad65760405163dd97100160e01b81526004810185905234602482015260440161071e565b604051635572051560e11b81526001600160a01b03868116600483015284811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b5050505050610bdd565b3415610b885760405163dd97100160e01b81526000600482015234602482015260440161071e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610bd157610bcc858585611965565b610bdd565b610bdd86868686611b1b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612e6d565b90506000610c568383612e9c565b9050600080610c658784611d04565b91509150610c71611ec4565b604080518981526001600160a01b038c8116602083015291810184905260608101839052818916918b169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a4505050505050610cdb6001609755565b50505050565b565b60655433906001600160a01b03168114610d515760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161071e565b61076f816120a9565b610d986040518060400160405280601f81526020017f616464546f416c6c6f776c69737428616464726573732c6164647265737329008152506113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1615610df25760405163071df39160e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610e8d6040518060400160405280601e81526020017f756e72657374726963744c69717569646174696f6e28616464726573732900008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16610ed157604051633bf9d98960e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610f586040518060400160405280601b81526020017f736574547265617375727950657263656e742875696e743235362900000000008152506113db565b610f61816120c2565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b610fc3604051806060016040528060248152602001613145602491396113db565b600081116110085760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206368756e6b2073697a6560701b604482015260640161071e565b60d05460408051918252602082018390527fe5eef53e396f0cb79322e15e72b6c6613ae3e62c9079f5a12f2c410867c28b2c910160405180910390a160d055565b6110876040518060400160405280601981526020017f726573756d65466f7263655641494c69717569646174652829000000000000008152506113db565b60cd5460ff16156110ee5760405162461bcd60e51b815260206004820152602b60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526a18591e481c995cdd5b595960aa1b606482015260840161071e565b60cd805460ff1916600117905560405133907fd4b8f320ada24d048ee6c25c53a31aa20b2ea37fa25542e6e239c80d31d5b60b90600090a2565b600054610100900460ff16158080156111485750600054600160ff909116105b806111625750303b158015611162575060005460ff166001145b6111c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071e565b6000805460ff1916600117905580156111e8576000805461ff0019166101001790555b6111f3848484612186565b8015610cdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6112466115ff565b61124e611ec4565b610ce16001609755565b6000806112658484611d04565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b6000806112b8836121d0565b91509150915091565b6112c961147a565b606580546001600160a01b0383166001600160a01b031990911681179091556112fa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6113706040518060400160405280601e81526020017f7365744d696e4c6971756964617461626c655641492875696e743235362900008152506113db565b60cc5460408051918252602082018390527f8df018dc5fe866d192a3f4d9f16dbfdb38f58a7470a65b92262ccc008c55fff0910160405180910390a160cc55565b60ce81815481106113c157600080fd5b6000918252602090912001546001600160a01b0316905081565b610102546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061140f9033908690600401612f0b565b602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612f2f565b90508061147657333083604051634a3fa29360e01b815260040161071e93929190612f4a565b5050565b6033546001600160a01b03163314610ce15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071e565b6001600160a01b0381166115385760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164604482015264647265737360d81b606482015260840161071e565b61010280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0910160405180910390a15050565b6115a381611658565b60cf546040516001600160a01b038084169216907fafec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b90600090a360cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6002609754036116515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071e565b6002609755565b6001600160a01b03811661076f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff1680156116cd57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b156114765760405163074c80eb60e51b81526001600160a01b0380841660048301528216602482015260440161071e565b604051633c617c9160e11b81526001600160a01b0382811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906378c2f92290602401602060405180830381865afa158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d9190612e6d565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e85a29607f000000000000000000000000000000000000000000000000000000000000000060056040518363ffffffff1660e01b8152600401611800929190612f95565b602060405180830381865afa15801561181d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118419190612f2f565b60405163460d60c560e11b81526001600160a01b0386811660048301529192506000917f00000000000000000000000000000000000000000000000000000000000000001690638c1ac18a90602401602060405180830381865afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612f2f565b905080806118dc5750815b806118ea575060cd5460ff16155b806118f6575060cc5483105b8061193257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b1561193e575050505050565b60cc546040516329eb1e8760e01b815261071e918591600401918252602082015260400190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612fc2565b9050611a006001600160a01b038216333086612286565b611a356001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006122f1565b611a696001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856122f1565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015611ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b089190612fdf565b509050611b1481612406565b5050505050565b604051638e8f294b60e01b81526001600160a01b0385811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa9190612e31565b5050905080611bd757604051635a9a1eb960e11b81526001600160a01b038616600482015260240161071e565b6000856001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3b9190612fc2565b90506000611c4b8233308861242a565b9050611c626001600160a01b0383168860006122f1565b611c766001600160a01b03831688836122f1565b604051637af1e23160e11b81526001600160a01b038781166004830152602482018390528581166044830152611cfb919089169063f5e3c462906064016020604051808303816000875af1158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190612e6d565b612406565b50505050505050565b600080611d10836121d0565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190612f2f565b611db25760405163241165bb60e21b81523060048201523360248201526044810182905260640161071e565b600082118015611dc95750611dc78483612533565b155b15611e755760005b60ce54811015611e1a57846001600160a01b031660ce8281548110611df857611df8613003565b6000918252602090912001546001600160a01b031614611e1a57600101611dd1565b60ce548103611e6f5760ce80546001810182556000919091527fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a0180546001600160a01b0319166001600160a01b0387161790555b506112a5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603611ebb57611eb66125c3565b6112a5565b6112a584612781565b60ce5460d054600090821015611eda5781611ede565b60d0545b9050805b801561209d57600060ce611ef7600184612e9c565b81548110611f0757611f07613003565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7e9190612e6d565b9050611f8a8282612533565b15612092577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611fd557611fd06125c3565b611fde565b611fde82612781565b60ce8054611fee90600190612e9c565b81548110611ffe57611ffe613003565b6000918252602090912001546001600160a01b031660ce612020600186612e9c565b8154811061203057612030613003565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060ce80548061206f5761206f613019565b600082815260209020810160001990810180546001600160a01b03191690550190555b505060001901611ee2565b505050565b6001609755565b606580546001600160a01b031916905561076f8161293c565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214f9190612e6d565b6121599190612e9c565b90508082111561147657604051635659cb3b60e01b8152600481018290526024810183905260440161071e565b600054610100900460ff166121ad5760405162461bcd60e51b815260040161071e9061302f565b6121b561298e565b6121bd6129bd565b6121c783826129ec565b61209d82612a2a565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122579190612e6d565b90508060c95485612268919061307a565b6122729190613099565b925061227e8385612e9c565b915050915091565b6040516001600160a01b0380851660248301528316604482015260648101829052610cdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a51565b80158061236b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123699190612e6d565b155b6123d65760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063095ea7b360e01b906064016122ba565b8061240e5750565b60405163125a96ab60e01b81526004810182905260240161071e565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015612475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124999190612e6d565b90506124b06001600160a01b038716868686612286565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156124f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251d9190612e6d565b6125279190612e9c565b9150505b949350505050565b60405163db006a7560e01b8152600481018290526000906001600160a01b0384169063db006a75906024016020604051808303816000875af1925050508015612599575060408051601f3d908101601f1916820190925261259691810190612e6d565b60015b6125a5575060006125bd565b806000036125b75760019150506125bd565b60009150505b92915050565b60004790507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561262357600080fd5b505af1158015612637573d6000803e3d6000fd5b505060cf5461267793506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116935016905083612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906126ec907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001906004016130bb565b600060405180830381600087803b15801561270657600080fd5b505af115801561271a573d6000803e3d6000fd5b50506040518381526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a350565b6000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190612fc2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128539190612e6d565b60cf54909150612870906001600160a01b03848116911683612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906128c5907f00000000000000000000000000000000000000000000000000000000000000009086906001906004016130bb565b600060405180830381600087803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a3505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166129b55760405162461bcd60e51b815260040161071e9061302f565b610ce1612b56565b600054610100900460ff166129e45760405162461bcd60e51b815260040161071e9061302f565b610ce1612b86565b600054610100900460ff16612a135760405162461bcd60e51b815260040161071e9061302f565b612a1c826120c2565b60c98290556114768161159a565b600054610100900460ff166107665760405162461bcd60e51b815260040161071e9061302f565b6000612aa6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612bad9092919063ffffffff16565b9050805160001480612ac7575080806020019051810190612ac79190612f2f565b61209d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063a9059cbb60e01b906064016122ba565b600054610100900460ff16612b7d5760405162461bcd60e51b815260040161071e9061302f565b610ce1336120a9565b600054610100900460ff166120a25760405162461bcd60e51b815260040161071e9061302f565b606061252b848460008585600080866001600160a01b03168587604051612bd491906130f1565b60006040518083038185875af1925050503d8060008114612c11576040519150601f19603f3d011682016040523d82523d6000602084013e612c16565b606091505b5091509150612c2787838387612c32565b979650505050505050565b60608315612ca1578251600003612c9a576001600160a01b0385163b612c9a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161071e565b508161252b565b61252b8383815115612cb65781518083602001fd5b8060405162461bcd60e51b815260040161071e919061310d565b6001600160a01b038116811461076f57600080fd5b600060208284031215612cf757600080fd5b8135612d0281612cd0565b9392505050565b60008060408385031215612d1c57600080fd5b8235612d2781612cd0565b91506020830135612d3781612cd0565b809150509250929050565b60008060008060808587031215612d5857600080fd5b8435612d6381612cd0565b93506020850135612d7381612cd0565b9250604085013591506060850135612d8a81612cd0565b939692955090935050565b600060208284031215612da757600080fd5b5035919050565b600080600060608486031215612dc357600080fd5b833592506020840135612dd581612cd0565b91506040840135612de581612cd0565b809150509250925092565b60008060408385031215612e0357600080fd5b8235612e0e81612cd0565b946020939093013593505050565b80518015158114612e2c57600080fd5b919050565b600080600060608486031215612e4657600080fd5b612e4f84612e1c565b925060208401519150612e6460408501612e1c565b90509250925092565b600060208284031215612e7f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612eae57612eae612e86565b500390565b60005b83811015612ece578181015183820152602001612eb6565b83811115610cdb5750506000910152565b60008151808452612ef7816020860160208601612eb3565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061252b90830184612edf565b600060208284031215612f4157600080fd5b612d0282612e1c565b6001600160a01b03848116825283166020820152606060408201819052600090612f7690830184612edf565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03831681526040810160098310612fb557612fb5612f7f565b8260208301529392505050565b600060208284031215612fd457600080fd5b8151612d0281612cd0565b60008060408385031215612ff257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600081600019048311821515161561309457613094612e86565b500290565b6000826130b657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0384811682528316602082015260608101600283106130e3576130e3612f7f565b826040830152949350505050565b60008251613103818460208701612eb3565b9190910192915050565b602081526000612d026020830184612edf56fe72656d6f766546726f6d416c6c6f776c69737428616464726573732c616464726573732973657450656e64696e6752656465656d4368756e6b4c656e6774682875696e7432353629a264697066735822122031ffa44e37df8deda22f81e767db2e6d3d68948f4afc968bcba1d17f046a6daf64736f6c634300080d0033",
|
|
1032
|
+
"bytecode": "0x6101006040523480156200001257600080fd5b50604051620034f5380380620034f58339810160408190526200003591620001fa565b8282826200004382620000f8565b6200004e83620000f8565b6200005981620000f8565b6001600160a01b0380831660805281811660e052831660a081905260408051639254f5e560e01b81529051639254f5e5916004808201926020929091908290030181865afa158015620000b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d691906200024e565b6001600160a01b031660c052620000ec62000123565b50505050505062000275565b6001600160a01b03811662000120576040516342bcdf7f60e11b815260040160405180910390fd5b50565b600054610100900460ff1615620001905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620001e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200012057600080fd5b6000806000606084860312156200021057600080fd5b83516200021d81620001e4565b60208501519093506200023081620001e4565b60408501519092506200024381620001e4565b809150509250925092565b6000602082840312156200026157600080fd5b81516200026e81620001e4565b9392505050565b60805160a05160c05160e05161319e620003576000396000818161059f015281816125ca0152818161264b015281816126c1015261272c01526000818161047d01528181610b8a01528181611720015281816117c2015281816118fe0152818161196901528181611a0f01528181611a440152611a9a01526000818161035d01528181610963015281816117930152818161186601528181611b3d015281816120cf015281816121d70152818161269f015261289801526000818161031101528181610a7601528181610afd01528181611e770152611f91015261319e6000f3fe6080604052600436106101f25760003560e01c80638da5cb5b1161010d578063b8332db7116100a0578063e9a44fd91161006f578063e9a44fd9146105df578063f2531ea1146105ff578063f2fde38b1461061f578063f52421b31461063f578063f7dcd96e1461065f57600080fd5b8063b8332db714610543578063bbd98d7014610558578063d02eb3f41461058d578063e30c3978146105c157600080fd5b8063b09c7742116100dc578063b09c7742146104bf578063b26461de146104d4578063b4988fd014610504578063b4a0bdf31461052457600080fd5b80638da5cb5b146104375780638e3525fc146104555780639254f5e51461046b578063a093796a1461049f57600080fd5b80635fe3b567116101855780637debe3fe116101545780637debe3fe146103b35780638722ddf2146103d35780638765adcb146103f757806389a2bc251461041757600080fd5b80635fe3b5671461034b57806364fd70781461037f578063715018a61461039257806379ba50971461039e57600080fd5b806336eab4ae116101c157806336eab4ae1461027557806344b3716a146102a457806347a6a971146102df5780635ba3792d146102ff57600080fd5b80630d060ea8146101fe5780630e32cb8614610215578063107568df1461023557806311ec4b7a1461025557600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067f565b005b34801561022157600080fd5b50610213610230366004612ce5565b61075e565b34801561024157600080fd5b50610213610250366004612ce5565b610772565b34801561026157600080fd5b50610213610270366004612ce5565b610783565b34801561028157600080fd5b5060cd5461028f9060ff1681565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b5061028f6102bf366004612d09565b60ca60209081526000928352604080842090915290825290205460ff1681565b3480156102eb57600080fd5b506102136102fa366004612d09565b610852565b34801561030b57600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029b565b34801561035757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b61021361038d366004612d42565b610926565b34801561021357600080fd5b3480156103aa57600080fd5b50610213610ce3565b3480156103bf57600080fd5b506102136103ce366004612d09565b610d5a565b3480156103df57600080fd5b506103e960cc5481565b60405190815260200161029b565b34801561040357600080fd5b50610213610412366004612ce5565b610e4f565b34801561042357600080fd5b50610213610432366004612d95565b610f1a565b34801561044357600080fd5b506033546001600160a01b0316610333565b34801561046157600080fd5b506103e960c95481565b34801561047757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ab57600080fd5b506102136104ba366004612d95565b610fa2565b3480156104cb57600080fd5b50610213611049565b3480156104e057600080fd5b5061028f6104ef366004612ce5565b60cb6020526000908152604090205460ff1681565b34801561051057600080fd5b5061021361051f366004612dae565b611128565b34801561053057600080fd5b50610102546001600160a01b0316610333565b34801561054f57600080fd5b5061021361123e565b34801561056457600080fd5b50610578610573366004612df0565b611258565b6040805192835260208301919091520161029b565b34801561059957600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cd57600080fd5b506065546001600160a01b0316610333565b3480156105eb57600080fd5b5060cf54610333906001600160a01b031681565b34801561060b57600080fd5b5061057861061a366004612d95565b6112ac565b34801561062b57600080fd5b5061021361063a366004612ce5565b6112c1565b34801561064b57600080fd5b5061021361065a366004612d95565b611332565b34801561066b57600080fd5b5061033361067a366004612d95565b6113b1565b6106bd6040518060400160405280601881526020017f7061757365466f7263655641494c6971756964617465282900000000000000008152506113db565b60cd5460ff166107275760405162461bcd60e51b815260206004820152602a60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526918591e4814185d5cd95960b21b60648201526084015b60405180910390fd5b60cd805460ff1916905560405133907f42388332be4beb2ad2ff83017119b9d702ce7fbaf67e18e53a137508cf967e4390600090a2565b61076661147a565b61076f816114d4565b50565b61077a61147a565b61076f8161159a565b6107c16040518060400160405280601c81526020017f72657374726963744c69717569646174696f6e286164647265737329000000008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16156108065760405163404fe9fb60e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610873604051806060016040528060248152602001613121602491396113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff166108cc5760405163435aad4360e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b61092e6115ff565b61093783611658565b610941833361167f565b604051638e8f294b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612e31565b50509050806109fd57604051635a9a1eb960e11b81526001600160a01b038316600482015260240161071e565b610a0785856116fe565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190612e6d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610b6057348414610ad65760405163dd97100160e01b81526004810185905234602482015260440161071e565b604051635572051560e11b81526001600160a01b03868116600483015284811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b5050505050610bdd565b3415610b885760405163dd97100160e01b81526000600482015234602482015260440161071e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610bd157610bcc858585611965565b610bdd565b610bdd86868686611b1b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612e6d565b90506000610c568383612e9c565b9050600080610c658784611d04565b91509150610c71611ec4565b604080518981526001600160a01b038c8116602083015291810184905260608101839052818916918b169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a4505050505050610cdb6001609755565b50505050565b565b60655433906001600160a01b03168114610d515760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161071e565b61076f816120a9565b610d986040518060400160405280601f81526020017f616464546f416c6c6f776c69737428616464726573732c6164647265737329008152506113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1615610df25760405163071df39160e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610e8d6040518060400160405280601e81526020017f756e72657374726963744c69717569646174696f6e28616464726573732900008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16610ed157604051633bf9d98960e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610f586040518060400160405280601b81526020017f736574547265617375727950657263656e742875696e743235362900000000008152506113db565b610f61816120c2565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b610fc3604051806060016040528060248152602001613145602491396113db565b600081116110085760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206368756e6b2073697a6560701b604482015260640161071e565b60d05460408051918252602082018390527fe5eef53e396f0cb79322e15e72b6c6613ae3e62c9079f5a12f2c410867c28b2c910160405180910390a160d055565b6110876040518060400160405280601981526020017f726573756d65466f7263655641494c69717569646174652829000000000000008152506113db565b60cd5460ff16156110ee5760405162461bcd60e51b815260206004820152602b60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526a18591e481c995cdd5b595960aa1b606482015260840161071e565b60cd805460ff1916600117905560405133907fd4b8f320ada24d048ee6c25c53a31aa20b2ea37fa25542e6e239c80d31d5b60b90600090a2565b600054610100900460ff16158080156111485750600054600160ff909116105b806111625750303b158015611162575060005460ff166001145b6111c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071e565b6000805460ff1916600117905580156111e8576000805461ff0019166101001790555b6111f3848484612186565b8015610cdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6112466115ff565b61124e611ec4565b610ce16001609755565b6000806112658484611d04565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b6000806112b8836121d0565b91509150915091565b6112c961147a565b606580546001600160a01b0383166001600160a01b031990911681179091556112fa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6113706040518060400160405280601e81526020017f7365744d696e4c6971756964617461626c655641492875696e743235362900008152506113db565b60cc5460408051918252602082018390527f8df018dc5fe866d192a3f4d9f16dbfdb38f58a7470a65b92262ccc008c55fff0910160405180910390a160cc55565b60ce81815481106113c157600080fd5b6000918252602090912001546001600160a01b0316905081565b610102546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061140f9033908690600401612f0b565b602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612f2f565b90508061147657333083604051634a3fa29360e01b815260040161071e93929190612f4a565b5050565b6033546001600160a01b03163314610ce15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071e565b6001600160a01b0381166115385760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164604482015264647265737360d81b606482015260840161071e565b61010280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0910160405180910390a15050565b6115a381611658565b60cf546040516001600160a01b038084169216907fafec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b90600090a360cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6002609754036116515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071e565b6002609755565b6001600160a01b03811661076f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff1680156116cd57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b156114765760405163074c80eb60e51b81526001600160a01b0380841660048301528216602482015260440161071e565b604051633c617c9160e11b81526001600160a01b0382811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906378c2f92290602401602060405180830381865afa158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d9190612e6d565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e85a29607f000000000000000000000000000000000000000000000000000000000000000060056040518363ffffffff1660e01b8152600401611800929190612f95565b602060405180830381865afa15801561181d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118419190612f2f565b60405163460d60c560e11b81526001600160a01b0386811660048301529192506000917f00000000000000000000000000000000000000000000000000000000000000001690638c1ac18a90602401602060405180830381865afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612f2f565b905080806118dc5750815b806118ea575060cd5460ff16155b806118f6575060cc5483105b8061193257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b1561193e575050505050565b60cc546040516329eb1e8760e01b815261071e918591600401918252602082015260400190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612fc2565b9050611a006001600160a01b038216333086612286565b611a356001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006122f1565b611a696001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856122f1565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015611ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b089190612fdf565b509050611b1481612406565b5050505050565b604051638e8f294b60e01b81526001600160a01b0385811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa9190612e31565b5050905080611bd757604051635a9a1eb960e11b81526001600160a01b038616600482015260240161071e565b6000856001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3b9190612fc2565b90506000611c4b8233308861242a565b9050611c626001600160a01b0383168860006122f1565b611c766001600160a01b03831688836122f1565b604051637af1e23160e11b81526001600160a01b038781166004830152602482018390528581166044830152611cfb919089169063f5e3c462906064016020604051808303816000875af1158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190612e6d565b612406565b50505050505050565b600080611d10836121d0565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190612f2f565b611db25760405163241165bb60e21b81523060048201523360248201526044810182905260640161071e565b600082118015611dc95750611dc78483612533565b155b15611e755760005b60ce54811015611e1a57846001600160a01b031660ce8281548110611df857611df8613003565b6000918252602090912001546001600160a01b031614611e1a57600101611dd1565b60ce548103611e6f5760ce80546001810182556000919091527fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a0180546001600160a01b0319166001600160a01b0387161790555b506112a5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603611ebb57611eb66125c3565b6112a5565b6112a584612781565b60ce5460d054600090821015611eda5781611ede565b60d0545b9050805b801561209d57600060ce611ef7600184612e9c565b81548110611f0757611f07613003565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7e9190612e6d565b9050611f8a8282612533565b15612092577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611fd557611fd06125c3565b611fde565b611fde82612781565b60ce8054611fee90600190612e9c565b81548110611ffe57611ffe613003565b6000918252602090912001546001600160a01b031660ce612020600186612e9c565b8154811061203057612030613003565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060ce80548061206f5761206f613019565b600082815260209020810160001990810180546001600160a01b03191690550190555b505060001901611ee2565b505050565b6001609755565b606580546001600160a01b031916905561076f8161293c565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214f9190612e6d565b6121599190612e9c565b90508082111561147657604051635659cb3b60e01b8152600481018290526024810183905260440161071e565b600054610100900460ff166121ad5760405162461bcd60e51b815260040161071e9061302f565b6121b561298e565b6121bd6129bd565b6121c783826129ec565b61209d82612a2a565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122579190612e6d565b90508060c95485612268919061307a565b6122729190613099565b925061227e8385612e9c565b915050915091565b6040516001600160a01b0380851660248301528316604482015260648101829052610cdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a51565b80158061236b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123699190612e6d565b155b6123d65760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063095ea7b360e01b906064016122ba565b8061240e5750565b60405163125a96ab60e01b81526004810182905260240161071e565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015612475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124999190612e6d565b90506124b06001600160a01b038716868686612286565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156124f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251d9190612e6d565b6125279190612e9c565b9150505b949350505050565b60405163db006a7560e01b8152600481018290526000906001600160a01b0384169063db006a75906024016020604051808303816000875af1925050508015612599575060408051601f3d908101601f1916820190925261259691810190612e6d565b60015b6125a5575060006125bd565b806000036125b75760019150506125bd565b60009150505b92915050565b60004790507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561262357600080fd5b505af1158015612637573d6000803e3d6000fd5b505060cf5461267793506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116935016905083612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906126ec907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001906004016130bb565b600060405180830381600087803b15801561270657600080fd5b505af115801561271a573d6000803e3d6000fd5b50506040518381526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a350565b6000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190612fc2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128539190612e6d565b60cf54909150612870906001600160a01b03848116911683612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906128c5907f00000000000000000000000000000000000000000000000000000000000000009086906001906004016130bb565b600060405180830381600087803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a3505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166129b55760405162461bcd60e51b815260040161071e9061302f565b610ce1612b56565b600054610100900460ff166129e45760405162461bcd60e51b815260040161071e9061302f565b610ce1612b86565b600054610100900460ff16612a135760405162461bcd60e51b815260040161071e9061302f565b612a1c826120c2565b60c98290556114768161159a565b600054610100900460ff166107665760405162461bcd60e51b815260040161071e9061302f565b6000612aa6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612bad9092919063ffffffff16565b9050805160001480612ac7575080806020019051810190612ac79190612f2f565b61209d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063a9059cbb60e01b906064016122ba565b600054610100900460ff16612b7d5760405162461bcd60e51b815260040161071e9061302f565b610ce1336120a9565b600054610100900460ff166120a25760405162461bcd60e51b815260040161071e9061302f565b606061252b848460008585600080866001600160a01b03168587604051612bd491906130f1565b60006040518083038185875af1925050503d8060008114612c11576040519150601f19603f3d011682016040523d82523d6000602084013e612c16565b606091505b5091509150612c2787838387612c32565b979650505050505050565b60608315612ca1578251600003612c9a576001600160a01b0385163b612c9a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161071e565b508161252b565b61252b8383815115612cb65781518083602001fd5b8060405162461bcd60e51b815260040161071e919061310d565b6001600160a01b038116811461076f57600080fd5b600060208284031215612cf757600080fd5b8135612d0281612cd0565b9392505050565b60008060408385031215612d1c57600080fd5b8235612d2781612cd0565b91506020830135612d3781612cd0565b809150509250929050565b60008060008060808587031215612d5857600080fd5b8435612d6381612cd0565b93506020850135612d7381612cd0565b9250604085013591506060850135612d8a81612cd0565b939692955090935050565b600060208284031215612da757600080fd5b5035919050565b600080600060608486031215612dc357600080fd5b833592506020840135612dd581612cd0565b91506040840135612de581612cd0565b809150509250925092565b60008060408385031215612e0357600080fd5b8235612e0e81612cd0565b946020939093013593505050565b80518015158114612e2c57600080fd5b919050565b600080600060608486031215612e4657600080fd5b612e4f84612e1c565b925060208401519150612e6460408501612e1c565b90509250925092565b600060208284031215612e7f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612eae57612eae612e86565b500390565b60005b83811015612ece578181015183820152602001612eb6565b83811115610cdb5750506000910152565b60008151808452612ef7816020860160208601612eb3565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061252b90830184612edf565b600060208284031215612f4157600080fd5b612d0282612e1c565b6001600160a01b03848116825283166020820152606060408201819052600090612f7690830184612edf565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03831681526040810160098310612fb557612fb5612f7f565b8260208301529392505050565b600060208284031215612fd457600080fd5b8151612d0281612cd0565b60008060408385031215612ff257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600081600019048311821515161561309457613094612e86565b500290565b6000826130b657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0384811682528316602082015260608101600283106130e3576130e3612f7f565b826040830152949350505050565b60008251613103818460208701612eb3565b9190910192915050565b602081526000612d026020830184612edf56fe72656d6f766546726f6d416c6c6f776c69737428616464726573732c616464726573732973657450656e64696e6752656465656d4368756e6b4c656e6774682875696e7432353629a26469706673582212204b609eff30160a8945e0b0a5c94465d46d3f1c03211d6125ec80f64df19ec3f564736f6c634300080d0033",
|
|
1033
|
+
"deployedBytecode": "0x6080604052600436106101f25760003560e01c80638da5cb5b1161010d578063b8332db7116100a0578063e9a44fd91161006f578063e9a44fd9146105df578063f2531ea1146105ff578063f2fde38b1461061f578063f52421b31461063f578063f7dcd96e1461065f57600080fd5b8063b8332db714610543578063bbd98d7014610558578063d02eb3f41461058d578063e30c3978146105c157600080fd5b8063b09c7742116100dc578063b09c7742146104bf578063b26461de146104d4578063b4988fd014610504578063b4a0bdf31461052457600080fd5b80638da5cb5b146104375780638e3525fc146104555780639254f5e51461046b578063a093796a1461049f57600080fd5b80635fe3b567116101855780637debe3fe116101545780637debe3fe146103b35780638722ddf2146103d35780638765adcb146103f757806389a2bc251461041757600080fd5b80635fe3b5671461034b57806364fd70781461037f578063715018a61461039257806379ba50971461039e57600080fd5b806336eab4ae116101c157806336eab4ae1461027557806344b3716a146102a457806347a6a971146102df5780635ba3792d146102ff57600080fd5b80630d060ea8146101fe5780630e32cb8614610215578063107568df1461023557806311ec4b7a1461025557600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067f565b005b34801561022157600080fd5b50610213610230366004612ce5565b61075e565b34801561024157600080fd5b50610213610250366004612ce5565b610772565b34801561026157600080fd5b50610213610270366004612ce5565b610783565b34801561028157600080fd5b5060cd5461028f9060ff1681565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b5061028f6102bf366004612d09565b60ca60209081526000928352604080842090915290825290205460ff1681565b3480156102eb57600080fd5b506102136102fa366004612d09565b610852565b34801561030b57600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029b565b34801561035757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b61021361038d366004612d42565b610926565b34801561021357600080fd5b3480156103aa57600080fd5b50610213610ce3565b3480156103bf57600080fd5b506102136103ce366004612d09565b610d5a565b3480156103df57600080fd5b506103e960cc5481565b60405190815260200161029b565b34801561040357600080fd5b50610213610412366004612ce5565b610e4f565b34801561042357600080fd5b50610213610432366004612d95565b610f1a565b34801561044357600080fd5b506033546001600160a01b0316610333565b34801561046157600080fd5b506103e960c95481565b34801561047757600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ab57600080fd5b506102136104ba366004612d95565b610fa2565b3480156104cb57600080fd5b50610213611049565b3480156104e057600080fd5b5061028f6104ef366004612ce5565b60cb6020526000908152604090205460ff1681565b34801561051057600080fd5b5061021361051f366004612dae565b611128565b34801561053057600080fd5b50610102546001600160a01b0316610333565b34801561054f57600080fd5b5061021361123e565b34801561056457600080fd5b50610578610573366004612df0565b611258565b6040805192835260208301919091520161029b565b34801561059957600080fd5b506103337f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cd57600080fd5b506065546001600160a01b0316610333565b3480156105eb57600080fd5b5060cf54610333906001600160a01b031681565b34801561060b57600080fd5b5061057861061a366004612d95565b6112ac565b34801561062b57600080fd5b5061021361063a366004612ce5565b6112c1565b34801561064b57600080fd5b5061021361065a366004612d95565b611332565b34801561066b57600080fd5b5061033361067a366004612d95565b6113b1565b6106bd6040518060400160405280601881526020017f7061757365466f7263655641494c6971756964617465282900000000000000008152506113db565b60cd5460ff166107275760405162461bcd60e51b815260206004820152602a60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526918591e4814185d5cd95960b21b60648201526084015b60405180910390fd5b60cd805460ff1916905560405133907f42388332be4beb2ad2ff83017119b9d702ce7fbaf67e18e53a137508cf967e4390600090a2565b61076661147a565b61076f816114d4565b50565b61077a61147a565b61076f8161159a565b6107c16040518060400160405280601c81526020017f72657374726963744c69717569646174696f6e286164647265737329000000008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16156108065760405163404fe9fb60e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610873604051806060016040528060248152602001613121602491396113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff166108cc5760405163435aad4360e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b61092e6115ff565b61093783611658565b610941833361167f565b604051638e8f294b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612e31565b50509050806109fd57604051635a9a1eb960e11b81526001600160a01b038316600482015260240161071e565b610a0785856116fe565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190612e6d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610b6057348414610ad65760405163dd97100160e01b81526004810185905234602482015260440161071e565b604051635572051560e11b81526001600160a01b03868116600483015284811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b5050505050610bdd565b3415610b885760405163dd97100160e01b81526000600482015234602482015260440161071e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603610bd157610bcc858585611965565b610bdd565b610bdd86868686611b1b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612e6d565b90506000610c568383612e9c565b9050600080610c658784611d04565b91509150610c71611ec4565b604080518981526001600160a01b038c8116602083015291810184905260608101839052818916918b169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a4505050505050610cdb6001609755565b50505050565b565b60655433906001600160a01b03168114610d515760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161071e565b61076f816120a9565b610d986040518060400160405280601f81526020017f616464546f416c6c6f776c69737428616464726573732c6164647265737329008152506113db565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1615610df25760405163071df39160e01b81526001600160a01b0380841660048301528216602482015260440161071e565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610e8d6040518060400160405280601e81526020017f756e72657374726963744c69717569646174696f6e28616464726573732900008152506113db565b6001600160a01b038116600090815260cb602052604090205460ff16610ed157604051633bf9d98960e11b81526001600160a01b038216600482015260240161071e565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610f586040518060400160405280601b81526020017f736574547265617375727950657263656e742875696e743235362900000000008152506113db565b610f61816120c2565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b610fc3604051806060016040528060248152602001613145602491396113db565b600081116110085760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206368756e6b2073697a6560701b604482015260640161071e565b60d05460408051918252602082018390527fe5eef53e396f0cb79322e15e72b6c6613ae3e62c9079f5a12f2c410867c28b2c910160405180910390a160d055565b6110876040518060400160405280601981526020017f726573756d65466f7263655641494c69717569646174652829000000000000008152506113db565b60cd5460ff16156110ee5760405162461bcd60e51b815260206004820152602b60248201527f466f726365204c69717569646174696f6e206f662056414920697320616c726560448201526a18591e481c995cdd5b595960aa1b606482015260840161071e565b60cd805460ff1916600117905560405133907fd4b8f320ada24d048ee6c25c53a31aa20b2ea37fa25542e6e239c80d31d5b60b90600090a2565b600054610100900460ff16158080156111485750600054600160ff909116105b806111625750303b158015611162575060005460ff166001145b6111c55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071e565b6000805460ff1916600117905580156111e8576000805461ff0019166101001790555b6111f3848484612186565b8015610cdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6112466115ff565b61124e611ec4565b610ce16001609755565b6000806112658484611d04565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b6000806112b8836121d0565b91509150915091565b6112c961147a565b606580546001600160a01b0383166001600160a01b031990911681179091556112fa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6113706040518060400160405280601e81526020017f7365744d696e4c6971756964617461626c655641492875696e743235362900008152506113db565b60cc5460408051918252602082018390527f8df018dc5fe866d192a3f4d9f16dbfdb38f58a7470a65b92262ccc008c55fff0910160405180910390a160cc55565b60ce81815481106113c157600080fd5b6000918252602090912001546001600160a01b0316905081565b610102546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061140f9033908690600401612f0b565b602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612f2f565b90508061147657333083604051634a3fa29360e01b815260040161071e93929190612f4a565b5050565b6033546001600160a01b03163314610ce15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071e565b6001600160a01b0381166115385760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164604482015264647265737360d81b606482015260840161071e565b61010280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0910160405180910390a15050565b6115a381611658565b60cf546040516001600160a01b038084169216907fafec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b90600090a360cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6002609754036116515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071e565b6002609755565b6001600160a01b03811661076f576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff1680156116cd57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b156114765760405163074c80eb60e51b81526001600160a01b0380841660048301528216602482015260440161071e565b604051633c617c9160e11b81526001600160a01b0382811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906378c2f92290602401602060405180830381865afa158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d9190612e6d565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e85a29607f000000000000000000000000000000000000000000000000000000000000000060056040518363ffffffff1660e01b8152600401611800929190612f95565b602060405180830381865afa15801561181d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118419190612f2f565b60405163460d60c560e11b81526001600160a01b0386811660048301529192506000917f00000000000000000000000000000000000000000000000000000000000000001690638c1ac18a90602401602060405180830381865afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190612f2f565b905080806118dc5750815b806118ea575060cd5460ff16155b806118f6575060cc5483105b8061193257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b1561193e575050505050565b60cc546040516329eb1e8760e01b815261071e918591600401918252602082015260400190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612fc2565b9050611a006001600160a01b038216333086612286565b611a356001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006122f1565b611a696001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856122f1565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015611ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b089190612fdf565b509050611b1481612406565b5050505050565b604051638e8f294b60e01b81526001600160a01b0385811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638e8f294b90602401606060405180830381865afa158015611b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baa9190612e31565b5050905080611bd757604051635a9a1eb960e11b81526001600160a01b038616600482015260240161071e565b6000856001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3b9190612fc2565b90506000611c4b8233308861242a565b9050611c626001600160a01b0383168860006122f1565b611c766001600160a01b03831688836122f1565b604051637af1e23160e11b81526001600160a01b038781166004830152602482018390528581166044830152611cfb919089169063f5e3c462906064016020604051808303816000875af1158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190612e6d565b612406565b50505050505050565b600080611d10836121d0565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190612f2f565b611db25760405163241165bb60e21b81523060048201523360248201526044810182905260640161071e565b600082118015611dc95750611dc78483612533565b155b15611e755760005b60ce54811015611e1a57846001600160a01b031660ce8281548110611df857611df8613003565b6000918252602090912001546001600160a01b031614611e1a57600101611dd1565b60ce548103611e6f5760ce80546001810182556000919091527fd36cd1c74ef8d7326d8021b776c18fb5a5724b7f7bc93c2f42e43e10ef27d12a0180546001600160a01b0319166001600160a01b0387161790555b506112a5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603611ebb57611eb66125c3565b6112a5565b6112a584612781565b60ce5460d054600090821015611eda5781611ede565b60d0545b9050805b801561209d57600060ce611ef7600184612e9c565b81548110611f0757611f07613003565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7e9190612e6d565b9050611f8a8282612533565b15612092577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611fd557611fd06125c3565b611fde565b611fde82612781565b60ce8054611fee90600190612e9c565b81548110611ffe57611ffe613003565b6000918252602090912001546001600160a01b031660ce612020600186612e9c565b8154811061203057612030613003565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060ce80548061206f5761206f613019565b600082815260209020810160001990810180546001600160a01b03191690550190555b505060001901611ee2565b505050565b6001609755565b606580546001600160a01b031916905561076f8161293c565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214f9190612e6d565b6121599190612e9c565b90508082111561147657604051635659cb3b60e01b8152600481018290526024810183905260440161071e565b600054610100900460ff166121ad5760405162461bcd60e51b815260040161071e9061302f565b6121b561298e565b6121bd6129bd565b6121c783826129ec565b61209d82612a2a565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122579190612e6d565b90508060c95485612268919061307a565b6122729190613099565b925061227e8385612e9c565b915050915091565b6040516001600160a01b0380851660248301528316604482015260648101829052610cdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a51565b80158061236b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123699190612e6d565b155b6123d65760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063095ea7b360e01b906064016122ba565b8061240e5750565b60405163125a96ab60e01b81526004810182905260240161071e565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015612475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124999190612e6d565b90506124b06001600160a01b038716868686612286565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156124f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251d9190612e6d565b6125279190612e9c565b9150505b949350505050565b60405163db006a7560e01b8152600481018290526000906001600160a01b0384169063db006a75906024016020604051808303816000875af1925050508015612599575060408051601f3d908101601f1916820190925261259691810190612e6d565b60015b6125a5575060006125bd565b806000036125b75760019150506125bd565b60009150505b92915050565b60004790507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561262357600080fd5b505af1158015612637573d6000803e3d6000fd5b505060cf5461267793506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116935016905083612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906126ec907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001906004016130bb565b600060405180830381600087803b15801561270657600080fd5b505af115801561271a573d6000803e3d6000fd5b50506040518381526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a350565b6000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e59190612fc2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128539190612e6d565b60cf54909150612870906001600160a01b03848116911683612b26565b60cf546040516305bebb3b60e21b81526001600160a01b03909116906316faecec906128c5907f00000000000000000000000000000000000000000000000000000000000000009086906001906004016130bb565b600060405180830381600087803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507fb68163184d017d69dff908f587b51f68dc2689426509efd546fbf77b518cc8769060200160405180910390a3505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166129b55760405162461bcd60e51b815260040161071e9061302f565b610ce1612b56565b600054610100900460ff166129e45760405162461bcd60e51b815260040161071e9061302f565b610ce1612b86565b600054610100900460ff16612a135760405162461bcd60e51b815260040161071e9061302f565b612a1c826120c2565b60c98290556114768161159a565b600054610100900460ff166107665760405162461bcd60e51b815260040161071e9061302f565b6000612aa6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612bad9092919063ffffffff16565b9050805160001480612ac7575080806020019051810190612ac79190612f2f565b61209d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161071e565b6040516001600160a01b03831660248201526044810182905261209d90849063a9059cbb60e01b906064016122ba565b600054610100900460ff16612b7d5760405162461bcd60e51b815260040161071e9061302f565b610ce1336120a9565b600054610100900460ff166120a25760405162461bcd60e51b815260040161071e9061302f565b606061252b848460008585600080866001600160a01b03168587604051612bd491906130f1565b60006040518083038185875af1925050503d8060008114612c11576040519150601f19603f3d011682016040523d82523d6000602084013e612c16565b606091505b5091509150612c2787838387612c32565b979650505050505050565b60608315612ca1578251600003612c9a576001600160a01b0385163b612c9a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161071e565b508161252b565b61252b8383815115612cb65781518083602001fd5b8060405162461bcd60e51b815260040161071e919061310d565b6001600160a01b038116811461076f57600080fd5b600060208284031215612cf757600080fd5b8135612d0281612cd0565b9392505050565b60008060408385031215612d1c57600080fd5b8235612d2781612cd0565b91506020830135612d3781612cd0565b809150509250929050565b60008060008060808587031215612d5857600080fd5b8435612d6381612cd0565b93506020850135612d7381612cd0565b9250604085013591506060850135612d8a81612cd0565b939692955090935050565b600060208284031215612da757600080fd5b5035919050565b600080600060608486031215612dc357600080fd5b833592506020840135612dd581612cd0565b91506040840135612de581612cd0565b809150509250925092565b60008060408385031215612e0357600080fd5b8235612e0e81612cd0565b946020939093013593505050565b80518015158114612e2c57600080fd5b919050565b600080600060608486031215612e4657600080fd5b612e4f84612e1c565b925060208401519150612e6460408501612e1c565b90509250925092565b600060208284031215612e7f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612eae57612eae612e86565b500390565b60005b83811015612ece578181015183820152602001612eb6565b83811115610cdb5750506000910152565b60008151808452612ef7816020860160208601612eb3565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061252b90830184612edf565b600060208284031215612f4157600080fd5b612d0282612e1c565b6001600160a01b03848116825283166020820152606060408201819052600090612f7690830184612edf565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03831681526040810160098310612fb557612fb5612f7f565b8260208301529392505050565b600060208284031215612fd457600080fd5b8151612d0281612cd0565b60008060408385031215612ff257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600081600019048311821515161561309457613094612e86565b500290565b6000826130b657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0384811682528316602082015260608101600283106130e3576130e3612f7f565b826040830152949350505050565b60008251613103818460208701612eb3565b9190910192915050565b602081526000612d026020830184612edf56fe72656d6f766546726f6d416c6c6f776c69737428616464726573732c616464726573732973657450656e64696e6752656465656d4368756e6b4c656e6774682875696e7432353629a26469706673582212204b609eff30160a8945e0b0a5c94465d46d3f1c03211d6125ec80f64df19ec3f564736f6c634300080d0033",
|
|
1034
1034
|
"linkReferences": {},
|
|
1035
1035
|
"deployedLinkReferences": {}
|
|
1036
1036
|
}
|
|
@@ -3,63 +3,169 @@ pragma solidity 0.8.13;
|
|
|
3
3
|
|
|
4
4
|
import { ReentrancyGuard } from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
|
|
5
5
|
import { Ownable2Step } from "@openzeppelin/contracts/access/Ownable2Step.sol";
|
|
6
|
-
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
7
|
-
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
8
6
|
import { ensureNonzeroAddress } from "@venusprotocol/solidity-utilities/contracts/validators.sol";
|
|
9
7
|
|
|
10
|
-
import { IVBep20 } from "../InterfacesV8.sol";
|
|
8
|
+
import { IVToken, IVBep20, IVBNB } from "../InterfacesV8.sol";
|
|
9
|
+
import { Currency, CurrencyLibrary } from "../lib/Currency.sol";
|
|
11
10
|
|
|
12
11
|
contract TokenRedeemer is ReentrancyGuard, Ownable2Step {
|
|
13
|
-
using
|
|
12
|
+
using CurrencyLibrary for Currency;
|
|
14
13
|
|
|
14
|
+
struct AccountBorrows {
|
|
15
|
+
address borrower;
|
|
16
|
+
uint256 amount;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
struct Borrows {
|
|
20
|
+
uint256 totalBorrows;
|
|
21
|
+
AccountBorrows[] accountBorrows;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
IVBNB public immutable VBNB;
|
|
25
|
+
|
|
26
|
+
error AccrueInterestFailed(uint256 errCode);
|
|
15
27
|
error RedeemFailed(uint256 errCode);
|
|
16
28
|
error RepaymentFailed(uint256 errCode);
|
|
29
|
+
error NativeTokenTransferFailed();
|
|
17
30
|
|
|
18
|
-
constructor(address owner_) {
|
|
31
|
+
constructor(address owner_, IVBNB vBNB) {
|
|
19
32
|
ensureNonzeroAddress(owner_);
|
|
33
|
+
VBNB = vBNB;
|
|
20
34
|
_transferOwnership(owner_);
|
|
21
35
|
}
|
|
22
36
|
|
|
23
|
-
|
|
24
|
-
|
|
37
|
+
receive() external payable {}
|
|
38
|
+
|
|
39
|
+
function redeemAndTransfer(IVToken vToken, address destination) external nonReentrant onlyOwner {
|
|
40
|
+
Currency underlying = _underlying(vToken);
|
|
25
41
|
uint256 err = vToken.redeem(vToken.balanceOf(address(this)));
|
|
26
42
|
if (err != 0) {
|
|
27
43
|
revert RedeemFailed(err);
|
|
28
44
|
}
|
|
29
|
-
|
|
45
|
+
underlying.transferAll(destination);
|
|
30
46
|
}
|
|
31
47
|
|
|
32
48
|
function redeemUnderlyingAndRepayBorrowBehalf(
|
|
33
|
-
|
|
49
|
+
IVToken vToken,
|
|
34
50
|
address borrower,
|
|
35
51
|
uint256 amount,
|
|
36
52
|
address receiver
|
|
37
53
|
) external nonReentrant onlyOwner {
|
|
38
|
-
|
|
54
|
+
Currency underlying = _underlying(vToken);
|
|
39
55
|
|
|
40
56
|
uint256 err = vToken.redeemUnderlying(amount);
|
|
41
57
|
if (err != 0) {
|
|
42
58
|
revert RedeemFailed(err);
|
|
43
59
|
}
|
|
44
60
|
|
|
45
|
-
|
|
61
|
+
underlying.approve(address(vToken), amount);
|
|
62
|
+
|
|
63
|
+
_repay(vToken, borrower, amount);
|
|
64
|
+
|
|
65
|
+
underlying.approve(address(vToken), 0);
|
|
66
|
+
|
|
67
|
+
underlying.transferAll(receiver);
|
|
68
|
+
Currency.wrap(address(vToken)).transferAll(receiver);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function redeemAndBatchRepay(
|
|
72
|
+
IVToken vToken,
|
|
73
|
+
address[] calldata borrowers,
|
|
74
|
+
address receiver
|
|
75
|
+
) external nonReentrant onlyOwner {
|
|
76
|
+
_accrueInterest(vToken);
|
|
77
|
+
|
|
78
|
+
(uint256 totalBorrowedAmount, AccountBorrows[] memory borrows) = _getBorrows(vToken, borrowers);
|
|
79
|
+
_redeemUpTo(vToken, totalBorrowedAmount);
|
|
80
|
+
|
|
81
|
+
Currency underlying = _underlying(vToken);
|
|
82
|
+
uint256 balance = underlying.balanceOfSelf();
|
|
83
|
+
underlying.approve(address(vToken), totalBorrowedAmount);
|
|
84
|
+
uint256 borrowsCount = borrows.length;
|
|
85
|
+
// The code below assumes no fees on transfer
|
|
86
|
+
if (balance >= totalBorrowedAmount) {
|
|
87
|
+
// If we're doing a full repayment, we can optimize it by skipping the balance checks
|
|
88
|
+
for (uint256 i = 0; i < borrowsCount; ++i) {
|
|
89
|
+
AccountBorrows memory accountBorrows = borrows[i];
|
|
90
|
+
_repay(vToken, accountBorrows.borrower, accountBorrows.amount);
|
|
91
|
+
}
|
|
92
|
+
} else {
|
|
93
|
+
// Otherwise, we have to check and update the balance on every iteration
|
|
94
|
+
for (uint256 i = 0; i < borrowsCount && balance != 0; ++i) {
|
|
95
|
+
AccountBorrows memory accountBorrows = borrows[i];
|
|
96
|
+
_repay(vToken, accountBorrows.borrower, _min(accountBorrows.amount, balance));
|
|
97
|
+
balance = underlying.balanceOfSelf();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
underlying.approve(address(vToken), 0);
|
|
46
101
|
|
|
47
|
-
|
|
102
|
+
underlying.transferAll(receiver);
|
|
103
|
+
Currency.wrap(address(vToken)).transferAll(receiver);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function sweepTokens(address token, address destination) external onlyOwner {
|
|
107
|
+
Currency.wrap(token).transferAll(destination);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function _accrueInterest(IVToken vToken) internal {
|
|
111
|
+
uint256 err = vToken.accrueInterest();
|
|
48
112
|
if (err != 0) {
|
|
49
|
-
revert
|
|
113
|
+
revert AccrueInterestFailed(err);
|
|
50
114
|
}
|
|
115
|
+
}
|
|
51
116
|
|
|
52
|
-
|
|
117
|
+
function _redeemUpTo(IVToken vToken, uint256 amount) internal {
|
|
118
|
+
uint256 unredeemedUnderlying = vToken.balanceOfUnderlying(address(this));
|
|
119
|
+
if (unredeemedUnderlying > 0) {
|
|
120
|
+
uint256 err = vToken.redeemUnderlying(_min(amount, unredeemedUnderlying));
|
|
121
|
+
if (err != 0) {
|
|
122
|
+
revert RedeemFailed(err);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
53
126
|
|
|
54
|
-
|
|
55
|
-
|
|
127
|
+
function _repay(IVToken vToken, address borrower, uint256 amount) internal {
|
|
128
|
+
if (amount == 0) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (_isVBNB(vToken)) {
|
|
132
|
+
IVBNB(address(vToken)).repayBorrowBehalf{ value: amount }(borrower);
|
|
133
|
+
} else {
|
|
134
|
+
uint256 err = IVBep20(address(vToken)).repayBorrowBehalf(borrower, amount);
|
|
135
|
+
if (err != 0) {
|
|
136
|
+
revert RepaymentFailed(err);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function _getBorrows(
|
|
142
|
+
IVToken vToken,
|
|
143
|
+
address[] calldata borrowers
|
|
144
|
+
) internal view returns (uint256, AccountBorrows[] memory) {
|
|
145
|
+
uint256 borrowersCount = borrowers.length;
|
|
146
|
+
AccountBorrows[] memory borrows = new AccountBorrows[](borrowersCount);
|
|
147
|
+
uint256 totalBorrowedAmount = 0;
|
|
148
|
+
for (uint256 i = 0; i < borrowers.length; ++i) {
|
|
149
|
+
address borrower = borrowers[i];
|
|
150
|
+
uint256 amount = vToken.borrowBalanceStored(borrower);
|
|
151
|
+
totalBorrowedAmount += amount;
|
|
152
|
+
borrows[i] = AccountBorrows({ borrower: borrower, amount: amount });
|
|
153
|
+
}
|
|
154
|
+
return (totalBorrowedAmount, borrows);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function _underlying(IVToken vToken) internal view returns (Currency) {
|
|
158
|
+
if (_isVBNB(vToken)) {
|
|
159
|
+
return CurrencyLibrary.NATIVE;
|
|
160
|
+
}
|
|
161
|
+
return Currency.wrap(IVBep20(address(vToken)).underlying());
|
|
56
162
|
}
|
|
57
163
|
|
|
58
|
-
function
|
|
59
|
-
|
|
164
|
+
function _isVBNB(IVToken vToken) internal view returns (bool) {
|
|
165
|
+
return address(vToken) == address(VBNB);
|
|
60
166
|
}
|
|
61
167
|
|
|
62
|
-
function
|
|
63
|
-
|
|
168
|
+
function _min(uint256 a, uint256 b) internal pure returns (uint256) {
|
|
169
|
+
return a < b ? a : b;
|
|
64
170
|
}
|
|
65
171
|
}
|
|
@@ -5,11 +5,19 @@ import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC
|
|
|
5
5
|
import { ResilientOracleInterface } from "@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol";
|
|
6
6
|
|
|
7
7
|
interface IVToken is IERC20Upgradeable {
|
|
8
|
+
function accrueInterest() external returns (uint256);
|
|
9
|
+
|
|
8
10
|
function redeem(uint256 redeemTokens) external returns (uint256);
|
|
9
11
|
|
|
12
|
+
function redeemUnderlying(uint256 redeemAmount) external returns (uint256);
|
|
13
|
+
|
|
10
14
|
function borrowBalanceCurrent(address borrower) external returns (uint256);
|
|
11
15
|
|
|
16
|
+
function balanceOfUnderlying(address owner) external returns (uint256);
|
|
17
|
+
|
|
12
18
|
function comptroller() external view returns (IComptroller);
|
|
19
|
+
|
|
20
|
+
function borrowBalanceStored(address account) external view returns (uint256);
|
|
13
21
|
}
|
|
14
22
|
|
|
15
23
|
interface IVBep20 is IVToken {
|
|
@@ -24,11 +32,11 @@ interface IVBep20 is IVToken {
|
|
|
24
32
|
) external returns (uint256);
|
|
25
33
|
|
|
26
34
|
function underlying() external view returns (address);
|
|
27
|
-
|
|
28
|
-
function redeemUnderlying(uint256 repayAmount) external returns (uint256);
|
|
29
35
|
}
|
|
30
36
|
|
|
31
37
|
interface IVBNB is IVToken {
|
|
38
|
+
function repayBorrowBehalf(address borrower) external payable;
|
|
39
|
+
|
|
32
40
|
function liquidateBorrow(address borrower, IVToken vTokenCollateral) external payable;
|
|
33
41
|
}
|
|
34
42
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
// This library is heavily inspired by Uniswap v4 Currency lib
|
|
5
|
+
// (https://github.com/Uniswap/v4-core/blob/b230769238879e1d4f58ffa57a4696b0c390d188/src/types/Currency.sol)
|
|
6
|
+
// Contrary to the implementation above, this library does not
|
|
7
|
+
// use assembly to save gas. It rather relies on OpenZeppelin's
|
|
8
|
+
// SafeERC20 to simplify the review and audits. This might change
|
|
9
|
+
// in future if it's more heavily used by Venus contracts.
|
|
10
|
+
|
|
11
|
+
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
12
|
+
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
13
|
+
|
|
14
|
+
type Currency is address;
|
|
15
|
+
|
|
16
|
+
library CurrencyLibrary {
|
|
17
|
+
using CurrencyLibrary for Currency;
|
|
18
|
+
|
|
19
|
+
/// @notice Thrown when a native transfer fails
|
|
20
|
+
error NativeTransferFailed();
|
|
21
|
+
|
|
22
|
+
Currency public constant NATIVE = Currency.wrap(0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @dev If currency is a token, invokes SafeERC20.forceApprove to allow spender
|
|
26
|
+
* to spend the amount of tokens on behalf of the current contract. Otherwise,
|
|
27
|
+
* does nothing.
|
|
28
|
+
* @param currency Currency
|
|
29
|
+
* @param spender The account approved to spend the tokens
|
|
30
|
+
* @param amount The approved amount
|
|
31
|
+
*/
|
|
32
|
+
function approve(Currency currency, address spender, uint256 amount) internal {
|
|
33
|
+
if (!currency.isNative()) {
|
|
34
|
+
// I'd rather use approveOrRevert instead of forceApprove
|
|
35
|
+
// once we migrate to OZ v5: force-approve does approve(0)
|
|
36
|
+
// before approving the amount, and it's not always
|
|
37
|
+
// desirable. The users will need to pay gas unnecessarily,
|
|
38
|
+
// and using just approve() is safe as long as we revert on
|
|
39
|
+
// errors (approveOrRevert handles that) and reset the approvals
|
|
40
|
+
// after transfers (which is a best practice recommended by
|
|
41
|
+
// auditors anyway).
|
|
42
|
+
SafeERC20.forceApprove(IERC20(Currency.unwrap(currency)), spender, amount);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @dev Transfers an amount of currency to the receiver. If currency is a token,
|
|
48
|
+
* uses SafeERC20.safeTransfer, otherwise transfers the native currency using
|
|
49
|
+
* the recommended approach (`receiver.call{value: amount}("")`).
|
|
50
|
+
* @param currency Currency
|
|
51
|
+
* @param receiver The account that would receive the tokens
|
|
52
|
+
* @param amount The amount to transfer
|
|
53
|
+
*/
|
|
54
|
+
function transfer(Currency currency, address receiver, uint256 amount) internal {
|
|
55
|
+
if (currency.isNative()) {
|
|
56
|
+
(bool success, ) = receiver.call{ value: amount }("");
|
|
57
|
+
if (!success) {
|
|
58
|
+
revert NativeTransferFailed();
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
SafeERC20.safeTransfer(IERC20(Currency.unwrap(currency)), receiver, amount);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function transferAll(Currency currency, address receiver) internal {
|
|
66
|
+
uint256 balance = currency.balanceOfSelf();
|
|
67
|
+
if (balance > 0) {
|
|
68
|
+
currency.transfer(receiver, balance);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function balanceOfSelf(Currency currency) internal view returns (uint256) {
|
|
73
|
+
if (currency.isNative()) {
|
|
74
|
+
return address(this).balance;
|
|
75
|
+
}
|
|
76
|
+
return IERC20(Currency.unwrap(currency)).balanceOf(address(this));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function isNative(Currency currency) internal pure returns (bool) {
|
|
80
|
+
return Currency.unwrap(currency) == Currency.unwrap(NATIVE);
|
|
81
|
+
}
|
|
82
|
+
}
|