UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,141 lines 72.6 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LendingPoolFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class LendingPoolFactory 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.LendingPoolFactory = LendingPoolFactory; 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: "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: "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: [], 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 = "0x60806040526200001360016000196200002f565b60005560006001553480156200002857600080fd5b5062000053565b6000828210156200004e57634e487b7160e01b81526011600452602481fd5b500390565b61543080620000636000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c806394ba89a211610104578063d15e0053116100a2578063e82fec2f11610071578063e82fec2f146105bc578063f8aaa0e9146105c8578063fd367dc4146105e8578063fe65acfe1461022c576101ce565b8063d15e00531461057a578063d1946dbc1461058d578063d34ac803146105a2578063dde43cba146105b5576101ce565b8063bf92857c116100de578063bf92857c146104d2578063c44b11f714610512578063c4d66de814610554578063cd11238214610567576101ce565b806394ba89a214610494578063a2b86e7b146104a7578063b187bd26146104b5576101ce565b8063386497fd11610171578063573ade811161014b578063573ade81146104485780635a3b74b91461045b57806369328dec1461046e57806390d2507414610481576101ce565b8063386497fd146103d15780634417a583146103e4578063532bd1d314610435576101ce565b806316d6b5f6116101ad57806316d6b5f61461022c5780631be090a5146102515780631cf006631461026457806335ea6a7514610277576101ce565b8062a718a9146101e5578063074b2e43146101f857806316c38b3c14610219575b6007546101e3906001600160a01b03166105f9565b005b6101e36101f3366004614b72565b610635565b600b5462010000900461ffff165b6040519081526020015b60405180910390f35b6101e3610227366004614e2c565b610651565b6006546001600160a01b03165b6040516001600160a01b039091168152602001610210565b6101e361025f366004614cbc565b6106b9565b6101e3610272366004614b02565b610757565b6103c4610285366004614a92565b604080516101a08101825260006101808201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152506001600160a01b0390811660009081526008602090815260409182902082516101a08101845281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416948201949094526002820154808416606083015284900483166080820152600382015492831660a08201529290910464ffffffffff1660c08301526004810154831660e0830152600581015483166101008301526006810154831661012083015260070154918216610140820152600160a01b90910460ff1661016082015290565b6040516102109190615081565b6102066103df366004614a92565b61094f565b6104266103f2366004614a92565b60408051602080820183526000918290526001600160a01b0393909316815260098352819020815192830190915254815290565b60405190518152602001610210565b6101e3610443366004614bcb565b610976565b610206610456366004614d9c565b610998565b6101e3610469366004614cbc565b610cb6565b61020661047c366004614d14565b610e4f565b6101e361048f366004614d55565b6111a6565b6101e36104a2366004614ce9565b6113f5565b6101e36101f3366004614de5565b600b54600160481b900460ff166040519015158152602001610210565b6104e56104e0366004614a92565b611796565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610210565b610426610520366004614a92565b60408051602080820183526000918290526001600160a01b0393909316815260088352819020815192830190915254815290565b6101e3610562366004614a92565b61188f565b6101e3610575366004614aca565b61193a565b610206610588366004614a92565b611b9f565b610595611bc1565b6040516102109190615001565b6101e36105b0366004614a92565b611cb0565b6001610206565b600b5461ffff16610206565b600b5462010000900461ffff1660405161ffff9091168152602001610210565b6007546001600160a01b0316610239565b6001600160a01b03811661060c57600080fd5b3660008037600080366000845af43d6000803e80801561062b573d6000f35b3d6000fd5b505050565b60075461064a906001600160a01b03166105f9565b5050505050565b610659611d45565b600b8054821515600160481b0269ff0000000000000000001990911617905560405133907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add85906106ae90841515815260200190565b60405180910390a250565b6001600160a01b03828116600090815260086020526040902060048101549091163314610737576106e8611d45565b60048101546040805180820190915260018152600d60fa1b6020820152906001600160a01b03166107355760405162461bcd60e51b815260040161072c919061504e565b60405180910390fd5b505b6040805160208101909152815481526107508184611d7d565b5190555050565b61075f611d95565b6001600160a01b03858116600090815260086020908152604091829020600481015483518085019094526002845261363360f01b92840192909252921633146107bb5760405162461bcd60e51b815260040161072c919061504e565b506001600160a01b038086166000908152600960209081526040918290206006548351631f94a27560e31b81529351919461085c948c948c946008948994600a9491169263fca513a892600480840193829003018186803b15801561081f57600080fd5b505afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190614aae565b611ddd565b846001600160a01b0316866001600160a01b0316146109465783156108dc57600782015481546002600160a01b90920460011b6101fe169190911b19168155856001600160a01b0316876001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b8215610946576001600160a01b03858116600081815260096020526040808220600787015481546002600160a01b90920460011b6101fe169190911b178155905190938b16917e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f291a3505b50505050505050565b6001600160a01b038116600090815260086020526040812061097090611eda565b92915050565b60075461098b906001600160a01b03166105f9565b5050505050505050505050565b60006109a2611d95565b60206109ad81611f65565b600b8054600160401b900460ff169060086109c78361538b565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b03861660009081526008602052604081209080610a088684611fcd565b915091506000876002811115610a2e57634e487b7160e01b600052602160045260246000fd5b9050610a3e848a838a87876120db565b60006001826002811115610a6257634e487b7160e01b600052602160045260246000fd5b14610a6d5782610a6f565b835b9050808a1015610a7c5750885b610a86858c612250565b6001826002811115610aa857634e487b7160e01b600052602160045260246000fd5b1415610b1b576005850154604051632770a7eb60e21b81526001600160a01b038a811660048301526024820184905290911690639dc29fac90604401600060405180830381600087803b158015610afe57600080fd5b505af1158015610b12573d6000803e3d6000fd5b50505050610b9e565b60068501546001860154604051637a94c56560e11b81526001600160a01b038b8116600483015260248201859052600160801b9092046001600160801b0316604482015291169063f5298aca90606401600060405180830381600087803b158015610b8557600080fd5b505af1158015610b99573d6000803e3d6000fd5b505050505b60048501546001600160a01b0316610bba868d8385600061228d565b81610bc5858761518f565b11610c065760078601546001600160a01b038a166000908152600960205260409020610c0691600160a01b900460ff168154600191821b9190911b19169055565b610c1b6001600160a01b038d163383856122a6565b336001600160a01b0316896001600160a01b03168d6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610c6a91815260200190565b60405180910390a450955050505050600b805460ff600160401b90910416906008610c9483615353565b91906101000a81548160ff021916908360ff1602179055505050949350505050565b610cbe611d95565b6001600160a01b03808316600090815260086020818152604080842033855260098352938190206006548251631f94a27560e31b815292519596610d699688968b968b96919594600a94169263fca513a8926004808201939291829003018186803b158015610d2c57600080fd5b505afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190614aae565b612306565b8115610dde576007810154336000908152600960205260409020610da491600160a01b900460ff168154600260019290921b9190911b179055565b60405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3505050565b6007810154336000908152600960205260409020610e1491600160a01b900460ff168154600260019290921b9190911b19169055565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a3505050565b6000610e59611d95565b6008610e6481611f65565b600b8054600160401b900460ff16906008610e7e8361538b565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038086166000908152600860205260408120600481015490921690610ec783896124c5565b604051630ed1279f60e11b81523360048201529091506000906001600160a01b03841690631da24f3e9060240160206040518083038186803b158015610f0c57600080fd5b505afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f449190614f0e565b9050610f5081836124fd565b9050600019881415610f60578097505b61101a898983600860096000336001600160a01b03166001600160a01b03168152602001908152602001600020600a600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610fdd57600080fd5b505afa158015610ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110159190614aae565b6125b8565b611028848a8560008c61228d565b8088141561109d57600784015433600090815260096020526040902061106691600160a01b900460ff168154600260019290921b9190911b19169055565b60405133906001600160a01b038b16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b604051636b81068560e11b81523360048201526001600160a01b038881166024830152604482018a90526064820184905284169063d7020d0a90608401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50505050866001600160a01b0316336001600160a01b03168a6001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78b60405161115b91815260200190565b60405180910390a487955050505050600b805460ff600160401b9091041690600861118583615353565b91906101000a81548160ff021916908360ff16021790555050509392505050565b6111ae611d95565b60046111b981611f65565b600b8054600160401b900460ff169060086111d38361538b565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038516600090815260086020526040902061121281866126e5565b60048101546001600160a01b0316600061122c83896124c5565b905061123c8389848a600061228d565b6112516001600160a01b03891633848a6122a6565b60405163dbf110a760e01b81526001600160a01b0387811660048301526024820189905260448201839052600060648301819052919084169063dbf110a790608401602060405180830381600087803b1580156112ad57600080fd5b505af11580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190614e48565b9050801561136b5760078401546001600160a01b038816600090815260096020526040902061132b91600160a01b900460ff168154600260019290921b9190911b179055565b866001600160a01b0316896001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b60408051338152602081018a905287916001600160a01b03808b1692908d16917f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59910160405180910390a45050600b8054600160401b900460ff169250905060086113d583615353565b91906101000a81548160ff021916908360ff160217905550505050505050565b6113fd611d95565b61140561279d565b600b8054600160401b900460ff1690600861141f8361538b565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b038216600090815260086020526040812090806114603384611fcd565b91509150600084600281111561148657634e487b7160e01b600052602160045260246000fd5b3360009081526009602052604090209091506114a69085908585856127ea565b6114b08487612250565b60018160028111156114d257634e487b7160e01b600052602160045260246000fd5b14156115e2576005840154604051632770a7eb60e21b8152336004820152602481018590526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b15801561152657600080fd5b505af115801561153a573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d9161158a91339182918991600160801b90046001600160801b031690600401614fd0565b602060405180830381600087803b1580156115a457600080fd5b505af11580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc9190614e48565b506116fc565b60068401546001850154604051637a94c56560e11b815233600482015260248101859052600160801b9091046001600160801b031660448201526001600160a01b039091169063f5298aca90606401600060405180830381600087803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d916116a8913391829188916001600160801b031690600401614fd0565b602060405180830381600087803b1580156116c257600080fd5b505af11580156116d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fa9190614e48565b505b600484015461171a90859088906001600160a01b031660008061228d565b60405185815233906001600160a01b038816907fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca69060200160405180910390a35050600b8054600160401b900460ff1692509050600861177983615353565b91906101000a81548160ff021916908360ff160217905550505050565b60008060008060008061186c876008600960008b6001600160a01b03166001600160a01b03168152602001908152602001600020604051806020016040529081600082015481525050600a600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561182f57600080fd5b505afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118679190614aae565b612a99565b93995091975090945092509050611884868684612fea565b935091939550919395565b6001600080600061189f8461301e565b92509250925080611927576001848155600680546001600160a01b0319166001600160a01b0388161790556118d59060646152c7565b6118e09060196152c7565b600b805461ffff191661ffff92909216919091179055611902600160096152c7565b600b805461ffff92909216620100000263ffff00001990921691909117905560008490555b8161064a57505060009081556001555050565b611942611d95565b61194a61279d565b600b8054600160401b900460ff169060086119648361538b565b825460ff9182166101009390930a9283029190920219909116179055506001600160a01b03828116600090815260086020526040808220600581015491516370a0823160e01b81528585166004820152909391909116919082906370a082319060240160206040518083038186803b1580156119df57600080fd5b505afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190614f0e565b60048401549091506001600160a01b0316611a3484878584613293565b611a3e8487612250565b604051632770a7eb60e21b81526001600160a01b03868116600483015260248201849052841690639dc29fac90604401600060405180830381600087803b158015611a8857600080fd5b505af1158015611a9c573d6000803e3d6000fd5b505050600385015460405163b3f1c93d60e01b81526001600160a01b038616925063b3f1c93d91611adf918991829188916001600160801b031690600401614fd0565b602060405180830381600087803b158015611af957600080fd5b505af1158015611b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b319190614e48565b50611b4084878360008061228d565b846001600160a01b0316866001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a35050600b8054600160401b900460ff1692509050600861177983615353565b6001600160a01b03811660009081526008602052604081206109709083613570565b600b546060906000906601000000000000900460ff1667ffffffffffffffff811115611bfd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c26578160200160208202803683370190505b50905060005b600b546601000000000000900460ff16811015611caa576000818152600a602052604090205482516001600160a01b0390911690839083908110611c8057634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015280611ca281615370565b915050611c2c565b50919050565b611cb8613660565b60408051808201909152600281526106e760f31b6020820152813b611cf05760405162461bcd60e51b815260040161072c919061504e565b50600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f0e030638e522ffbf19f7b85c12bb287a749bfacb4c42a960b393073eaa96de739060200160405180910390a150565b6040805180820190915260028152611b9b60f11b6020820152600654611d7b916001600160a01b03909116903390600190613694565b565b611d918267020000000000000019836136be565b5050565b600b546040805180820190915260028152610d8d60f21b602082015290600160481b900460ff1615611dda5760405162461bcd60e51b815260040161072c919061504e565b50565b60408051602081019091528354908190527f5555555555555555555555555555555555555555555555555555555555555555161580611e5a57506001600160a01b038616600090815260208581526040918290206007015482519182019092528454908190526002600160a01b90920460011b6101fe161c161515155b15611e6457611ed2565b604080516020810190915283548152600090611e8590879087908686612a99565b945050505050670de0b6b3a7640000811015604051806040016040528060018152602001601b60f91b81525090611ecf5760405162461bcd60e51b815260040161072c919061504e565b50505b505050505050565b600381015460009064ffffffffff600160801b9091048116904216811480611f0857508254600160501b1615155b15611f2657505060010154600160801b90046001600160801b031690565b60018301546002840154600091611f5d916001600160801b03600160801b92839004811692611f57920416856136d6565b906124fd565b949350505050565b611f6d6136e3565b600b546401000000009004811661ffff161580611f945750600b54600160381b900460ff16155b60405180604001604052806002815260200161383760f01b81525090611d915760405162461bcd60e51b815260040161072c919061504e565b60058101546040516370a0823160e01b81526001600160a01b03848116600483015260009283929116906370a082319060240160206040518083038186803b15801561201857600080fd5b505afa15801561202c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120509190614f0e565b60068401546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a082319060240160206040518083038186803b15801561209757600080fd5b505afa1580156120ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cf9190614f0e565b915091505b9250929050565b60006120ed8754600160381b16151590565b905080604051806040016040528060018152602001601960f91b815250906121285760405162461bcd60e51b815260040161072c919061504e565b506040805180820190915260018152603160f81b60208201528661215f5760405162461bcd60e51b815260040161072c919061504e565b5060008311801561218f5750600185600281111561218d57634e487b7160e01b600052602160045260246000fd5b145b806121c457506000821180156121c4575060028560028111156121c257634e487b7160e01b600052602160045260246000fd5b145b60405180604001604052806002815260200161313560f01b815250906121fd5760405162461bcd60e51b815260040161072c919061504e565b50600019861415806122175750336001600160a01b038516145b60405180604001604052806002815260200161189b60f11b81525090611ecf5760405162461bcd60e51b815260040161072c919061504e565b8154600160501b161561228457600382015464ffffffffff428116600160801b909204161015611d91576106308282613728565b610630826138e9565b8454600160501b1661064a5761064a85858585856139cd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612300908590613d94565b50505050565b6004878101546040516364b2517960e11b815233928101929092526000916001600160a01b039091169063c964a2f29060240160206040518083038186803b15801561235157600080fd5b505afa158015612365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123899190614f0e565b90506000811160405180604001604052806002815260200161313960f01b815250906123c85760405162461bcd60e51b815260040161072c919061504e565b5085612472578754604080518082019091526002815261323160f01b602082015290600160501b161561240e5760405162461bcd60e51b815260040161072c919061504e565b5061243387338388886040518060200160405290816000820154815250508888613f14565b60405180604001604052806002815260200161032360f41b8152509061246c5760405162461bcd60e51b815260040161072c919061504e565b50611ecf565b6000612480895461ffff1690565b1160405180604001604052806002815260200161323160f01b815250906124ba5760405162461bcd60e51b815260040161072c919061504e565b505050505050505050565b60006124d78354600160501b16151590565b156124ed576124e68383613728565b9050610970565b6124f6836138e9565b9392505050565b600082158061250a575081155b1561251757506000610970565b8161252f60026b033b2e3c9fd0803ce80000006151c8565b61253b90600019615310565b61254591906151c8565b83111560405180604001604052806002815260200161068760f31b815250906125815760405162461bcd60e51b815260040161072c919061504e565b506b033b2e3c9fd0803ce800000061259a6002826151c8565b6125a484866152f1565b6125ae919061518f565b6124f691906151c8565b6040805180820190915260018152603160f81b6020820152866125ee5760405162461bcd60e51b815260040161072c919061504e565b506040805180820190915260018152603560f81b6020820152858711156126285760405162461bcd60e51b815260040161072c919061504e565b506001600160a01b038716600090815260208590526040812061264a90614195565b505050905080604051806040016040528060018152602001601960f91b815250906126885760405162461bcd60e51b815260040161072c919061504e565b506126ad88338988886040518060200160405290816000820154815250508888613f14565b604051806040016040528060018152602001601b60f91b815250906124ba5760405162461bcd60e51b815260040161072c919061504e565b6000806126f184614195565b50506040805180820190915260018152603160f81b602082015291935091508361272e5760405162461bcd60e51b815260040161072c919061504e565b506040805180820190915260018152601960f91b6020820152826127655760405162461bcd60e51b815260040161072c919061504e565b506040805180820190915260018152603360f81b6020820152811561064a5760405162461bcd60e51b815260040161072c919061504e565b6127a56136e3565b600b54604080518082019091526002815261383760f01b602082015290600160381b900460ff1615611dda5760405162461bcd60e51b815260040161072c919061504e565b600080806127f788614195565b9350509250925082604051806040016040528060018152602001601960f91b8152509061283