[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AcceptAdminPendingAdminCheck", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "actualAddAmount", "type": "uint256" } ], "name": "AddReservesFactorFreshCheck", "type": "error" }, { "inputs": [], "name": "AlreadyInitialized", "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": "borrowRateMantissa", "type": "uint256" } ], "name": "BorrowRateIsAbsurdlyHigh", "type": "error" }, { "inputs": [], "name": "CannotSweepUnderlying", "type": "error" }, { "inputs": [], "name": "CollectInterestFailed", "type": "error" }, { "inputs": [], "name": "CollectInterestNotAllowed", "type": "error" }, { "inputs": [], "name": "EnsureNonEmptyAmountTooSmall", "type": "error" }, { "inputs": [], "name": "InitializeExchangeRateInvalid", "type": "error" }, { "inputs": [], "name": "InitializeInvalidMarketType", "type": "error" }, { "inputs": [], "name": "InitializeMarketTypeNotSet", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "InitializeSetComptrollerFailed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "InitializeSetInterestRateModelFailed", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InsufficientBalanceAfterTransfer", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "comptrollerAddress", "type": "address" } ], "name": "InvalidComptrollerAddress", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "interestRateModelAddress", "type": "address" } ], "name": "InvalidRateModelAddress", "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": [], "name": "PayInterestError", "type": "error" }, { "inputs": [], "name": "PayInterestNotAllowed", "type": "error" }, { "inputs": [], "name": "PriceError", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "RedeemComptrollerRejection", "type": "error" }, { "inputs": [], "name": "RedeemFreshnessCheck", "type": "error" }, { "inputs": [], "name": "RedeemInvalidInputs", "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": [], "name": "Reentry", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "errorCode", "type": "uint256" } ], "name": "RepayBorrowComptrollerRejection", "type": "error" }, { "inputs": [], "name": "RepayBorrowFreshnessCheck", "type": "error" }, { "inputs": [], "name": "RepayTooHigh", "type": "error" }, { "inputs": [], "name": "SenderMismatch", "type": "error" }, { "inputs": [], "name": "SetComptrollerOwnerCheck", "type": "error" }, { "inputs": [], "name": "SetInterestRateModelFreshCheck", "type": "error" }, { "inputs": [], "name": "SetInterestRateModelOwnerCheck", "type": "error" }, { "inputs": [], "name": "SetPendingAdminOwnerCheck", "type": "error" }, { "inputs": [], "name": "SetProtocolSeizeShareAdminCheck", "type": "error" }, { "inputs": [], "name": "SetProtocolSeizeShareTooHigh", "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": "TransferInFailed", "type": "error" }, { "inputs": [], "name": "TransferInvalidAmount", "type": "error" }, { "inputs": [], "name": "TransferNotAllowed", "type": "error" }, { "inputs": [], "name": "TransferNotEnough", "type": "error" }, { "inputs": [], "name": "TransferOutFailed", "type": "error" }, { "inputs": [], "name": "TransferTooMuch", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "Unsupported", "type": "error" }, { "inputs": [], "name": "ValueMismatch", "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" } ], "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": "oldProtocolSeizeShareMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newProtocolSeizeShareMantissa", "type": "uint256" } ], "name": "NewProtocolSeizeShare", "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": "bytes", "name": "data", "type": "bytes" } ], "name": "_becomeImplementation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "_ensureNonEmpty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "liquidator", "type": "address" }, { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], "name": "_liquidateBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "reduceAmount", "type": "uint256" } ], "name": "_reduceReserves", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "_resignImplementation", "outputs": [], "stateMutability": "nonpayable", "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": "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": "newProtocolSeizeShareMantissa", "type": "uint256" } ], "name": "_setProtocolSeizeShare", "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" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCash", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": [ { "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": "enum CTokenStorage.MarketType", "name": "marketType_", "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": [], "name": "marketType", "outputs": [ { "internalType": "enum CTokenStorage.MarketType", "name": "", "type": "uint8" } ], "stateMutability": "view", "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": [], "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" } ]
6080604052666379da05b6000060115534801561001a575f80fd5b506139d1806100285f395ff3fe608060405234801561000f575f80fd5b5060043610610372575f3560e01c80636f307dc3116101d4578063ae9d70b011610109578063e9c714f2116100a9578063f851a44011610079578063f851a4401461076d578063f8f9da2814610785578063fca7820b1461078d578063fe9c44ae146107a0575f80fd5b8063e9c714f21461072c578063f2b3abbd14610734578063f3fdb15a14610747578063f4fc61331461075a575f80fd5b8063c37f68e2116100e4578063c37f68e214610693578063c5ebeaec146106ce578063db006a75146106e1578063dd62ed3e146106f4575f80fd5b8063ae9d70b014610670578063b71d1a0c14610678578063bd6d894d1461068b575f80fd5b806395dd919311610174578063a0712d681161014f578063a0712d6814610639578063a6afed951461064c578063a9059cbb14610654578063aa5af0fd14610667575f80fd5b806395dd91931461060057806399d8c1b4146106135780639a98ea1e14610626575f80fd5b806383030846116101af57806383030846146105c9578063852a12e3146105dc5780638f840ddd146105ef57806395d89b41146105f8575f80fd5b80636f307dc31461058157806370a082311461059957806373acee98146105c1575f80fd5b80632e85fb41116102aa57806356e677281161024a578063601a0bf111610225578063601a0bf1146105555780636752e7021461056857806369ab3250146105715780636c540baf14610578575f80fd5b806356e677281461051c5780635c60da1b1461052f5780635fe3b56714610542575f80fd5b80633b1d21a2116102855780633b1d21a2146104e55780633e941010146104ed5780634576b5db1461050057806347bd371814610513575f80fd5b80632e85fb41146104a0578063313ce567146104b35780633af9e669146104d2575f80fd5b8063182df0f51161031557806323b872dd116102f057806323b872dd146104355780632608f81814610448578063267822471461045b5780632dd4890914610486575f80fd5b8063182df0f51461040757806319d1b7991461040f5780631be1956014610422575f80fd5b8063153ab50511610350578063153ab505146103d8578063173b9904146103e257806317bfdfbc146103eb57806318160ddd146103fe575f80fd5b806306fdde0314610376578063095ea7b3146103945780630e752702146103b7575b5f80fd5b61037e6107a8565b60405161038b919061336f565b60405180910390f35b6103a76103a23660046133cf565b610834565b604051901515815260200161038b565b6103ca6103c53660046133f9565b6108a3565b60405190815260200161038b565b6103e06108b4565b005b6103ca60085481565b6103ca6103f9366004613410565b6108e5565b6103ca600d5481565b6103ca610936565b6103ca61041d36600461342b565b610944565b6103e0610430366004613410565b610958565b6103a761044336600461342b565b610a8f565b6103ca6104563660046133cf565b610add565b60045461046e906001600160a01b031681565b6040516001600160a01b03909116815260200161038b565b6012546104939060ff1681565b60405161038b919061347d565b6103ca6104ae36600461342b565b610af0565b6003546104c09060ff1681565b60405160ff909116815260200161038b565b6103ca6104e0366004613410565b610d15565b6103ca610d59565b6103ca6104fb3660046133f9565b610d62565b6103ca61050e366004613410565b610d6c565b6103ca600b5481565b6103e061052a36600461352a565b610e9b565b60135461046e906001600160a01b031681565b60055461046e906001600160a01b031681565b6103ca6105633660046133f9565b610ecd565b6103ca60115481565b6103ca5f81565b6103ca60095481565b60125461046e9061010090046001600160a01b031681565b6103ca6105a7366004613410565b6001600160a01b03165f908152600e602052604090205490565b6103ca610f0b565b6103ca6105d73660046133f9565b610f53565b6103ca6105ea3660046133f9565b610fec565b6103ca600c5481565b61037e610ff6565b6103ca61060e366004613410565b611003565b6103e06106213660046135a2565b61100d565b6103e06106343660046133cf565b611170565b6103ca6106473660046133f9565b61117e565b6103ca6111df565b6103a76106623660046133cf565b611393565b6103ca600a5481565b6103ca6113e0565b6103ca610686366004613410565b611475565b6103ca611501565b6106a66106a1366004613410565b61154f565b604080519586526020860194909452928401919091526060830152608082015260a00161038b565b6103ca6106dc3660046133f9565b611594565b6103ca6106ef3660046133f9565b6115f5565b6103ca61070236600461363e565b6001600160a01b039182165f908152600f6020908152604080832093909416825291909152205490565b6103ca6115ff565b6103ca610742366004613410565b611704565b60065461046e906001600160a01b031681565b6103e0610768366004613675565b611717565b60035461046e9061010090046001600160a01b031681565b6103ca611842565b6103ca61079b3660046133f9565b611894565b6103a7600181565b600180546107b59061373c565b80601f01602080910402602001604051908101604052809291908181526020018280546107e19061373c565b801561082c5780601f106108035761010080835404028352916020019161082c565b820191905f5260205f20905b81548152906001019060200180831161080f57829003601f168201915b505050505081565b335f818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088f9087815260200190565b60405180910390a360019150505b92915050565b5f6108ad826118d2565b505f919050565b60035461010090046001600160a01b031633146108e3576040516282b42960e81b815260040160405180910390fd5b565b5f805460ff16610908576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191690556109196111df565b5061092382611003565b90505f805460ff19166001179055919050565b5f61093f6119a7565b905090565b5f610950848484611a0b565b949350505050565b60035461010090046001600160a01b03163314610987576040516282b42960e81b815260040160405180910390fd5b6012546001600160a01b036101009091048116908216036109bb57604051636fa6c95760e11b815260040160405180910390fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156109ff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a239190613774565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb906044015f604051808303815f87803b158015610a75575f80fd5b505af1158015610a87573d5f803e3d5ffd5b505050505050565b5f805460ff16610ab2576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff19168155610ac733868686611b3c565b1490505f805460ff191660011790559392505050565b5f610ae88383611d59565b505f92915050565b5f805460ff16610b13576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191690556005546001600160a01b03163314610b46576040516282b42960e81b815260040160405180910390fd5b610b4e6111df565b50836001600160a01b0316836001600160a01b031603610b8157604051633a94626760e11b815260040160405180910390fd5b5f610b9c836040518060200160405280601154815250611e2f565b90505f610ba9828561379f565b90505f6040518060200160405280610bbf6119a7565b905290505f610bce8285611e50565b90505f81600c54610bdf91906137b2565b600c819055600d54909150610bf590869061379f565b600d556001600160a01b0388165f908152600e6020526040902054610c1b90889061379f565b6001600160a01b03808a165f908152600e602052604080822093909355908b1681522054610c4a9085906137b2565b6001600160a01b03808b165f818152600e602052604090819020939093559151908a16905f8051602061397c83398151915290610c8a9088815260200190565b60405180910390a360405185815230906001600160a01b038a16905f8051602061397c8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5308383604051610cf2939291906137c5565b60405180910390a186955050505050505f805460ff191660011790559392505050565b5f806040518060200160405280610d2a611501565b90526001600160a01b0384165f908152600e6020526040902054909150610d52908290611e50565b9392505050565b5f61093f611e67565b5f61089d82611ede565b6003545f9061010090046001600160a01b03163314610d9e5760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610de6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0a91906137e6565b610e37576040516379a63f6560e11b81526001600160a01b03841660048201526024015b60405180910390fd5b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a1505f92915050565b60035461010090046001600160a01b03163314610eca576040516282b42960e81b815260040160405180910390fd5b50565b5f805460ff16610ef0576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff19169055610f016111df565b5061092382611fb7565b5f805460ff16610f2e576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff19169055610f3f6111df565b5050600b545f805460ff1916600117905590565b6003545f9061010090046001600160a01b03163314610f855760405163c2127c6b60e01b815260040160405180910390fd5b6702c68af0bb140000821115610fae57604051633d212c7760e11b815260040160405180910390fd5b601180549083905560408051828152602081018590527ff5815f353a60e815cce7553e4f60c533a59d26b1b5504ea4b6db8d60da3e4da29101610e8b565b5f6108ad826120d1565b600280546107b59061373c565b5f61089d826121a5565b60035461010090046001600160a01b0316331461103c576040516282b42960e81b815260040160405180910390fd5b60095415158061104d5750600a5415155b1561106a5760405162dc149f60e41b815260040160405180910390fd5b60078490555f849003611090576040516305557f9560e41b815260040160405180910390fd5b5f61109a87610d6c565b905080156110be5760405163167a1cf160e21b815260048101829052602401610e2e565b43600955670de0b6b3a7640000600a556110d7866121ee565b905080156110fb5760405163b6c2518360e01b815260048101829052602401610e2e565b60016111078582613851565b5060026111148482613851565b506003805460ff841660ff19918216179091555f8054909116600117815560125460ff16600381111561114957611149613469565b03611167576040516330cfc5f760e21b815260040160405180910390fd5b50505050505050565b61117a828261233b565b5050565b6005546040516344e6f95d60e11b81523360048201525f916001600160a01b0316906389cdf2ba906024015f604051808303815f87803b1580156111c0575f80fd5b505af11580156111d2573d5f803e3d5ffd5b505050506108ad82612491565b6009545f9043908181036111f5575f9250505090565b5f6111fe611e67565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290915f916001600160a01b0316906315f2405390606401602060405180830381865afa158015611265573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112899190613774565b905065048c273950008111156112b55760405163186c17e160e21b815260048101829052602401610e2e565b5f6112c0878961379f565b90505f6112db60405180602001604052808581525083612555565b90505f6112e88288611e50565b90505f6112f588836137b2565b90505f6113136040518060200160405280600854815250848a612584565b90505f61132185898a612584565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a15f9d505050505050505050505050505090565b5f805460ff166113b6576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191681556113cb33808686611b3c565b1490505f805460ff1916600117905592915050565b6006545f906001600160a01b031663b81688166113fb611e67565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611451573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093f9190613774565b6003545f9061010090046001600160a01b031633146114a757604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610e8b565b5f805460ff16611524576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191690556115356111df565b5061153e610936565b90505f805460ff1916600117905590565b6001600160a01b0381165f908152600e60205260408120548190819081908190819061157a886121a5565b6115826119a7565b929991985096509094505f9350915050565b6005546040516344e6f95d60e11b81523360048201525f916001600160a01b0316906389cdf2ba906024015f604051808303815f87803b1580156115d6575f80fd5b505af11580156115e8573d5f803e3d5ffd5b505050506108ad826125a4565b5f6108ad82612668565b6004545f906001600160a01b031633141580611619575033155b1561163757604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a15f9250505090565b5f61170d6111df565b5061089d826121ee565b600181600381111561172b5761172b613469565b1415801561174b5750600381600381111561174857611748613469565b14155b1561176957604051634ddd2c1b60e11b815260040160405180910390fd5b6012805482919060ff1916600183600381111561178857611788613469565b021790555061179b87878787878761100d565b87601260016101000a8154816001600160a01b0302191690836001600160a01b03160217905550601260019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611813573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118379190613774565b505050505050505050565b6006545f906001600160a01b03166315f2405361185d611e67565b600b54600c546040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611436565b5f805460ff166118b7576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191690556118c86111df565b506109238261272d565b600554604051632c2aa32560e11b81523360048201526001600160a01b0390911690635855464a90602401602060405180830381865afa158015611918573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193c91906137e6565b611958576040516282b42960e81b815260040160405180910390fd5b5f5460ff1661197a576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff1916905561198b6111df565b506119973333836127e8565b50505f805460ff19166001179055565b600d545f908082036119bb57505060075490565b5f6119c4611e67565b90505f600c54600b54836119d891906137b2565b6119e2919061379f565b90505f836119f8670de0b6b3a76400008461390d565b611a029190613924565b95945050505050565b5f805460ff16611a2e576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191690556005546001600160a01b03163314611a61576040516282b42960e81b815260040160405180910390fd5b611a696111df565b504360095414611a8c576040516380965b1b60e01b815260040160405180910390fd5b836001600160a01b0316836001600160a01b031603611abe57604051631bd1a62160e21b815260040160405180910390fd5b815f03611ade5760405163d29da7ef60e01b815260040160405180910390fd5b5f611aea8585856127e8565b90507fce90ba2b2071bac4e5192122914b066423f829b0359f5157241394f8390ada85858583604051611b1f93929190613943565b60405180910390a190505f805460ff191660011790559392505050565b6005546040516317b9b84b60e31b81523060048201526001600160a01b0385811660248301528481166044830152606482018490525f92839291169063bdcdc258906084016020604051808303815f875af1158015611b9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc19190613774565b90508015611be55760405163089d427760e11b815260048101829052602401610e2e565b836001600160a01b0316856001600160a01b031603611c1757604051638cd22d1960e01b815260040160405180910390fd5b5f856001600160a01b0316876001600160a01b031603611c3957505f19611c60565b506001600160a01b038086165f908152600f60209081526040808320938a16835292905220545b5f611c6b858361379f565b6001600160a01b0388165f908152600e602052604081205491925090611c9290879061379f565b6001600160a01b0388165f908152600e602052604081205491925090611cb99088906137b2565b6001600160a01b03808b165f908152600e6020526040808220869055918b1681522081905590505f198414611d10576001600160a01b03808a165f908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b03165f8051602061397c83398151915289604051611d4291815260200190565b60405180910390a3505f9998505050505050505050565b600554604051632c2aa32560e11b81523360048201526001600160a01b0390911690635855464a90602401602060405180830381865afa158015611d9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc391906137e6565b611ddf576040516282b42960e81b815260040160405180910390fd5b5f5460ff16611e01576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff19169055611e126111df565b50611e1e3383836127e8565b50505f805460ff1916600117905550565b5f670de0b6b3a7640000611e4684845f0151612a18565b610d529190613924565b5f80611e5c8484612555565b905061095081612a23565b6012546040516370a0823160e01b81523060048201525f9161010090046001600160a01b03169081906370a0823190602401602060405180830381865afa158015611eb4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed89190613774565b91505090565b600554604051632c2aa32560e11b81523360048201525f916001600160a01b031690635855464a90602401602060405180830381865afa158015611f24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4891906137e6565b611f64576040516282b42960e81b815260040160405180910390fd5b5f5460ff16611f86576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff19169055611f976111df565b50611fa182612a3a565b50505f90505f805460ff19166001179055919050565b6003545f90819061010090046001600160a01b03163314611feb57604051630f7e5e6d60e41b815260040160405180910390fd5b436009541461200d57604051630dff50cb60e41b815260040160405180910390fd5b82612016611e67565b101561203557604051633345e99960e01b815260040160405180910390fd5b600c54831115612058576040516378d2980560e11b815260040160405180910390fd5b82600c54612066919061379f565b600c8190556003549091506120899061010090046001600160a01b031684612acc565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610e8b939291906137c5565b600554604051632c2aa32560e11b81523360048201526001600160a01b0390911690635855464a90602401602060405180830381865afa158015612117573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213b91906137e6565b612157576040516282b42960e81b815260040160405180910390fd5b5f5460ff16612179576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff1916905561218a6111df565b50612196335f83612b82565b505f805460ff19166001179055565b6001600160a01b0381165f908152601060205260408120805482036121cc57505f92915050565b600a5481545f916121dc9161390d565b90508160010154816109509190613924565b6003545f90819061010090046001600160a01b031633146122225760405163407fded560e01b815260040160405180910390fd5b436009541461224457604051630be2a5cb60e11b815260040160405180910390fd5b60065f9054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612297573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122bb91906137e6565b6122e357604051632386855f60e11b81526001600160a01b0384166004820152602401610e2e565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101610e8b565b5f5460ff1661235d576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191690556005546001600160a01b03163314612390576040516282b42960e81b815260040160405180910390fd5b805f036123b05760405163745b748560e11b815260040160405180910390fd5b600d54156123c0576123c0613967565b6123c86111df565b506123d38282612e62565b600d545f8190036123f75760405163745b748560e11b815260040160405180910390fd5b6001600160a01b0383165f908152600e6020526040902054811461241d5761241d613967565b6001600160a01b0383165f818152600e602090815260408083208390558280527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c859055518481529192915f8051602061397c833981519152910160405180910390a350505f805460ff1916600117905550565b600554604051632c2aa32560e11b81523360048201526001600160a01b0390911690635855464a90602401602060405180830381865afa1580156124d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124fb91906137e6565b612517576040516282b42960e81b815260040160405180910390fd5b5f5460ff16612539576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff1916905561254a6111df565b506121963382612e62565b60408051602081019091525f8152604051806020016040528061257b855f015185612a18565b90529392505050565b5f806125908585612555565b9050611a0261259e82612a23565b8461300e565b600554604051632c2aa32560e11b81523360048201526001600160a01b0390911690635855464a90602401602060405180830381865afa1580156125ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260e91906137e6565b61262a576040516282b42960e81b815260040160405180910390fd5b5f5460ff1661264c576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff1916905561265d6111df565b506121963382613019565b600554604051632c2aa32560e11b81523360048201526001600160a01b0390911690635855464a90602401602060405180830381865afa1580156126ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126d291906137e6565b6126ee576040516282b42960e81b815260040160405180910390fd5b5f5460ff16612710576040516325dbe6e160e21b815260040160405180910390fd5b5f805460ff191690556127216111df565b5061219633825f612b82565b6003545f9061010090046001600160a01b0316331461275f57604051631205b57b60e11b815260040160405180910390fd5b436009541461278157604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a76400008211156127aa5760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610e8b565b600554604051631200453160e11b81523060048201526001600160a01b0385811660248301528481166044830152606482018490525f9283929116906324008a62906084016020604051808303815f875af1158015612849573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286d9190613774565b9050801561289157604051638c81362d60e01b815260048101829052602401610e2e565b43600954146128b35760405163c9021e2f60e01b815260040160405180910390fd5b5f6128bd856121a5565b90505f5f1985146128ce57846128d0565b815b90505f6128dd88836131b0565b90505f6128ea828561379f565b90505f82600b54116128fc575f61290a565b82600b5461290a919061379f565b6001600160a01b038a81165f81815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1811580156129aa57506001600160a01b0389165f908152600e6020526040902054155b15612a0a57600554604051631416632960e21b81526001600160a01b038b81166004830152909116906350598ca4906024015f604051808303815f87803b1580156129f3575f80fd5b505af1158015612a05573d5f803e3d5ffd5b505050505b509098975050505050505050565b5f610d52828461390d565b80515f9061089d90670de0b6b3a764000090613924565b5f8080804360095414612a63576040516338acf79960e01b815260048101829052602401610e2e565b612a6d33866131b0565b905080600c54612a7d91906137b2565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5338284604051612ab9939291906137c5565b60405180910390a15f9590945092505050565b60125460405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905261010090920490911690819063a9059cbb906044015f604051808303815f87803b158015612b1f575f80fd5b505af1158015612b31573d5f803e3d5ffd5b505050505f3d5f8114612b4a5760208114612b53575f80fd5b5f199150612b5d565b60205f803e5f5191505b5080612b7c5760405163cefaffeb60e01b815260040160405180910390fd5b50505050565b8115801590612b9057508015155b15612bae5760405163208f8ad160e11b815260040160405180910390fd5b5f6040518060200160405280612bc26119a7565b905290505f808415612be257849150612bdb8386611e50565b9050612bf2565b612bec848461334c565b91508390505b60055460405163eabe7d9160e01b81525f916001600160a01b03169063eabe7d9190612c269030908b908890600401613943565b6020604051808303815f875af1158015612c42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c669190613774565b90508015612c8a5760405163480f424760e01b815260048101829052602401610e2e565b4360095414612cac576040516397b5cfcd60e01b815260040160405180910390fd5b81612cb5611e67565b1015612cd4576040516391240a1b60e01b815260040160405180910390fd5b82600d54612ce2919061379f565b600d556001600160a01b0387165f908152600e6020526040812054612d0890859061379f565b6001600160a01b0389165f908152600e602052604090208190559050612d2e8884612acc565b60405184815230906001600160a01b038a16905f8051602061397c8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929888486604051612d8e939291906137c5565b60405180910390a183158015612da357505f83115b15612de45760405162461bcd60e51b815260206004820152601160248201527072656465656d546f6b656e73207a65726f60781b6044820152606401610e2e565b80158015612df85750612df6886121a5565b155b15612e5857600554604051631416632960e21b81526001600160a01b038a81166004830152909116906350598ca4906024015f604051808303815f87803b158015612e41575f80fd5b505af1158015612e53573d5f803e3d5ffd5b505050505b5050505050505050565b600554604051634ef4c3e160e01b81525f916001600160a01b031690634ef4c3e190612e9690309087908790600401613943565b6020604051808303815f875af1158015612eb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed69190613774565b90508015612efa576040516349abd4fd60e01b815260048101829052602401610e2e565b4360095414612f1c576040516338d8859760e01b815260040160405180910390fd5b5f6040518060200160405280612f306119a7565b905290505f612f3f85856131b0565b90505f612f4c828461334c565b905080600d54612f5c91906137b2565b600d556001600160a01b0386165f908152600e6020526040902054612f829082906137b2565b6001600160a01b0387165f908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f90612fd1908890859085906137c5565b60405180910390a16040518181526001600160a01b0387169030905f8051602061397c8339815191529060200160405180910390a3505050505050565b5f610d5282846137b2565b60055460405163368f515360e21b81525f916001600160a01b03169063da3d454c9061304d90309087908790600401613943565b6020604051808303815f875af1158015613069573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061308d9190613774565b905080156130b15760405163918db40f60e01b815260048101829052602401610e2e565b43600954146130d357604051630e8d8c6160e21b815260040160405180910390fd5b816130dc611e67565b10156130fb576040516348c2588160e01b815260040160405180910390fd5b5f613105846121a5565b90505f61311284836137b2565b90505f84600b5461312391906137b2565b6001600160a01b0387165f908152601060205260409020838155600a54600190910155600b81905590506131578686612acc565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b6012546040516370a0823160e01b81523060048201525f9161010090046001600160a01b0316908190839082906370a0823190602401602060405180830381865afa158015613201573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132259190613774565b6040516323b872dd60e01b81529091506001600160a01b038316906323b872dd9061325890899030908a90600401613943565b5f604051808303815f87803b15801561326f575f80fd5b505af1158015613281573d5f803e3d5ffd5b505050505f3d5f811461329a57602081146132a3575f80fd5b5f1991506132ad565b60205f803e5f5191505b50806132cc5760405163073d1efd60e51b815260040160405180910390fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613310573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133349190613774565b9050613340838261379f565b98975050505050505050565b5f610d5261336284670de0b6b3a7640000612a18565b83515f610d528284613924565b5f602080835283518060208501525f5b8181101561339b5785810183015185820160400152820161337f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610eca575f80fd5b5f80604083850312156133e0575f80fd5b82356133eb816133bb565b946020939093013593505050565b5f60208284031215613409575f80fd5b5035919050565b5f60208284031215613420575f80fd5b8135610d52816133bb565b5f805f6060848603121561343d575f80fd5b8335613448816133bb565b92506020840135613458816133bb565b929592945050506040919091013590565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061349d57634e487b7160e01b5f52602160045260245ffd5b91905290565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff808411156134d1576134d16134a3565b604051601f8501601f19908116603f011681019082821181831017156134f9576134f96134a3565b81604052809350858152868686011115613511575f80fd5b858560208301375f602087830101525050509392505050565b5f6020828403121561353a575f80fd5b813567ffffffffffffffff811115613550575f80fd5b8201601f81018413613560575f80fd5b610950848235602084016134b7565b5f82601f83011261357e575f80fd5b610d52838335602085016134b7565b803560ff8116811461359d575f80fd5b919050565b5f805f805f8060c087890312156135b7575f80fd5b86356135c2816133bb565b955060208701356135d2816133bb565b945060408701359350606087013567ffffffffffffffff808211156135f5575f80fd5b6136018a838b0161356f565b94506080890135915080821115613616575f80fd5b5061362389828a0161356f565b92505061363260a0880161358d565b90509295509295509295565b5f806040838503121561364f575f80fd5b823561365a816133bb565b9150602083013561366a816133bb565b809150509250929050565b5f805f805f805f80610100898b03121561368d575f80fd5b8835613698816133bb565b975060208901356136a8816133bb565b965060408901356136b8816133bb565b955060608901359450608089013567ffffffffffffffff808211156136db575f80fd5b6136e78c838d0161356f565b955060a08b01359150808211156136fc575f80fd5b506137098b828c0161356f565b93505061371860c08a0161358d565b915060e08901356004811061372b575f80fd5b809150509295985092959890939650565b600181811c9082168061375057607f821691505b60208210810361376e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613784575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561089d5761089d61378b565b8082018082111561089d5761089d61378b565b6001600160a01b039390931683526020830191909152604082015260600190565b5f602082840312156137f6575f80fd5b81518015158114610d52575f80fd5b601f82111561384c57805f5260205f20601f840160051c8101602085101561382a5750805b601f840160051c820191505b81811015613849575f8155600101613836565b50505b505050565b815167ffffffffffffffff81111561386b5761386b6134a3565b61387f81613879845461373c565b84613805565b602080601f8311600181146138b2575f841561389b5750858301515b5f19600386901b1c1916600185901b178555610a87565b5f85815260208120601f198616915b828110156138e0578886015182559484019460019091019084016138c1565b50858210156138fd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761089d5761089d61378b565b5f8261393e57634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b5f52600160045260245ffdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ca55773823ddaf4dfbcc4a3cffb96e9255ab0c5f12366ba8606e1e2162a47df164736f6c63430008170033