UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,112 lines 55.1 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MockVariableDebtTokenFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class MockVariableDebtTokenFactory 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.MockVariableDebtTokenFactory = MockVariableDebtTokenFactory; const _abi = [ { inputs: [], stateMutability: "nonpayable", type: "constructor", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "", type: "uint16", }, ], name: "BaselinePercentageUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "fromUser", type: "address", }, { indexed: true, internalType: "address", name: "toUser", type: "address", }, { indexed: false, internalType: "address", name: "asset", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "BorrowAllowanceDelegated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "index", type: "uint256", }, ], name: "Burn", 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: "underlyingAsset", type: "address", }, { indexed: true, internalType: "address", name: "pool", type: "address", }, { indexed: false, internalType: "address", name: "treasury", type: "address", }, { indexed: false, internalType: "string", name: "tokenName", type: "string", }, { indexed: false, internalType: "string", name: "tokenSymbol", type: "string", }, { indexed: false, internalType: "uint8", name: "tokenDecimals", type: "uint8", }, { indexed: false, internalType: "bytes", name: "params", type: "bytes", }, ], name: "Initialized", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "onBehalfOf", type: "address", }, { indexed: false, internalType: "uint256", name: "value", type: "uint256", }, { indexed: false, internalType: "uint256", name: "index", type: "uint256", }, ], name: "Mint", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, { indexed: false, internalType: "address", name: "token", type: "address", }, ], name: "ProviderAdded", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, ], name: "ProviderRemoved", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "rate", type: "uint256", }, ], name: "RateUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "value", type: "uint256", }, ], name: "Transfer", type: "event", }, { inputs: [], name: "POOL", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "REVISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "UNDERLYING_ASSET_ADDRESS", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], name: "addRewardProvider", outputs: [], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], name: "allowance", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "approve", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "delegatee", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "approveDelegation", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "attachedToRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "balanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "fromUser", type: "address", }, { internalType: "address", name: "toUser", type: "address", }, ], name: "borrowAllowance", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "index", type: "uint256", }, ], name: "burn", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint32", name: "at", type: "uint32", }, ], name: "calcRewardFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "claimRewardFor", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "", type: "uint32", }, { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint256", name: "baseAmount", type: "uint256", }, { internalType: "uint256", name: "limit", type: "uint256", }, { internalType: "uint16", name: "minPct", type: "uint16", }, ], name: "claimRewardWithLimitFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "bool", name: "keepPull", type: "bool", }, { internalType: "uint256", name: "newLimit", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "decimals", outputs: [ { internalType: "uint8", name: "", type: "uint8", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "detachedFromRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getBaselinePercentage", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getIncentivesController", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getOwner", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getPoolName", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRewardController", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getScaleIndex", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "getScaledUserBalanceAndSupply", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { components: [ { internalType: "address", name: "pool", type: "address", }, { internalType: "address", name: "treasury", type: "address", }, { internalType: "address", name: "underlyingAsset", type: "address", }, { internalType: "uint8", name: "underlyingDecimals", type: "uint8", }, ], internalType: "struct PoolTokenConfig", name: "config", type: "tuple", }, { internalType: "string", name: "name", type: "string", }, { internalType: "string", name: "symbol", type: "string", }, { internalType: "bytes", name: "params", type: "bytes", }, ], name: "initialize", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { components: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "string", name: "poolName", type: "string", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, ], internalType: "struct IInitializableRewardPool.InitRewardPoolData", name: "config", type: "tuple", }, ], name: "initializeRewardPool", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "initializedRewardPoolWith", outputs: [ { components: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "string", name: "poolName", type: "string", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, ], internalType: "struct IInitializableRewardPool.InitRewardPoolData", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "index", type: "uint256", }, ], name: "mint", outputs: [ { internalType: "bool", name: "firstBalance", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "name", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "provider", type: "address", }, ], name: "removeRewardProvider", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "rewardedBalanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "scaledBalanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "scaledTotalSupply", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "factor", type: "uint16", }, ], name: "setBaselinePercentage", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "hook", type: "address", }, ], name: "setIncentivesController", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "paused", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "symbol", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalSupply", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "transfer", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "transferFrom", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "baseline", type: "uint256", }, ], name: "updateBaseline", outputs: [ { internalType: "bool", name: "hasBaseline", type: "bool", }, { internalType: "uint256", name: "appliedRate", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "updatePool", outputs: [], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x608060405262000013600160001962000698565b600c556000600d553480156200002857600080fd5b506000808080806000604080516020808201808452600080845284519283019094528382528251929391926200006091839162000567565b5081516200007690600190602085019062000567565b506002805460ff929092166001600160a81b0319909216919091176101006001600160a01b03958616021790555050600380546001600160a01b0319908116948316949094179055600480549093169116179055604080516020810190915260008152620000ea90849084908490620000fe565b50620000f891505062000147565b6200072d565b600a80546001600160a01b0319166001600160a01b03861617905561ffff8216156200012f576200012f8262000221565b82156200014157620001418362000302565b50505050565b303b156200019c5760405162461bcd60e51b815260206004820152601460248201527f6f6e6c7920666f7220636f6e7374727563746f7200000000000000000000000060448201526064015b60405180910390fd5b620001ab600160001962000698565b600c541415620001bc576000600c55565b600c54156200021f5760405162461bcd60e51b815260206004820152602860248201527f63616e206f6e6c792062652063616c6c6564206265666f726520696e697469616044820152676c697a657228732960c01b606482015260840162000193565b565b6200022b62000348565b61ffff8116620002475762000241600062000302565b620002ab565b620002556001606462000649565b6200026290606462000649565b61ffff168161ffff161115620002ab5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b604482015260640162000193565b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b6200030c62000348565b6200031781620003a2565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b90602001620002f7565b600a546001600160a01b03166200021f5760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000193565b620003b881620003bb60201b620011051760201c565b50565b620003b881426007546001600160e01b0316821415620003d9575050565b6001600160e01b03821115620003ee57600080fd5b60075463ffffffff600160e01b909104811690821681146200045b576007546001600160e01b0390811690620004279084906200046016565b600780546001600160e01b0319166001600160e01b038681169190911790915562000141908281169084908690620004df16565b505050565b60075463ffffffff600160e01b90910481169082161015620004ba5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000193565b6007805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b600954620004ec57505050565b8163ffffffff168163ffffffff16146200045b576009546200051e906ec097ce7bc90715b34b9f100000000062000628565b6200052a908462000676565b9250620005388282620006b2565b6200054a9063ffffffff168462000676565b600860008282546200055d91906200060d565b9091555050505050565b8280546200057590620006da565b90600052602060002090601f016020900481019282620005995760008555620005e4565b82601f10620005b457805160ff1916838001178555620005e4565b82800160010185558215620005e4579182015b82811115620005e4578251825591602001919060010190620005c7565b50620005f2929150620005f6565b5090565b5b80821115620005f25760008155600101620005f7565b6000821982111562000623576200062362000717565b500190565b6000826200064457634e487b7160e01b81526012600452602481fd5b500490565b600061ffff808316818516818304811182151516156200066d576200066d62000717565b02949350505050565b600081600019048311821515161562000693576200069362000717565b500290565b600082821015620006ad57620006ad62000717565b500390565b600063ffffffff83811690831681811015620006d257620006d262000717565b039392505050565b600181811c90821680620006ef57607f821691505b602082108114156200071157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b612f82806200073d6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c8063893d20e811610151578063b3f1c93d116100c3578063dde43cba11610087578063dde43cba146105a3578063e3161ddd146105ab578063e4ae9af7146105b3578063e655dbd8146105c6578063f5298aca146105d9578063ff85a2ba146105ec57600080fd5b8063b3f1c93d1461054c578063b6fe2e9c1461055f578063c04a8a1014610572578063d299398314610585578063dd62ed3e1461058d57600080fd5b8063a8346a8c11610115578063a8346a8c146104d0578063a9059cbb146102a2578063a9dd77021461050e578063b16a19de14610521578063b187bd2614610532578063b1bf962d1461054457600080fd5b8063893d20e8146104655780638abc37d31461047b57806392efda79146104af57806395d89b41146104c05780639cfa7768146104c857600080fd5b8063313ce567116101ea57806355f4f197116101ae57806355f4f197146103de578063679aefce146103e65780636bd76d24146103ee57806370a08231146104275780637535d2461461043a57806375d264131461045f57600080fd5b8063313ce5671461036d57806337a92626146103825780633a7d4089146103955780634800df8c146103aa5780634d25c4f1146103bd57600080fd5b806316c38b3c1161023157806316c38b3c1461031757806318160ddd1461032c5780631da24f3e146103345780631dd0f4831461034757806323b872dd1461035a57600080fd5b806306fdde031461026e5780630746363d1461028c578063095ea7b3146102a25780630afbcdc9146102c55780630ca2103d146102ed575b600080fd5b610276610621565b6040516102839190612d50565b60405180910390f35b6102946106b3565b604051908152602001610283565b6102b56102b0366004612954565b6106c8565b6040519015158152602001610283565b6102d86102d336600461285f565b6106dc565b60408051928352602083019190915201610283565b6103006102fb366004612bf5565b6106f9565b604080519215158352602083019190915201610283565b61032a610325366004612a2f565b61074d565b005b6102946107bf565b61029461034236600461285f565b6107da565b61032a61035536600461285f565b6107e5565b6102b56103683660046128cf565b6107f0565b60025460405160ff9091168152602001610283565b61032a610390366004612a67565b61080d565b61039d6108fb565b6040516102839190612d63565b61032a6103b8366004612bdb565b610984565b600a54600160a01b900461ffff1660405161ffff9091168152602001610283565b610294610995565b6102946109a4565b6102946103fc366004612897565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b61029461043536600461285f565b6109ae565b6003546001600160a01b03165b6040516001600160a01b039091168152602001610283565b30610447565b60025461010090046001600160a01b0316610447565b61048e6104893660046129fa565b6109e3565b60408051938452602084019290925263ffffffff1690820152606001610283565b600a546001600160a01b0316610447565b610276610a1c565b610294610a2b565b6104e36104de3660046129b3565b610aaf565b6040805194855263ffffffff9093166020850152901515918301919091526060820152608001610283565b61029461051c36600461285f565b610adb565b6004546001600160a01b0316610447565b600a54600160b01b900460ff166102b5565b610294610ae6565b6102b561055a36600461290f565b610af0565b61032a61056d366004612897565b610c25565b61032a610580366004612954565b610c39565b610276610ca4565b61029461059b366004612897565b600092915050565b610294610cae565b61032a610cb8565b61032a6105c1366004612a9f565b610dae565b61032a6105d436600461285f565b610fb6565b61032a6105e736600461297f565b610ffa565b6105ff6105fa36600461285f565b6110e1565b6040805193845263ffffffff9092166020840152151590820152606001610283565b60606000805461063090612ec2565b80601f016020809104026020016040519081016040528092919081815260200182805461065c90612ec2565b80156106a95780601f1061067e576101008083540402835291602001916106a9565b820191906000526020600020905b81548152906001019060200180831161068c57829003601f168201915b5050505050905090565b60006106bd61110f565b50600090565b905090565b60006106d2611156565b5060005b92915050565b6000806106e88361118e565b6106f061120a565b91509150915091565b60008061070461110f565b600a54600160a01b900461ffff166107205760006106f0611214565b600a54610739908490600160a01b900461ffff16611228565b90506107448161131d565b60019150915091565b610755611365565b600a5460ff600160b01b9091041615158115151461078557600a805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b60006106c36107cc610a2b565b6107d461120a565b9061139f565b60006106d68261118e565b6107ed611446565b50565b60006107fa611156565b5060009392505050565b60025460ff1690565b60408051808201909152600280825261383160f01b602083015254610848916101009091046001600160a01b03169033906280000890611488565b6000610857602083018361285f565b6001600160a01b0316141561086b57600080fd5b600061087f600a546001600160a01b031690565b6001600160a01b03161461089257600080fd5b6107ed6108a2602083018361285f565b60006108b46060850160408601612bdb565b6108c16020860186612dab565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114b992505050565b61092c604051806060016040528060006001600160a01b0316815260200160608152602001600061ffff1681525090565b6040518060600160405280610949600a546001600160a01b031690565b6001600160a01b0316815260200161095f610ca4565b8152602001610979600a5461ffff600160a01b9091041690565b61ffff169052919050565b61098c61110f565b6107ed816114fc565b600061099f61110f565b6106bd565b60006106c3611214565b6000806109ba8361118e565b9050806109ca5750600092915050565b6109dc6109d5610a2b565b829061139f565b9392505050565b60008060004263ffffffff168463ffffffff161015610a0157600080fd5b610a0b85856115ca565b9093506000925090505b9250925092565b60606001805461063090612ec2565b6003546004805460405163386497fd60e01b81526001600160a01b0391821692810192909252600092169063386497fd9060240160206040518083038186803b158015610a7757600080fd5b505afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c39190612c0d565b600080600080610abd61110f565b610ac9888888886115e3565b929b919a509850909650945050505050565b60006106d6826109ae565b60006106c361120a565b6000610afa611634565b836001600160a01b0316856001600160a01b031614610b1e57610b1e848685611679565b610b278461118e565b1590506000610b368484611751565b6040805180820190915260028152611a9b60f11b602082015290915081610b795760405162461bcd60e51b8152600401610b709190612d50565b60405180910390fd5b50610b8585828561182f565b6040518481526001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3846001600160a01b0316866001600160a01b03167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee8686604051610c14929190918252602082015260400190565b60405180910390a350949350505050565b610c2d611446565b610c356118b0565b5050565b336000818152600b602090815260408083206001600160a01b03878116808652918452938290208690556004548251941684529183018590529092917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a35050565b60606106c3610a1c565b60006106c36118e6565b610cc06118f3565b6000600260019054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1057600080fd5b505afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d48919061287b565b604080518082019091526002815261064760f31b60208201529091506001600160a01b038216610d8b5760405162461bcd60e51b8152600401610b709190612d50565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b60016000806000610dbe8461192e565b92509250925080610dcf57600d8490555b610ddc6001600c54101590565b15610e6257610e5d8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600092019190915250610e589250610804915050565b611baf565b610f0a565b610ef18a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600081840152601f19601f820116905080830192505050505050508d6060016020810190610e589190612c25565b610f0a610f03368d90038d018d612b4d565b8787611bef565b610f1760208c018c61285f565b6001600160a01b0316610f3060608d0160408e0161285f565b6001600160a01b03167f2bb6ce244a49e83b442fa9c0617811f0929cb9961fd5ce013ebf708dc4d8bf026000610f64610621565b610f6c610a1c565b60025460ff168c8c604051610f8696959493929190612c8a565b60405180910390a380610f9957600c8490555b81610fa957600c8390556000600d555b5050505050505050505050565b60408051808201909152600280825261383160f01b602083015254610ff1916101009091046001600160a01b03169033906280000890611488565b6107ed81611cbb565b611002611634565b600061100e8383611751565b60408051808201909152600281526106a760f31b6020820152909150816110485760405162461bcd60e51b8152600401610b709190612d50565b506110568482600085611cc3565b6040518381526000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360408051848152602081018490526001600160a01b038616917f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a910160405180910390a250505050565b60008060006110ee61110f565b6110f784611d45565b9250925092505b9193909250565b6107ed8142611d53565b600a546001600160a01b0316331460405180604001604052806002815260200161039360f41b815250906107ed5760405162461bcd60e51b8152600401610b709190612d50565b60405162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b6044820152606401610b70565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03851681526005835283812084519283018552546001600160c01b038116835263ffffffff600160c01b8204811694840194909452600160e01b90049092169281019290925290516001600160c01b031692915050565b60006106c3611ddb565b60006106c36007546001600160e01b031690565b6000821580611235575081155b15611242575060006106d6565b81600261125160016064612e3d565b61125c906064612e3d565b6112669190612e08565b6112769061ffff16600019612e86565b6112809190612e29565b83111560405180604001604052806002815260200161068760f31b815250906112bc5760405162461bcd60e51b8152600401610b709190612d50565b506112c960016064612e3d565b6112d4906064612e3d565b61ffff1660026112e660016064612e3d565b6112f1906064612e3d565b6112fb9190612e08565b61ffff166113098486612e67565b6113139190612df0565b6109dc9190612e29565b611325611de6565b61132e81611e37565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020015b60405180910390a150565b60025461139d9061010090046001600160a01b0316336001604051806040016040528060028152602001611b9b60f11b815250611488565b565b60008215806113ac575081155b156113b9575060006106d6565b816113d160026b033b2e3c9fd0803ce8000000612e29565b6113dd90600019612e86565b6113e79190612e29565b83111560405180604001604052806002815260200161068760f31b815250906114235760405162461bcd60e51b8152600401610b709190612d50565b506b033b2e3c9fd0803ce800000061143c600282612e29565b6113098486612e67565b61144f33611e40565b60405180604001604052806002815260200161383160f01b815250906107ed5760405162461bcd60e51b8152600401610b709190612d50565b611493848484611ed5565b81906114b25760405162461bcd60e51b8152600401610b709190612d50565b5050505050565b600a80546001600160a01b0319166001600160a01b03861617905561ffff8216156114e7576114e7826114fc565b82156114f6576114f68361131d565b50505050565b611504611de6565b61ffff811661151c57611517600061131d565b61157a565b61152860016064612e3d565b611533906064612e3d565b61ffff168161ffff16111561157a5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b6044820152606401610b70565b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df9184099060200161135a565b6000806115d78484611ef0565b915091505b9250929050565b6000806000806115f288611d45565b919550935091506116038785612df0565b935061ffff85161561162a5761161d848661ffff16611228565b6116279087612df0565b95505b5094509450949050565b600354604080518082019091526002815261323960f01b6020820152906001600160a01b031633146107ed5760405162461bcd60e51b8152600401610b709190612d50565b6001600160a01b038084166000908152600b602090815260408083209386168352928152908290205482518084019093526002835261353960f01b9183019190915290828210156116dd5760405162461bcd60e51b8152600401610b709190612d50565b506001600160a01b038481166000818152600b6020908152604080832088861680855290835292819020958790039586905560045481519516855290840185905290927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a350505050565b604080518082019091526002815261035360f41b60208201526000908261178b5760405162461bcd60e51b8152600401610b709190612d50565b506000611799600284612e29565b90506b033b2e3c9fd0803ce80000006117b482600019612e86565b6117be9190612e29565b84111560405180604001604052806002815260200161068760f31b815250906117fa5760405162461bcd60e51b8152600401610b709190612d50565b5082816118136b033b2e3c9fd0803ce800000087612e67565b61181d9190612df0565b6118279190612e29565b949350505050565b6001600160a01b0383166118855760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b70565b6118a082611891611ddb565b61189b9190612df0565b611f9b565b6118ab838383611fa4565b505050565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b6044820152606401610b70565b60006106c3600180612df0565b60408051808201909152600280825261333360f01b60208301525461139d916101009091046001600160a01b03169033906202000290611488565b600080600061193b6118e6565b925061194a6001600019612e86565b83106119985760405162461bcd60e51b815260206004820152601960248201527f696e76616c696420636f6e7472616374207265766973696f6e000000000000006044820152606401610b70565b600084116119e85760405162461bcd60e51b815260206004820152601e60248201527f696e636f727265637420696e697469616c697a6572207265766973696f6e00006044820152606401610b70565b82841115611a385760405162461bcd60e51b815260206004820152601e60248201527f696e636f6e73697374656e7420636f6e7472616374207265766973696f6e00006044820152606401610b70565b611a456001600019612e86565b600c541015611ac1576000600d54118015611a61575082600c54105b91508180611a6e5750303b155b80611a7a5750600c5483115b611abc5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610b70565b611b31565b611ace6001600019612e86565b600c54148015611add5750303b155b611b1f5760405162461bcd60e51b81526020600482015260136024820152721a5b9a5d1a585b1a5e995c88189b1bd8dad959606a1b6044820152606401610b70565b6000600c55600d546000199350151591505b8115611b885783600d5411611b885760405162461bcd60e51b815260206004820152601f60248201527f696e636f7272656374206f72646572206f6620696e697469616c697a657273006044820152606401610b70565b600c548411611ba5578115611b9d576001600d555b5060016110fe565b5060009193909250565b8251611bc290600090602086019061275e565b508151611bd690600190602085019061275e565b506002805460ff191660ff929092169190911790555050565b8251600380546001600160a01b03199081166001600160a01b039384169081179092556040808701516004805490931694169390931781558251630b6b5afb60e11b8152925191926316d6b5f69281830192602092829003018186803b158015611c5857600080fd5b505afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c90919061287b565b600260016101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6107ed6118b0565b6001600160a01b038416611d235760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b70565b611d3983611d2f611ddb565b61189b9190612e86565b6114f684848484611fcd565b60008060006110f784611ff8565b6007546001600160e01b0316821415611d6a575050565b6001600160e01b03821115611d7e57600080fd5b60075463ffffffff600160e01b909104811690821681146118ab576007546001600160e01b0316611dae83612006565b600780546001600160e01b0319166001600160e01b03868116919091179091556114f69082168385612083565b60006106c360095490565b600a546001600160a01b031661139d5760405162461bcd60e51b815260206004820152601660248201527518dbdb9d1c9bdb1b195c881a5cc81c995c5d5a5c995960521b6044820152606401610b70565b6107ed81611105565b600a546000906001600160a01b0316158015906106d65750600a5460405163ce91a05960e01b81526001600160a01b0384811660048301529091169063ce91a0599060240160206040518083038186803b158015611e9d57600080fd5b505afa158015611eb1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d69190612a4b565b600080611ee38585856120ff565b9092161515949350505050565b6001600160a01b03821660009081526005602052604081205481906001600160c01b0316611f23575060009050806115dc565b6001600160a01b0384166000818152600560209081526040808320815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811683860152600160e01b9091041681830152938352600690915281205490918291611f8d919087612183565b909890975095505050505050565b610c358161226b565b6000806000611fb38686612289565b925092509250611fc586848484612359565b505050505050565b6000806000611fdd8787876123bc565b925092509250611fef87848484612359565b50505050505050565b600080806110f7844261249b565b60075463ffffffff600160e01b9091048116908216101561205e5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b6044820152606401610b70565b6007805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b60095461208f57505050565b8163ffffffff168163ffffffff16146118ab576009546120be906ec097ce7bc90715b34b9f1000000000612e29565b6120c89084612e67565b92506120d48282612e9d565b6120e49063ffffffff1684612e67565b600860008282546120f59190612df0565b9091555050505050565b60405163cc8b29c160e01b81526001600160a01b038381166004830152602482018390526000919085169063cc8b29c19060440160206040518083038186803b15801561214b57600080fd5b505afa15801561215f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118279190612c0d565b6008546009546000908190156121f45760008061219e61258e565b915091506009546ec097ce7bc90715b34b9f10000000006121bf9190612e29565b6121c99083612e67565b91506121d58187612e9d565b6121e59063ffffffff1683612e67565b6121ef9086612df0565b945050505b8483148061220a575085516001600160c01b0316155b1561221e5750506040840151600090612262565b6ec097ce7bc90715b34b9f10000000006122388685612e86565b875161224d91906001600160c01b0316612e67565b6122579190612e29565b604087015190925090505b93509350939050565b600060095482141561227f57506000919050565b6106d682426125ad565b6001600160a01b0382166000908152600560209081526040808320815160608101835290546001600160c01b03811680835263ffffffff600160c01b8304811695840195909552600160e01b9091049093169181019190915282918291906122f19086612df0565b94506001600160c01b038511156123405760405162461bcd60e51b81526020600482015260136024820152720c4c2d8c2dcc6ca40d2e640e8dede40d0d2ced606b1b6044820152606401610b70565b61234b8682876125f7565b935093509350509250925092565b826123b057600081600281111561238057634e487b7160e01b600052602160045260246000fd5b14806123a65750600061239b600a546001600160a01b031690565b6001600160a01b0316145b156123b0576114f6565b6114f6848484846126f0565b6001600160a01b0383166000908152600560209081526040808320815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811694830194909452600160e01b9004909216908201528190819061241e8686612df0565b81516001600160c01b031610156124705760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b6044820152606401610b70565b80516001600160c01b0316959095039461248b8782886125f7565b9350935093505093509350939050565b6001600160a01b0382166000908152600560209081526040808320815160608101835290546001600160c01b03811680835263ffffffff600160c01b8304811695840195909552600160e01b90910490931691810191909152829182919061250e57600080600093509350935050610a15565b6001600160a01b038616600090815260066020526040812054819081906125379085908a612183565b6001600160a01b038c166000908152600660209081526040808320959095556005905292909220805463ffffffff8c16600160e01b026001600160e01b039091161790559750955060019450505050509250925092565b6007546001600160e01b03811691600160e01b90910463ffffffff1690565b6000806000612