/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, BigNumberish, Contract, ContractFactory, Overrides, } from "ethers"; import { Provider, TransactionRequest } from "@ethersproject/providers"; import type { CErc20Immutable } from "../CErc20Immutable"; export class CErc20Immutable__factory extends ContractFactory { constructor(signer?: Signer) { super(_abi, _bytecode, signer); } deploy( underlying_: string, comptroller_: string, interestRateModel_: string, initialExchangeRateMantissa_: BigNumberish, name_: string, symbol_: string, decimals_: BigNumberish, admin_: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( underlying_, comptroller_, interestRateModel_, initialExchangeRateMantissa_, name_, symbol_, decimals_, admin_, overrides || {} ) as Promise; } getDeployTransaction( underlying_: string, comptroller_: string, interestRateModel_: string, initialExchangeRateMantissa_: BigNumberish, name_: string, symbol_: string, decimals_: BigNumberish, admin_: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction( underlying_, comptroller_, interestRateModel_, initialExchangeRateMantissa_, name_, symbol_, decimals_, admin_, overrides || {} ); } attach(address: string): CErc20Immutable { return super.attach(address) as CErc20Immutable; } connect(signer: Signer): CErc20Immutable__factory { return super.connect(signer) as CErc20Immutable__factory; } static connect( address: string, signerOrProvider: Signer | Provider ): CErc20Immutable { return new Contract(address, _abi, signerOrProvider) as CErc20Immutable; } } const _abi = [ { inputs: [ { internalType: "address", name: "underlying_", type: "address", }, { internalType: "contract ComptrollerInterface", name: "comptroller_", type: "address", }, { internalType: "contract InterestRateModel", name: "interestRateModel_", type: "address", }, { internalType: "uint256", name: "initialExchangeRateMantissa_", type: "uint256", }, { internalType: "string", name: "name_", type: "string", }, { internalType: "string", name: "symbol_", type: "string", }, { internalType: "uint8", name: "decimals_", type: "uint8", }, { internalType: "address payable", name: "admin_", type: "address", }, ], stateMutability: "nonpayable", type: "constructor", }, { inputs: [], name: "AcceptAdminPendingAdminCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "actualAddAmount", type: "uint256", }, ], name: "AddReservesFactorFreshCheck", type: "error", }, { inputs: [], name: "BorrowCashNotAvailable", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "BorrowComptrollerRejection", type: "error", }, { inputs: [], name: "BorrowFreshnessCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateAccrueBorrowInterestFailed", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateAccrueCollateralInterestFailed", type: "error", }, { inputs: [], name: "LiquidateCloseAmountIsUintMax", type: "error", }, { inputs: [], name: "LiquidateCloseAmountIsZero", type: "error", }, { inputs: [], name: "LiquidateCollateralFreshnessCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateComptrollerRejection", type: "error", }, { inputs: [], name: "LiquidateFreshnessCheck", type: "error", }, { inputs: [], name: "LiquidateLiquidatorIsBorrower", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateRepayBorrowFreshFailed", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateSeizeComptrollerRejection", type: "error", }, { inputs: [], name: "LiquidateSeizeLiquidatorIsBorrower", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "MintComptrollerRejection", type: "error", }, { inputs: [], name: "MintFreshnessCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "RedeemComptrollerRejection", type: "error", }, { inputs: [], name: "RedeemFreshnessCheck", type: "error", }, { inputs: [], name: "RedeemTransferOutNotPossible", type: "error", }, { inputs: [], name: "ReduceReservesAdminCheck", type: "error", }, { inputs: [], name: "ReduceReservesCashNotAvailable", type: "error", }, { inputs: [], name: "ReduceReservesCashValidation", type: "error", }, { inputs: [], name: "ReduceReservesFreshCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "RepayBorrowComptrollerRejection", type: "error", }, { inputs: [], name: "RepayBorrowFreshnessCheck", type: "error", }, { inputs: [], name: "SetComptrollerOwnerCheck", type: "error", }, { inputs: [], name: "SetInterestRateModelFreshCheck", type: "error", }, { inputs: [], name: "SetInterestRateModelOwnerCheck", type: "error", }, { inputs: [], name: "SetPendingAdminOwnerCheck", type: "error", }, { inputs: [], name: "SetReserveFactorAdminCheck", type: "error", }, { inputs: [], name: "SetReserveFactorBoundsCheck", type: "error", }, { inputs: [], name: "SetReserveFactorFreshCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "TransferComptrollerRejection", type: "error", }, { inputs: [], name: "TransferNotAllowed", type: "error", }, { inputs: [], name: "TransferNotEnough", type: "error", }, { inputs: [], name: "TransferTooMuch", type: "error", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "cashPrior", type: "uint256", }, { indexed: false, internalType: "uint256", name: "interestAccumulated", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowIndex", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalBorrows", type: "uint256", }, ], name: "AccrueInterest", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "owner", type: "address", }, { indexed: true, internalType: "address", name: "spender", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Approval", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "borrower", type: "address", }, { indexed: false, internalType: "uint256", name: "borrowAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "accountBorrows", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalBorrows", type: "uint256", }, ], name: "Borrow", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "liquidator", type: "address", }, { indexed: false, internalType: "address", name: "borrower", type: "address", }, { indexed: false, internalType: "uint256", name: "repayAmount", type: "uint256", }, { indexed: false, internalType: "address", name: "cTokenCollateral", type: "address", }, { indexed: false, internalType: "uint256", name: "seizeTokens", type: "uint256", }, ], name: "LiquidateBorrow", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "minter", type: "address", }, { indexed: false, internalType: "uint256", name: "mintAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "mintTokens", type: "uint256", }, ], name: "Mint", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "oldAdmin", type: "address", }, { indexed: false, internalType: "address", name: "newAdmin", type: "address", }, ], name: "NewAdmin", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "contract ComptrollerInterface", name: "oldComptroller", type: "address", }, { indexed: false, internalType: "contract ComptrollerInterface", name: "newComptroller", type: "address", }, ], name: "NewComptroller", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "contract InterestRateModel", name: "oldInterestRateModel", type: "address", }, { indexed: false, internalType: "contract InterestRateModel", name: "newInterestRateModel", type: "address", }, ], name: "NewMarketInterestRateModel", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "oldPendingAdmin", type: "address", }, { indexed: false, internalType: "address", name: "newPendingAdmin", type: "address", }, ], name: "NewPendingAdmin", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "oldReserveFactorMantissa", type: "uint256", }, { indexed: false, internalType: "uint256", name: "newReserveFactorMantissa", type: "uint256", }, ], name: "NewReserveFactor", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "redeemer", type: "address", }, { indexed: false, internalType: "uint256", name: "redeemAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "redeemTokens", type: "uint256", }, ], name: "Redeem", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "payer", type: "address", }, { indexed: false, internalType: "address", name: "borrower", type: "address", }, { indexed: false, internalType: "uint256", name: "repayAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "accountBorrows", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalBorrows", type: "uint256", }, ], name: "RepayBorrow", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "benefactor", type: "address", }, { indexed: false, internalType: "uint256", name: "addAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "newTotalReserves", type: "uint256", }, ], name: "ReservesAdded", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "admin", type: "address", }, { indexed: false, internalType: "uint256", name: "reduceAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "newTotalReserves", type: "uint256", }, ], name: "ReservesReduced", 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: "amount", type: "uint256", }, ], name: "Transfer", type: "event", }, { inputs: [], name: "NO_ERROR", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "_acceptAdmin", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "addAmount", type: "uint256", }, ], name: "_addReserves", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "compLikeDelegatee", type: "address", }, ], name: "_delegateCompLikeTo", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "reduceAmount", type: "uint256", }, ], name: "_reduceReserves", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract ComptrollerInterface", name: "newComptroller", type: "address", }, ], name: "_setComptroller", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract InterestRateModel", name: "newInterestRateModel", type: "address", }, ], name: "_setInterestRateModel", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address payable", name: "newPendingAdmin", type: "address", }, ], name: "_setPendingAdmin", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "newReserveFactorMantissa", type: "uint256", }, ], name: "_setReserveFactor", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "accrualBlockNumber", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "accrueInterest", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "admin", outputs: [ { internalType: "address payable", name: "", type: "address", }, ], 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: "owner", type: "address", }, ], name: "balanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, ], name: "balanceOfUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "borrowAmount", type: "uint256", }, ], name: "borrow", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "borrowBalanceCurrent", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "borrowBalanceStored", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "borrowIndex", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "borrowRatePerBlock", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "comptroller", outputs: [ { internalType: "contract ComptrollerInterface", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "decimals", outputs: [ { internalType: "uint8", name: "", type: "uint8", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "exchangeRateCurrent", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "exchangeRateStored", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "getAccountSnapshot", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getCash", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "underlying_", type: "address", }, { internalType: "address", name: "comptroller_", type: "address", }, { internalType: "contract InterestRateModel", name: "interestRateModel_", type: "address", }, { internalType: "uint256", name: "initialExchangeRateMantissa_", type: "uint256", }, { internalType: "string", name: "name_", type: "string", }, { internalType: "string", name: "symbol_", type: "string", }, { internalType: "uint8", name: "decimals_", type: "uint8", }, ], name: "init_", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "underlying_", type: "address", }, { internalType: "contract ComptrollerInterface", name: "comptroller_", type: "address", }, { internalType: "contract InterestRateModel", name: "interestRateModel_", type: "address", }, { internalType: "uint256", name: "initialExchangeRateMantissa_", type: "uint256", }, { 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: [ { internalType: "contract ComptrollerInterface", name: "comptroller_", type: "address", }, { internalType: "contract InterestRateModel", name: "interestRateModel_", type: "address", }, { internalType: "uint256", name: "initialExchangeRateMantissa_", type: "uint256", }, { 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: "interestRateModel", outputs: [ { internalType: "contract InterestRateModel", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isCToken", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "borrower", type: "address", }, { internalType: "uint256", name: "repayAmount", type: "uint256", }, { internalType: "contract CTokenInterface", name: "cTokenCollateral", type: "address", }, ], name: "liquidateBorrow", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "mintAmount", type: "uint256", }, ], name: "mint", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "name", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "pendingAdmin", outputs: [ { internalType: "address payable", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "protocolSeizeShareMantissa", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "redeemTokens", type: "uint256", }, ], name: "redeem", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "redeemAmount", type: "uint256", }, ], name: "redeemUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "repayAmount", type: "uint256", }, ], name: "repayBorrow", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "borrower", type: "address", }, { internalType: "uint256", name: "repayAmount", type: "uint256", }, ], name: "repayBorrowBehalf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "reserveFactorMantissa", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "liquidator", type: "address", }, { internalType: "address", name: "borrower", type: "address", }, { internalType: "uint256", name: "seizeTokens", type: "uint256", }, ], name: "seize", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "newAdmin", type: "address", }, ], name: "setInitialAdmin", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "supplyRatePerBlock", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract EIP20NonStandardInterface", name: "token", type: "address", }, ], name: "sweepToken", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "symbol", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalBorrows", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalBorrowsCurrent", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "totalReserves", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalSupply", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "dst", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transfer", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "src", type: "address", }, { internalType: "address", name: "dst", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transferFrom", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "underlying", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, ]; const _bytecode = "0x60806040523480156200001157600080fd5b50604051620044cc380380620044cc83398101604081905262000034916200081a565b60038054610100600160a81b03191633610100021790556200005c8888888888888862000090565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200097d95505050505050565b620000ab8686868686866200013560201b62000f101760201c565b601180546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa15801562000105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012b9190620008fb565b5050505050505050565b60035461010090046001600160a01b03163314620001a65760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b60648201526084015b60405180910390fd5b600954158015620001b75750600a54155b620002115760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b60648201526084016200019d565b6007849055836200027e5760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b60648201526084016200019d565b60006200028b87620003a7565b90508015620002dd5760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c656400000000000060448201526064016200019d565b43600955670de0b6b3a7640000600a55620002f886620004ff565b90508015620003555760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b60648201526084016200019d565b83516200036a9060019060208701906200067c565b508251620003809060029060208601906200067c565b50506003805460ff90921660ff199283161790556000805490911660011790555050505050565b60035460009061010090046001600160a01b03163314620003db5760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c919062000915565b6200049a5760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016200019d565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b600354600090819061010090046001600160a01b03163314620005355760405163407fded560e01b815260040160405180910390fd5b43600954146200055857604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000915565b620006235760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016200019d565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101620004ee565b8280546200068a9062000940565b90600052602060002090601f016020900481019282620006ae5760008555620006f9565b82601f10620006c957805160ff1916838001178555620006f9565b82800160010185558215620006f9579182015b82811115620006f9578251825591602001919060010190620006dc565b50620007079291506200070b565b5090565b5b808211156200070757600081556001016200070c565b6001600160a01b03811681146200073857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200076357600080fd5b81516001600160401b03808211156200078057620007806200073b565b604051601f8301601f19908116603f01168101908282118183101715620007ab57620007ab6200073b565b81604052838152602092508683858801011115620007c857600080fd5b600091505b83821015620007ec5785820183015181830184015290820190620007cd565b83821115620007fe5760008385830101525b9695505050505050565b8051620008158162000722565b919050565b600080600080600080600080610100898b0312156200083857600080fd5b8851620008458162000722565b60208a0151909850620008588162000722565b60408a01519097506200086b8162000722565b60608a015160808b015191975095506001600160401b03808211156200089057600080fd5b6200089e8c838d0162000751565b955060a08b0151915080821115620008b557600080fd5b50620008c48b828c0162000751565b93505060c089015160ff81168114620008dc57600080fd5b9150620008ec60e08a0162000808565b90509295985092959890939650565b6000602082840312156200090e57600080fd5b5051919050565b6000602082840312156200092857600080fd5b815180151581146200093957600080fd5b9392505050565b600181811c908216806200095557607f821691505b602082108114156200097757634e487b7160e01b600052602260045260246000fd5b50919050565b613b3f806200098d6000396000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c806373acee98116101b8578063b71d1a0c11610104578063f2b3abbd116100a2578063f851a4401161007c578063f851a44014610704578063f8f9da281461071c578063fca7820b14610724578063fe9c44ae1461073757600080fd5b8063f2b3abbd146106cb578063f3fdb15a146106de578063f5e3c462146106f157600080fd5b8063c5ebeaec116100de578063c5ebeaec14610664578063db006a7514610677578063dd62ed3e1461068a578063e9c714f2146106c357600080fd5b8063b71d1a0c14610616578063bd6d894d14610629578063c37f68e21461063157600080fd5b806399d8c1b411610171578063a9059cbb1161014b578063a9059cbb146105df578063aa5af0fd146105f2578063ae9d70b0146105fb578063b2a02ff11461060357600080fd5b806399d8c1b4146105b1578063a0712d68146105c4578063a6afed95146105d757600080fd5b806373acee981461055f5780637f1e06be14610567578063852a12e31461057a5780638f840ddd1461058d57806395d89b411461059657806395dd91931461059e57600080fd5b8063313ce56711610292578063601a0bf1116102305780636c540baf1161020a5780636c540baf146105075780636f307dc31461051057806370a0823114610523578063726059211461054c57600080fd5b8063601a0bf1146104de5780636752e702146104f157806369ab3250146104ff57600080fd5b80633e9410101161026c5780633e9410101461049c5780634576b5db146104af57806347bd3718146104c25780635fe3b567146104cb57600080fd5b8063313ce567146104625780633af9e669146104815780633b1d21a21461049457600080fd5b806318160ddd116102ff5780631be19560116102d95780631be19560146103fe57806323b872dd146104115780632608f81814610424578063267822471461043757600080fd5b806318160ddd146103da578063182df0f5146103e35780631a31d465146103eb57600080fd5b8063028e8b9a1461034757806306fdde031461035c578063095ea7b31461037a5780630e7527021461039d578063173b9904146103be57806317bfdfbc146103c7575b600080fd5b61035a6103553660046135af565b61073f565b005b610364610782565b6040516103719190613619565b60405180910390f35b61038d61038836600461362c565b610810565b6040519015158152602001610371565b6103b06103ab366004613658565b61087e565b604051908152602001610371565b6103b060085481565b6103b06103d53660046135af565b610891565b6103b0600d5481565b6103b06108ed565b61035a6103f936600461372a565b6108fc565b61035a61040c3660046135af565b610991565b61038d61041f3660046137e0565b610b5d565b6103b061043236600461362c565b610bad565b60045461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610371565b60035461046f9060ff1681565b60405160ff9091168152602001610371565b6103b061048f3660046135af565b610bc2565b6103b0610c08565b6103b06104aa366004613658565b610c12565b6103b06104bd3660046135af565b610c23565b6103b0600b5481565b60055461044a906001600160a01b031681565b6103b06104ec366004613658565b610d75565b6103b0666379da05b6000081565b6103b0600081565b6103b060095481565b60115461044a906001600160a01b031681565b6103b06105313660046135af565b6001600160a01b03166000908152600e602052604090205490565b61035a61055a36600461372a565b610db4565b6103b0610dcc565b61035a6105753660046135af565b610e16565b6103b0610588366004613658565b610eed565b6103b0600c5481565b610364610ef8565b6103b06105ac3660046135af565b610f05565b61035a6105bf366004613821565b610f10565b6103b06105d2366004613658565b61116b565b6103b0611176565b61038d6105ed36600461362c565b611364565b6103b0600a5481565b6103b06113b3565b6103b06106113660046137e0565b61144b565b6103b06106243660046135af565b61149a565b6103b0611527565b61064461063f3660046135af565b611577565b604080519485526020850193909352918301526060820152608001610371565b6103b0610672366004613658565b6115b8565b6103b0610685366004613658565b6115c3565b6103b06106983660046138c3565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6103b06115ce565b6103b06106d93660046135af565b6116d5565b60065461044a906001600160a01b031681565b6103b06106ff3660046138fc565b6116e9565b60035461044a9061010090046001600160a01b031681565b6103b0611700565b6103b0610732366004613658565b611753565b61038d600181565b60035461010090046001600160a01b03161561075a57600080fd5b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001805461078f9061393e565b80601f01602080910402602001604051908101604052809291908181526020018280546107bb9061393e565b80156108085780601f106107dd57610100808354040283529160200191610808565b820191906000526020600020905b8154815290600101906020018083116107eb57829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061086c9087815260200190565b60405180910390a35060019392505050565b600061088982611792565b506000919050565b6000805460ff166108bd5760405162461bcd60e51b81526004016108b490613979565b60405180910390fd5b6000805460ff191690556108cf611176565b506108d982610f05565b90506000805460ff19166001179055919050565b60006108f76117e3565b905090565b61090a868686868686610f10565b601180546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610987919061399d565b5050505050505050565b60035461010090046001600160a01b03163314610a085760405162461bcd60e51b815260206004820152602f60248201527f4345726332303a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b60648201526084016108b4565b6011546001600160a01b0382811691161415610a815760405162461bcd60e51b815260206004820152603260248201527f4345726332303a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b60648201526084016108b4565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec919061399d565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb90604401600060405180830381600087803b158015610b4157600080fd5b505af1158015610b55573d6000803e3d6000fd5b505050505050565b6000805460ff16610b805760405162461bcd60e51b81526004016108b490613979565b6000805460ff19168155610b963386868661184d565b1490506000805460ff191660011790559392505050565b6000610bb98383611a7b565b50600092915050565b6000806040518060200160405280610bd8611527565b90526001600160a01b0384166000908152600e6020526040902054909150610c01908290611acd565b9392505050565b60006108f7611aed565b6000610c1d82611b62565b92915050565b60035460009061010090046001600160a01b03163314610c565760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc491906139b6565b610d105760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108b4565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b6000805460ff16610d985760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055610daa611176565b506108d982611bb9565b610dc3878787878787876108fc565b50505050505050565b6000805460ff16610def5760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055610e01611176565b5050600b546000805460ff1916600117905590565b60035461010090046001600160a01b03163314610e8b5760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179207365742074686520636f6d702d60448201526c6c696b652064656c656761746560981b60648201526084016108b4565b6011546040516317066a5760e21b81526001600160a01b03838116600483015290911690635c19a95c90602401600060405180830381600087803b158015610ed257600080fd5b505af1158015610ee6573d6000803e3d6000fd5b5050505050565b600061088982611cd4565b6002805461078f9061393e565b6000610c1d82611d25565b60035461010090046001600160a01b03163314610f7b5760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b60648201526084016108b4565b600954158015610f8b5750600a54155b610fe35760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b60648201526084016108b4565b60078490558361104e5760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b60648201526084016108b4565b600061105987610c23565b905080156110a95760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c656400000000000060448201526064016108b4565b43600955670de0b6b3a7640000600a556110c286611d6f565b9050801561111d5760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b60648201526084016108b4565b8351611130906001906020870190613507565b508251611144906002906020860190613507565b50506003805460ff90921660ff199283161790556000805490911660011790555050505050565b600061088982611ee4565b60095460009043908082141561118f5760009250505090565b6000611199611aed565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa158015611203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611227919061399d565b905065048c2739500081111561127f5760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c7920686967680000000060448201526064016108b4565b600061128b87896139ee565b905060006112a760405180602001604052808581525083611f23565b905060006112b58288611acd565b905060006112c38883613a05565b905060006112e26040518060200160405280600854815250848a611f54565b905060006112f185898a611f54565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b6000805460ff166113875760405162461bcd60e51b81526004016108b490613979565b6000805460ff1916815561139d3380868661184d565b1490506000805460ff1916600117905592915050565b6006546000906001600160a01b031663b81688166113cf611aed565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f7919061399d565b6000805460ff1661146e5760405162461bcd60e51b81526004016108b490613979565b6000805460ff1916905561148433858585611f75565b50600080805460ff191660011790559392505050565b60035460009061010090046001600160a01b031633146114cd57604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610d64565b6000805460ff1661154a5760405162461bcd60e51b81526004016108b490613979565b6000805460ff1916905561155c611176565b506115656108ed565b90506000805460ff1916600117905590565b6001600160a01b0381166000908152600e602052604081205481908190819081906115a187611d25565b6115a96117e3565b93509350935093509193509193565b6000610889826121ee565b60006108898261222d565b6004546000906001600160a01b0316331415806115e9575033155b1561160757604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b60006116df611176565b50610c1d82611d6f565b60006116f684848461226e565b5060009392505050565b6006546000906001600160a01b03166315f2405361171c611aed565b600b54600c546040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640161140a565b6000805460ff166117765760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055611788611176565b506108d98261234c565b60005460ff166117b45760405162461bcd60e51b81526004016108b490613979565b6000805460ff191690556117c6611176565b506117d2333383612408565b50506000805460ff19166001179055565b600d54600090806117f657505060075490565b6000611800611aed565b90506000600c54600b54836118159190613a05565b61181f91906139ee565b9050600083611836670de0b6b3a764000084613a1d565b6118409190613a3c565b95945050505050565b5090565b6005546040516317b9b84b60e31b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092839291169063bdcdc258906084016020604051808303816000875af11580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d6919061399d565b905080156118fa5760405163089d427760e11b8152600481018290526024016108b4565b836001600160a01b0316856001600160a01b0316141561192d57604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b03161415611952575060001961197a565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b600061198685836139ee565b6001600160a01b0388166000908152600e6020526040812054919250906119ae9087906139ee565b6001600160a01b0388166000908152600e6020526040812054919250906119d6908890613a05565b6001600160a01b03808b166000908152600e6020526040808220869055918b1681522081905590506000198414611a30576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b0316600080516020613aea83398151915289604051611a6391815260200190565b60405180910390a35060009998505050505050505050565b60005460ff16611a9d5760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055611aaf611176565b50611abb338383612408565b50506000805460ff1916600117905550565b600080611ada8484611f23565b9050611ae5816125b1565b949350505050565b6011546040516370a0823160e01b81523060048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c919061399d565b91505090565b6000805460ff16611b855760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055611b97611176565b50611ba1826125c9565b5050600090506000805460ff19166001179055919050565b600354600090819061010090046001600160a01b03163314611bee57604051630f7e5e6d60e41b815260040160405180910390fd5b4360095414611c1057604051630dff50cb60e41b815260040160405180910390fd5b82611c19611aed565b1015611c3857604051633345e99960e01b815260040160405180910390fd5b600c54831115611c5b576040516378d2980560e11b815260040160405180910390fd5b82600c54611c6991906139ee565b600c819055600354909150611c8c9061010090046001600160a01b03168461265d565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610d6493929190613a5e565b60005460ff16611cf65760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055611d08611176565b50611d1533600083612747565b506000805460ff19166001179055565b6001600160a01b03811660009081526010602052604081208054611d4c5750600092915050565b600a548154600091611d5d91613a1d565b9050816001015481611ae59190613a3c565b600354600090819061010090046001600160a01b03163314611da45760405163407fded560e01b815260040160405180910390fd5b4360095414611dc657604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4091906139b6565b611e8c5760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016108b4565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101610d64565b60005460ff16611f065760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055611f18611176565b50611d153382612a24565b6040805160208101909152600081526040518060200160405280611f4b856000015185612bda565b90529392505050565b600080611f618585611f23565b9050611840611f6f826125b1565b84612be6565b60055460405163d02f735160e01b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015260848201849052600092169063d02f73519060a4016020604051808303816000875af1158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612003919061399d565b90508015612027576040516363e00e3360e11b8152600481018290526024016108b4565b836001600160a01b0316836001600160a01b0316141561205a57604051633a94626760e11b815260040160405180910390fd5b600061207b836040518060200160405280666379da05b60000815250612bf2565b9050600061208982856139ee565b9050600060405180602001604052806120a06117e3565b9052905060006120b08285611acd565b9050600081600c546120c29190613a05565b600c819055600d549091506120d89086906139ee565b600d556001600160a01b0388166000908152600e60205260409020546120ff9088906139ee565b6001600160a01b03808a166000908152600e602052604080822093909355908b168152205461212f908590613a05565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a1690600080516020613aea833981519152906121719088815260200190565b60405180910390a360405185815230906001600160a01b038a1690600080516020613aea8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53083836040516121da93929190613a5e565b60405180910390a150505050505050505050565b60005460ff166122105760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055612222611176565b50611d153382612c15565b60005460ff1661224f5760405162461bcd60e51b81526004016108b490613979565b6000805460ff19169055612261611176565b50611d1533826000612747565b60005460ff166122905760405162461bcd60e51b81526004016108b490613979565b6000805460ff191690556122a2611176565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612309919061399d565b9050801561232d57604051633eea49b760e11b8152600481018290526024016108b4565b61233933858585612de2565b50506000805460ff191660011790555050565b60035460009061010090046001600160a01b0316331461237f57604051631205b57b60e11b815260040160405180910390fd5b43600954146123a157604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a76400008211156123ca5760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610d64565b600554604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283929116906324008a62906084016020604051808303816000875af115801561246d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612491919061399d565b905080156124b557604051638c81362d60e01b8152600481018290526024016108b4565b43600954146124d75760405163c9021e2f60e01b815260040160405180910390fd5b60006124e285611d25565b9050600060001985146124f557846124f7565b815b90506000612505888361329c565b9050600061251382856139ee565b9050600082600b5461252591906139ee565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b8051600090610c1d90670de0b6b3a764000090613a3c565b600080808043600954146125f3576040516338acf79960e01b8152600481018290526024016108b4565b6125fd338661329c565b905080600c5461260d9190613a05565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc533828460405161264993929190613a5e565b60405180910390a160009590945092505050565b60115460405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905290911690819063a9059cbb90604401600060405180830381600087803b1580156126ad57600080fd5b505af11580156126c1573d6000803e3d6000fd5b5050505060003d600081146126dd57602081146126e757600080fd5b60001991506126f3565b60206000803e60005191505b50806127415760405162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c45440000000000000060448201526064016108b4565b50505050565b811580612752575080155b6127bb5760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b60648201526084016108b4565b600060405180602001604052806127d06117e3565b9052905060008084156127f1578491506127ea8386611acd565b9050612801565b6127fb8484613473565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d91906128369030908b908890600401613a7f565b6020604051808303816000875af1158015612855573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612879919061399d565b9050801561289d5760405163480f424760e01b8152600481018290526024016108b4565b43600954146128bf576040516397b5cfcd60e01b815260040160405180910390fd5b816128c8611aed565b10156128e7576040516391240a1b60e01b815260040160405180910390fd5b82600d546128f591906139ee565b600d556001600160a01b0387166000908152600e602052604090205461291c9084906139ee565b6001600160a01b0388166000908152600e602052604090205561293f878361265d565b60405183815230906001600160a01b03891690600080516020613aea8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a9298783856040516129a093929190613a5e565b60405180910390a16005546040516351dff98960e01b81523060048201526001600160a01b0389811660248301526044820185905260648201869052909116906351dff98990608401600060405180830381600087803b158015612a0357600080fd5b505af1158015612a17573d6000803e3d6000fd5b5050505050505050505050565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e190612a5990309087908790600401613a7f565b6020604051808303816000875af1158015612a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9c919061399d565b90508015612ac0576040516349abd4fd60e01b8152600481018290526024016108b4565b4360095414612ae2576040516338d8859760e01b815260040160405180910390fd5b60006040518060200160405280612af76117e3565b905290506000612b07858561329c565b90506000612b158284613473565b905080600d54612b259190613a05565b600d556001600160a01b0386166000908152600e6020526040902054612b4c908290613a05565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90612b9c90889085908590613a5e565b60405180910390a16040518181526001600160a01b038716903090600080516020613aea8339815191529060200160405180910390a3505050505050565b6000610c018284613a1d565b6000610c018284613a05565b6000670de0b6b3a7640000612c0b848460000151612bda565b610c019190613a3c565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c90612c4a90309087908790600401613a7f565b6020604051808303816000875af1158015612c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8d919061399d565b90508015612cb15760405163918db40f60e01b8152600481018290526024016108b4565b4360095414612cd357604051630e8d8c6160e21b815260040160405180910390fd5b81612cdc611aed565b1015612cfb576040516348c2588160e01b815260040160405180910390fd5b6000612d0684611d25565b90506000612d148483613a05565b9050600084600b54612d269190613a05565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b8190559050612d5b868661265d565b612d896040518060400160405280600c81526020016b7472616e7366657272696e6760a01b81525086613491565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b600554604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000921690635fc7e71e9060a4016020604051808303816000875af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e70919061399d565b90508015612e9457604051630a14d17960e11b8152600481018290526024016108b4565b4360095414612eb6576040516380965b1b60e01b815260040160405180910390fd5b43826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f19919061399d565b14612f3757604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b03161415612f6a57604051631bd1a62160e21b815260040160405180910390fd5b82612f885760405163d29da7ef60e01b815260040160405180910390fd5b600019831415612fab57604051635982c5bb60e11b815260040160405180910390fd5b6000612fb8868686612408565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b90612ff290309089908890600401613a7f565b6040805180830381865afa15801561300e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130329190613aa3565b91509150600082146130a25760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016108b4565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa1580156130eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310f919061399d565b101561315d5760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016108b4565b6001600160a01b03851630141561317f5761317a30898984611f75565b613239565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff1906131b2908c908c908790600401613a7f565b6020604051808303816000875af11580156131d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f5919061399d565b146132395760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b60448201526064016108b4565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6011546040516370a0823160e01b81523060048201526000916001600160a01b0316908190839082906370a0823190602401602060405180830381865afa1580156132eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330f919061399d565b6040516323b872dd60e01b81529091506001600160a01b038316906323b872dd9061334290899030908a90600401613a7f565b600060405180830381600087803b15801561335c57600080fd5b505af1158015613370573d6000803e3d6000fd5b5050505060003d6000811461338c576020811461339657600080fd5b60001991506133a2565b60206000803e60005191505b50806133f05760405162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c4544000000000000000060448201526064016108b4565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b919061399d565b905061346783826139ee565b98975050505050505050565b6000610c0161348a84670de0b6b3a7640000612bda565b83516134da565b6134d682826040516024016134a7929190613ac7565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790526134e6565b5050565b6000610c018284613a3c565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b8280546135139061393e565b90600052602060002090601f016020900481019282613535576000855561357b565b82601f1061354e57805160ff191683800117855561357b565b8280016001018555821561357b579182015b8281111561357b578251825591602001919060010190613560565b506118499291505b808211156118495760008155600101613583565b6001600160a01b03811681146135ac57600080fd5b50565b6000602082840312156135c157600080fd5b8135610c0181613597565b6000815180845260005b818110156135f2576020818501810151868301820152016135d6565b81811115613604576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610c0160208301846135cc565b6000806040838503121561363f57600080fd5b823561364a81613597565b946020939093013593505050565b60006020828403121561366a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261369857600080fd5b813567ffffffffffffffff808211156136b3576136b3613671565b604051601f8301601f19908116603f011681019082821181831017156136db576136db613671565b816040528381528660208588010111156136f457600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461372557600080fd5b919050565b600080600080600080600060e0888a03121561374557600080fd5b873561375081613597565b9650602088013561376081613597565b9550604088013561377081613597565b945060608801359350608088013567ffffffffffffffff8082111561379457600080fd5b6137a08b838c01613687565b945060a08a01359150808211156137b657600080fd5b506137c38a828b01613687565b9250506137d260c08901613714565b905092959891949750929550565b6000806000606084860312156137f557600080fd5b833561380081613597565b9250602084013561381081613597565b929592945050506040919091013590565b60008060008060008060c0878903121561383a57600080fd5b863561384581613597565b9550602087013561385581613597565b945060408701359350606087013567ffffffffffffffff8082111561387957600080fd5b6138858a838b01613687565b9450608089013591508082111561389b57600080fd5b506138a889828a01613687565b9250506138b760a08801613714565b90509295509295509295565b600080604083850312156138d657600080fd5b82356138e181613597565b915060208301356138f181613597565b809150509250929050565b60008060006060848603121561391157600080fd5b833561391c81613597565b925060208401359150604084013561393381613597565b809150509250925092565b600181811c9082168061395257607f821691505b6020821081141561397357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b6000602082840312156139af57600080fd5b5051919050565b6000602082840312156139c857600080fd5b81518015158114610c0157600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613a0057613a006139d8565b500390565b60008219821115613a1857613a186139d8565b500190565b6000816000190483118215151615613a3757613a376139d8565b500290565b600082613a5957634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060408385031215613ab657600080fd5b505080516020909101519092909150565b604081526000613ada60408301856135cc565b9050826020830152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b536648e6b53face15a825afa4a22c3c34ef38c1653f60189ea6dc6ec5a5d22e64736f6c634300080a0033";