[ { "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": [], "name": "SetReserveGuardianOwnerCheck", "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": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": "oldReserveGuardian", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newReserveGuardian", "type": "address" } ], "name": "NewReserveGuardian", "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": [ { "internalType": "address payable", "name": "newReserveGuardian", "type": "address" } ], "name": "_setReserveGuardian", "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": "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": "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" } ], "name": "proxyInitialize", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "reserveGuardian", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "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": [], "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" } ]
608060405234801561001057600080fd5b50613e36806100206000396000f3fe608060405234801561001057600080fd5b50600436106102ed5760003560e01c80637f1e06be11610193578063bd6d894d116100e4578063f2b3abbd11610092578063f2b3abbd1461067e578063f3fdb15a14610691578063f5e3c462146106a4578063f851a440146106b7578063f8f9da28146106cf578063fca7820b146106d7578063fe9c44ae146106ea57600080fd5b8063bd6d894d146105c9578063c37f68e2146105d1578063c39b127f14610604578063c5ebeaec14610617578063db006a751461062a578063dd62ed3e1461063d578063e9c714f21461067657600080fd5b8063a6afed9511610141578063a6afed9514610564578063a9059cbb1461056c578063aa5af0fd1461057f578063ae9d70b014610588578063b2a02ff114610590578063b57a4a72146105a3578063b71d1a0c146105b657600080fd5b80637f1e06be146104f4578063852a12e3146105075780638f840ddd1461051a57806395d89b411461052357806395dd91931461052b57806399d8c1b41461053e578063a0712d681461055157600080fd5b8063313ce5671161024d578063601a0bf1116101fb578063601a0bf11461047e5780636752e7021461049157806369ab32501461049f5780636c540baf146104a75780636f307dc3146104b057806370a08231146104c357806373acee98146104ec57600080fd5b8063313ce567146104025780633af9e669146104215780633b1d21a2146104345780633e9410101461043c5780634576b5db1461044f57806347bd3718146104625780635fe3b5671461046b57600080fd5b806318160ddd116102aa57806318160ddd14610390578063182df0f5146103995780631a31d465146103a15780631be19560146103b657806323b872dd146103c95780632608f818146103dc57806326782247146103ef57600080fd5b806306fdde03146102f2578063095ea7b3146103105780630d983cc6146103335780630e75270214610353578063173b99041461037457806317bfdfbc1461037d575b600080fd5b6102fa6106f2565b6040516103079190613706565b60405180910390f35b61032361031e366004613773565b610780565b6040519015158152602001610307565b601154610346906001600160a01b031681565b604051610307919061379f565b6103666103613660046137b3565b6107ee565b604051908152602001610307565b61036660085481565b61036661038b3660046137cc565b610801565b610366600d5481565b610366610869565b6103b46103af3660046138a2565b610878565b005b6103b46103c43660046137cc565b61090d565b6103236103d7366004613958565b610ade565b6103666103ea366004613773565b610b3a565b600454610346906001600160a01b031681565b60035461040f9060ff1681565b60405160ff9091168152602001610307565b61036661042f3660046137cc565b610b4f565b610366610b95565b61036661044a3660046137b3565b610b9f565b61036661045d3660046137cc565b610bb0565b610366600b5481565b600554610346906001600160a01b031681565b61036661048c3660046137b3565b610ccb565b610366666379da05b6000081565b610366600081565b61036660095481565b601254610346906001600160a01b031681565b6103666104d13660046137cc565b6001600160a01b03166000908152600e602052604090205490565b610366610d12565b6103b46105023660046137cc565b610d68565b6103666105153660046137b3565b610e42565b610366600c5481565b6102fa610e4d565b6103666105393660046137cc565b610e5a565b6103b461054c366004613999565b610e65565b61036661055f3660046137b3565b6110e6565b6103666110f1565b61032361057a366004613773565b6112dd565b610366600a5481565b610366611338565b61036661059e366004613958565b6113d0565b6103b46105b1366004613a3b565b61142b565b6103666105c43660046137cc565b611582565b610366611608565b6105e46105df3660046137cc565b611664565b604080519485526020850193909352918301526060820152608001610307565b6103666106123660046137cc565b6116a5565b6103666106253660046137b3565b61172b565b6103666106383660046137b3565b611736565b61036661064b366004613b06565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b610366611741565b61036661068c3660046137cc565b611846565b600654610346906001600160a01b031681565b6103666106b2366004613b3f565b61185a565b6003546103469061010090046001600160a01b031681565b610366611871565b6103666106e53660046137b3565b6118c4565b610323600181565b600180546106ff90613b81565b80601f016020809104026020016040519081016040528092919081815260200182805461072b90613b81565b80156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107dc9087815260200190565b60405180910390a35060019392505050565b60006107f98261190b565b506000919050565b6000805462010000900460ff166108335760405162461bcd60e51b815260040161082a90613bbb565b60405180910390fd5b6000805462ff0000191690556108476110f1565b5061085182610e5a565b90506000805462ff0000191662010000179055919050565b6000610873611968565b905090565b610886868686868686610e65565b601280546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190613bdf565b5050505050505050565b60035461010090046001600160a01b031633146109845760405162461bcd60e51b815260206004820152602f60248201527f4345726332303a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b606482015260840161082a565b6012546001600160a01b03908116908216036109fd5760405162461bcd60e51b815260206004820152603260248201527f4345726332303a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b606482015260840161082a565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610a2c90309060040161379f565b602060405180830381865afa158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190613bdf565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb90604401600060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050505050565b6000805462010000900460ff16610b075760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff000019168155610b1f338686866119d4565b1490506000805462ff00001916620100001790559392505050565b6000610b468383611bf5565b50600092915050565b6000806040518060200160405280610b65611608565b90526001600160a01b0384166000908152600e6020526040902054909150610b8e908290611c53565b9392505050565b6000610873611c73565b6000610baa82611ced565b92915050565b60035460009061010090046001600160a01b03163314610be35760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c519190613bf8565b610c6d5760405162461bcd60e51b815260040161082a90613c1a565b600580546001600160a01b0319166001600160a01b0385161790556040517f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d90610cba9083908690613c51565b60405180910390a150600092915050565b6000805462010000900460ff16610cf45760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff000019169055610d086110f1565b5061085182611d50565b6000805462010000900460ff16610d3b5760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff000019169055610d4f6110f1565b5050600b546000805462ff000019166201000017905590565b60035461010090046001600160a01b03163314610ddd5760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179207365742074686520636f6d702d60448201526c6c696b652064656c656761746560981b606482015260840161082a565b6012546040516317066a5760e21b81526001600160a01b0390911690635c19a95c90610e0d90849060040161379f565b600060405180830381600087803b158015610e2757600080fd5b505af1158015610e3b573d6000803e3d6000fd5b5050505050565b60006107f982611e72565b600280546106ff90613b81565b6000610baa82611ecf565b60035461010090046001600160a01b03163314610ed05760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b606482015260840161082a565b600954158015610ee05750600a54155b610f385760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b606482015260840161082a565b600784905583610fa35760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b606482015260840161082a565b6000610fae87610bb0565b90508015610ffe5760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c6564000000000000604482015260640161082a565b42600955670de0b6b3a7640000600a5561101786611f1b565b905080156110725760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b606482015260840161082a565b8351611085906001906020870190613676565b508251611099906002906020860190613676565b50506003805460ff90921660ff199092169190911790555050601180546001600160a01b0319163317905550506702c68af0bb140000600855506000805462ff0000191662010000179055565b60006107f982612055565b60095460009042908181036111095760009250505090565b6000611113611c73565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190613bdf565b9050645d21dba0008111156111f85760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c79206869676800000000604482015260640161082a565b60006112048789613c81565b905060006112206040518060200160405280858152508361209c565b9050600061122e8288611c53565b9050600061123c8883613c98565b9050600061125b6040518060200160405280600854815250848a6120cd565b9050600061126a85898a6120cd565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b6000805462010000900460ff166113065760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff00001916815561131e338086866119d4565b1490506000805462ff000019166201000017905592915050565b6006546000906001600160a01b031663b8168816611354611c73565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108739190613bdf565b6000805462010000900460ff166113f95760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff000019169055611411338585856120ee565b50600080805462ff00001916620100001790559392505050565b600054610100900460ff161580801561144b5750600054600160ff909116105b806114655750303b158015611465575060005460ff166001145b6114c85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161082a565b6000805460ff1916600117905580156114eb576000805461ff0019166101001790555b60038054610100600160a81b031916336101000217905561151189898989898989610878565b60038054610100600160a81b0319166101006001600160a01b038516021790558015611577576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60035460009061010090046001600160a01b031633146115b557604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a990610cba9083908690613c51565b6000805462010000900460ff166116315760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff0000191690556116456110f1565b5061164e610869565b90506000805462ff000019166201000017905590565b6001600160a01b0381166000908152600e6020526040812054819081908190819061168e87611ecf565b611696611968565b93509350935093509193509193565b60035460009061010090046001600160a01b031633146116d857604051632f7aaee760e01b815260040160405180910390fd5b601180546001600160a01b038481166001600160a01b03198316179092556040519116907fe3f5272426aa3e70e583474d1155b19c7d9a5394147c40191dfaf32b792bc97890610cba9083908690613c51565b60006107f982612354565b60006107f98261239b565b6004546000906001600160a01b03163314158061175c575033155b1561177a57604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03818116610100818102610100600160a81b0319871617968790556001600160a01b03199093169093556040519382900481169492937ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc936117f093879391041690613c51565b60405180910390a16004546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916118359184916001600160a01b031690613c51565b60405180910390a160009250505090565b60006118506110f1565b50610baa82611f1b565b60006118678484846123e4565b5060009392505050565b6006546000906001600160a01b03166315f2405361188d611c73565b600b54600c546040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640161138f565b6000805462010000900460ff166118ed5760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff0000191690556119016110f1565b50610851826124ce565b60005462010000900460ff166119335760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff0000191690556119476110f1565b5061195333338361258a565b50506000805462ff0000191662010000179055565b600d5460009080820361197d57505060075490565b6000611987611c73565b90506000600c54600b548361199c9190613c98565b6119a69190613c81565b90506000836119bd670de0b6b3a764000084613cb0565b6119c79190613ccf565b95945050505050565b5090565b6005546040516317b9b84b60e31b815260009182916001600160a01b039091169063bdcdc25890611a0f903090899089908990600401613cf1565b6020604051808303816000875af1158015611a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a529190613bdf565b90508015611a765760405163089d427760e11b81526004810182905260240161082a565b836001600160a01b0316856001600160a01b031603611aa857604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b031603611acc5750600019611af4565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6000611b008583613c81565b6001600160a01b0388166000908152600e602052604081205491925090611b28908790613c81565b6001600160a01b0388166000908152600e602052604081205491925090611b50908890613c98565b6001600160a01b03808b166000908152600e6020526040808220869055918b1681522081905590506000198414611baa576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b0316600080516020613de183398151915289604051611bdd91815260200190565b60405180910390a35060009998505050505050505050565b60005462010000900460ff16611c1d5760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff000019169055611c316110f1565b50611c3d33838361258a565b50506000805462ff000019166201000017905550565b600080611c60848461209c565b9050611c6b81612728565b949350505050565b6012546040516370a0823160e01b81526000916001600160a01b03169081906370a0823190611ca690309060040161379f565b602060405180830381865afa158015611cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce79190613bdf565b91505090565b6000805462010000900460ff16611d165760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff000019169055611d2a6110f1565b50611d3482612740565b5050600090506000805462ff0000191662010000179055919050565b600354600090819061010090046001600160a01b03163314801590611d8057506011546001600160a01b03163314155b15611d9e57604051630f7e5e6d60e41b815260040160405180910390fd5b4260095414611dc057604051630dff50cb60e41b815260040160405180910390fd5b82611dc9611c73565b1015611de857604051633345e99960e01b815260040160405180910390fd5b600c54831115611e0b576040516378d2980560e11b815260040160405180910390fd5b82600c54611e199190613c81565b600c8190559050611e2a33846127d4565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610cba93929190613d1b565b60005462010000900460ff16611e9a5760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff000019169055611eae6110f1565b50611ebb336000836128ba565b506000805462ff0000191662010000179055565b6001600160a01b038116600090815260106020526040812080548203611ef85750600092915050565b600a548154600091611f0991613cb0565b9050816001015481611c6b9190613ccf565b600354600090819061010090046001600160a01b03163314611f505760405163407fded560e01b815260040160405180910390fd5b4260095414611f7257604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec9190613bf8565b6120085760405162461bcd60e51b815260040161082a90613c1a565b600680546001600160a01b0319166001600160a01b0385161790556040517fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92690610cba9083908690613c51565b60005462010000900460ff1661207d5760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff0000191690556120916110f1565b50611ebb3382612b8c565b60408051602081019091526000815260405180602001604052806120c4856000015185612df6565b90529392505050565b6000806120da858561209c565b90506119c76120e882612728565b84612e02565b60055460405163d02f735160e01b81526000916001600160a01b03169063d02f7351906121279030908990899089908990600401613d3c565b6020604051808303816000875af1158015612146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216a9190613bdf565b9050801561218e576040516363e00e3360e11b81526004810182905260240161082a565b836001600160a01b0316836001600160a01b0316036121c057604051633a94626760e11b815260040160405180910390fd5b60006121e1836040518060200160405280666379da05b60000815250612e0e565b905060006121ef8285613c81565b905060006040518060200160405280612206611968565b9052905060006122168285611c53565b9050600081600c546122289190613c98565b600c819055600d5490915061223e908690613c81565b600d556001600160a01b0388166000908152600e6020526040902054612265908890613c81565b6001600160a01b03808a166000908152600e602052604080822093909355908b1681522054612295908590613c98565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a1690600080516020613de1833981519152906122d79088815260200190565b60405180910390a360405185815230906001600160a01b038a1690600080516020613de18339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc530838360405161234093929190613d1b565b60405180910390a150505050505050505050565b60005462010000900460ff1661237c5760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff0000191690556123906110f1565b50611ebb3382612e31565b60005462010000900460ff166123c35760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff0000191690556123d76110f1565b50611ebb338260006128ba565b60005462010000900460ff1661240c5760405162461bcd60e51b815260040161082a90613bbb565b6000805462ff0000191690556124206110f1565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124879190613bdf565b905080156124ab57604051633eea49b760e11b81526004810182905260240161082a565b6124b733858585612fd0565b50506000805462ff00001916620100001790555050565b60035460009061010090046001600160a01b0316331461250157604051631205b57b60e11b815260040160405180910390fd5b426009541461252357604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a764000082111561254c5760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610cba565b600554604051631200453160e11b815260009182916001600160a01b03909116906324008a62906125c5903090899089908990600401613cf1565b6020604051808303816000875af11580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190613bdf565b9050801561262c57604051638c81362d60e01b81526004810182905260240161082a565b426009541461264e5760405163c9021e2f60e01b815260040160405180910390fd5b600061265985611ecf565b90506000600019851461266c578461266e565b815b9050600061267c8883613475565b9050600061268a8285613c81565b9050600082600b5461269c9190613c81565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b8051600090610baa90670de0b6b3a764000090613ccf565b6000808080426009541461276a576040516338acf79960e01b81526004810182905260240161082a565b6127743386613475565b905080600c546127849190613c98565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53382846040516127c093929190613d1b565b60405180910390a160009590945092505050565b60125460405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905290911690819063a9059cbb90604401600060405180830381600087803b15801561282457600080fd5b505af1158015612838573d6000803e3d6000fd5b5050505060003d60008114612854576020811461285e57600080fd5b600019915061286a565b60206000803e60005191505b50806128b45760405162461bcd60e51b81526020600482015260196024820152781513d2d15397d514905394d1915497d3d55517d19052531151603a1b604482015260640161082a565b50505050565b8115806128c5575080155b61292e5760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b606482015260840161082a565b60006040518060200160405280612943611968565b9052905060008084156129645784915061295d8386611c53565b9050612974565b61296e8484613651565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d91906129a99030908b908890600401613d6f565b6020604051808303816000875af11580156129c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ec9190613bdf565b90508015612a105760405163480f424760e01b81526004810182905260240161082a565b4260095414612a32576040516397b5cfcd60e01b815260040160405180910390fd5b81612a3b611c73565b1015612a5a576040516391240a1b60e01b815260040160405180910390fd5b82600d54612a689190613c81565b600d556001600160a01b0387166000908152600e6020526040902054612a8f908490613c81565b6001600160a01b0388166000908152600e6020526040902055612ab287836127d4565b60405183815230906001600160a01b03891690600080516020613de18339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878385604051612b1393929190613d1b565b60405180910390a16005546040516351dff98960e01b81526001600160a01b03909116906351dff98990612b519030908b9087908990600401613d93565b600060405180830381600087803b158015612b6b57600080fd5b505af1158015612b7f573d6000803e3d6000fd5b5050505050505050505050565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e190612bc190309087908790600401613d6f565b6020604051808303816000875af1158015612be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c049190613bdf565b90508015612c28576040516349abd4fd60e01b81526004810182905260240161082a565b4260095414612c4a576040516338d8859760e01b815260040160405180910390fd5b60006040518060200160405280612c5f611968565b905290506000612c6f8585613475565b90506000612c7d8284613651565b9050600d54600003612ccb576103e8600d81905560008052600e6020527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c819055612cc89082613c81565b90505b80600d54612cd99190613c98565b600d556001600160a01b0386166000908152600e6020526040902054612d00908290613c98565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90612d5090889085908590613d1b565b60405180910390a16040518181526001600160a01b038716903090600080516020613de18339815191529060200160405180910390a36005546040516341c728b960e01b81526001600160a01b03909116906341c728b990612dbc9030908a9087908790600401613d93565b600060405180830381600087803b158015612dd657600080fd5b505af1158015612dea573d6000803e3d6000fd5b50505050505050505050565b6000610b8e8284613cb0565b6000610b8e8284613c98565b6000670de0b6b3a7640000612e27848460000151612df6565b610b8e9190613ccf565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c90612e6690309087908790600401613d6f565b6020604051808303816000875af1158015612e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea99190613bdf565b90508015612ecd5760405163918db40f60e01b81526004810182905260240161082a565b4260095414612eef57604051630e8d8c6160e21b815260040160405180910390fd5b81612ef8611c73565b1015612f17576040516348c2588160e01b815260040160405180910390fd5b6000612f2284611ecf565b90506000612f308483613c98565b9050600084600b54612f429190613c98565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b8190559050612f7786866127d4565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b600554604051632fe3f38f60e11b81526000916001600160a01b031690635fc7e71e9061300990309086908a908a908a90600401613d3c565b6020604051808303816000875af1158015613028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304c9190613bdf565b9050801561307057604051630a14d17960e11b81526004810182905260240161082a565b4260095414613092576040516380965b1b60e01b815260040160405180910390fd5b42826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f59190613bdf565b1461311357604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b03160361314557604051631bd1a62160e21b815260040160405180910390fd5b826000036131665760405163d29da7ef60e01b815260040160405180910390fd5b600019830361318857604051635982c5bb60e11b815260040160405180910390fd5b600061319586868661258a565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b906131cf90309089908890600401613d6f565b6040805180830381865afa1580156131eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320f9190613dbc565b915091506000821461327f5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161082a565b6040516370a0823160e01b815281906001600160a01b038716906370a08231906132ad908b9060040161379f565b602060405180830381865afa1580156132ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ee9190613bdf565b10156133375760405162461bcd60e51b815260206004820152601860248201527709892a2aa928882a88abea68a92b48abea89e9ebe9aaa86960431b604482015260640161082a565b306001600160a01b0386160361335857613353308989846120ee565b613412565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff19061338b908c908c908790600401613d6f565b6020604051808303816000875af11580156133aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ce9190613bdf565b146134125760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b604482015260640161082a565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6012546040516370a0823160e01b81526000916001600160a01b0316908190839082906370a08231906134ac90309060040161379f565b602060405180830381865afa1580156134c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ed9190613bdf565b6040516323b872dd60e01b81529091506001600160a01b038316906323b872dd9061352090899030908a90600401613d6f565b600060405180830381600087803b15801561353a57600080fd5b505af115801561354e573d6000803e3d6000fd5b5050505060003d6000811461356a576020811461357457600080fd5b6000199150613580565b60206000803e60005191505b50806135c95760405162461bcd60e51b81526020600482015260186024820152771513d2d15397d514905394d1915497d25397d1905253115160421b604482015260640161082a565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906135f890309060040161379f565b602060405180830381865afa158015613615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136399190613bdf565b90506136458382613c81565b98975050505050505050565b6000610b8e61366884670de0b6b3a7640000612df6565b83516000610b8e8284613ccf565b82805461368290613b81565b90600052602060002090601f0160209004810192826136a457600085556136ea565b82601f106136bd57805160ff19168380011785556136ea565b828001600101855582156136ea579182015b828111156136ea5782518255916020019190600101906136cf565b506119d09291505b808211156119d057600081556001016136f2565b600060208083528351808285015260005b8181101561373357858101830151858201604001528201613717565b81811115613745576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461377057600080fd5b50565b6000806040838503121561378657600080fd5b82356137918161375b565b946020939093013593505050565b6001600160a01b0391909116815260200190565b6000602082840312156137c557600080fd5b5035919050565b6000602082840312156137de57600080fd5b8135610b8e8161375b565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261381057600080fd5b813567ffffffffffffffff8082111561382b5761382b6137e9565b604051601f8301601f19908116603f01168101908282118183101715613853576138536137e9565b8160405283815286602085880101111561386c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461389d57600080fd5b919050565b600080600080600080600060e0888a0312156138bd57600080fd5b87356138c88161375b565b965060208801356138d88161375b565b955060408801356138e88161375b565b945060608801359350608088013567ffffffffffffffff8082111561390c57600080fd5b6139188b838c016137ff565b945060a08a013591508082111561392e57600080fd5b5061393b8a828b016137ff565b92505061394a60c0890161388c565b905092959891949750929550565b60008060006060848603121561396d57600080fd5b83356139788161375b565b925060208401356139888161375b565b929592945050506040919091013590565b60008060008060008060c087890312156139b257600080fd5b86356139bd8161375b565b955060208701356139cd8161375b565b945060408701359350606087013567ffffffffffffffff808211156139f157600080fd5b6139fd8a838b016137ff565b94506080890135915080821115613a1357600080fd5b50613a2089828a016137ff565b925050613a2f60a0880161388c565b90509295509295509295565b600080600080600080600080610100898b031215613a5857600080fd5b8835613a638161375b565b97506020890135613a738161375b565b96506040890135613a838161375b565b955060608901359450608089013567ffffffffffffffff80821115613aa757600080fd5b613ab38c838d016137ff565b955060a08b0135915080821115613ac957600080fd5b50613ad68b828c016137ff565b935050613ae560c08a0161388c565b915060e0890135613af58161375b565b809150509295985092959890939650565b60008060408385031215613b1957600080fd5b8235613b248161375b565b91506020830135613b348161375b565b809150509250929050565b600080600060608486031215613b5457600080fd5b8335613b5f8161375b565b9250602084013591506040840135613b768161375b565b809150509250925092565b600181811c90821680613b9557607f821691505b602082108103613bb557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b600060208284031215613bf157600080fd5b5051919050565b600060208284031215613c0a57600080fd5b81518015158114610b8e57600080fd5b6020808252601c908201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604082015260600190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b600082821015613c9357613c93613c6b565b500390565b60008219821115613cab57613cab613c6b565b500190565b6000816000190483118215151615613cca57613cca613c6b565b500290565b600082613cec57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039586168152938516602085015291841660408401529092166060820152608081019190915260a00190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60008060408385031215613dcf57600080fd5b50508051602090910151909290915056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122042a150a88bdcb9156e36180a54e572df4ab7631c7dadaf27e46d8e57f15613f164736f6c634300080d0033