UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,263 lines 77.2 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MockLendingPoolFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class MockLendingPoolFactory 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.MockLendingPoolFactory = MockLendingPoolFactory; const _abi = [ { inputs: [], stateMutability: "nonpayable", type: "constructor", }, { 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: "contract IMarketAccessController", name: "provider", type: "address", }, ], name: "reInitialize", 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 = "0x608060405262000013600160001962000112565b60005560006001553480156200002857600080fd5b506200003362000039565b62000136565b303b156200008e5760405162461bcd60e51b815260206004820152601460248201527f6f6e6c7920666f7220636f6e7374727563746f7200000000000000000000000060448201526064015b60405180910390fd5b6200009d600160001962000112565b6000541415620000ad5760008055565b60005415620001105760405162461bcd60e51b815260206004820152602860248201527f63616e206f6e6c792062652063616c6c6564206265666f726520696e697469616044820152676c697a657228732960c01b606482015260840162000085565b565b6000828210156200013157634e487b7160e01b81526011600452602481fd5b500390565b61567d80620001466000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c8063a2b86e7b1161011a578063d15e0053116100ad578063e82fec2f1161007c578063e82fec2f14610618578063e8eda9df14610624578063f8aaa0e914610637578063fd367dc414610657578063fe65acfe14610258576101fa565b8063d15e0053146105d5578063d1946dbc146105e8578063d34ac803146105fd578063dde43cba14610610576101fa565b8063bf92857c116100e9578063bf92857c1461052d578063c44b11f71461056d578063c4d66de8146105af578063cd112382146105c2576101fa565b8063a2b86e7b146104e6578063a415bcad146104f4578063ab9c4b5d14610502578063b187bd2614610510576101fa565b80634417a583116101925780635a3b74b9116101615780635a3b74b91461049a57806369328dec146104ad57806390d25074146104c057806394ba89a2146104d3576101fa565b80634417a5831461041057806344f95b9c14610461578063532bd1d314610474578063573ade8114610487576101fa565b80631be090a5116101ce5780631be090a51461027d5780631cf006631461029057806335ea6a75146102a3578063386497fd146103fd576101fa565b8062a718a914610211578063074b2e431461022457806316c38b3c1461024557806316d6b5f614610258575b60075461020f906001600160a01b0316610668565b005b61020f61021f366004614c37565b6106a4565b600b5462010000900461ffff165b6040519081526020015b60405180910390f35b61020f610253366004615084565b6106c0565b6006546001600160a01b03165b6040516001600160a01b03909116815260200161023c565b61020f61028b366004614e76565b610728565b61020f61029e366004614bc7565b6107c6565b6103f06102b1366004614b57565b604080516101a08101825260006101808201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152506001600160a01b0390811660009081526008602090815260409182902082516101a08101845281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416948201949094526002820154808416606083015284900483166080820152600382015492831660a08201529290910464ffffffffff1660c08301526004810154831660e0830152600581015483166101008301526006810154831661012083015260070154918216610140820152600160a01b90910460ff1661016082015290565b60405161023c91906152ce565b61023261040b366004614b57565b6109be565b61045261041e366004614b57565b60408051602080820183526000918290526001600160a01b0393909316815260098352819020815192830190915254815290565b6040519051815260200161023c565b61020f61046f366004614b57565b6109e5565b61020f610482366004614d85565b6109f1565b610232610495366004614fa6565b610a13565b61020f6104a8366004614e76565b610d31565b6102326104bb366004614ece565b610eca565b61020f6104ce366004614f5f565b611221565b61020f6104e1366004614ea3565b611470565b61020f61021f36600461503d565b61020f61021f366004614fef565b61020f610482366004614c90565b600b54600160481b900460ff16604051901515815260200161023c565b61054061053b366004614b57565b611811565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161023c565b61045261057b366004614b57565b60408051602080820183526000918290526001600160a01b0393909316815260088352819020815192830190915254815290565b61020f6105bd366004614b57565b61190a565b61020f6105d0366004614b8f565b6119b5565b6102326105e3366004614b57565b611c1a565b6105f0611c3c565b60405161023c919061524e565b61020f61060b366004614b57565b611d2b565b610232611dc0565b600b5461ffff16610232565b61020f610632366004614f0f565b611dcf565b600b5462010000900461ffff1660405161ffff909116815260200161023c565b6007546001600160a01b0316610265565b6001600160a01b03811661067b57600080fd5b3660008037600080366000845af43d6000803e80801561069a573d6000f35b3d6000fd5b505050565b6007546106b9906001600160a01b0316610668565b5050505050565b6106c8611de5565b600b8054821515600160481b0269ff0000000000000000001990911617905560405133907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859061071d90841515815260200190565b60405180910390a250565b6001600160a01b038281166000908152600860205260409020600481015490911633146107a657610757611de5565b60048101546040805180820190915260018152600d60fa1b6020820152906001600160a01b03166107a45760405162461bcd60e51b815260040161079b919061529b565b60405180910390fd5b505b6040805160208101909152815481526107bf8184611e1d565b5190555050565b6107ce611e35565b6001600160a01b03858116600090815260086020908152604091829020600481015483518085019094526002845261363360f01b928401929092529216331461082a5760405162461bcd60e51b815260040161079b919061529b565b506001600160a01b038086166000908152600960209081526040918290206006548351631f94a27560e31b8152935191946108cb948c948c946008948994600a9491169263fca513a892600480840193829003018186803b15801561088e57600080fd5b505afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190614b73565b611e7a565b846001600160a01b0316866001600160a01b0316146109b557831561094b57600782015481546002600160a01b90920460011b6101fe169190911b19168155856001600160a01b0316876001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b82156109b5576001600160a01b03858116600081815260096020526040808220600787015481546002600160a01b90920460011b6101fe169190911b178155905190938b16917e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f291a3505b50505050505050565b6001600160a01b03811660009081526008602052604081206109df90611f77565b92915050565b6109ee8161190a565b50565b600754610a06906001600160a01b0316610668565b5050505050505050505050565b6000610a1d611e35565b6020610a2881612002565b600b8054600160401b900460ff16906008610a42836155d8565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b03861660009081526008602052604081209080610a83868461206a565b915091506000876002811115610aa957634e487b7160e01b600052602160045260246000fd5b9050610ab9848a838a8787612178565b60006001826002811115610add57634e487b7160e01b600052602160045260246000fd5b14610ae85782610aea565b835b9050808a1015610af75750885b610b01858c6122ed565b6001826002811115610b2357634e487b7160e01b600052602160045260246000fd5b1415610b96576005850154604051632770a7eb60e21b81526001600160a01b038a811660048301526024820184905290911690639dc29fac90604401600060405180830381600087803b158015610b7957600080fd5b505af1158015610b8d573d6000803e3d6000fd5b50505050610c19565b60068501546001860154604051637a94c56560e11b81526001600160a01b038b8116600483015260248201859052600160801b9092046001600160801b0316604482015291169063f5298aca90606401600060405180830381600087803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b505050505b60048501546001600160a01b0316610c35868d8385600061232a565b81610c4085876153dc565b11610c815760078601546001600160a01b038a166000908152600960205260409020610c8191600160a01b900460ff168154600191821b9190911b19169055565b610c966001600160a01b038d16338385612343565b336001600160a01b0316896001600160a01b03168d6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610ce591815260200190565b60405180910390a450955050505050600b805460ff600160401b90910416906008610d0f836155a0565b91906101000a81548160ff021916908360ff1602179055505050949350505050565b610d39611e35565b6001600160a01b03808316600090815260086020818152604080842033855260098352938190206006548251631f94a27560e31b815292519596610de49688968b968b96919594600a94169263fca513a8926004808201939291829003018186803b158015610da757600080fd5b505afa158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf9190614b73565b61239d565b8115610e59576007810154336000908152600960205260409020610e1f91600160a01b900460ff168154600260019290921b9190911b179055565b60405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3505050565b6007810154336000908152600960205260409020610e8f91600160a01b900460ff168154600260019290921b9190911b19169055565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a3505050565b6000610ed4611e35565b6008610edf81612002565b600b8054600160401b900460ff16906008610ef9836155d8565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038086166000908152600860205260408120600481015490921690610f42838961255c565b604051630ed1279f60e11b81523360048201529091506000906001600160a01b03841690631da24f3e9060240160206040518083038186803b158015610f8757600080fd5b505afa158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf9190615166565b9050610fcb8183612594565b9050600019881415610fdb578097505b611095898983600860096000336001600160a01b03166001600160a01b03168152602001908152602001600020600a600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561105857600080fd5b505afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190614b73565b61264f565b6110a3848a8560008c61232a565b808814156111185760078401543360009081526009602052604090206110e191600160a01b900460ff168154600260019290921b9190911b19169055565b60405133906001600160a01b038b16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b604051636b81068560e11b81523360048201526001600160a01b038881166024830152604482018a90526064820184905284169063d7020d0a90608401600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b50505050866001600160a01b0316336001600160a01b03168a6001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78b6040516111d691815260200190565b60405180910390a487955050505050600b805460ff600160401b90910416906008611200836155a0565b91906101000a81548160ff021916908360ff16021790555050509392505050565b611229611e35565b600461123481612002565b600b8054600160401b900460ff1690600861124e836155d8565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038516600090815260086020526040902061128d818661277c565b60048101546001600160a01b031660006112a7838961255c565b90506112b78389848a600061232a565b6112cc6001600160a01b03891633848a612343565b60405163dbf110a760e01b81526001600160a01b0387811660048301526024820189905260448201839052600060648301819052919084169063dbf110a790608401602060405180830381600087803b15801561132857600080fd5b505af115801561133c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136091906150a0565b905080156113e65760078401546001600160a01b03881660009081526009602052604090206113a691600160a01b900460ff168154600260019290921b9190911b179055565b866001600160a01b0316896001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b60408051338152602081018a905287916001600160a01b03808b1692908d16917f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59910160405180910390a45050600b8054600160401b900460ff16925090506008611450836155a0565b91906101000a81548160ff021916908360ff160217905550505050505050565b611478611e35565b611480612834565b600b8054600160401b900460ff1690600861149a836155d8565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038216600090815260086020526040812090806114db338461206a565b91509150600084600281111561150157634e487b7160e01b600052602160045260246000fd5b336000908152600960205260409020909150611521908590858585612881565b61152b84876122ed565b600181600281111561154d57634e487b7160e01b600052602160045260246000fd5b141561165d576005840154604051632770a7eb60e21b8152336004820152602481018590526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b1580156115a157600080fd5b505af11580156115b5573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d9161160591339182918991600160801b90046001600160801b03169060040161521d565b602060405180830381600087803b15801561161f57600080fd5b505af1158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906150a0565b50611777565b60068401546001850154604051637a94c56560e11b815233600482015260248101859052600160801b9091046001600160801b031660448201526001600160a01b039091169063f5298aca90606401600060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d91611723913391829188916001600160801b03169060040161521d565b602060405180830381600087803b15801561173d57600080fd5b505af1158015611751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177591906150a0565b505b600484015461179590859088906001600160a01b031660008061232a565b60405185815233906001600160a01b038816907fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca69060200160405180910390a35050600b8054600160401b900460ff169250905060086117f4836155a0565b91906101000a81548160ff021916908360ff160217905550505050565b6000806000806000806118e7876008600960008b6001600160a01b03166001600160a01b03168152602001908152602001600020604051806020016040529081600082015481525050600a600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156118aa57600080fd5b505afa1580156118be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e29190614b73565b612b30565b939950919750909450925090506118ff868684613081565b935091939550919395565b6001600080600061191a846130b5565b925092509250806119a2576001848155600680546001600160a01b0319166001600160a01b038816179055611950906064615514565b61195b906019615514565b600b805461ffff191661ffff9290921691909117905561197d60016009615514565b600b805461ffff92909216620100000263ffff00001990921691909117905560008490555b816106b957505060009081556001555050565b6119bd611e35565b6119c5612834565b600b8054600160401b900460ff169060086119df836155d8565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b03828116600090815260086020526040808220600581015491516370a0823160e01b81528585166004820152909391909116919082906370a082319060240160206040518083038186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a929190615166565b60048401549091506001600160a01b0316611aaf84878584613335565b611ab984876122ed565b604051632770a7eb60e21b81526001600160a01b03868116600483015260248201849052841690639dc29fac90604401600060405180830381600087803b158015611b0357600080fd5b505af1158015611b17573d6000803e3d6000fd5b505050600385015460405163b3f1c93d60e01b81526001600160a01b038616925063b3f1c93d91611b5a918991829188916001600160801b03169060040161521d565b602060405180830381600087803b158015611b7457600080fd5b505af1158015611b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bac91906150a0565b50611bbb84878360008061232a565b846001600160a01b0316866001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a35050600b8054600160401b900460ff169250905060086117f4836155a0565b6001600160a01b03811660009081526008602052604081206109df9083613612565b600b546060906000906601000000000000900460ff1667ffffffffffffffff811115611c7857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611ca1578160200160208202803683370190505b50905060005b600b546601000000000000900460ff16811015611d25576000818152600a602052604090205482516001600160a01b0390911690839083908110611cfb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015280611d1d816155bd565b915050611ca7565b50919050565b611d33613702565b60408051808201909152600281526106e760f31b6020820152813b611d6b5760405162461bcd60e51b815260040161079b919061529b565b50600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f0e030638e522ffbf19f7b85c12bb287a749bfacb4c42a960b393073eaa96de739060200160405180910390a150565b6000611dca61373a565b905090565b611ddf8484848461ffff16611221565b50505050565b6040805180820190915260028152611b9b60f11b6020820152600654611e1b916001600160a01b03909116903390600190613747565b565b611e31826702000000000000001983613771565b5050565b600b546040805180820190915260028152610d8d60f21b602082015290600160481b900460ff16156109ee5760405162461bcd60e51b815260040161079b919061529b565b60408051602081019091528354908190527f5555555555555555555555555555555555555555555555555555555555555555161580611ef757506001600160a01b038616600090815260208581526040918290206007015482519182019092528454908190526002600160a01b90920460011b6101fe161c161515155b15611f0157611f6f565b604080516020810190915283548152600090611f2290879087908686612b30565b945050505050670de0b6b3a7640000811015604051806040016040528060018152602001601b60f91b81525090611f6c5760405162461bcd60e51b815260040161079b919061529b565b50505b505050505050565b600381015460009064ffffffffff600160801b9091048116904216811480611fa557508254600160501b1615155b15611fc357505060010154600160801b90046001600160801b031690565b60018301546002840154600091611ffa916001600160801b03600160801b92839004811692611ff492041685613789565b90612594565b949350505050565b61200a613796565b600b546401000000009004811661ffff1615806120315750600b54600160381b900460ff16155b60405180604001604052806002815260200161383760f01b81525090611e315760405162461bcd60e51b815260040161079b919061529b565b60058101546040516370a0823160e01b81526001600160a01b03848116600483015260009283929116906370a082319060240160206040518083038186803b1580156120b557600080fd5b505afa1580156120c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ed9190615166565b60068401546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a082319060240160206040518083038186803b15801561213457600080fd5b505afa158015612148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019