Loading
[ { "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" }, { "internalType": "address", "name": "implementation_", "type": "address" }, { "internalType": "bytes", "name": "becomeImplementationData", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "cashPrior", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "interestAccumulated", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "borrowIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "AccrueInterest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "borrowAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "Borrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "liquidator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "repayAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "mTokenCollateral", "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": "address", "name": "oldImplementation", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "NewImplementation", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "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": "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": "address", "name": "implementation_", "type": "address" }, { "internalType": "bool", "name": "allowResign", "type": "bool" }, { "internalType": "bytes", "name": "becomeImplementationData", "type": "bytes" } ], "name": "_setImplementation", "outputs": [], "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": "accrualBlockTimestamp", "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": "borrowRatePerTimestamp", "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": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "delegateToImplementation", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "delegateToViewImplementation", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "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": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "interestRateModel", "outputs": [ { "internalType": "contract InterestRateModel", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isMToken", "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 MTokenInterface", "name": "mTokenCollateral", "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": [ { "internalType": "uint256", "name": "mintAmount", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "mintWithPermit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingAdmin", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolSeizeShareMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemTokens", "type": "uint256" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemAmount", "type": "uint256" } ], "name": "redeemUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], "name": "repayBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], "name": "repayBorrowBehalf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reserveFactorMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "liquidator", "type": "address" }, { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "seizeTokens", "type": "uint256" } ], "name": "seize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supplyRatePerTimestamp", "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" } ]
60806040523480156200001157600080fd5b50604051620022563803806200225683398101604081905262000034916200040a565b60038054610100600160a81b0319163361010002179055604051620000a590839062000071908d908d908d908d908d908d908d9060240162000546565b60408051601f198184030181529190526020810180516001600160e01b03908116631a31d46560e01b17909152620000ea16565b50620000b48260008362000166565b5050600380546001600160a01b0390921661010002610100600160a81b031990921691909117905550620005e995505050505050565b6060600080846001600160a01b031684604051620001099190620005af565b600060405180830381855af49150503d806000811462000146576040519150601f19603f3d011682016040523d82523d6000602084013e6200014b565b606091505b509092509050816200015e573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620001f05760405162461bcd60e51b815260206004820152603960248201527f4d457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840160405180910390fd5b811562000232576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b17909152620002309190620002ed16565b505b601380546001600160a01b038581166001600160a01b03198316179092556040519116906200029f906200026b908490602401620005cd565b60408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b17909152620002ed16565b50601354604080516001600160a01b03808516825290921660208301527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b60135460609062000308906001600160a01b031683620000ea565b92915050565b80516001600160a01b03811681146200032657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200035e57818101518382015260200162000344565b50506000910152565b600082601f8301126200037957600080fd5b81516001600160401b03808211156200039657620003966200032b565b604051601f8301601f19908116603f01168101908282118183101715620003c157620003c16200032b565b81604052838152866020858801011115620003db57600080fd5b620003ee84602083016020890162000341565b9695505050505050565b805160ff811681146200032657600080fd5b6000806000806000806000806000806101408b8d0312156200042b57600080fd5b620004368b6200030e565b99506200044660208c016200030e565b98506200045660408c016200030e565b60608c015160808d015191995097506001600160401b03808211156200047b57600080fd5b620004898e838f0162000367565b975060a08d0151915080821115620004a057600080fd5b620004ae8e838f0162000367565b9650620004be60c08e01620003f8565b9550620004ce60e08e016200030e565b9450620004df6101008e016200030e565b93506101208d0151915080821115620004f757600080fd5b50620005068d828e0162000367565b9150509295989b9194979a5092959850565b600081518084526200053281602086016020860162000341565b601f01601f19169290920160200192915050565b6001600160a01b0388811682528781166020830152861660408201526060810185905260e060808201819052600090620005839083018662000518565b82810360a084015262000597818662000518565b91505060ff831660c083015298975050505050505050565b60008251620005c381846020870162000341565b9190910192915050565b602081526000620005e2602083018462000518565b9392505050565b611c5d80620005f96000396000f3fe6080604052600436106102655760003560e01c806306fdde03146103555780630933c1ed14610380578063095ea7b3146103a05780630e752702146103d0578063173b9904146103fe57806317bfdfbc1461041457806318160ddd14610434578063182df0f51461044a5780631be195601461045f57806323b872dd1461047f5780632608f8181461049f57806326782247146104bf578063313ce567146104ec5780633af9e669146105185780633b1d21a2146105385780633e9410101461054d5780634487152f1461056d5780634576b5db1461058d57806347bd3718146105ad578063555bcc40146105c35780635c60da1b146105e35780635fe3b56714610603578063601a0bf1146106235780636752e70214610643578063699cd5e2146106595780636f307dc31461066e57806370a082311461068e57806373acee98146106ae57806383030846146106c3578063852a12e3146106e35780638f840ddd1461070357806395d89b411461071957806395dd91931461072e578063a0712d681461074e578063a6afed951461076e578063a9059cbb14610783578063aa5af0fd146107a3578063b2a02ff1146107b9578063b71d1a0c146107d9578063bd6d894d146107f9578063c37f68e21461080e578063c5ebeaec1461084e578063cd91801c1461086e578063cfa9920114610883578063d0248fb414610899578063d3bd2c72146108b9578063db006a75146108ce578063dd62ed3e146108ee578063e9c714f21461090e578063f2b3abbd14610923578063f3fdb15a14610943578063f5e3c46214610963578063f851a44014610983578063fca7820b146109a8575b34156102d85760405162461bcd60e51b815260206004820152603760248201527f4d457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f746044820152762073656e642076616c756520746f2066616c6c6261636b60481b60648201526084015b60405180910390fd5b6013546040516000916001600160a01b0316906102f8908390369061172f565b600060405180830381855af49150503d8060008114610333576040519150601f19603f3d011682016040523d82523d6000602084013e610338565b606091505b505090506040513d6000823e81801561034f573d82f35b3d82fd5b005b34801561036157600080fd5b5061036a6109c8565b604051610377919061178f565b60405180910390f35b34801561038c57600080fd5b5061036a61039b366004611865565b610a56565b3480156103ac57600080fd5b506103c06103bb3660046118b1565b610a75565b6040519015158152602001610377565b3480156103dc57600080fd5b506103f06103eb3660046118dd565b610adb565b604051908152602001610377565b34801561040a57600080fd5b506103f060085481565b34801561042057600080fd5b506103f061042f3660046118f6565b610b40565b34801561044057600080fd5b506103f0600d5481565b34801561045657600080fd5b506103f0610b86565b34801561046b57600080fd5b5061035361047a3660046118f6565b610bd9565b34801561048b57600080fd5b506103c061049a366004611913565b610c1f565b3480156104ab57600080fd5b506103f06104ba3660046118b1565b610c88565b3480156104cb57600080fd5b506004546104df906001600160a01b031681565b6040516103779190611954565b3480156104f857600080fd5b506003546105069060ff1681565b60405160ff9091168152602001610377565b34801561052457600080fd5b506103f06105333660046118f6565b610ce6565b34801561054457600080fd5b506103f0610d2c565b34801561055957600080fd5b506103f06105683660046118dd565b610d63565b34801561057957600080fd5b5061036a610588366004611865565b610dab565b34801561059957600080fd5b506103f06105a83660046118f6565b610e66565b3480156105b957600080fd5b506103f0600b5481565b3480156105cf57600080fd5b506103536105de366004611976565b610eac565b3480156105ef57600080fd5b506013546104df906001600160a01b031681565b34801561060f57600080fd5b506005546104df906001600160a01b031681565b34801561062f57600080fd5b506103f061063e3660046118dd565b611018565b34801561064f57600080fd5b506103f060115481565b34801561066557600080fd5b506103c0600181565b34801561067a57600080fd5b506012546104df906001600160a01b031681565b34801561069a57600080fd5b506103f06106a93660046118f6565b611060565b3480156106ba57600080fd5b506103f06110a6565b3480156106cf57600080fd5b506103f06106de3660046118dd565b6110dd565b3480156106ef57600080fd5b506103f06106fe3660046118dd565b611125565b34801561070f57600080fd5b506103f0600c5481565b34801561072557600080fd5b5061036a61116d565b34801561073a57600080fd5b506103f06107493660046118f6565b61117a565b34801561075a57600080fd5b506103f06107693660046118dd565b6111c0565b34801561077a57600080fd5b506103f0611208565b34801561078f57600080fd5b506103c061079e3660046118b1565b61123f565b3480156107af57600080fd5b506103f0600a5481565b3480156107c557600080fd5b506103f06107d4366004611913565b611287565b3480156107e557600080fd5b506103f06107f43660046118f6565b6112e7565b34801561080557600080fd5b506103f061132d565b34801561081a57600080fd5b5061082e6108293660046118f6565b611364565b604080519485526020850193909352918301526060820152608001610377565b34801561085a57600080fd5b506103f06108693660046118dd565b6113d5565b34801561087a57600080fd5b506103f061141d565b34801561088f57600080fd5b506103f060095481565b3480156108a557600080fd5b506103f06108b43660046119d7565b611454565b3480156108c557600080fd5b506103f06114d8565b3480156108da57600080fd5b506103f06108e93660046118dd565b61150f565b3480156108fa57600080fd5b506103f0610909366004611a26565b611557565b34801561091a57600080fd5b506103f061159f565b34801561092f57600080fd5b506103f061093e3660046118f6565b6115d6565b34801561094f57600080fd5b506006546104df906001600160a01b031681565b34801561096f57600080fd5b506103f061097e366004611a5f565b61161c565b34801561098f57600080fd5b506003546104df9061010090046001600160a01b031681565b3480156109b457600080fd5b506103f06109c33660046118dd565b611678565b600180546109d590611aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0190611aa1565b8015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b505050505081565b601354606090610a6f906001600160a01b0316836116c0565b92915050565b600080610abd8484604051602401610a8e929190611adb565b60408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610a56565b905080806020019051810190610ad39190611af4565b949350505050565b600080610b2383604051602401610af491815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663073a938160e11b179052610a56565b905080806020019051810190610b399190611b11565b9392505050565b600080610b2383604051602401610b579190611954565b60408051601f198184030181529190526020810180516001600160e01b03166305eff7ef60e21b179052610a56565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b1790526000908190610bbd90610dab565b905080806020019051810190610bd39190611b11565b91505090565b610c1b81604051602401610bed9190611954565b60408051601f198184030181529190526020810180516001600160e01b031662df0cab60e51b179052610a56565b5050565b600080610c69858585604051602401610c3a93929190611b2a565b60408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610a56565b905080806020019051810190610c7f9190611af4565b95945050505050565b600080610cd08484604051602401610ca1929190611adb565b60408051601f198184030181529190526020810180516001600160e01b03166304c11f0360e31b179052610a56565b905080806020019051810190610ad39190611b11565b600080610b2383604051602401610cfd9190611954565b60408051601f198184030181529190526020810180516001600160e01b0316633af9e66960e01b179052610a56565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b1790526000908190610bbd90610dab565b600080610b2383604051602401610d7c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166303e9410160e41b179052610a56565b6060600080306001600160a01b031684604051602401610dcb919061178f565b60408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b17905251610e009190611b4e565b600060405180830381855afa9150503d8060008114610e3b576040519150601f19603f3d011682016040523d82523d6000602084013e610e40565b606091505b50909250905081610e52573d60208201fd5b80806020019051810190610ad39190611b6a565b600080610b2383604051602401610e7d9190611954565b60408051601f198184030181529190526020810180516001600160e01b0316634576b5db60e01b179052610a56565b60035461010090046001600160a01b03163314610f2d5760405162461bcd60e51b815260206004820152603960248201527f4d457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527834b7b71d1021b0b63632b91036bab9ba1031329030b236b4b760391b60648201526084016102cf565b8115610f67576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b179052610f6590610a56565b505b601380546001600160a01b038581166001600160a01b0319831617909255604051911690610fcc90610f9d90849060240161178f565b60408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b179052610a56565b506013546040517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9161100a9184916001600160a01b031690611bd7565b60405180910390a150505050565b600080610b238360405160240161103191815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663601a0bf160e01b179052610a56565b600080610b23836040516024016110779190611954565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052610dab565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b1790526000908190610bbd90610a56565b600080610b23836040516024016110f691815260200190565b60408051601f198184030181529190526020810180516001600160e01b0316634181842360e11b179052610a56565b600080610b238360405160240161113e91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663852a12e360e01b179052610a56565b600280546109d590611aa1565b600080610b23836040516024016111919190611954565b60408051601f198184030181529190526020810180516001600160e01b03166395dd919360e01b179052610dab565b600080610b23836040516024016111d991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663140e25ad60e31b179052610a56565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b1790526000908190610bbd90610a56565b600080610abd8484604051602401611258929190611adb565b60408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610a56565b6000806112d18585856040516024016112a293929190611b2a565b60408051601f198184030181529190526020810180516001600160e01b031663b2a02ff160e01b179052610a56565b905080806020019051810190610c7f9190611b11565b600080610b23836040516024016112fe9190611954565b60408051601f198184030181529190526020810180516001600160e01b0316632dc7468360e21b179052610a56565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b1790526000908190610bbd90610a56565b60008060008060006113af866040516024016113809190611954565b60408051601f198184030181529190526020810180516001600160e01b03166361bfb47160e11b179052610dab565b9050808060200190518101906113c59190611bf1565b9450945094509450509193509193565b600080610b23836040516024016113ee91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663317afabb60e21b179052610a56565b6040805160048152602481019091526020810180516001600160e01b0316633364600760e21b1790526000908190610bbd90610dab565b604051602481018690526044810185905260ff841660648201526084810183905260a4810182905260009081906114b79060c40160408051601f198184030181529190526020810180516001600160e01b031663340923ed60e21b179052610a56565b9050808060200190518101906114cd9190611b11565b979650505050505050565b6040805160048152602481019091526020810180516001600160e01b03166369de963960e11b1790526000908190610bbd90610dab565b600080610b238360405160240161152891815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663db006a7560e01b179052610a56565b600080610cd08484604051602401611570929190611bd7565b60408051601f198184030181529190526020810180516001600160e01b0316636eb1769f60e11b179052610dab565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b1790526000908190610bbd90610a56565b600080610b23836040516024016115ed9190611954565b60408051601f198184030181529190526020810180516001600160e01b031663f2b3abbd60e01b179052610a56565b6040516001600160a01b038085166024830152604482018490528216606482015260009081906112d19060840160408051601f198184030181529190526020810180516001600160e01b0316637af1e23160e11b179052610a56565b600080610b238360405160240161169191815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663fca7820b60e01b179052610a56565b6060600080846001600160a01b0316846040516116dd9190611b4e565b600060405180830381855af49150503d8060008114611718576040519150601f19603f3d011682016040523d82523d6000602084013e61171d565b606091505b50909250905081610ad3573d60208201fd5b8183823760009101908152919050565b60005b8381101561175a578181015183820152602001611742565b50506000910152565b6000815180845261177b81602086016020860161173f565b601f01601f19169290920160200192915050565b602081526000610b396020830184611763565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156117e0576117e06117a2565b604052919050565b60006001600160401b03821115611801576118016117a2565b50601f01601f191660200190565b600082601f83011261182057600080fd5b813561183361182e826117e8565b6117b8565b81815284602083860101111561184857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561187757600080fd5b81356001600160401b0381111561188d57600080fd5b610ad38482850161180f565b6001600160a01b03811681146118ae57600080fd5b50565b600080604083850312156118c457600080fd5b82356118cf81611899565b946020939093013593505050565b6000602082840312156118ef57600080fd5b5035919050565b60006020828403121561190857600080fd5b8135610b3981611899565b60008060006060848603121561192857600080fd5b833561193381611899565b9250602084013561194381611899565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b80151581146118ae57600080fd5b60008060006060848603121561198b57600080fd5b833561199681611899565b925060208401356119a681611968565b915060408401356001600160401b038111156119c157600080fd5b6119cd8682870161180f565b9150509250925092565b600080600080600060a086880312156119ef57600080fd5b8535945060208601359350604086013560ff81168114611a0e57600080fd5b94979396509394606081013594506080013592915050565b60008060408385031215611a3957600080fd5b8235611a4481611899565b91506020830135611a5481611899565b809150509250929050565b600080600060608486031215611a7457600080fd5b8335611a7f81611899565b9250602084013591506040840135611a9681611899565b809150509250925092565b600181811c90821680611ab557607f821691505b602082108103611ad557634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215611b0657600080fd5b8151610b3981611968565b600060208284031215611b2357600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008251611b6081846020870161173f565b9190910192915050565b600060208284031215611b7c57600080fd5b81516001600160401b03811115611b9257600080fd5b8201601f81018413611ba357600080fd5b8051611bb161182e826117e8565b818152856020838501011115611bc657600080fd5b610c7f82602083016020860161173f565b6001600160a01b0392831681529116602082015260400190565b60008060008060808587031215611c0757600080fd5b50508251602084015160408501516060909501519196909550909250905056fea26469706673582212206ec25f644bad2814d4c612fbf2c3ff028d7810b3dea69cc0a947b4acdf4fb81664736f6c6343000813003300000000000000000000000004c0599ae5a44757c0af6f9ec3b93da8976c150a000000000000000000000000fbb21d0380bee3312b33c4353c8936a0f13ef26c0000000000000000000000006ac79df84fa8a704711a2fb8c3763e48ed2c0ed6000000000000000000000000000000000000000000a56fa5b99019a5c800000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000029b28b0ff5b6b26448f3ac02cd209539626d96ab0000000000000000000000001fadff493529c3fcc7ee04f1f15d19816dda45b700000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000e4d6f6f6e77656c6c20776545544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066d776545544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000