UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,245 lines 76.2 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LendingPoolCompatibleFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class LendingPoolCompatibleFactory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(overrides) { return super.deploy(overrides || {}); } getDeployTransaction(overrides) { return super.getDeployTransaction(overrides || {}); } attach(address) { return super.attach(address); } connect(signer) { return super.connect(signer); } static connect(address, signerOrProvider) { return new contracts_1.Contract(address, _abi, signerOrProvider); } } exports.LendingPoolCompatibleFactory = LendingPoolCompatibleFactory; const _abi = [ { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "onBehalfOf", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowRateMode", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowRate", type: "uint256", }, { indexed: true, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "Borrow", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "onBehalfOf", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: true, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "Deposit", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "disabledFeatures", type: "uint16", }, ], name: "DisabledFeaturesUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "by", type: "address", }, { indexed: false, internalType: "bool", name: "paused", type: "bool", }, ], name: "EmergencyPaused", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "target", type: "address", }, { indexed: true, internalType: "address", name: "initiator", type: "address", }, { indexed: true, internalType: "address", name: "asset", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "premium", type: "uint256", }, { indexed: false, internalType: "uint256", name: "referral", type: "uint256", }, ], name: "FlashLoan", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "premium", type: "uint16", }, ], name: "FlashLoanPremiumUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "extension", type: "address", }, ], name: "LendingPoolExtensionUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "collateralAsset", type: "address", }, { indexed: true, internalType: "address", name: "debtAsset", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "debtToCover", type: "uint256", }, { indexed: false, internalType: "uint256", name: "liquidatedCollateralAmount", type: "uint256", }, { indexed: false, internalType: "address", name: "liquidator", type: "address", }, { indexed: false, internalType: "bool", name: "receiveDeposit", type: "bool", }, ], name: "LiquidationCall", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "RebalanceStableBorrowRate", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "repayer", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Repay", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "underlying", type: "address", }, { indexed: false, internalType: "uint256", name: "liquidityRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "stableBorrowRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "variableBorrowRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "liquidityIndex", type: "uint256", }, { indexed: false, internalType: "uint256", name: "variableBorrowIndex", type: "uint256", }, ], name: "ReserveDataUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "ReserveUsedAsCollateralDisabled", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "ReserveUsedAsCollateralEnabled", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "rateMode", type: "uint256", }, ], name: "Swap", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Withdraw", type: "event", }, { stateMutability: "nonpayable", type: "fallback", }, { inputs: [], name: "FLASHLOAN_PREMIUM_TOTAL", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "MAX_STABLE_RATE_BORROW_SIZE_PERCENT", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "REVISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "address", name: "", type: "address", }, ], name: "borrow", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint16", name: "", type: "uint16", }, { internalType: "address", name: "", type: "address", }, ], name: "borrow", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "uint256", name: "referral", type: "uint256", }, ], name: "deposit", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "uint16", name: "referral", type: "uint16", }, ], name: "deposit", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "from", type: "address", }, { internalType: "address", name: "to", type: "address", }, { internalType: "bool", name: "lastBalanceFrom", type: "bool", }, { internalType: "bool", name: "firstBalanceTo", type: "bool", }, ], name: "finalizeTransfer", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address[]", name: "", type: "address[]", }, { internalType: "uint256[]", name: "", type: "uint256[]", }, { internalType: "uint256[]", name: "", type: "uint256[]", }, { internalType: "address", name: "", type: "address", }, { internalType: "bytes", name: "", type: "bytes", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "flashLoan", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address[]", name: "", type: "address[]", }, { internalType: "uint256[]", name: "", type: "uint256[]", }, { internalType: "uint256[]", name: "", type: "uint256[]", }, { internalType: "address", name: "", type: "address", }, { internalType: "bytes", name: "", type: "bytes", }, { internalType: "uint16", name: "", type: "uint16", }, ], name: "flashLoan", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getAccessController", outputs: [ { internalType: "contract IMarketAccessController", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getAddressesProvider", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getConfiguration", outputs: [ { components: [ { internalType: "uint256", name: "data", type: "uint256", }, ], internalType: "struct DataTypes.ReserveConfigurationMap", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getFlashloanPremiumPct", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getLendingPoolExtension", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveData", outputs: [ { components: [ { components: [ { internalType: "uint256", name: "data", type: "uint256", }, ], internalType: "struct DataTypes.ReserveConfigurationMap", name: "configuration", type: "tuple", }, { internalType: "uint128", name: "liquidityIndex", type: "uint128", }, { internalType: "uint128", name: "variableBorrowIndex", type: "uint128", }, { internalType: "uint128", name: "currentLiquidityRate", type: "uint128", }, { internalType: "uint128", name: "currentVariableBorrowRate", type: "uint128", }, { internalType: "uint128", name: "currentStableBorrowRate", type: "uint128", }, { internalType: "uint40", name: "lastUpdateTimestamp", type: "uint40", }, { internalType: "address", name: "depositTokenAddress", type: "address", }, { internalType: "address", name: "stableDebtTokenAddress", type: "address", }, { internalType: "address", name: "variableDebtTokenAddress", type: "address", }, { internalType: "address", name: "strategy", type: "address", }, { internalType: "uint8", name: "id", type: "uint8", }, ], internalType: "struct DataTypes.ReserveData", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveNormalizedIncome", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveNormalizedVariableDebt", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getReservesList", outputs: [ { internalType: "address[]", name: "", type: "address[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "getUserAccountData", outputs: [ { internalType: "uint256", name: "totalCollateralETH", type: "uint256", }, { internalType: "uint256", name: "totalDebtETH", type: "uint256", }, { internalType: "uint256", name: "availableBorrowsETH", type: "uint256", }, { internalType: "uint256", name: "currentLiquidationThreshold", type: "uint256", }, { internalType: "uint256", name: "ltv", type: "uint256", }, { internalType: "uint256", name: "healthFactor", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "getUserConfiguration", outputs: [ { components: [ { internalType: "uint256", name: "data", type: "uint256", }, ], internalType: "struct DataTypes.UserConfigurationMap", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract IMarketAccessController", name: "provider", type: "address", }, ], name: "initialize", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "bool", name: "", type: "bool", }, ], name: "liquidationCall", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "user", type: "address", }, ], name: "rebalanceStableBorrowRate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "rateMode", type: "uint256", }, { internalType: "address", name: "onBehalfOf", type: "address", }, ], name: "repay", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "extension", type: "address", }, ], name: "setLendingPoolExtension", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "val", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "bool", name: "paused", type: "bool", }, ], name: "setReservePaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "bool", name: "useAsCollateral", type: "bool", }, ], name: "setUserUseReserveAsCollateral", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "rateMode", type: "uint256", }, ], name: "swapBorrowRateMode", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amountToWithdraw", type: "uint256", }, { internalType: "address", name: "to", type: "address", }, ], name: "withdraw", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x60806040526200001360016000196200002f565b60005560006001553480156200002857600080fd5b5062000053565b6000828210156200004e57634e487b7160e01b81526011600452602481fd5b500390565b61562a80620000636000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063a415bcad1161010f578063d1946dbc116100a2578063e8eda9df11610071578063e8eda9df14610605578063f8aaa0e914610618578063fd367dc414610638578063fe65acfe1461024d576101ef565b8063d1946dbc146105ca578063d34ac803146105df578063dde43cba146105f2578063e82fec2f146105f9576101ef565b8063c44b11f7116100de578063c44b11f71461054f578063c4d66de814610591578063cd112382146105a4578063d15e0053146105b7576101ef565b8063a415bcad146104d6578063ab9c4b5d146104e4578063b187bd26146104f2578063bf92857c1461050f576101ef565b80634417a5831161018757806369328dec1161015657806369328dec1461048f57806390d25074146104a257806394ba89a2146104b5578063a2b86e7b146104c8576101ef565b80634417a58314610405578063532bd1d314610456578063573ade81146104695780635a3b74b91461047c576101ef565b80631be090a5116101c35780631be090a5146102725780631cf006631461028557806335ea6a7514610298578063386497fd146103f2576101ef565b8062a718a914610206578063074b2e431461021957806316c38b3c1461023a57806316d6b5f61461024d575b600754610204906001600160a01b0316610649565b005b610204610214366004614be4565b610685565b600b5462010000900461ffff165b6040519081526020015b60405180910390f35b610204610248366004615031565b6106a1565b6006546001600160a01b03165b6040516001600160a01b039091168152602001610231565b610204610280366004614e23565b610709565b610204610293366004614b74565b6107a7565b6103e56102a6366004614b04565b604080516101a08101825260006101808201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152506001600160a01b0390811660009081526008602090815260409182902082516101a08101845281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416948201949094526002820154808416606083015284900483166080820152600382015492831660a08201529290910464ffffffffff1660c08301526004810154831660e0830152600581015483166101008301526006810154831661012083015260070154918216610140820152600160a01b90910460ff1661016082015290565b604051610231919061527b565b610227610400366004614b04565b61099f565b610447610413366004614b04565b60408051602080820183526000918290526001600160a01b0393909316815260098352819020815192830190915254815290565b60405190518152602001610231565b610204610464366004614d32565b6109c6565b610227610477366004614f53565b6109e8565b61020461048a366004614e23565b610d06565b61022761049d366004614e7b565b610e9f565b6102046104b0366004614f0c565b6111f6565b6102046104c3366004614e50565b611445565b610204610214366004614fea565b610204610214366004614f9c565b610204610464366004614c3d565b600b54600160481b900460ff166040519015158152602001610231565b61052261051d366004614b04565b6117e6565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610231565b61044761055d366004614b04565b60408051602080820183526000918290526001600160a01b0393909316815260088352819020815192830190915254815290565b61020461059f366004614b04565b6118df565b6102046105b2366004614b3c565b61198a565b6102276105c5366004614b04565b611bef565b6105d2611c11565b60405161023191906151fb565b6102046105ed366004614b04565b611d00565b6001610227565b600b5461ffff16610227565b610204610613366004614ebc565b611d95565b600b5462010000900461ffff1660405161ffff9091168152602001610231565b6007546001600160a01b031661025a565b6001600160a01b03811661065c57600080fd5b3660008037600080366000845af43d6000803e80801561067b573d6000f35b3d6000fd5b505050565b60075461069a906001600160a01b0316610649565b5050505050565b6106a9611dab565b600b8054821515600160481b0269ff0000000000000000001990911617905560405133907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add85906106fe90841515815260200190565b60405180910390a250565b6001600160a01b0382811660009081526008602052604090206004810154909116331461078757610738611dab565b60048101546040805180820190915260018152600d60fa1b6020820152906001600160a01b03166107855760405162461bcd60e51b815260040161077c9190615248565b60405180910390fd5b505b6040805160208101909152815481526107a08184611de3565b5190555050565b6107af611dfb565b6001600160a01b03858116600090815260086020908152604091829020600481015483518085019094526002845261363360f01b928401929092529216331461080b5760405162461bcd60e51b815260040161077c9190615248565b506001600160a01b038086166000908152600960209081526040918290206006548351631f94a27560e31b8152935191946108ac948c948c946008948994600a9491169263fca513a892600480840193829003018186803b15801561086f57600080fd5b505afa158015610883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a79190614b20565b611e43565b846001600160a01b0316866001600160a01b03161461099657831561092c57600782015481546002600160a01b90920460011b6101fe169190911b19168155856001600160a01b0316876001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b8215610996576001600160a01b03858116600081815260096020526040808220600787015481546002600160a01b90920460011b6101fe169190911b178155905190938b16917e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f291a3505b50505050505050565b6001600160a01b03811660009081526008602052604081206109c090611f40565b92915050565b6007546109db906001600160a01b0316610649565b5050505050505050505050565b60006109f2611dfb565b60206109fd81611fcb565b600b8054600160401b900460ff16906008610a1783615585565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b03861660009081526008602052604081209080610a588684612033565b915091506000876002811115610a7e57634e487b7160e01b600052602160045260246000fd5b9050610a8e848a838a8787612141565b60006001826002811115610ab257634e487b7160e01b600052602160045260246000fd5b14610abd5782610abf565b835b9050808a1015610acc5750885b610ad6858c6122b6565b6001826002811115610af857634e487b7160e01b600052602160045260246000fd5b1415610b6b576005850154604051632770a7eb60e21b81526001600160a01b038a811660048301526024820184905290911690639dc29fac90604401600060405180830381600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b50505050610bee565b60068501546001860154604051637a94c56560e11b81526001600160a01b038b8116600483015260248201859052600160801b9092046001600160801b0316604482015291169063f5298aca90606401600060405180830381600087803b158015610bd557600080fd5b505af1158015610be9573d6000803e3d6000fd5b505050505b60048501546001600160a01b0316610c0a868d838560006122f3565b81610c158587615389565b11610c565760078601546001600160a01b038a166000908152600960205260409020610c5691600160a01b900460ff168154600191821b9190911b19169055565b610c6b6001600160a01b038d1633838561230c565b336001600160a01b0316896001600160a01b03168d6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610cba91815260200190565b60405180910390a450955050505050600b805460ff600160401b90910416906008610ce48361554d565b91906101000a81548160ff021916908360ff1602179055505050949350505050565b610d0e611dfb565b6001600160a01b03808316600090815260086020818152604080842033855260098352938190206006548251631f94a27560e31b815292519596610db99688968b968b96919594600a94169263fca513a8926004808201939291829003018186803b158015610d7c57600080fd5b505afa158015610d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db49190614b20565b612366565b8115610e2e576007810154336000908152600960205260409020610df491600160a01b900460ff168154600260019290921b9190911b179055565b60405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3505050565b6007810154336000908152600960205260409020610e6491600160a01b900460ff168154600260019290921b9190911b19169055565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a3505050565b6000610ea9611dfb565b6008610eb481611fcb565b600b8054600160401b900460ff16906008610ece83615585565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038086166000908152600860205260408120600481015490921690610f178389612525565b604051630ed1279f60e11b81523360048201529091506000906001600160a01b03841690631da24f3e9060240160206040518083038186803b158015610f5c57600080fd5b505afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190615113565b9050610fa0818361255d565b9050600019881415610fb0578097505b61106a898983600860096000336001600160a01b03166001600160a01b03168152602001908152602001600020600a600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561102d57600080fd5b505afa158015611041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110659190614b20565b612618565b611078848a8560008c6122f3565b808814156110ed5760078401543360009081526009602052604090206110b691600160a01b900460ff168154600260019290921b9190911b19169055565b60405133906001600160a01b038b16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b604051636b81068560e11b81523360048201526001600160a01b038881166024830152604482018a90526064820184905284169063d7020d0a90608401600060405180830381600087803b15801561114457600080fd5b505af1158015611158573d6000803e3d6000fd5b50505050866001600160a01b0316336001600160a01b03168a6001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78b6040516111ab91815260200190565b60405180910390a487955050505050600b805460ff600160401b909104169060086111d58361554d565b91906101000a81548160ff021916908360ff16021790555050509392505050565b6111fe611dfb565b600461120981611fcb565b600b8054600160401b900460ff1690600861122383615585565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b03851660009081526008602052604090206112628186612745565b60048101546001600160a01b0316600061127c8389612525565b905061128c8389848a60006122f3565b6112a16001600160a01b03891633848a61230c565b60405163dbf110a760e01b81526001600160a01b0387811660048301526024820189905260448201839052600060648301819052919084169063dbf110a790608401602060405180830381600087803b1580156112fd57600080fd5b505af1158015611311573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611335919061504d565b905080156113bb5760078401546001600160a01b038816600090815260096020526040902061137b91600160a01b900460ff168154600260019290921b9190911b179055565b866001600160a01b0316896001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b60408051338152602081018a905287916001600160a01b03808b1692908d16917f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59910160405180910390a45050600b8054600160401b900460ff169250905060086114258361554d565b91906101000a81548160ff021916908360ff160217905550505050505050565b61144d611dfb565b6114556127fd565b600b8054600160401b900460ff1690600861146f83615585565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038216600090815260086020526040812090806114b03384612033565b9150915060008460028111156114d657634e487b7160e01b600052602160045260246000fd5b3360009081526009602052604090209091506114f690859085858561284a565b61150084876122b6565b600181600281111561152257634e487b7160e01b600052602160045260246000fd5b1415611632576005840154604051632770a7eb60e21b8152336004820152602481018590526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d916115da91339182918991600160801b90046001600160801b0316906004016151ca565b602060405180830381600087803b1580156115f457600080fd5b505af1158015611608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162c919061504d565b5061174c565b60068401546001850154604051637a94c56560e11b815233600482015260248101859052600160801b9091046001600160801b031660448201526001600160a01b039091169063f5298aca90606401600060405180830381600087803b15801561169b57600080fd5b505af11580156116af573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d916116f8913391829188916001600160801b0316906004016151ca565b602060405180830381600087803b15801561171257600080fd5b505af1158015611726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174a919061504d565b505b600484015461176a90859088906001600160a01b03166000806122f3565b60405185815233906001600160a01b038816907fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca69060200160405180910390a35050600b8054600160401b900460ff169250905060086117c98361554d565b91906101000a81548160ff021916908360ff160217905550505050565b6000806000806000806118bc876008600960008b6001600160a01b03166001600160a01b03168152602001908152602001600020604051806020016040529081600082015481525050600a600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561187f57600080fd5b505afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190614b20565b612af9565b939950919750909450925090506118d486868461304a565b935091939550919395565b600160008060006118ef8461307e565b92509250925080611977576001848155600680546001600160a01b0319166001600160a01b0388161790556119259060646154c1565b6119309060196154c1565b600b805461ffff191661ffff92909216919091179055611952600160096154c1565b600b805461ffff92909216620100000263ffff00001990921691909117905560008490555b8161069a57505060009081556001555050565b611992611dfb565b61199a6127fd565b600b8054600160401b900460ff169060086119b483615585565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b03828116600090815260086020526040808220600581015491516370a0823160e01b81528585166004820152909391909116919082906370a082319060240160206040518083038186803b158015611a2f57600080fd5b505afa158015611a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a679190615113565b60048401549091506001600160a01b0316611a84848785846132f3565b611a8e84876122b6565b604051632770a7eb60e21b81526001600160a01b03868116600483015260248201849052841690639dc29fac90604401600060405180830381600087803b158015611ad857600080fd5b505af1158015611aec573d6000803e3d6000fd5b505050600385015460405163b3f1c93d60e01b81526001600160a01b038616925063b3f1c93d91611b2f918991829188916001600160801b0316906004016151ca565b602060405180830381600087803b158015611b4957600080fd5b505af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061504d565b50611b908487836000806122f3565b846001600160a01b0316866001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a35050600b8054600160401b900460ff169250905060086117c98361554d565b6001600160a01b03811660009081526008602052604081206109c090836135d0565b600b546060906000906601000000000000900460ff1667ffffffffffffffff811115611c4d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c76578160200160208202803683370190505b50905060005b600b546601000000000000900460ff16811015611cfa576000818152600a602052604090205482516001600160a01b0390911690839083908110611cd057634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015280611cf28161556a565b915050611c7c565b50919050565b611d086136c0565b60408051808201909152600281526106e760f31b6020820152813b611d405760405162461bcd60e51b815260040161077c9190615248565b50600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f0e030638e522ffbf19f7b85c12bb287a749bfacb4c42a960b393073eaa96de739060200160405180910390a150565b611da58484848461ffff166111f6565b50505050565b6040805180820190915260028152611b9b60f11b6020820152600654611de1916001600160a01b039091169033906001906136f4565b565b611df782670200000000000000198361371e565b5050565b600b546040805180820190915260028152610d8d60f21b602082015290600160481b900460ff1615611e405760405162461bcd60e51b815260040161077c9190615248565b50565b60408051602081019091528354908190527f5555555555555555555555555555555555555555555555555555555555555555161580611ec057506001600160a01b038616600090815260208581526040918290206007015482519182019092528454908190526002600160a01b90920460011b6101fe161c161515155b15611eca57611f38565b604080516020810190915283548152600090611eeb90879087908686612af9565b945050505050670de0b6b3a7640000811015604051806040016040528060018152602001601b60f91b81525090611f355760405162461bcd60e51b815260040161077c9190615248565b50505b505050505050565b600381015460009064ffffffffff600160801b9091048116904216811480611f6e57508254600160501b1615155b15611f8c57505060010154600160801b90046001600160801b031690565b60018301546002840154600091611fc3916001600160801b03600160801b92839004811692611fbd92041685613736565b9061255d565b949350505050565b611fd3613743565b600b546401000000009004811661ffff161580611ffa5750600b54600160381b900460ff16155b60405180604001604052806002815260200161383760f01b81525090611df75760405162461bcd60e51b815260040161077c9190615248565b60058101546040516370a0823160e01b81526001600160a01b03848116600483015260009283929116906370a082319060240160206040518083038186803b15801561207e57600080fd5b505afa158015612092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b69190615113565b60068401546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a082319060240160206040518083038186803b1580156120fd57600080fd5b505afa158015612111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121359190615113565b915091505b9250929050565b60006121538754600160381b16151590565b905080604051806040016040528060018152602001601960f91b8152509061218e5760405162461bcd60e51b815260040161077c9190615248565b506040805180820190915260018152603160f81b6020820152866121c55760405162461bcd60e51b815260040161077c9190615248565b506000831180156121f5575060018560028111156121f357634e487b7160e01b600052602160045260246000fd5b145b8061222a575060008211801561222a5750600285600281111561222857634e487b7160e01b600052602160045260246000fd5b145b60405180604001604052806002815260200161313560f01b815250906122635760405162461bcd60e51b815260040161077c9190615248565b506000198614158061227d5750336001600160a01b038516145b60405180604001604052806002815260200161189b60f11b81525090611f355760405162461bcd60e51b815260040161077c9190615248565b8154600160501b16156122ea57600382015464ffffffffff428116600160801b909204161015611df7576106808282613788565b61068082613949565b8454600160501b1661069a5761069a8585858585613a2d56