0 txs
0 calls
constructor
constructor()
functions
accountAssets
viewfunction accountAssets(address, uint256) view returns (address)
admin
viewfunction admin() view returns (address)
allMarkets
viewfunction allMarkets(uint256) view returns (address)
blackList
viewfunction blackList(address) view returns (bool)
borrowCapGuardian
viewfunction borrowCapGuardian() view returns (address)
borrowCaps
viewfunction borrowCaps(address) view returns (uint256)
borrowGuardianPaused
viewfunction borrowGuardianPaused(address) view returns (bool)
checkMembership
viewfunction checkMembership(address account, address pToken) view returns (bool)
closeFactorMantissa
viewfunction closeFactorMantissa() view returns (uint256)
collateralWhitelist
viewfunction collateralWhitelist(address) view returns (bool)
comptrollerImplementation
viewfunction comptrollerImplementation() view returns (address)
getAccountLiquidity
viewfunction getAccountLiquidity(address account) view returns (uint256, uint256, uint256)
getAllMarkets
viewfunction getAllMarkets() view returns (address[])
getAssetsIn
viewfunction getAssetsIn(address account) view returns (address[])
getHypotheticalAccountLiquidity
viewfunction getHypotheticalAccountLiquidity(address account, address pTokenModify, uint256 redeemTokens, uint256 borrowAmount) view returns (uint256, uint256, uint256)
isComptroller
viewfunction isComptroller() view returns (bool)
isDeprecated
viewfunction isDeprecated(address pToken) view returns (bool)
isInLiquidateWhiteList
viewfunction isInLiquidateWhiteList(address user) view returns (bool)
liquidatable
viewfunction liquidatable() view returns (bool)
liquidateBorrowAllowed
viewfunction liquidateBorrowAllowed(address pTokenBorrowed, address pTokenCollateral, address liquidator, address borrower, uint256 repayAmount) view returns (uint256)
liquidateCalculateSeizeTokens
viewfunction liquidateCalculateSeizeTokens(address pTokenBorrowed, address pTokenCollateral, uint256 actualRepayAmount) view returns (uint256, uint256)
liquidationIncentiveMantissa
viewfunction liquidationIncentiveMantissa() view returns (uint256)
liquidatorWhiteList
viewfunction liquidatorWhiteList(address) view returns (bool)
markets
viewfunction markets(address) view returns (bool isListed, uint256 collateralFactorMantissa)
mintGuardianPaused
viewfunction mintGuardianPaused(address) view returns (bool)
oracle
viewfunction oracle() view returns (address)
pauseGuardian
viewfunction pauseGuardian() view returns (address)
pendingAdmin
viewfunction pendingAdmin() view returns (address)
pendingComptrollerImplementation
viewfunction pendingComptrollerImplementation() view returns (address)
redeemGuardianPaused
viewfunction redeemGuardianPaused(address) view returns (bool)
redeemVerify
purefunction redeemVerify(address pToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) pure
rewardDistributor
viewfunction rewardDistributor() view returns (address)
seizeGuardianPaused
viewfunction seizeGuardianPaused() view returns (bool)
supplyCapGuardian
viewfunction supplyCapGuardian() view returns (address)
supplyCaps
viewfunction supplyCaps(address) view returns (uint256)
transferGuardianPaused
viewfunction transferGuardianPaused() view returns (bool)
userMintPaused
viewfunction userMintPaused(address) view returns (bool)
_become
nonpayablefunction _become(address unitroller)
_rescueFunds
nonpayablefunction _rescueFunds(address _tokenAddress, uint256 _amount)
_setBlackList
nonpayablefunction _setBlackList(address account_, bool state)
_setBorrowCapGuardian
nonpayablefunction _setBorrowCapGuardian(address newBorrowCapGuardian)
_setBorrowPaused
nonpayablefunction _setBorrowPaused(address pToken, bool state) returns (bool)
_setCloseFactor
nonpayablefunction _setCloseFactor(uint256 newCloseFactorMantissa) returns (uint256)
_setCollateralFactor
nonpayablefunction _setCollateralFactor(address pToken, uint256 newCollateralFactorMantissa) returns (uint256)
_setCollateralWhitelist
nonpayablefunction _setCollateralWhitelist(address pToken, bool status)
_setLiquidationIncentive
nonpayablefunction _setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) returns (uint256)
_setMarketBorrowCaps
nonpayablefunction _setMarketBorrowCaps(address[] pTokens, uint256[] newBorrowCaps)
_setMarketSupplyCaps
nonpayablefunction _setMarketSupplyCaps(address[] pTokens, uint256[] newSupplyCaps)
_setMintPaused
nonpayablefunction _setMintPaused(address pToken, bool state) returns (bool)
_setPauseGuardian
nonpayablefunction _setPauseGuardian(address newPauseGuardian) returns (uint256)
_setPriceOracle
nonpayablefunction _setPriceOracle(address newOracle) returns (uint256)
_setProtocalPaused
nonpayablefunction _setProtocalPaused() returns (bool)
_setRedeemPaused
nonpayablefunction _setRedeemPaused(address pToken, bool state) returns (bool)
_setRewardDistributor
nonpayablefunction _setRewardDistributor(address newRewardDistributor)
_setSeizePaused
nonpayablefunction _setSeizePaused(bool state) returns (bool)
_setSupplyCapGuardian
nonpayablefunction _setSupplyCapGuardian(address newSupplyCapGuardian)
_setTransferPaused
nonpayablefunction _setTransferPaused(bool state) returns (bool)
_setUserMintPaused
nonpayablefunction _setUserMintPaused(address pToken, bool paused)
_supportMarket
nonpayablefunction _supportMarket(address pToken) returns (uint256)
borrowAllowed
nonpayablefunction borrowAllowed(address pToken, address borrower, uint256 borrowAmount) returns (uint256)
claimReward
nonpayablefunction claimReward()
claimReward
nonpayablefunction claimReward(address holder, address[] pTokens)
claimReward
nonpayablefunction claimReward(address holder)
claimReward
nonpayablefunction claimReward(address[] holders, address[] pTokens, bool borrowers, bool suppliers)
enterMarkets
nonpayablefunction enterMarkets(address[] pTokens) returns (uint256[])
exitMarket
nonpayablefunction exitMarket(address pTokenAddress) returns (uint256)
mintAllowed
nonpayablefunction mintAllowed(address pToken, address minter, uint256 mintAmount) returns (uint256)
redeemAllowed
nonpayablefunction redeemAllowed(address pToken, address redeemer, uint256 redeemTokens) returns (uint256)
repayBorrowAllowed
nonpayablefunction repayBorrowAllowed(address pToken, address payer, address borrower, uint256 repayAmount) returns (uint256)
seizeAllowed
nonpayablefunction seizeAllowed(address pTokenCollateral, address pTokenBorrowed, address liquidator, address borrower, uint256 seizeTokens) returns (uint256)
transferAllowed
nonpayablefunction transferAllowed(address pToken, address src, address dst, uint256 transferTokens) returns (uint256)
triggerLiquidation
nonpayablefunction triggerLiquidation(bool state) returns (bool)
updateLiquidateWhiteList
nonpayablefunction updateLiquidateWhiteList(address user, bool state)
events
ActionPaused
event ActionPaused(address pToken, string action, bool pauseState)
ActionPaused
event ActionPaused(string action, bool pauseState)
CollateralWhitelistUpdated
event CollateralWhitelistUpdated(address indexed pToken, bool status)
Failure
event Failure(uint256 error, uint256 info, uint256 detail)
MarketEntered
event MarketEntered(address pToken, address account)
MarketExited
event MarketExited(address pToken, address account)
MarketListed
event MarketListed(address pToken)
NewBorrowCap
event NewBorrowCap(address indexed pToken, uint256 newBorrowCap)
NewBorrowCapGuardian
event NewBorrowCapGuardian(address oldBorrowCapGuardian, address newBorrowCapGuardian)
NewCloseFactor
event NewCloseFactor(uint256 oldCloseFactorMantissa, uint256 newCloseFactorMantissa)
NewCollateralFactor
event NewCollateralFactor(address pToken, uint256 oldCollateralFactorMantissa, uint256 newCollateralFactorMantissa)
NewLiquidationIncentive
event NewLiquidationIncentive(uint256 oldLiquidationIncentiveMantissa, uint256 newLiquidationIncentiveMantissa)
NewPauseGuardian
event NewPauseGuardian(address oldPauseGuardian, address newPauseGuardian)
NewPriceOracle
event NewPriceOracle(address oldPriceOracle, address newPriceOracle)
NewRewardDistributor
event NewRewardDistributor(address oldRewardDistributor, address newRewardDistributor)
NewSupplyCap
event NewSupplyCap(address indexed pToken, uint256 newSupplyCap)
NewSupplyCapGuardian
event NewSupplyCapGuardian(address oldSupplyCapGuardian, address newSupplyCapGuardian)
ProtocalPaused
event ProtocalPaused()
SetBackListUser
event SetBackListUser(address indexed account, bool blocked)
TriggerLiquidation
event TriggerLiquidation(bool triggered)
UpdateLiquidateWhiteList
event UpdateLiquidateWhiteList(address indexed account, bool added)
UserMintPaused
event UserMintPaused(address pToken, bool triggered)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60808060405234610028575f80546001600160a01b031916331790556157bb90816200002d8239f35b5f80fdfe608060409080825260049081361015610016575f80fd5b5f3560e01c9081627e3dd21461219b5750806302c3bcbb1461216457806302f4e155146120ac578063114b9d1914611d7857806318c882a514611c905780631d504dc614611b1457806321af456914611aec57806324008a6214611ace57806324a3d62214611aa65780632678224714611a7e5780632d70db78146119b1578063317b0b77146119095780633685ffe7146118ce57806338b8f4c3146117f3578063391957d7146117175780633bcf7ec114611632578063448a6f0b146115f65780634838d165146115ba5780634a584432146115835780634ada90af146115655780634e79238f146115405780634ef4c3e1146115255780634fd42e171461150657806351a485e4146113cc57806351dff9891461136b57806352d84d1e1461132c57806355ee1fe1146112fd57806359a34bf7146112535780635c254d11146111da5780635ec88c791461117d5780635f5af1aa146111585780635fc7e71e1461113a578063607ef6c114610ffb5780636c7c9bd714610d755780636d154ea514610fbf5780637160a87014610ef6578063731f0c2b14610eba57806375f1152e14610e7e5780637dc0d1d014610e5657806387f7630314610e3057806388d5729114610db15780638c4cdce314610d755780638e8f294b14610d305780638ebf636414610c60578063929fe9a114610c0a57806394543c1514610bdc578063a76b3fda14610bb7578063a91a53b314610b94578063a979f0c514610b6c578063aa71aebd14610a07578063abfceffc146109ce578063ac0b0bb7146109a8578063acc2166a14610980578063b0772d0b14610954578063b88a802f14610933578063bb82aa5e1461090b578063bdcdc258146108ed578063c2998238146107bf578063c488847b1461079b578063d02f73511461077c578063d279c19114610752578063d320c54814610716578063da3d454c146106fb578063dbc7779b1461062e578063dce15449146105d8578063dcfbc0c7146105b0578063e4028eee14610588578063e87554461461056a578063ea321e3414610480578063eabe7d9114610465578063ede4edd014610439578063f851a440146104125763fd0dad5d14610342575f80fd5b3461040e578160031936011261040e5761035a6121b4565b906103636121ca565b5f5490926001600160a01b03929091831633036103cb5750916020917fe1ca103c885c3ddd409edc35865d4abaab33131e8ec74ee3e436e52b65a324cc931693845f52601783526103c282825f209060ff801983541691151516179055565b519015158152a2005b606490602086519162461bcd60e51b8352820152601c60248201527f6f6e6c792061646d696e2063616e2073657420626c61636b6c697374000000006044820152fd5b5f80fd5b823461040e575f36600319011261040e575f5490516001600160a01b039091168152602090f35b823461040e57602036600319011261040e5760209061045e6104596121b4565b613d13565b9051908152f35b823461040e5760209061045e61047a36612389565b91613cb4565b503461040e578160031936011261040e576104996121b4565b906104a26121ca565b9160018060a01b0391836104ba845f54163314612d71565b610507575b50916020917f049607e8aaf00ef50b1644efd745aab4e137134387e8cb58535a5ff7b58d60af931693845f52601583526103c282825f209060ff801983541691151516179055565b8282165f52601560205260ff855f205416156104bf57608490602086519162461bcd60e51b8352820152602160248201527f5573657220697320616c726561647920696e20746865207768697465206c69736044820152601d60fa1b6064820152fd5b823461040e575f36600319011261040e576020906005549051908152f35b823461040e578060031936011261040e5760209061045e6105a76121b4565b60243590613b95565b823461040e575f36600319011261040e5760035490516001600160a01b039091168152602090f35b823461040e578060031936011261040e576105f16121b4565b906024359160018060a01b038091165f526007602052815f20805484101561040e5760209361061f91612483565b92905490519260031b1c168152f35b50903461040e578060031936011261040e576106486121b4565b5f546001600160a01b0390811691602435908290610667338614612d71565b16925f1982036106ec5750505f5416908251936370a0823160e01b85523090850152602084602481845afa9283156106e357505f926106ad575b6106ab9350615475565b005b91506020833d6020116106db575b816106c860209383612265565b8101031261040e576106ab9251916106a1565b3d91506106bb565b513d5f823e3d90fd5b92915092506106ab9350615475565b823461040e5760209061045e61071036612389565b916138e0565b823461040e57602036600319011261040e576020906001600160a01b0361073b6121b4565b165f526016825260ff815f20541690519015158152f35b3461040e57602036600319011261040e576106ab61076e6121b4565b610776613334565b9061266f565b823461040e5760209061045e61079136612498565b50929190916136d4565b823461040e576107b36107ad36612389565b91613475565b82519182526020820152f35b503461040e576020908160031936011261040e57803567ffffffffffffffff811161040e57826107f385923690850161229f565b9081516107ff81612287565b9461080c85519687612265565b81865261081882612287565b8684019490601f19013686375f5b83811061086d575050505082519384938285019183865251809252840192915f5b82811061085657505050500390f35b835185528695509381019392810192600101610847565b959694956001600160a01b038061088483856125e4565b51165f52600b865260ff895f2054166108e4576108ae9033906108a784866125e4565b511661534e565b60128110156108d157906001916108c582896125e4565b525b0196959496610826565b602184634e487b7160e01b5f525260245ffd5b506001906108c7565b823461040e5760209061045e6109023661230f565b92919091613402565b823461040e575f36600319011261040e5760025490516001600160a01b039091168152602090f35b3461040e575f36600319011261040e576106ab61094e613334565b3361266f565b823461040e575f36600319011261040e5761097c90610971613334565b9051918291826124e7565b0390f35b823461040e575f36600319011261040e5760115490516001600160a01b039091168152602090f35b823461040e575f36600319011261040e5760209060ff60095460a81c1690519015158152f35b823461040e57602036600319011261040e5761097c906001600160a01b036109f46121b4565b165f526007602052610971815f206133ab565b503461040e575f36600319011261040e576009546001600160a01b039190821633148015610b60575b610a3990612588565b5f5b600c54811015610b1c578083610a5260019361243a565b90549060031b1c16805f52602090600b8252865f2090849160ff19908382825416179055600a8452885f2083828254161790556016845282895f20918254161790558751916552656465656d60d01b6060838552808686015288818601528a60809163135a5b9d60e21b838801528482880152805f80516020615766833981519152988960a0809aa183519388855282828601528a8a600696878682015265426f72726f7760d01b898201528a84820152a15197885287015285015283015288820152a101610a3b565b6009805461ffff60a01b191661010160a01b17905583516020907fa0aafd4f48714f90e9f7c83ba4991a45f25a1d530530fa4baf81737f1fd902915f80a160018152f35b505f5482163314610a30565b823461040e575f36600319011261040e57600e5490516001600160a01b039091168152602090f35b823461040e575f36600319011261040e5760209060ff6013541690519015158152f35b823461040e57602036600319011261040e5760209061045e610bd76121b4565b613126565b823461040e57602036600319011261040e57602090610c01610bfc6121b4565b61304e565b90519015158152f35b823461040e578060031936011261040e57610c236121b4565b6024356001600160a01b0381811693929184900361040e576020935f52600884526002835f200191165f52825260ff815f20541690519015158152f35b823461040e57602036600319011261040e57602090610c7d6121d9565b60095491906001600160a01b0333818516148015610d24575b610c9f90612588565b5f541633148015610d18575b610cb4906125f8565b15159160ff60a01b8360a01b169060ff60a01b1916176009557fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de060808251838152600884820152672a3930b739b332b960c11b60608201528486820152a151908152f35b50801515600114610cab565b505f5481163314610c96565b823461040e57602036600319011261040e576001600160a01b03610d526121b4565b165f526008602052805f20600160ff825416910154825191151582526020820152f35b823461040e57602036600319011261040e576020906001600160a01b03610d9a6121b4565b165f526015825260ff815f20541690519015158152f35b823461040e578060031936011261040e577ff3ea7588273ca7856f8cb40124947b9bc1cdf4310088c8ab75cdccd12ef0ab3a6020610ded6121b4565b610df56121ca565b5f5490916001600160a01b0391610e0f9083163314612d71565b1693845f52601883526103c282825f209060ff801983541691151516179055565b823461040e575f36600319011261040e5760209060ff60095460a01c1690519015158152f35b50903461040e575f36600319011261040e57905490516001600160a01b039091168152602090f35b823461040e57602036600319011261040e576020906001600160a01b03610ea36121b4565b165f526014825260ff815f20541690519015158152f35b823461040e57602036600319011261040e576020906001600160a01b03610edf6121b4565b165f52600a825260ff815f20541690519015158152f35b823461040e578060031936011261040e57602090610f126121b4565b905f8051602061576683398151915260a0610f2b6121ca565b610f63600180841b0380961695865f5260088852610f4e60ff875f20541661252b565b80600954163314908115610fb2575b50612588565b845f5260168652610f8281855f209060ff801983541691151516179055565b8351948552606086860152600660608601526552656465656d60d01b60808601521515938484820152a151908152f35b90505f5416331488610f5d565b823461040e57602036600319011261040e576020906001600160a01b03610fe46121b4565b165f52600b825260ff815f20541690519015158152f35b503461040e5761100a366123ef565b9492909360018060a01b0390815f54163314801561112d575b156110cc5750821515806110c3575b61103b90612c7f565b5f5b83811061104657005b806110546001928989612cbb565b3583611069611064848989612cbb565b612ccb565b165f52602090600f8252875f20557f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f66110a6611064848989612cbb565b91856110b3858d8d612cbb565b35938a519485521692a20161103d565b50828614611032565b608490602086519162461bcd60e51b8352820152603560248201527f6f6e6c792061646d696e206f7220626f72726f772063617020677561726469616044820152746e2063616e2073657420626f72726f77206361707360581b6064820152fd5b5081600d54163314611023565b823461040e5760209061045e61114f36612498565b93929092612e4b565b823461040e57602036600319011261040e5760209061045e6111786121b4565b612dac565b50903461040e57602036600319011261040e576111a061119b6121b4565b614032565b9192909360128410156111c757505191825260208201929092526040810191909152606090f35b602190634e487b7160e01b5f525260245ffd5b503461040e57602036600319011261040e57356001600160a01b03818116929183900361040e577f8ddca872a7a62d68235cff1a03badc845dc3007cfaa6145379f7bf3452ecb9b992611231825f54163314612d71565b601180546001600160a01b0319811683179091558351921682526020820152a1005b823461040e57602036600319011261040e576020906112706121d9565b6009546001600160a01b03908116331480156112f1575b61129090612588565b5f5416331480156112e5575b6112a5906125f8565b15159060ff196013541660ff8316176013557f5b6c1208749843641d57c75ab4801395cae97b26faabad5660303676f8fe0664838251848152a151908152f35b5080151560011461129c565b505f5481163314611287565b503461040e57602036600319011261040e5735906001600160a01b038216820361040e5761045e602092612cdf565b503461040e57602036600319011261040e573590600c5482101561040e5761135560209261243a565b905491519160018060a01b039160031b1c168152f35b503461040e5761137a36612350565b1592509050816113c2575b5061138c57005b6020606492519162461bcd60e51b8352820152601160248201527072656465656d546f6b656e73207a65726f60781b6044820152fd5b905015155f611385565b503461040e576113db366123ef565b9492909360018060a01b0390815f5416331480156114f9575b1561149857508215158061148f575b61140c90612c7f565b5f5b83811061141757005b806114256001928989612cbb565b3583611435611064848989612cbb565b165f5260209060108252875f20557f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f8611472611064848989612cbb565b918561147f858d8d612cbb565b35938a519485521692a20161140e565b50828614611403565b608490602086519162461bcd60e51b8352820152603560248201527f6f6e6c792061646d696e206f7220737570706c792063617020677561726469616044820152746e2063616e2073657420737570706c79206361707360581b6064820152fd5b5081600e541633146113f4565b50903461040e57602036600319011261040e5761045e60209235612c08565b823461040e5760209061045e61153a36612389565b91612961565b50903461040e576111a061155336612350565b9290916001600160a01b031690614e2c565b823461040e575f36600319011261040e576020906006549051908152f35b823461040e57602036600319011261040e576020906001600160a01b036115a86121b4565b165f52600f8252805f20549051908152f35b823461040e57602036600319011261040e576020906001600160a01b036115df6121b4565b165f526017825260ff815f20541690519015158152f35b823461040e57602036600319011261040e576020906001600160a01b0361161b6121b4565b165f526018825260ff815f20541690519015158152f35b503461040e578160031936011261040e576020915f8051602061576683398151915260a061165e6121b4565b936116676121ca565b90600180841b0380961695865f526008885261168860ff875f20541661252b565b80600954163314801561170b575b61169f90612588565b5f5416331480156116ff575b6116b4906125f8565b855f52600a87526116d382865f209060ff801983541691151516179055565b8451958652606087870152606086015263135a5b9d60e21b60808601521515938484820152a151908152f35b508115156001146116ab565b505f5481163314611696565b503461040e57602036600319011261040e576117316121b4565b5f546001600160a01b039290831633036117a15750600d80546001600160a01b031981168484161790915592516001600160a01b0392909316821683521660208201527feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e299080604081015b0390a1005b608490602085519162461bcd60e51b8352820152602660248201527f6f6e6c792061646d696e2063616e2073657420626f72726f772063617020677560448201526530b93234b0b760d11b6064820152fd5b503461040e57602036600319011261040e5761180d6121b4565b5f546001600160a01b0392908316330361187c5750600e80546001600160a01b031981168484161790915592516001600160a01b0392909316821683521660208201527fb0d3622c24ac9bd967d8f37a25808b3e668fe7ed4f3075bbe82842d3e287c04490806040810161179c565b608490602085519162461bcd60e51b8352820152602660248201527f6f6e6c792061646d696e2063616e2073657420737570706c792063617020677560448201526530b93234b0b760d11b6064820152fd5b50903461040e5736600319011261040e576118e76121b4565b60243567ffffffffffffffff811161040e576106ab926107769136910161229f565b503461040e57602036600319011261040e575f54813591906001600160a01b0316330361196e576020837f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd981856005549080600555825191825285820152a1515f8152f35b606490602084519162461bcd60e51b8352820152601f60248201527f6f6e6c792061646d696e2063616e2073657420636c6f736520666163746f72006044820152fd5b823461040e57602036600319011261040e576020906119ce6121d9565b60095491906001600160a01b0333818516148015611a72575b6119f090612588565b5f541633148015611a66575b611a05906125f8565b15159160ff60a81b8360a81b169060ff60a81b1916176009557fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de060808251838152600584820152645365697a6560d81b60608201528486820152a151908152f35b508015156001146119fc565b505f54811633146119e7565b823461040e575f36600319011261040e5760015490516001600160a01b039091168152602090f35b823461040e575f36600319011261040e5760095490516001600160a01b039091168152602090f35b823461040e5760209061045e611ae33661230f565b5091905061263d565b823461040e575f36600319011261040e57600d5490516001600160a01b039091168152602090f35b503461040e5760208060031936011261040e5781356001600160a01b038181169182900361040e5784516303e1469160e61b815283818681865afa908115611c86575f91611c50575b50163303611bff57815f918486518094819363307a00cd60e21b83525af1908115611bf5575f91611bc8575b50611b9057005b606492519162461bcd60e51b8352820152601560248201527418da185b99d9481b9bdd08185d5d1a1bdc9a5e9959605a1b6044820152fd5b90508181813d8311611bee575b611bdf8183612265565b8101031261040e57515f611b89565b503d611bd5565b84513d5f823e3d90fd5b50608492519162461bcd60e51b8352820152602760248201527f6f6e6c7920756e6974726f6c6c65722061646d696e2063616e206368616e676560448201526620627261696e7360c81b6064820152fd5b90508381813d8311611c7f575b611c678183612265565b8101031261040e5751818116810361040e575f611b5d565b503d611c5d565b86513d5f823e3d90fd5b823461040e578060031936011261040e57602090611cac6121b4565b905f8051602061576683398151915260a0611cc56121ca565b600180831b0380951694855f5260088752611ce560ff865f20541661252b565b806009541633148015611d6c575b611cfc90612588565b5f541633148015611d60575b611d11906125f8565b845f52600b8652611d3081855f209060ff801983541691151516179055565b83519485526060868601526006606086015265426f72726f7760d01b60808601521515938484820152a151908152f35b50801515600114611d08565b505f5481163314611cf3565b50903461040e57608036600319011261040e5767ffffffffffffffff91803583811161040e57611dab903690830161229f565b9060249360243590811161040e57611dc6903690830161229f565b926044916044359384151580950361040e576064946064359081151580920361040e57601180546001600160a01b039391929084161561205f57989998600198908914918914905f8a5b611e1657005b8c518110156106ab5785611e2a828f6125e4565b5116805f5260206008815260ff8b5f2054161561202657508484611f45575b611e57575b508a018a611e10565b86865416803b1561040e575f828f8c838f51958694859362c823eb60e11b85528401525af18015611f3b57611f2c575b505f8c5b611e96575b50611e4e565b8851811015611f27578787541688611eae838c6125e4565b511690803b1561040e578c516314f5577360e01b81526001600160a01b03808616828f019081529316602084015260016040840152915f91839182908490829060600103925af18015611f1d57918e92918392611f0e575b500190611e8b565b611f17906121e8565b5f611f06565b8c513d5f823e3d90fd5b611e90565b611f35906121e8565b5f611e87565b8b513d5f823e3d90fd5b5086865416803b1561040e575f828f8c838f519586948593638220d7cf60e01b85528401525af18015611f3b57612017575b50845f8d5b611f87575b50611e49565b90895182101561201157508787541688611fa1838c6125e4565b511690803b1561040e578c516310d47dc760e01b81526001600160a01b03808616828f019081529316602084015260016040840152915f91839182908490829060600103925af18015611f1d57918e92918392612002575b50018691611f7c565b61200b906121e8565b5f611ff9565b90611f81565b612020906121e8565b5f611f77565b8a5162461bcd60e51b8152808b01919091526015818f0152741b585c9ad95d081b5d5cdd081899481b1a5cdd1959605a1b818d01528390fd5b865162461bcd60e51b8152602081880152602160248201527f4e6f20726577617264206469737472696275746f7220636f6e666967757265646044820152602160f81b6064820152608490fd5b823461040e578060031936011261040e577f3358c3521bafcce980707ba1d765df881a674618d8a1ca57a33859d0ec92f579906120e76121b4565b6120ef6121ca565b61212860018060a01b0380931692835f52600860205261211460ff865f20541661252b565b806009541633149081156121575750612588565b815f52601460205261214881845f209060ff801983541691151516179055565b825191825215156020820152a1005b90505f5416331486610f5d565b823461040e57602036600319011261040e576020906001600160a01b036121896121b4565b165f5260108252805f20549051908152f35b3461040e575f36600319011261040e5780600160209252f35b600435906001600160a01b038216820361040e57565b60243590811515820361040e57565b60043590811515820361040e57565b67ffffffffffffffff81116121fc57604052565b634e487b7160e01b5f52604160045260245ffd5b6020810190811067ffffffffffffffff8211176121fc57604052565b610140810190811067ffffffffffffffff8211176121fc57604052565b6040810190811067ffffffffffffffff8211176121fc57604052565b90601f8019910116810190811067ffffffffffffffff8211176121fc57604052565b67ffffffffffffffff81116121fc5760051b60200190565b9080601f8301121561040e5760209082356122b981612287565b936122c76040519586612265565b81855260208086019260051b82010192831161040e57602001905b8282106122f0575050505090565b81356001600160a01b038116810361040e5781529083019083016122e2565b608090600319011261040e576001600160a01b03600435818116810361040e5791602435828116810361040e5791604435908116810361040e579060643590565b608090600319011261040e576001600160a01b0390600435828116810361040e5791602435908116810361040e57906044359060643590565b606090600319011261040e576001600160a01b0390600435828116810361040e5791602435908116810361040e579060443590565b9181601f8401121561040e5782359167ffffffffffffffff831161040e576020808501948460051b01011161040e57565b604060031982011261040e5767ffffffffffffffff9160043583811161040e578261241c916004016123be565b9390939260243591821161040e57612436916004016123be565b9091565b600c5481101561246f57600c5f527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701905f90565b634e487b7160e01b5f52603260045260245ffd5b805482101561246f575f5260205f2001905f90565b60a090600319011261040e576001600160a01b0390600435828116810361040e5791602435818116810361040e5791604435828116810361040e5791606435908116810361040e579060843590565b60209060206040818301928281528551809452019301915f5b82811061250e575050505090565b83516001600160a01b031685529381019392810192600101612500565b1561253257565b60405162461bcd60e51b815260206004820152602860248201527f63616e6e6f742070617573652061206d61726b65742074686174206973206e6f6044820152671d081b1a5cdd195960c21b6064820152608490fd5b1561258f57565b60405162461bcd60e51b815260206004820152602760248201527f6f6e6c7920706175736520677561726469616e20616e642061646d696e2063616044820152666e20706175736560c81b6064820152608490fd5b805182101561246f5760209160051b010190565b156125ff57565b60405162461bcd60e51b81526020600482015260166024820152756f6e6c792061646d696e2063616e20756e706175736560501b6044820152606490fd5b9060018060a01b0382165f52600860205260ff60405f205416156126685761266491613fb0565b5f90565b5050600990565b919091604080519161268083612249565b60019182845260209160208501602036823785511561246f576001600160a01b03918216905260118054909590821615612913575f97855b6126c8575b505050505050509050565b805189101561290e57826126dc8a836125e4565b5116805f526008865260ff855f205416156128d25783885416803b1561040e575f8651638220d7cf60e01b8152818160049486868301528160249586925af18015612805576128c3575b505f895b61282d575b50858a541690813b1561040e575f91829189518094819362c823eb60e11b835288888401525af180156128235790899291612814575b50905f905b61277c575b50505097850197856126b8565b845181101561280f57858a54168661279483886125e4565b511690803b1561040e5788516314f5577360e01b81526001600160a01b038087168683019081529316602084015260016040840152915f91839182908490829060600103925af1801561280557918a93929184926127f6575b5001909161276a565b6127ff906121e8565b5f6127ed565b88513d5f823e3d90fd5b61276f565b61281d906121e8565b5f612765565b87513d5f823e3d90fd5b85518110156128be57868b54168761284583896125e4565b511690803b1561040e5789516310d47dc760e01b81526001600160a01b038088168783019081529316602084015260016040840152915f91839182908490829060600103925af180156128b457918b929183926128a5575b50019061272a565b6128ae906121e8565b5f61289d565b89513d5f823e3d90fd5b61272f565b6128cc906121e8565b5f612726565b845162461bcd60e51b81526004810187905260156024820152741b585c9ad95d081b5d5cdd081899481b1a5cdd1959605a1b6044820152606490fd5b6126bd565b825162461bcd60e51b815260206004820152602160248201527f4e6f20726577617264206469737472696275746f7220636f6e666967757265646044820152602160f81b6064820152608490fd5b92919260018060a01b039384821690815f52602091600a835260409660ff885f205416612bd357815f526008845260ff885f20541615612bc757808616805f526017855260ff895f205416612bba57825f526014855260ff895f2054169182612bab575b5050612ba05760108352865f205491826129e9575b50505050612664929350615208565b8751631d8e90d160e11b81528481600481865afa9081156128b4575f91612b73575b5088516308f7a6e360e31b8152928584600481845afa908115612b395786905f92612b43575b8b51638f840ddd60e01b81529550859060049082905afa938415612b39575f94612b08575b5092612a71612aae92612ab795612a6b6151db565b916155c4565b612aa98b51612a7f81612249565b60158152747375627472616374696f6e20756e646572666c6f7760581b898201528284111561555f565b613cf2565b90612a6b6151db565b1015612ac5578080806129da565b60649085519062461bcd60e51b82526004820152601960248201527f6d61726b657420737570706c79206361702072656163686564000000000000006044820152fd5b93508584813d8311612b32575b612b1f8183612265565b8101031261040e57925192612a71612a56565b503d612b15565b8a513d5f823e3d90fd5b915084813d8311612b6c575b612b598183612265565b8101031261040e57856004945191612a31565b503d612b4f565b90508481813d8311612b99575b612b8a8183612265565b8101031261040e57515f612a0b565b503d612b80565b50600e955050505050565b9091505f541614155f806129c5565b50600e9750505050505050565b50600996505050505050565b875162461bcd60e51b815260048101859052600e60248201526d1b5a5b9d081a5cc81c185d5cd95960921b6044820152606490fd5b5f546001600160a01b03163303612c545760407faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec131691600654908060065582519182526020820152a15f90565b505f80516020615746833981519152606060405160018152600b60208201525f6040820152a1600190565b15612c8657565b60405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081a5b9c1d5d609a1b6044820152606490fd5b919081101561246f5760051b0190565b356001600160a01b038116810361040e5790565b5f546001600160a01b039081163303612d45577fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e229181604092600454921690816bffffffffffffffffffffffff60a01b8416176004558351921682526020820152a15f90565b50505f80516020615746833981519152606060405160018152601060208201525f6040820152a1600190565b15612d7857565b60405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606490fd5b5f546001600160a01b039081163303612e1f57600980549282166001600160a01b03198416811790915560408051929093166001600160a01b0390811683521660208201527f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e91819081015b0390a15f90565b50505f80516020615746833981519152606060405160018152601360208201525f6040820152a1600190565b9092939160ff60135416908161302c575b506130235760018060a01b0380911693845f526020946008865260409460ff865f205416158015613010575b6130045783165f526002855f200192821692835f52865260ff855f20541615612ff9578451926395dd919360e01b845260048401528583602481845afa928315612fef575f93612fbe575b50612edd9061304e565b15612f42575010612eee5750505f90565b60849250519062461bcd60e51b82526004820152602860248201527f43616e206e6f74207265706179206d6f7265207468616e2074686520746f74616044820152676c20626f72726f7760c01b6064820152fd5b612f4f919392945061443a565b9190506012811015612faa5780612fa2575015612f9a57670de0b6b3a764000091612f8a91600554905190612f8382612210565b81526155de565b510410612f95575f90565b601190565b505050600390565b935050505090565b634e487b7160e01b5f52602160045260245ffd5b9092508581813d8311612fe8575b612fd68183612265565b8101031261040e575191612edd612ed3565b503d612fcc565b85513d5f823e3d90fd5b505050505050600890565b50505050505050600990565b508381165f5260ff865f20541615612e88565b50505050600190565b6001600160a01b03165f9081526015602052604081205460ff16159150612e5c565b6001600160a01b03165f818152600860209081526040909120600101541591826130f6575b8261307d57505090565b6040516305cee64160e21b815292508190839060049082905afa9081156130eb575f916130b5575b50670de0b6b3a764000091501490565b905081813d83116130e4575b6130cb8183612265565b8101031261040e57670de0b6b3a764000090515f6130a5565b503d6130c1565b6040513d5f823e3d90fd5b600b825260405f205460ff1615156001149250613073565b9081602091031261040e5751801515810361040e5790565b5f546001600160a01b03919082163303613308578116805f5260209060088252604060ff815f2054166132dc578051633630a6b560e01b815260049084818381875afa9081156132d2575f916132a5575b501561326d5793825f5260088452815f20905f600180938160ff1982541617815501555f95600c54965b8781106132145750505050600160401b8410156121fc5761320b826131ed8660017fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f9801600c5561243a565b90919060018060a01b038084549260031b9316831b921b1916179055565b51908152a15f90565b858361321f8361243a565b90549060031b1c16146132335783016131a1565b845162461bcd60e51b815280830188905260146024820152731b585c9ad95d08185b1c9958591e48185919195960621b6044820152606490fd5b815162461bcd60e51b815260048101859052601160248201527026bab9ba1031329030b710292a37b5b2b760791b6044820152606490fd5b6132c59150853d87116132cb575b6132bd8183612265565b81019061310e565b5f613177565b503d6132b3565b83513d5f823e3d90fd5b5f80516020615746833981519152935060609291508060115f925193600a8552840152820152a1600a90565b50505f80516020615746833981519152606060405160018152601260208201525f6040820152a1600190565b60405190600c54808352826020916020820190600c5f527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7935f905b8282106133885750505061338692500383612265565b565b85546001600160a01b031684526001958601958895509381019390910190613370565b90604051918281549182825260209260208301915f5260205f20935f905b8282106133df5750505061338692500383612265565b85546001600160a01b0316845260019586019588955093810193909101906133c9565b909260ff60095460a01c1661343b5761341c908483615267565b80613434575061342f6126649382615208565b615208565b9250505090565b60405162461bcd60e51b81526020600482015260126024820152711d1c985b9cd9995c881a5cc81c185d5cd95960721b6044820152606490fd5b919060018060a01b039283600454166040928351908663fc57d4df60e01b948584521660048301526020938483602481875afa928315611c8657908592915f94613682575b506024908751998a938492835216958660048301525afa958615611bf5575f96613653575b508015801561364b575b61363e578260049285519384809263182df0f560e01b82525afa918215611bf5575f926135ff575b5091670de0b6b3a7640000956135e66135b66135996135eb9561357e89985f6135f79c9b5161353f81612210565b525f8a5161354c81612210565b525f8a5161355981612210565b526006548a519061356982612210565b81528a519161357783612210565b8252615435565b9488519061358b82612210565b815288519161357783612210565b925f87516135a681612210565b52516135b0615608565b90615641565b9151926d646976696465206279207a65726f60901b8651916135d783612249565b600e835282015283151561555f565b615417565b905190612f8382612210565b5104905f9190565b9493928091925085813d8311613637575b61361a8183612265565b8101031261040e5793519293919290670de0b6b3a7640000613511565b503d613610565b505050505050600d905f90565b5085156134e9565b9095508281813d831161367b575b61366b8183612265565b8101031261040e5751945f6134df565b503d613661565b8381949295503d83116136ae575b61369a8183612265565b8101031261040e57602485925193906134ba565b503d613690565b9081602091031261040e57516001600160a01b038116810361040e5790565b9060ff908160095460a81c1661388e5760018060a01b039081851690815f526020906017825260409285845f205416801561387d575b61386f578560135416908161385a575b5061384d5783861694855f52600883526002845f2001858a165f52835280845f2054161561383f57855f526008835280845f2054161590811561382c575b5061381f578251948286600481635fe3b56760e01b948582525afa958615611bf5575f966137f4575b5091809160048694865195869384928352165afa9283156106e35750908392915f926137c7575b5050169116036137bf5761342f6126649382615208565b505050600290565b6137e69250803d106137ed575b6137de8183612265565b8101906136b5565b5f806137a8565b503d6137d4565b8392908392975061381460049188963d86116137ed576137de8183612265565b979250509192613781565b5050505050505050600990565b90508482165f52835f205416155f613758565b505050505050505050600890565b5050505050505050600190565b90505f526015825284835f205416155f61371a565b505050505050505050600e90565b508489165f5285845f20541661370a565b60405162461bcd60e51b815260206004820152600f60248201526e1cd95a5e99481a5cc81c185d5cd959608a1b6044820152606490fd5b156138cc57565b634e487b7160e01b5f52600160045260245ffd5b60018060a01b0392838216805f526020600b8152604060ff815f205416613b5f57825f526008825260ff815f2054161561300457868616805f526017835260ff825f205416613b5257835f52600883526002825f2001815f52835260ff825f20541615613ac3575b5060248260049889541683519283809263fc57d4df60e01b8252888d8301525afa908115613ab9575f91613a8c575b5015613a8057825f52600f8252805f2054806139d4575b5050509061399c918461474b565b91905060128110156139c15780612fa257506139bc576126649250613fb0565b505090565b602185634e487b7160e01b5f525260245ffd5b81516308f7a6e360e31b815283818a81885afa80156132d2575f90613a51575b613a02915086612a6b6151db565b1015613a0e578061398e565b5162461bcd60e51b815280870191909152601960248201527f6d61726b657420626f72726f77206361702072656163686564000000000000006044820152606490fd5b508381813d8311613a79575b613a678183612265565b8101031261040e57613a0290516139f4565b503d613a5d565b50505050505050600d90565b90508281813d8311613ab2575b613aa38183612265565b8101031261040e57515f613977565b503d613a99565b82513d5f823e3d90fd5b833303613b1657613ad4873361534e565b6012811015612faa5780613b0a5750835f52600883526002825f2001905f528252613b0460ff825f2054166138c5565b5f613948565b97505050505050505090565b815162461bcd60e51b815260048101849052601560248201527439b2b73232b91036bab9ba10313290382a37b5b2b760591b6044820152606490fd5b5050505050505050600e90565b60649250519062461bcd60e51b82526004820152601060248201526f189bdc9c9bddc81a5cc81c185d5cd95960821b6044820152fd5b5f546001600160a01b03919082163303613c875716805f526008602052604091825f2060ff81541615613c5b578351613bcd81612210565b828152845190613bdc82612210565b670c7d713b49da00008092525111613c2f57907f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59360016060949301828154915581519384526020840152820152a15f90565b5050506060815f5f805160206157468339815191529351916006835260086020840152820152a1600690565b5050506060815f5f805160206157468339815191529351916009835260076020840152820152a1600990565b5050505f80516020615746833981519152606060405160018152600660208201525f6040820152a1600190565b91613cc0908284615267565b91826139bc576126649250615208565b919082608091031261040e578151916020810151916060604083015192015190565b91908203918211613cff57565b634e487b7160e01b5f52601160045260245ffd5b604080516361bfb47160e11b81523360048201526001600160a01b0383811693909190608082602481885afa8015611bf5575f80935f92613f79575b50613f2757613ef95790613d64913390615267565b80613ece5750825f5260086020526002825f2001335f52602052815f20805460ff811615613ec55760ff191690556007602052613da2825f206133ab565b92835192835f5b818110613e9e575b5084613dc2929394959650106138c5565b335f526007602052805f20928354945f1995868101908111613cff57613e1e9183613df0613dfa9389612483565b9390549289612483565b92909360031b1c169060018060a01b038084549260031b9316831b921b1916179055565b8354938415613e8a577fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d95612e18950191613e598383612483565b815460039190911b9290921b19909116905555516001600160a01b0390911681523360208201529081906040820190565b634e487b7160e01b5f52603160045260245ffd5b8385613eaa838a6125e4565b511614613eb957600101613da9565b9095509350845f613db1565b50505050505f90565b8251600e81526003602082015292830152505f805160206157468339815191529150606090a1600e90565b5050505f805160206157468339815191529150805f6060925191600c835260026020840152820152a1600c90565b845162461bcd60e51b815260206004820152602560248201527f657869744d61726b65743a206765744163636f756e74536e617073686f742066604482015264185a5b195960da1b6064820152608490fd5b915050613f9f91925060803d608011613fa9575b613f978183612265565b810190613cd0565b509092915f613d4f565b503d613f8d565b6011546001600160a01b039290831680613fcb575b50505050565b803b1561040e576040516356e3af2960e11b81526001600160a01b039390941683166004850152911660248301525f60448301819052908290818381606481015b03925af180156130eb57614023575b808080613fc5565b61402c906121e8565b5f61401b565b60405161403e8161222c565b5f81525f60208201525f60408201525f60608201525f60808201525f60a082015260405161406b81612210565b5f815260c082015260405161407f81612210565b5f815260e082015260405161409381612210565b5f81526101008201526040516140a881612210565b5f815261012082015260018060a01b0382165f5260076020526140cd60405f206133ab565b60045490926001600160a01b03909116905f5b84518110156143fb576001600160a01b036140fb82876125e4565b516040516361bfb47160e11b81526001600160a01b038516600482015291169190608081602481865afa80156130eb575f915f915f915f916143d8575b506080890152606088015260408701526143c957815f52601860205260ff60405f2054166142c4575b60405163fc57d4df60e01b81526004810183905291602083602481885afa9283156130eb575f93614290575b508260a08701528215614280576040516001936141a982612210565b8152806101008801526141e06060880151916020890151906141d5670de0b6b3a76400009485926155de565b510490612a6b6151db565b91826020890152156141f5575b5050016140e0565b614241614274926142226101208a01515f60405161421281612210565b525161421c615608565b50615682565b908160405161423081612210565b528361423a6151db565b92046155c4565b80602089015261425d6101008901515f60405161421281612210565b918260405161426b81612210565b5261423a6151db565b60208601525f806141ed565b50505050505050600d905f905f90565b9092506020813d6020116142bc575b816142ac60209383612265565b8101031261040e5751915f61418d565b3d915061429f565b6008602052600160405f200154604051906142de82612210565b815260c08601526080850151604051906142f782612210565b815260e086015260405163fc57d4df60e01b815260048101839052602081602481885afa9081156130eb575f91614397575b508060a08701528015614280576040519061434382612210565b815261010086015261439061437061436460c088015160e089015190615435565b61010088015190615435565b80610120880152670de0b6b3a76400006141d560408901518951936155de565b8552614161565b90506020813d6020116143c1575b816143b260209383612265565b8101031261040e57515f614329565b3d91506143a5565b505050505050600f905f905f90565b925050506143f5915060803d608011613fa957613f978183612265565b5f614138565b5050509050805160208201518082115f14614429575050806020614423925191015190613cf2565b5f918290565b6144339250613cf2565b5f915f9190565b6040516144468161222c565b5f81525f60208201525f60408201525f60608201525f60808201525f60a082015260405161447381612210565b5f815260c082015260405161448781612210565b5f815260e082015260405161449b81612210565b5f81526101008201526040516144b081612210565b5f815261012082015260018060a01b0382165f5260076020526144d560405f206133ab565b60045490926001600160a01b03909116905f5b84518110156143fb576001600160a01b0361450382876125e4565b516040516361bfb47160e11b81526001600160a01b038516600482015291169190608081602481865afa80156130eb575f915f915f915f91614728575b506080890152606088015260408701526143c957815f52601860205260ff60405f20541661464f575b60405163fc57d4df60e01b81526004810183905291602083602481885afa9283156130eb575f9361461b575b508260a08701528215614280576040516001936145b182612210565b8152806101008801526145dd6060880151916020890151906141d5670de0b6b3a76400009485926155de565b91826020890152156145f2575b5050016144e8565b61424161460f926142226101208a01515f60405161421281612210565b60208601525f806145ea565b9092506020813d602011614647575b8161463760209383612265565b8101031261040e5751915f614595565b3d915061462a565b6008602052600160405f2001546040519061466982612210565b815260c086015260808501516040519061468282612210565b815260e086015260405163fc57d4df60e01b815260048101839052602081602481885afa9081156130eb575f916146f6575b508060a0870152801561428057604051906146ce82612210565b81526101008601526146ef61437061436460c088015160e089015190615435565b8552614569565b90506020813d602011614720575b8161471160209383612265565b8101031261040e57515f6146b4565b3d9150614704565b92505050614745915060803d608011613fa957613f978183612265565b5f614540565b604051916147588361222c565b5f83525f60208401525f60408401525f60608401525f60808401525f60a084015260405161478581612210565b5f815260c084015260405161479981612210565b5f815260e08401526040516147ad81612210565b5f81526101008401526040516147c281612210565b5f815261012084015260018060a01b0382165f5260076020526147e760405f206133ab565b60045490946001600160a01b03909116925f5b8651811015614aca576001600160a01b0361481582896125e4565b516040516361bfb47160e11b81526001600160a01b038516600482015291169190608081602481865afa80156130eb575f915f915f915f91614aa7575b5060808b015260608a01526040890152614a9657815f52601860205260ff60405f205416614991575b60405163fc57d4df60e01b815260048101839052916020836024818a5afa9283156130eb575f9361495d575b508260a0890152821561494b576040516001936148c382612210565b8152806101008a01526148ef60608a01519160208b0151906141d5670de0b6b3a76400009485926155de565b918260208b0152848060a01b0388161461490c575b5050016147fa565b61492961493f926142226101208c01515f60405161421281612210565b908160208b01526141d5876101008c01516155de565b60208801525f80614904565b505050505050505050600d905f905f90565b9092506020813d602011614989575b8161497960209383612265565b8101031261040e5751915f6148a7565b3d915061496c565b6008602052600160405f200154604051906149ab82612210565b815260c08801526080870151604051906149c482612210565b815260e088015260405163fc57d4df60e01b8152600481018390526020816024818a5afa9081156130eb575f91614a64575b508060a0890152801561494b5760405190614a1082612210565b8152610100880152614a5d614a3d614a3160c08a015160e08b015190615435565b6101008a015190615435565b806101208a0152670de0b6b3a76400006141d560408b01518b51936155de565b875261487b565b90506020813d602011614a8e575b81614a7f60209383612265565b8101031261040e57515f6149f6565b3d9150614a72565b5050505050505050600f905f905f90565b92505050614ac4915060803d608011613fa957613f978183612265565b5f614852565b50505050509050805160208201518082115f14614429575050806020614423925191015190613cf2565b9160405191614b028361222c565b5f83525f60208401525f60408401525f60608401525f60808401525f60a0840152604051614b2f81612210565b5f815260c0840152604051614b4381612210565b5f815260e0840152604051614b5781612210565b5f8152610100840152604051614b6c81612210565b5f815261012084015260018060a01b0384165f526007602052614b9160405f206133ab565b60045490946001600160a01b03909116905f5b8651811015614aca576001600160a01b03614bbf82896125e4565b516040516361bfb47160e11b81526001600160a01b038516600482015291169190608081602481865afa80156130eb575f915f915f915f91614e09575b5060808b015260608a01526040890152614a9657815f52601860205260ff60405f205416614d30575b60405163fc57d4df60e01b81526004810183905291602083602481885afa9283156130eb575f93614cfc575b508260a0890152821561494b5760019288889260405192614c7184612210565b835282610100830152614c9d6060830151936020840151906141d5670de0b6b3a76400009687926155de565b90816020840152868060a01b038a1614614cbc575b5050505001614ba4565b826141d5614cee95610120614cd29501516155de565b8060208b015261425d6101008b01515f60405161421281612210565b6020880152855f8881614cb2565b9092506020813d602011614d28575b81614d1860209383612265565b8101031261040e5751915f614c51565b3d9150614d0b565b6008602052600160405f20015460405190614d4a82612210565b815260c0880152608087015160405190614d6382612210565b815260e088015260405163fc57d4df60e01b815260048101839052602081602481885afa9081156130eb575f91614dd7575b508060a0890152801561494b5760405190614daf82612210565b8152610100880152614dd0614a3d614a3160c08a015160e08b015190615435565b8752614c25565b90506020813d602011614e01575b81614df260209383612265565b8101031261040e57515f614d95565b3d9150614de5565b92505050614e26915060803d608011613fa957613f978183612265565b5f614bfc565b929160405192614e3b8461222c565b5f84525f60208501525f60408501525f60608501525f60808501525f60a0850152604051614e6881612210565b5f815260c0850152604051614e7c81612210565b5f815260e0850152604051614e9081612210565b5f8152610100850152604051614ea581612210565b5f815261012085015260018060a01b0385165f526007602052614eca60405f206133ab565b60045490956001600160a01b03909116905f5b87518110156151b0576001600160a01b03614ef8828a6125e4565b516040516361bfb47160e11b81526001600160a01b038516600482015291169190608081602481865afa80156130eb575f915f915f915f9161518d575b5060808c015260608b015260408a015261517b57815f52601860205260ff60405f205416615076575b60405163fc57d4df60e01b81526004810183905291602083602481885afa9283156130eb575f93615042575b508260a08a0152821561502f5760019289889260405192614faa84612210565b835282610100830152614fd66060830151936020840151906141d5670de0b6b3a76400009687926155de565b90816020840152868060a01b038c1614614ff5575b5050505001614edd565b826141d56150219561012061500b9501516155de565b908160208c01526141d5886101008d01516155de565b6020890152855f8981614feb565b50505050505050505050600d905f905f90565b9092506020813d60201161506e575b8161505e60209383612265565b8101031261040e5751915f614f8a565b3d9150615051565b6008602052600160405f2001546040519061509082612210565b815260c08901526080880151604051906150a982612210565b815260e089015260405163fc57d4df60e01b815260048101839052602081602481885afa9081156130eb575f91615149575b508060a08a0152801561502f57604051906150f582612210565b815261010089015261514261512261511660c08b015160e08c015190615435565b6101008b015190615435565b806101208b0152670de0b6b3a76400006141d560408c01518c51936155de565b8852614f5e565b90506020813d602011615173575b8161516460209383612265565b8101031261040e57515f6150db565b3d9150615157565b505050505050505050600f905f905f90565b925050506151aa915060803d608011613fa957613f978183612265565b5f614f35565b5050505050509050805160208201518082115f14614429575050806020614423925191015190613cf2565b604051906151e882612249565b60118252706164646974696f6e206f766572666c6f7760781b6020830152565b6011546001600160a01b0392908316806152225750505050565b803b1561040e57604051637076c88b60e11b81526001600160a01b039390941683166004850152911660248301525f604483018190529082908183816064810161400c565b6001600160a01b039081165f8181526016602052604090205492939290919060ff16615316578316805f52601760205260ff60405f20541661530d57815f52600860205260405f2060ff81541615615303576002915f520160205260ff60405f205416156152fc576152d892614af4565b9190506012811015612faa57806152f757506152f2575f90565b600490565b905090565b5050505f90565b5050505050600990565b50505050600e90565b60405162461bcd60e51b815260206004820152601060248201526f1c995919595b481a5cc81c185d5cd95960821b6044820152606490fd5b9060018060a01b038083165f52600860205260405f2060ff8154161561540e5760029183165f520160205260405f208054600160ff82161515146154065760ff19166001179055600760205260405f2080549290600160401b8410156121fc57816131ed856153e39360017f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a598018155612483565b604080516001600160a01b03928316815292909116602083015281908101612e18565b505050505f90565b50505050600990565b8115615421570490565b634e487b7160e01b5f52601260045260245ffd5b670de0b6b3a764000091615462915f60405161545081612210565b5251905161545c615608565b916156ad565b046040519061547082612210565b815290565b60405163a9059cbb60e01b602082019081526001600160a01b0393841660248301526044808301959095529381529267ffffffffffffffff92608085019190848311868410176121fc575f9384936040521694519082865af1903d15615552573d9081116121fc5761550991604051916154f96020601f19601f8401160184612265565b82523d5f602084013e5b836156e2565b8051908115159182615537575b505061551f5750565b60249060405190635274afe760e01b82526004820152fd5b61554a925060208091830101910161310e565b155f80615516565b5061550990606090615503565b156155675750565b6040519062461bcd60e51b82528160208060048301528251908160248401525f935b8285106155ab575050604492505f838284010152601f80199101168101030190fd5b8481018201518686016044015293810193859350615589565b90810191828211613cff576155db9183101561555f565b90565b906155fb915f6040516155f081612210565b52519061545c615608565b6040519061547082612210565b6040519061561582612249565b601782527f6d756c7469706c69636174696f6e206f766572666c6f770000000000000000006020830152565b80159182801561567b575b6152fc57670de0b6b3a76400008083029383850482141715613cff576156756155db9385615417565b1461555f565b505f61564c565b158080156156a5575b6156a0576001811715613cff57615421575f90565b505f90565b50600161568b565b90918115928380156156da575b615406578083029383850482141715613cff576156756155db9385615417565b5080156156ba565b9061570957508051156156f757805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158061573c575b61571a575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561571256fe45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa071aec636243f9709bb0007ae15e9afb8150ab01716d75fd7573be5cc096e03b0a264697066735822122071992a22967fa1d1b9e2eecb230c797a46909f021291e6f1cecf3b86b9c3054a64736f6c63430008170033