UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

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