UNPKG

@augumented-finance/protocol-v1

Version:

Augmented Protocol smart contracts

992 lines 50.7 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MockStakedAgfTokenFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class MockStakedAgfTokenFactory 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.MockStakedAgfTokenFactory = MockStakedAgfTokenFactory; const _abi = [ { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "owner", type: "address", }, { indexed: true, internalType: "address", name: "spender", type: "address", }, { indexed: false, internalType: "uint256", name: "value", type: "uint256", }, ], name: "Approval", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint32", name: "blockNumber", type: "uint32", }, ], name: "Cooldown", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "from", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Donated", type: "event", }, { anonymous: false, inputs: [ { components: [ { internalType: "contract IMarketAccessController", name: "stakeController", type: "address", }, { internalType: "contract IERC20", name: "stakedToken", type: "address", }, { internalType: "uint32", name: "cooldownBlocks", type: "uint32", }, { internalType: "uint32", name: "unstakeBlocks", type: "uint32", }, { internalType: "contract ITransferHook", name: "governance", type: "address", }, ], indexed: false, internalType: "struct StakeTokenConfig", name: "params", type: "tuple", }, { indexed: false, internalType: "string", name: "tokenName", type: "string", }, { indexed: false, internalType: "string", name: "tokenSymbol", type: "string", }, { indexed: false, internalType: "uint8", name: "decimals", type: "uint8", }, ], name: "Initialized", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "from", type: "address", }, { indexed: false, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "Redeem", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Slashed", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "from", type: "address", }, { indexed: false, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Staked", 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: "COOLDOWN_BLOCKS", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "DOMAIN_SEPARATOR", outputs: [ { internalType: "bytes32", name: "", type: "bytes32", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "EIP712_REVISION", outputs: [ { internalType: "bytes", name: "", type: "bytes", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "PERMIT_TYPEHASH", outputs: [ { internalType: "bytes32", name: "", type: "bytes32", }, ], 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: [], name: "UNSTAKE_WINDOW_BLOCKS", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "_nonces", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, { internalType: "address", name: "spender", type: "address", }, ], name: "allowance", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "spender", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "approve", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "balanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "cooldown", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "decimals", outputs: [ { internalType: "uint8", name: "", type: "uint8", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "spender", type: "address", }, { internalType: "uint256", name: "subtractedValue", type: "uint256", }, ], name: "decreaseAllowance", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "donate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "exchangeRate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "getCooldown", outputs: [ { internalType: "uint32", name: "", type: "uint32", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getMaxSlashablePercentage", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint32", name: "fromCooldownBlock", type: "uint32", }, { internalType: "uint256", name: "amountToReceive", type: "uint256", }, { internalType: "address", name: "toAddress", type: "address", }, { internalType: "uint256", name: "toBalance", type: "uint256", }, ], name: "getNextCooldownBlocks", outputs: [ { internalType: "uint32", name: "", type: "uint32", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "spender", type: "address", }, { internalType: "uint256", name: "addedValue", type: "uint256", }, ], name: "increaseAllowance", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { components: [ { internalType: "contract IMarketAccessController", name: "stakeController", type: "address", }, { internalType: "contract IERC20", name: "stakedToken", type: "address", }, { internalType: "uint32", name: "cooldownBlocks", type: "uint32", }, { internalType: "uint32", name: "unstakeBlocks", type: "uint32", }, { internalType: "contract ITransferHook", name: "governance", type: "address", }, ], internalType: "struct StakeTokenConfig", name: "params", type: "tuple", }, { internalType: "string", name: "name", type: "string", }, { internalType: "string", name: "symbol", type: "string", }, { internalType: "uint8", name: "decimals", type: "uint8", }, ], name: "initialize", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isRedeemable", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "mintReward", outputs: [ { internalType: "contract IRewardMinter", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "name", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, { internalType: "address", name: "spender", type: "address", }, { internalType: "uint256", name: "value", type: "uint256", }, { internalType: "uint256", name: "deadline", type: "uint256", }, { internalType: "uint8", name: "v", type: "uint8", }, { internalType: "bytes32", name: "r", type: "bytes32", }, { internalType: "bytes32", name: "s", type: "bytes32", }, ], name: "permit", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "stakeAmount", type: "uint256", }, ], name: "redeem", outputs: [ { internalType: "uint256", name: "stakeAmount_", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "redeemUnderlying", outputs: [ { internalType: "uint256", name: "underlyingAmount_", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint32", name: "cooldownBlocks", type: "uint32", }, { internalType: "uint32", name: "unstakeBlocks", type: "uint32", }, ], name: "setCooldown", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "percentageInRay", type: "uint256", }, ], name: "setMaxSlashablePercentage", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "paused", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "redeemable", type: "bool", }, ], name: "setRedeemable", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "destination", type: "address", }, { internalType: "uint256", name: "minAmount", type: "uint256", }, { internalType: "uint256", name: "maxAmount", type: "uint256", }, ], name: "slashUnderlying", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "stake", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], 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: "recipient", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transfer", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "sender", type: "address", }, { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transferFrom", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x60806040526000600e556000600f553480156200001b57600080fd5b5062000026620000de565b6040518060400160405280600a81526020016929ba30b5b2b21020a3a360b11b8152506040518060400160405280600681526020016539ba35a0a3a360d11b8152506000828282828282826003908051906020019062000088929190620002f2565b5081516200009e906004906020850190620002f2565b506005805460ff191660ff9290921691909117905550620000c09050620000eb565b505050620000d4846200018760201b60201c565b50505050620003e8565b620000e862000377565b90565b467f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620001176200023c565b805160209182012060408051808201825260018152603160f81b90840152516200016993927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6918691309101620003bc565b60408051601f19818403018152919052805160209091012060065550565b8051600880546001600160a01b039283166001600160a01b0319918216179091556020830151600980549190931691161790556040810151600d805463ffffffff92831663ffffffff19909116179055606082015116620001ff57600d805463ffffffff60201b1916640a000000001790556200022a565b6060810151600d805463ffffffff9092166401000000000263ffffffff60201b199092169190911790555b600c546200023957610bb8600c555b50565b6060620002536200025860201b620004c01760201c565b905090565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620002e85780601f10620002bc57610100808354040283529160200191620002e8565b820191906000526020600020905b815481529060010190602001808311620002ca57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200033557805160ff191683800117855562000365565b8280016001018555821562000365579182015b828111156200036557825182559160200191906001019062000348565b5062000373929150620003a5565b5090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b5b80821115620003735760008155600101620003a6565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b612f9780620003f86000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80637816037611610130578063b16a19de116100b8578063dd62ed3e1161007c578063dd62ed3e14610477578063dde43cba1461048a578063e320b40314610492578063f14faf6f146104a5578063f34d96da146104b857610232565b8063b16a19de14610421578063b187bd2614610436578063b9844d8d1461043e578063d354f24014610451578063d505accf1461046457610232565b80639a49090e116100ff5780639a49090e146103bf578063a457c2d7146103e0578063a9059cbb146103f3578063adc9772e14610406578063af9205821461041957610232565b80637816037614610394578063787a08a61461039c57806395d89b41146103a457806396294178146103ac57610232565b8063313ce567116101be5780633ba0b9a9116101825780633ba0b9a91461034b578063470148b714610353578063548313541461036657806370a082311461036e57806374011f561461038157610232565b8063313ce567146102e85780633644e515146102fd5780633890711814610305578063395093511461031857806339b84ecf1461032b57610232565b806318160ddd1161020557806318160ddd146102aa5780631e9a6950146102b25780631ebbbef9146102c557806323b872dd146102cd57806330adf81f146102e057610232565b806306fdde0314610237578063095ea7b314610255578063161952101461027557806316c38b3c14610295575b600080fd5b61023f6104c0565b60405161024c919061282e565b60405180910390f35b610268610263366004612405565b610557565b60405161024c919061279c565b610288610283366004612430565b610575565b60405161024c91906127a7565b6102a86102a3366004612464565b6106db565b005b6102886107b8565b6102886102c0366004612405565b6107be565b610288610809565b6102686102db366004612357565b61081d565b6102886108a4565b6102f06108c8565b60405161024c9190612e5d565b6102886108d1565b6102a8610313366004612464565b6108d7565b610268610326366004612405565b61091d565b61033e610339366004612303565b61096b565b60405161024c9190612e4c565b61028861098c565b61033e6103613660046125f4565b610a3b565b610288610b5b565b61028861037c366004612303565b610b67565b6102a861038f3660046125c4565b610b82565b61023f610bd3565b6102a8610bf0565b61023f610c77565b6102886103ba366004612405565b610cd8565b6103d26103cd366004612405565b610d23565b60405161024c929190612841565b6102686103ee366004612405565b610d74565b610268610401366004612405565b610ddc565b610288610414366004612405565b610df0565b610268610e06565b610429610e17565b60405161024c91906126d2565b610268610e26565b61028861044c366004612303565b610e36565b6102a861045f36600461263b565b610e48565b6102a8610472366004612397565b610ea6565b61028861048536600461231f565b611038565b610288611063565b6102a86104a036600461249c565b611072565b6102a86104b33660046125c4565b611141565b610288611195565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b505050505090505b90565b600061056b61056461119b565b848461119f565b5060015b92915050565b600061800061059861058561119b565b6008546001600160a01b03169083611253565b6105bd5760405162461bcd60e51b81526004016105b490612a47565b60405180910390fd5b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906105ee9030906004016126d2565b60206040518083038186803b15801561060657600080fd5b505afa15801561061a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063e91906125dc565b90506000610657600c548361126a90919063ffffffff16565b9050808511156106695780935061066d565b8493505b85841015610680576000935050506106d3565b600954610697906001600160a01b031688866112e1565b7f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd87856040516106c89291906126e6565b60405180910390a150505b509392505050565b6008546001600160a01b0316632500f2b66106f461119b565b6040518263ffffffff1660e01b815260040161071091906126d2565b60206040518083038186803b15801561072857600080fd5b505afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190612480565b604051806040016040528060028152602001611b9b60f11b815250906107995760405162461bcd60e51b81526004016105b4919061282e565b50600d8054911515600160401b0260ff60401b19909216919091179055565b60025490565b6000808211604051806040016040528060018152602001603160f81b815250906107fb5760405162461bcd60e51b81526004016105b4919061282e565b506106d3338484600061133c565b600d54640100000000900463ffffffff1690565b600061082a848484611590565b61089a8461083661119b565b61089585604051806060016040528060288152602001612f15602891396001600160a01b038a1660009081526001602052604081209061087461119b565b6001600160a01b031681526020810191909152604001600020549190611670565b61119f565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60065481565b6180006108e561058561119b565b6109015760405162461bcd60e51b81526004016105b490612a47565b50600d805460ff60401b19169115600160401b02919091179055565b600061056b61092a61119b565b84610895856001600061093b61119b565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061169c565b6001600160a01b03166000908152600b602052604090205463ffffffff1690565b6000806109976107b8565b9050806109a957506127109050610554565b6009546040516370a0823160e01b8152610a359183916001600160a01b03909116906370a08231906109df9030906004016126d2565b60206040518083038186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906125dc565b906116c8565b91505090565b6001600160a01b0382166000908152600b602052604081205463ffffffff1680610a69576000915050610b53565b600d54600090610a989063ffffffff6401000000008204811691610a9291439181169061177d16565b9061177d565b90508163ffffffff16811115610ab15760009150610b24565b8663ffffffff16811115610ac3574396505b8163ffffffff168763ffffffff161015610adf57509050610b53565b610b21610aec878661169c565b610b1b610b028763ffffffff808816906117bf16565b610b158a63ffffffff808e16906117bf16565b9061169c565b906117f9565b91505b506001600160a01b0384166000908152600b60205260409020805463ffffffff191663ffffffff831617905590505b949350505050565b600d5463ffffffff1690565b6001600160a01b031660009081526020819052604090205490565b6020610b8f61058561119b565b610bab5760405162461bcd60e51b81526004016105b490612a47565b612710821115610bcd5760405162461bcd60e51b81526004016105b490612ca0565b50600c55565b604051806040016040528060018152602001603160f81b81525081565b610bf933610b67565b610c155760405162461bcd60e51b81526004016105b490612a10565b336000818152600b602052604090819020805463ffffffff19164363ffffffff81169190911790915590517fc606d47187d0dea01a7ca1a0d8abf6027f8841bf0f82fab363549489e139e2ce92610c6d9290916126ff565b60405180910390a1565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561054c5780601f106105215761010080835404028352916020019161054c565b6000808211604051806040016040528060018152602001603160f81b81525090610d155760405162461bcd60e51b81526004016105b4919061282e565b50610b53338460008561133c565b600080640100000000610d3761058561119b565b610d535760405162461bcd60e51b81526004016105b490612a47565b610d60338686600061183b565b50610d69610e17565b953095509350505050565b600061056b610d8161119b565b8461089585604051806060016040528060258152602001612f3d6025913960016000610dab61119b565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611670565b600061056b610de961119b565b8484611590565b6000610dff338484600161183b565b5092915050565b600d54600160401b900460ff161590565b6009546001600160a01b031690565b600d54600160401b900460ff1690565b60076020526000908152604090205481565b6020610e5561058561119b565b610e715760405162461bcd60e51b81526004016105b490612a47565b50600d805463ffffffff9283166401000000000267ffffffff00000000199490931663ffffffff199091161792909216179055565b6001600160a01b038716610ecc5760405162461bcd60e51b81526004016105b490612b30565b83421115610eec5760405162461bcd60e51b81526004016105b490612b04565b6001600160a01b0387166000908152600760209081526040808320546006549151909392610f46917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918d918d918d9189918e91016127b0565b60405160208183030381529060405280519060200120604051602001610f6d9291906126b7565b60405160208183030381529060405280519060200120905060018186868660405160008152602001604052604051610fa89493929190612810565b6020604051602081039080840390855afa158015610fca573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316146110045760405162461bcd60e51b81526004016105b4906129e5565b6001600160a01b038916600090815260076020526040902060018301905561102d8989896119cc565b505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061106d6119d7565b905090565b6001600061107e6119d7565b905060008061108d84846119e9565b915091508061112557600f84905561111f6110ad368c90038c018c612532565b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152508b9250611ac7915050565b600e8490555b8161113557600e8390556000600f555b50505050505050505050565b600954611159906001600160a01b0316333084611b26565b7f2a01595cddf097c90216094025db714da3f4e5bd8877b56ba86a24ecead8e543338260405161118a9291906126e6565b60405180910390a150565b600c5490565b3390565b6001600160a01b0383166111c55760405162461bcd60e51b81526004016105b490612c5c565b6001600160a01b0382166111eb5760405162461bcd60e51b81526004016105b49061290c565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112469085906127a7565b60405180910390a3505050565b6000610b5382611264868686611b47565b90611bc8565b6000821580611277575081155b156112845750600061056f565b81611388198161129057fe5b0483111560405180604001604052806002815260200161068760f31b815250906112cd5760405162461bcd60e51b81526004016105b4919061282e565b50612710838302611388015b049392505050565b6113378363a9059cbb60e01b84846040516024016113009291906126e6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611bcf565b505050565b600d546000908190600160401b900460ff161561136b5760405162461bcd60e51b81526004016105b49061294e565b6001600160a01b0386166000908152600b6020526040902054600d5463ffffffff918216916113a09183919081169061169c16565b43116113be5760405162461bcd60e51b81526004016105b490612d21565b600d5463ffffffff64010000000082048116916113ec916113e59185919081169061169c16565b439061177d565b111561140a5760405162461bcd60e51b81526004016105b49061289e565b600061141588610b67565b9050856114555761142e61142761098c565b8790611cb4565b9550808611156114505780955061144d61144661098c565b879061126a565b94505b61146f565b80861115611461578095505b61146c61144661098c565b94505b6114798887611d4f565b858114156114a5576001600160a01b0388166000908152600b60205260409020805463ffffffff191690555b600a546001600160a01b03161561152e57600a546001600160a01b03166395a05254308a846114d382610b67565b6114db6107b8565b6040518663ffffffff1660e01b81526004016114fb95949392919061276b565b600060405180830381600087803b15801561151557600080fd5b505af1158015611529573d6000803e3d6000fd5b505050505b600954611545906001600160a01b031688876112e1565b7f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8888888860405161157a9493929190612742565b60405180910390a1509396929550919350505050565b600061159b84610b67565b9050826001600160a01b0316846001600160a01b03161461165f5760006115c184610b67565b6001600160a01b0386166000908152600b602052604090205490915063ffffffff166115ef81858785610a3b565b6001600160a01b0386166000908152600b60205260409020805463ffffffff191663ffffffff929092169190911790558383148015611633575063ffffffff811615155b1561165c576001600160a01b0386166000908152600b60205260409020805463ffffffff191690555b50505b61166a848484611e31565b50505050565b600081848411156116945760405162461bcd60e51b81526004016105b4919061282e565b505050900390565b6000828201838110156116c15760405162461bcd60e51b81526004016105b490612979565b9392505050565b604080518082019091526002815261035360f41b6020820152600090826117025760405162461bcd60e51b81526004016105b4919061282e565b50826117105750600061056f565b604080518082019091526002815261068760f31b60208201527e068db8bac710cb295e9e1b089a027525460aa64c2f837b4a2339c0ebedfa438411156117695760405162461bcd60e51b81526004016105b4919061282e565b50816127108402600182901c01816112d957fe5b60006116c183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611670565b6000826117ce5750600061056f565b828202828482816117db57fe5b04146116c15760405162461bcd60e51b81526004016105b490612a75565b60006116c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f46565b6000808311604051806040016040528060018152602001603160f81b815250906118785760405162461bcd60e51b81526004016105b4919061282e565b50600061188485610b67565b905061189861189161098c565b8590611cb4565b91506118a76000838784610a3b565b6001600160a01b0386166000908152600b60205260409020805463ffffffff191663ffffffff9290921691909117905582156118f5576009546118f5906001600160a01b0316873087611b26565b6118ff8583611f7d565b600a546001600160a01b03161561198857600a546001600160a01b03166395a0525430878461192d82610b67565b6119356107b8565b6040518663ffffffff1660e01b815260040161195595949392919061276b565b600060405180830381600087803b15801561196f57600080fd5b505af1158015611983573d6000803e3d6000fd5b505050505b7f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd78686866040516119bb9392919061271e565b60405180910390a150949350505050565b61133783838361119f565b60006119e1612031565b600101905090565b60008060008411611a0c5760405162461bcd60e51b81526004016105b4906128d5565b82841115611a2c5760405162461bcd60e51b81526004016105b490612b98565b6000600f54118015611a3f575082600e54105b91508180611a505750611a50612036565b80611a5c5750600e5483115b611a785760405162461bcd60e51b81526004016105b490612ab6565b8115611a9f5783600f5411611a9f5760405162461bcd60e51b81526004016105b490612c14565b600e548411611abc578115611ab4576001600f555b506001611ac0565b5060005b9250929050565b611ad283838361203c565b611adb8461207c565b611ae3612130565b7f448ee687748dd548cd139a7fd4112c5aaa41081f88773b4bc39aa956270901d784848484604051611b189493929190612dc6565b60405180910390a150505050565b61166a846323b872dd60e01b8585856040516024016113009392919061271e565b60405163cc8b29c160e01b81526000906001600160a01b0385169063cc8b29c190611b7890869086906004016126e6565b60206040518083038186803b158015611b9057600080fd5b505afa158015611ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5391906125dc565b9081161490565b611be1826001600160a01b03166121c8565b611bfd5760405162461bcd60e51b81526004016105b490612d58565b60006060836001600160a01b031683604051611c19919061269b565b6000604051808303816000865af19150503d8060008114611c56576040519150601f19603f3d011682016040523d82523d6000602084013e611c5b565b606091505b509150915081611c7d5760405162461bcd60e51b81526004016105b4906129b0565b80511561166a5780806020019051810190611c989190612480565b61166a5760405162461bcd60e51b81526004016105b490612cd7565b604080518082019091526002815261035360f41b602082015260009082611cee5760405162461bcd60e51b81526004016105b4919061282e565b50600182901c61271081190484111560405180604001604052806002815260200161068760f31b81525090611d365760405162461bcd60e51b81526004016105b4919061282e565b50826127108502820181611d4657fe5b04949350505050565b6001600160a01b038216611d755760405162461bcd60e51b81526004016105b490612b57565b611d8182600083611337565b611dbe81604051806060016040528060228152602001612ecd602291396001600160a01b0385166000908152602081905260409020549190611670565b6001600160a01b038316600090815260208190526040902055600254611de4908261177d565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e259085906127a7565b60405180910390a35050565b6001600160a01b038316611e575760405162461bcd60e51b81526004016105b490612bcf565b6001600160a01b038216611e7d5760405162461bcd60e51b81526004016105b49061285b565b611e88838383611337565b611ec581604051806060016040528060268152602001612eef602691396001600160a01b0386166000908152602081905260409020549190611670565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611ef4908261169c565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112469085906127a7565b60008183611f675760405162461bcd60e51b81526004016105b4919061282e565b506000838581611f7357fe5b0495945050505050565b6001600160a01b038216611fa35760405162461bcd60e51b81526004016105b490612d8f565b611faf60008383611337565b600254611fbc908261169c565b6002556001600160a01b038216600090815260208190526040902054611fe2908261169c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e259085906127a7565b600190565b303b1590565b825161204f90600390602086019061220b565b50815161206390600490602085019061220b565b506005805460ff191660ff929092169190911790555050565b8051600880546001600160a01b039283166001600160a01b0319918216179091556020830151600980549190931691161790556040810151600d805463ffffffff92831663ffffffff199091161790556060820151166120f357600d805467ffffffff000000001916640a0000000017905561211f565b6060810151600d805463ffffffff9092166401000000000267ffffffff00000000199092169190911790555b600c5461212d57610bb8600c555b50565b467f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61215a612201565b805160209182012060408051808201825260018152603160f81b90840152516121aa93927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc69186913091016127e4565b60408051601f19818403018152919052805160209091012060065550565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610b53575050151592915050565b606061106d6104c0565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061224c57805160ff1916838001178555612279565b82800160010185558215612279579182015b8281111561227957825182559160200191906001019061225e565b50612285929150612289565b5090565b5b80821115612285576000815560010161228a565b60008083601f8401126122af578182fd5b50813567ffffffffffffffff8111156122c6578182fd5b602083019150836020828501011115611ac057600080fd5b803563ffffffff8116811461056f57600080fd5b803560ff8116811461056f57600080fd5b600060208284031215612314578081fd5b81356116c181612e97565b60008060408385031215612331578081fd5b823561233c81612e97565b9150602083013561234c81612e97565b809150509250929050565b60008060006060848603121561236b578081fd5b833561237681612e97565b9250602084013561238681612e97565b929592945050506040919091013590565b600080600080600080600060e0888a0312156123b1578283fd5b87356123bc81612e97565b965060208801356123cc81612e97565b955060408801359450606088013593506123e98960808a016122f2565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612417578182fd5b823561242281612e97565b946020939093013593505050565b600080600060608486031215612444578283fd5b833561244f81612e97565b95602085013595506040909401359392505050565b600060208284031215612475578081fd5b81356116c181612eac565b600060208284031215612491578081fd5b81516116c181612eac565b6000806000806000808688036101008112156124b6578283fd5b60a08112156124c3578283fd5b5086955060a087013567ffffffffffffffff808211156124e1578384fd5b6124ed8a838b0161229e565b909750955060c0890135915080821115612505578384fd5b5061251289828a0161229e565b909450925061252690508860e089016122f2565b90509295509295509295565b600060a08284031215612543578081fd5b60405160a0810181811067ffffffffffffffff82111715612562578283fd5b604052823561257081612e97565b8152602083013561258081612e97565b6020820152604083013561259381612eba565b60408201526125a584606085016122de565b606082015260808301356125b881612e97565b60808201529392505050565b6000602082840312156125d5578081fd5b5035919050565b6000602082840312156125ed578081fd5b5051919050565b60008060008060808587031215612609578182fd5b843561261481612eba565b935060208501359250604085013561262b81612e97565b9396929550929360600135925050565b6000806040838503121561264d578182fd5b61265784846122de565b915061266684602085016122de565b90509250929050565b60008151808452612687816020860160208601612e6b565b601f01601f19169290920160200192915050565b600082516126ad818460208701612e6b565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825263ffffffff16602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526116c1602083018461266f565b6001600160a01b0392831681529116602082015260400190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601b908201527f53544b5f554e5354414b455f57494e444f575f46494e49534845440000000000604082015260600190565b6020808252601e908201527f696e636f727265637420696e697469616c697a6572207265766973696f6e0000604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526011908201527014d512d7d4915111515357d4105554d151607a1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b602080825260119082015270494e56414c49445f5349474e415455524560781b604082015260600190565b6020808252601f908201527f53544b5f494e56414c49445f42414c414e43455f4f4e5f434f4f4c444f574e00604082015260600190565b6020808252601490820152731858d8d95cdcc81a5cc81c995cdd1c9a58dd195960621b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526012908201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604082015260600190565b6020808252600d908201526c24a72b20a624a22fa7aba722a960991b604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252601b908201527f696e636f727265637420636f6e7472616374207265766973696f6e0000000000604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526028908201527f696e636f7272656374206f72646572206f662063616c6c7320746f20696e697460408201526769616c697a65727360c01b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526017908201527f53544b5f4558434553534956455f534c4153485f504354000000000000000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526019908201527f53544b5f494e53554646494349454e545f434f4f4c444f574e00000000000000604082015260600190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b600061010060018060a01b03808851168452806020890151166020850152604088015163ffffffff80821660408701528060608b01511660608701525050806080890151166080850152508060a0840152612e238184018761266f565b905082810360c0840152612e37818661266f565b91505060ff831660