0 txs
563.1k calls
constructor
constructor(address _wrappedNativeToken, address _nativeMarket, uint256 _blocksPerYear, uint256 _stakingPeriod, uint256 _minimumStakedXVS, uint256 _maximumXVSCap, bool _timeBased)
functions
accessControlManager
viewfunction accessControlManager() view returns (address)
alphaDenominator
viewfunction alphaDenominator() view returns (uint128)
alphaNumerator
viewfunction alphaNumerator() view returns (uint128)
blocksOrSecondsPerYear
viewfunction blocksOrSecondsPerYear() view returns (uint256)
calculateAPR
viewfunction calculateAPR(address market, address user) view returns (tuple aprInfo)
claimTimeRemaining
viewfunction claimTimeRemaining(address user) view returns (uint256)
comptroller
viewfunction comptroller() view returns (address)
estimateAPR
viewfunction estimateAPR(address market, address user, uint256 borrow, uint256 supply, uint256 xvsStaked) view returns (tuple aprInfo)
getAllMarkets
viewfunction getAllMarkets() view returns (address[])
getBlockNumberOrTimestamp
viewfunction getBlockNumberOrTimestamp() view returns (uint256)
incomeDistributionYearly
viewfunction incomeDistributionYearly(address vToken) view returns (uint256 amount)
interests
viewfunction interests(address, address) view returns (uint256 accrued, uint256 score, uint256 rewardIndex)
irrevocableLimit
viewfunction irrevocableLimit() view returns (uint256)
isScoreUpdated
viewfunction isScoreUpdated(uint256, address) view returns (bool)
isTimeBased
viewfunction isTimeBased() view returns (bool)
isUserPrimeHolder
viewfunction isUserPrimeHolder(address user) view returns (bool)
markets
viewfunction markets(address) view returns (uint256 supplyMultiplier, uint256 borrowMultiplier, uint256 rewardIndex, uint256 sumOfMembersScore, bool exists)
MAXIMUM_XVS_CAP
viewfunction MAXIMUM_XVS_CAP() view returns (uint256)
maxLoopsLimit
viewfunction maxLoopsLimit() view returns (uint256)
MINIMUM_STAKED_XVS
viewfunction MINIMUM_STAKED_XVS() view returns (uint256)
NATIVE_MARKET
viewfunction NATIVE_MARKET() view returns (address)
nextScoreUpdateRoundId
viewfunction nextScoreUpdateRoundId() view returns (uint256)
oracle
viewfunction oracle() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingScoreUpdates
viewfunction pendingScoreUpdates() view returns (uint256)
poolRegistry
viewfunction poolRegistry() view returns (address)
primeLiquidityProvider
viewfunction primeLiquidityProvider() view returns (address)
revocableLimit
viewfunction revocableLimit() view returns (uint256)
stakedAt
viewfunction stakedAt(address) view returns (uint256)
STAKING_PERIOD
viewfunction STAKING_PERIOD() view returns (uint256)
tokens
viewfunction tokens(address) view returns (bool exists, bool isIrrevocable)
totalIrrevocable
viewfunction totalIrrevocable() view returns (uint256)
totalRevocable
viewfunction totalRevocable() view returns (uint256)
totalScoreUpdatesRequired
viewfunction totalScoreUpdatesRequired() view returns (uint256)
unreleasedPLPIncome
viewfunction unreleasedPLPIncome(address) view returns (uint256)
vTokenForAsset
viewfunction vTokenForAsset(address) view returns (address)
WRAPPED_NATIVE_TOKEN
viewfunction WRAPPED_NATIVE_TOKEN() view returns (address)
xvsVault
viewfunction xvsVault() view returns (address)
xvsVaultPoolId
viewfunction xvsVaultPoolId() view returns (uint256)
xvsVaultRewardToken
viewfunction xvsVaultRewardToken() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
accrueInterest
nonpayablefunction accrueInterest(address vToken)
accrueInterestAndUpdateScore
nonpayablefunction accrueInterestAndUpdateScore(address user, address market)
addMarket
nonpayablefunction addMarket(address comptroller, address market, uint256 supplyMultiplier, uint256 borrowMultiplier)
burn
nonpayablefunction burn(address user)
claim
nonpayablefunction claim()
claimInterest
nonpayablefunction claimInterest(address vToken, address user) returns (uint256)
claimInterest
nonpayablefunction claimInterest(address vToken) returns (uint256)
getInterestAccrued
nonpayablefunction getInterestAccrued(address vToken, address user) returns (uint256)
getPendingRewards
nonpayablefunction getPendingRewards(address user) returns (tuple[] pendingRewards)
initialize
nonpayablefunction initialize(address xvsVault_, address xvsVaultRewardToken_, uint256 xvsVaultPoolId_, uint128 alphaNumerator_, uint128 alphaDenominator_, address accessControlManager_, address primeLiquidityProvider_, address comptroller_, address oracle_, uint256 loopsLimit_)
initializeV2
nonpayablefunction initializeV2(address poolRegistry_)
issue
nonpayablefunction issue(bool isIrrevocable, address[] users)
renounceOwnership
nonpayablefunction renounceOwnership()
setAccessControlManager
nonpayablefunction setAccessControlManager(address accessControlManager_)
setLimit
nonpayablefunction setLimit(uint256 _irrevocableLimit, uint256 _revocableLimit)
setMaxLoopsLimit
nonpayablefunction setMaxLoopsLimit(uint256 loopsLimit)
setStakedAt
nonpayablefunction setStakedAt(address[] users, uint256[] timestamps)
togglePause
nonpayablefunction togglePause()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateAlpha
nonpayablefunction updateAlpha(uint128 _alphaNumerator, uint128 _alphaDenominator)
updateMultipliers
nonpayablefunction updateMultipliers(address market, uint256 supplyMultiplier, uint256 borrowMultiplier)
updateScores
nonpayablefunction updateScores(address[] users)
xvsUpdated
nonpayablefunction xvsUpdated(address user)
events
AlphaUpdated
event AlphaUpdated(uint128 indexed oldNumerator, uint128 indexed oldDenominator, uint128 indexed newNumerator, uint128 newDenominator)
Burn
event Burn(address indexed user)
Initialized
event Initialized(uint8 version)
InterestClaimed
event InterestClaimed(address indexed user, address indexed market, uint256 amount)
MarketAdded
event MarketAdded(address indexed comptroller, address indexed market, uint256 supplyMultiplier, uint256 borrowMultiplier)
MaxLoopsLimitUpdated
event MaxLoopsLimitUpdated(uint256 oldMaxLoopsLimit, uint256 newmaxLoopsLimit)
Mint
event Mint(address indexed user, bool isIrrevocable)
MintLimitsUpdated
event MintLimitsUpdated(uint256 indexed oldIrrevocableLimit, uint256 indexed oldRevocableLimit, uint256 indexed newIrrevocableLimit, uint256 newRevocableLimit)
MultiplierUpdated
event MultiplierUpdated(address indexed market, uint256 indexed oldSupplyMultiplier, uint256 indexed oldBorrowMultiplier, uint256 newSupplyMultiplier, uint256 newBorrowMultiplier)
NewAccessControlManager
event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
StakedAtUpdated
event StakedAtUpdated(address indexed user, uint256 timestamp)
TokenUpgraded
event TokenUpgraded(address indexed user)
Unpaused
event Unpaused(address account)
UserScoreUpdated
event UserScoreUpdated(address indexed user)
errors
AssetAlreadyExists
error AssetAlreadyExists()
ExpTooLarge
error ExpTooLarge(int256 x)
IneligibleToClaim
error IneligibleToClaim()
InvalidAddress
error InvalidAddress()
InvalidAlphaArguments
error InvalidAlphaArguments()
InvalidBlocksPerYear
error InvalidBlocksPerYear()
InvalidComptroller
error InvalidComptroller()
InvalidFixedPoint
error InvalidFixedPoint()
InvalidFraction
error InvalidFraction(uint256 n, uint256 d)
InvalidLength
error InvalidLength()
InvalidLimit
error InvalidLimit()
InvalidTimeBasedConfiguration
error InvalidTimeBasedConfiguration()
InvalidTimestamp
error InvalidTimestamp()
InvalidVToken
error InvalidVToken()
LnNonRealResult
error LnNonRealResult(int256 x)
LnTooLarge
error LnTooLarge(int256 x)
MarketAlreadyExists
error MarketAlreadyExists()
MarketNotSupported
error MarketNotSupported()
MaxLoopsLimitExceeded
error MaxLoopsLimitExceeded(uint256 loopsLimit, uint256 requiredLoops)
NoScoreUpdatesRequired
error NoScoreUpdatesRequired()
Unauthorized
error Unauthorized(address sender, address calledContract, string methodSignature)
UserHasNoPrimeToken
error UserHasNoPrimeToken()
WaitMoreTime
error WaitMoreTime()
creation bytecode
0x61018060405234801561001157600080fd5b50604051615f00380380615f00833981016040819052610030916101ea565b80858115801561003e575080155b1561005c576040516302723dfb60e21b815260040160405180910390fd5b81801561006857508015155b156100865760405163ae0fcab360e01b815260040160405180910390fd5b81151560a05281610097578061009d565b6301e133805b608052816100b45761010760201b6125fb176100bf565b61010b60201b6125ff175b6001600160401b031660c05250506001600160a01b0380881660e0528616610100526101608490526101208390526101408290526100fb61010f565b5050505050505061025d565b4390565b4290565b600054610100900460ff161561017b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146101cc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b03811681146101e557600080fd5b919050565b600080600080600080600060e0888a03121561020557600080fd5b61020e886101ce565b965061021c602089016101ce565b955060408801519450606088015193506080880151925060a0880151915060c0880151801515811461024d57600080fd5b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051615bf8610308600039600081816103f00152818161107701528181612182015281816121ad01526121d5015260008181610ac301528181613416015261343f0152600081816105a40152612a180152600081816109330152612ebf01526000818161043f0152612ef901526000612132015260006108f80152600081816105cb01526113a60152615bf86000f3fe608060405234801561001057600080fd5b50600436106103e65760003560e01c80639f6506ce1161020a578063cdaa21b711610125578063e30c3978116100b8578063ef36bbde11610087578063ef36bbde14610a57578063f2fde38b14610a78578063f6ed201714610a8b578063fa6d5f1814610aab578063fe1006ad14610abe57600080fd5b8063e30c3978146109c5578063e4676f37146109d6578063e4860339146109e9578063ee6b13fc14610a2d57600080fd5b8063d88b9d2e116100f4578063d88b9d2e14610996578063da6ab4f8146109a0578063e18f8822146109aa578063e1d146fb146109bd57600080fd5b8063cdaa21b71461092e578063ce85361314610955578063cf329d1614610970578063d65bd2411461098357600080fd5b8063ba437c681161019d578063c3db3c361161016c578063c3db3c36146108e1578063c4ae3168146108eb578063c7ad0895146108f3578063c86d1a781461091a57600080fd5b8063ba437c68146108a8578063bc5dc4c3146108bb578063bd212c0e146108ce578063be26317e146108d857600080fd5b8063b1a250f2116101d9578063b1a250f2146107a2578063b4a0bdf3146107b5578063b7f2d258146107c6578063b9eb69f61461085257600080fd5b80639f6506ce14610765578063a15753dc1461076f578063afcff50f14610779578063b0772d0b1461078d57600080fd5b80635fe3b5671161030557806380d45a2d1161029857806389afcb441161026757806389afcb44146106945780638da5cb5b146106a75780638e8f294b146106b85780639198e515146107235780639565d3d21461073657600080fd5b806380d45a2d14610650578063856c3aa41461066357806388bead731461066d57806388d742c21461068157600080fd5b806379ba5097116102d457806379ba5097146105f55780637dafcd89146105fd5780637dc0d1d0146106105780637ef820701461062457600080fd5b80635fe3b5671461058d5780636426b4a71461059f5780636857249c146105c6578063715018a6146105ed57600080fd5b806337f23cd31161037d57806355d36c981161034c57806355d36c9814610549578063594a67ee1461055c5780635c975abb1461056f5780635d536d301461057a57600080fd5b806337f23cd3146104e757806338f6a434146104fa578063487b0dfb146105375780634e71d92d1461054157600080fd5b80631bffac89116103b95780631bffac891461048d578063207add91146104ae57806324e6baf2146104c157806329b6eca9146104d457600080fd5b80630104db1b146103eb5780630e32cb86146104255780631b3f8c5e1461043a5780631b9ce57514610479575b600080fd5b6104127f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6104386104333660046150ac565b610ae5565b005b6104617f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161041c565b61013754610461906001600160a01b031681565b61041261049b3660046150ac565b6101406020526000908152604090205481565b6104386104bc3660046150c9565b610af9565b6104386104cf366004615137565b610bb4565b6104386104e23660046150ac565b610d80565b6104386104f53660046150ac565b610e38565b6105276105083660046150ac565b6001600160a01b0316600090815261012d602052604090205460ff1690565b604051901515815260200161041c565b6104126101395481565b610438611044565b610438610557366004615179565b6110d3565b61043861056a3660046151ae565b61119e565b60c95460ff16610527565b6104126105883660046150ac565b611316565b61013f546001600160a01b0316610461565b6104127f000000000000000000000000000000000000000000000000000000000000000081565b6104127f000000000000000000000000000000000000000000000000000000000000000081565b6104386113d1565b6104386113e5565b61043861060b366004615228565b61145c565b61014254610461906001600160a01b031681565b61013654610638906001600160801b031681565b6040516001600160801b03909116815260200161041c565b61043861065e36600461527d565b6115e6565b6104126101315481565b61013854610461906001600160a01b031681565b61041261068f3660046150ac565b61162d565b6104386106a23660046150ac565b611649565b6033546001600160a01b0316610461565b6106f96106c63660046150ac565b61013360205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a00161041c565b6104386107313660046150ac565b611680565b610527610744366004615296565b61013a60209081526000928352604080842090915290825290205460ff1681565b61041261012f5481565b61041261013b5481565b61014354610461906001600160a01b031681565b610795611844565b60405161041c91906152c6565b6104386107b036600461532a565b6118a7565b6097546001600160a01b0316610461565b6107d96107d43660046153e4565b611abc565b60405161041c9190600061014082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b61088d610860366004615435565b61013460209081526000928352604080842090915290825290208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161041c565b6104126108b6366004615435565b611c76565b6104386108c9366004615463565b611c93565b61041261013c5481565b61041260fb5481565b61041261013d5481565b610438611fb1565b6105277f000000000000000000000000000000000000000000000000000000000000000081565b61014154610461906001600160a01b031681565b6104617f000000000000000000000000000000000000000000000000000000000000000081565b6101365461063890600160801b90046001600160801b031681565b61043861097e366004615435565b611ffa565b610412610991366004615435565b612012565b61041261012e5481565b6104126101305481565b6104386109b83660046154a9565b612027565b61041261212b565b6065546001600160a01b0316610461565b6104126109e43660046150ac565b61215e565b610a166109f73660046150ac565b61012d6020526000908152604090205460ff8082169161010090041682565b60408051921515835290151560208301520161041c565b610461610a3b3660046150ac565b61013e602052600090815260409020546001600160a01b031681565b610412610a653660046150ac565b6101326020526000908152604090205481565b610438610a863660046150ac565b612206565b610a9e610a993660046150ac565b612277565b60405161041c91906154dc565b6107d9610ab9366004615435565b6123b9565b6104127f000000000000000000000000000000000000000000000000000000000000000081565b610aed612603565b610af68161265d565b50565b610b376040518060400160405280601981526020017f7365744c696d69742875696e743235362c75696e74323536290000000000000081525061271b565b61012e54821080610b4a575061012f5481105b15610b685760405163e55fb50960e01b815260040160405180910390fd5b8161013054610131547f6c52f3e195bdc534883e903e0612c49261a466aacd492501870b0a0ac0b1835584604051610ba291815260200190565b60405180910390a46101305561013155565b61013d54600003610bd85760405163071a45dd60e31b815260040160405180910390fd5b61013b54600003610bfc5760405163071a45dd60e31b815260040160405180910390fd5b60005b81811015610d7b576000838383818110610c1b57610c1b615541565b9050602002016020810190610c3091906150ac565b6001600160a01b038116600090815261012d602052604090205490915060ff16610c6d57604051633aeb927b60e11b815260040160405180910390fd5b61013b54600090815261013a602090815260408083206001600160a01b038516845290915290205460ff1615610ca65750600101610bff565b610135805460005b81811015610cfe576000838281548110610cca57610cca615541565b6000918252602090912001546001600160a01b03169050610ceb85826127b5565b610cf58582612891565b50600101610cae565b5061013d60008154610d0f9061556d565b9091555061013b54600090815261013a602090815260408083206001600160a01b0387168085529252808320805460ff19166001908117909155905196019590917fa699df4aa8f89fc1f5408fe78ae114651f18b25ed1601680e4c70c15177d8b1b91a2505050610bff565b505050565b600054600290610100900460ff16158015610da2575060005460ff8083169116105b610dc75760405162461bcd60e51b8152600401610dbe90615584565b60405180910390fd5b6000805461014380546001600160a01b0319166001600160a01b03861617905561ff001961010060ff851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b6000610e438261296e565b90506000610e5082612a14565b6001600160a01b0384166000908152610132602090815260408083205461012d83529281902081518083019092525460ff808216158015808552610100909304909116151593830193909352939450919290610eaa575082155b15610f0c576001600160a01b03851660008181526101326020908152604080832083905551918252600080516020615b79833981519152910160405180910390a2806020015115610f0357610efe85612a4d565b61103d565b610efe85612aa5565b82158015610f1957508051155b8015610f2457508115155b15610f6b576001600160a01b03851660008181526101326020908152604080832083905551918252600080516020615b7983398151915291015b60405180910390a261103d565b81158015610f765750825b8015610f8157508051155b15610fc3576001600160a01b0385166000818152610132602090815260409182902042908190559151918252600080516020615b798339815191529101610f5e565b80518015610fce5750825b1561103d57610fdc85612a4d565b6001600160a01b03851660009081526101326020526040812054900361103d576001600160a01b0385166000818152610132602090815260409182902042908190559151918252600080516020615b79833981519152910160405180910390a25b5050505050565b3360009081526101326020526040812054908190036110755760405162c4e3d160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006110a082426155d2565b10156110bf5760405163beb98cab60e01b815260040160405180910390fd5b6110ca600033612c79565b610af633612d8a565b6110f46040518060600160405280602a8152602001615b4f602a913961271b565b6001600160a01b038316600090815261013360205260409020600481015460ff1661113257604051630ff2e4a960e31b815260040160405180910390fd5b61113b84611680565b6001810154815460408051868152602081018690526001600160a01b038816917f91e78a55b6df3a0eac1c12a64572a8c0faced385bafba688817f5ce6daa33537910160405180910390a482815560018101829055611198612e87565b50505050565b6111dc6040518060400160405280602081526020017f7365745374616b6564417428616464726573735b5d2c75696e743235365b5d2981525061271b565b8281146111fc5760405163251f56a160e21b815260040160405180910390fd5b60005b8381101561103d574283838381811061121a5761121a615541565b9050602002013511156112405760405163b7d0949760e01b815260040160405180910390fd5b82828281811061125257611252615541565b90506020020135610132600087878581811061127057611270615541565b905060200201602081019061128591906150ac565b6001600160a01b031681526020810191909152604001600020558484828181106112b1576112b1615541565b90506020020160208101906112c691906150ac565b6001600160a01b0316600080516020615b798339815191528484848181106112f0576112f0615541565b9050602002013560405161130691815260200190565b60405180910390a26001016111ff565b6101415460009081906001600160a01b031663a666642b61133685612ebb565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e91906155e5565b90506113ca817f00000000000000000000000000000000000000000000000000000000000000006155fe565b9392505050565b6113d9612603565b6113e36000612f7f565b565b60655433906001600160a01b031681146114535760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610dbe565b610af681612f7f565b61149260405180604001604052806015815260200174697373756528626f6f6c2c616464726573735b5d2960581b81525061271b565b82156115a75760005b8181101561119857600061012d60008585858181106114bc576114bc615541565b90506020020160208101906114d191906150ac565b6001600160a01b031681526020810191909152604001600020805490915060ff16801561150557508054610100900460ff16155b1561153e5761153984848481811061151f5761151f615541565b905060200201602081019061153491906150ac565b612f98565b61159e565b61156f600185858581811061155557611555615541565b905060200201602081019061156a91906150ac565b612c79565b61159e84848481811061158457611584615541565b905060200201602081019061159991906150ac565b612d8a565b5060010161149b565b60005b81811015611198576115c9600084848481811061155557611555615541565b6115de83838381811061158457611584615541565b6001016115aa565b6116246040518060400160405280601981526020017f7365744d61784c6f6f70734c696d69742875696e74323536290000000000000081525061271b565b610af681613048565b60006116376130e2565b6116418233613128565b90505b919050565b6116776040518060400160405280600d81526020016c6275726e28616464726573732960981b81525061271b565b610af681612aa5565b6001600160a01b038116600090815261013360205260409020600481015460ff166116be57604051630ff2e4a960e31b815260040160405180910390fd5b60006116c983612ebb565b61014154604051638aadf79960e01b81526001600160a01b0380841660048301529293509116908190638aadf79990602401600060405180830381600087803b15801561171557600080fd5b505af1158015611729573d6000803e3d6000fd5b505060405163fa7781ff60e01b81526001600160a01b038581166004830152600093508416915063fa7781ff90602401602060405180830381865afa158015611776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179a91906155e5565b6001600160a01b03841660009081526101406020526040812054919250906117c290836155d2565b90508060008190036117d75750505050505050565b6001600160a01b038516600090815261014060205260408120849055600387015415611821576003870154611814670de0b6b3a7640000846155fe565b61181e919061562b565b90505b80876002016000828254611835919061563f565b90915550505050505050505050565b606061013580548060200260200160405190810160405280929190818152602001828054801561189d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161187f575b5050505050905090565b600054610100900460ff16158080156118c75750600054600160ff909116105b806118e15750303b1580156118e1575060005460ff166001145b6118fd5760405162461bcd60e51b8152600401610dbe90615584565b6000805460ff191660011790558015611920576000805461ff0019166101001790555b6001600160a01b038b166119475760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038a1661196e5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0383166119955760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0385166119bc5760405163e6c4247b60e01b815260040160405180910390fd5b6119c6888861330b565b6001600160801b03878116600160801b02908916176101365561013880546001600160a01b03808d166001600160a01b0319928316179092556101398b905561013780548e8416908316179055600061013b55610141805488841690831617905561013f8054878416908316179055610142805492861692909116919091179055611a5086613351565b611a58613389565b611a6182613048565b611a696133b8565b8015611aaf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b611ac4615044565b6001600160a01b03808716600081815261013460209081526040808320948a1683529381528382206001015492825261013390529190912060030154611b0a91906155d2565b6040820152611b1882613412565b60808201819052600090611b2e9086868a613467565b805160a0840152602081015160c0840152604081015160e08401526060810151610100840152608081015161012084015290506000611b6c88612ebb565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615652565b60ff169050611bdd8160126155d2565b611be890600a615759565b8360a00151611bf791906155fe565b60a08401819052608084015161013654611c2592906001600160801b0380821691600160801b900416613775565b606084018190526040840151611c3b919061563f565b836040018181525050611c638886888660c001518760e001518860600151896040015161382d565b6020850152835250909695505050505050565b6000611c806130e2565b611c8a8383613128565b90505b92915050565b611cb46040518060600160405280602a8152602001615b99602a913961271b565b6001600160a01b038416611cdb576040516383aebebd60e01b815260040160405180910390fd5b61013f546001600160a01b03858116911614801590611d79575061014354604051637aee632d60e01b81526001600160a01b0386811660048301819052921690637aee632d90602401600060405180830381865afa158015611d41573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d699190810190615804565b604001516001600160a01b031614155b15611d97576040516383aebebd60e01b815260040160405180910390fd5b6001600160a01b038316600090815261013360205260409020600481015460ff1615611dd657604051630313b28560e01b815260040160405180910390fd5b604051638e8f294b60e01b81526001600160a01b03858116600483015260009190871690638e8f294b90602401602060405180830381865afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4491906158fa565b905080611e6457604051633d21810360e21b815260040160405180910390fd5b60006002830181905584835560018084018590556003840182905560048401805460ff19169091179055611e9786612ebb565b6001600160a01b03808216600090815261013e60205260409020549192501615611ed45760405163dc0d0aab60e01b815260040160405180910390fd5b6001600160a01b03808216600090815261013e6020526040812080549289166001600160a01b03199384168117909155610135805460018101825592527fdf37d27e88e3bd0b85262482997e409a463f5be0ebb19232abf994dd8474090d9091018054909216179055611f45612e87565b61013554611f5290613919565b856001600160a01b0316876001600160a01b03167f1322eaea77217179bf4ef6084dc2f48c897e0d5a6b8365213804360e4d8ba9a28787604051611fa0929190918252602082015260400190565b60405180910390a350505050505050565b611fdf6040518060400160405280600d81526020016c746f67676c655061757365282960981b81525061271b565b60c95460ff1615611ff2576113e361394a565b6113e36133b8565b61200482826127b5565b61200e8282612891565b5050565b600061201d83611680565b611c8a8383613983565b6120656040518060400160405280601c81526020017f757064617465416c7068612875696e743132382c75696e74313238290000000081525061271b565b61206f828261330b565b610136546040516001600160801b03838116825284811692600160801b81048216929116907f9122c3fdea272423a0586803b53902139919baf05be731f04724ef8f363d378d9060200160405180910390a46001600160801b03818116600160801b0290831617610136556101355460005b818110156121225761211a610135828154811061210057612100615541565b6000918252602090912001546001600160a01b0316611680565b6001016120e1565b50610d7b612e87565b60006121597f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b905090565b6001600160a01b038116600090815261013260205260408120548082036121a757507f000000000000000000000000000000000000000000000000000000000000000092915050565b428190037f00000000000000000000000000000000000000000000000000000000000000008110156121fc577f0000000000000000000000000000000000000000000000000000000000000000039392505050565b5060009392505050565b61220e612603565b606580546001600160a01b0383166001600160a01b0319909116811790915561223f6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6101358054606091908067ffffffffffffffff81111561229957612299615765565b6040519080825280602002602001820160405280156122e457816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816122b75790505b50925060005b818110156123b157600083828154811061230657612306615541565b60009182526020822001546001600160a01b031691506123268288612012565b6001600160a01b03808416600081815261013460209081526040808320948d168352938152908390205483516060810190945291835292935091810161236b85612ebb565b6001600160a01b03168152602001612383838561563f565b81525087858151811061239857612398615541565b60200260200101819052508360010193505050506122ea565b505050919050565b6123c1615044565b6040516395dd919360e01b81526001600160a01b03838116600483015284916000918316906395dd919390602401602060405180830381865afa15801561240c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243091906155e5565b90506000826001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249691906155e5565b6040516370a0823160e01b81526001600160a01b0387811660048301529192506000918516906370a0823190602401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250691906155e5565b90506000670de0b6b3a764000061251d83856155fe565b612527919061562b565b6001600160a01b03808a16600081815261013460209081526040808320948d1683529381528382206001015460608c01529181526101339091528190206003015490880152905061257f61257a8861296e565b613412565b6080870181905260009061259590868489613467565b805160a0890152602081015160c0890181905260408083015160e08b018190526060808501516101008d015260808501516101208d01528b0151918b01519394506125e7938d9387938b93919261382d565b602089015287525094979650505050505050565b4390565b4290565b6033546001600160a01b031633146113e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dbe565b6001600160a01b0381166126c15760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164604482015264647265737360d81b6064820152608401610dbe565b609780546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa09101610e2c565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061274e9033908690600401615943565b602060405180830381865afa15801561276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278f91906158fa565b90508061200e57333083604051634a3fa29360e01b8152600401610dbe93929190615967565b6001600160a01b0381166000908152610133602052604090206004015460ff1615806127fb57506001600160a01b038216600090815261012d602052604090205460ff16155b15612804575050565b61280d81611680565b6128178183613983565b6001600160a01b038083166000908152610134602090815260408083209387168352929052908120805490919061284f90849061563f565b90915550506001600160a01b03908116600090815261013360209081526040808320600290810154610134845282852096909516845294909152902090910155565b6001600160a01b038116600090815261013360205260409020600481015460ff1615806128d857506001600160a01b038316600090815261012d602052604090205460ff16155b156128e257505050565b60006128ee8385613a1a565b6001600160a01b03808516600090815261013460209081526040808320938916835292905220600101546003840154919250829161292c91906155d2565b612936919061563f565b6003909201919091556001600160a01b0391821660009081526101346020908152604080832095909416825293909352912060010155565b6101375461013854610139546040516398e1b31b60e01b81526001600160a01b03928316600482015260248101919091528382166044820152600092839283929116906398e1b31b90606401606060405180830381865afa1580156129d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fb9190615993565b92505091508082612a0c91906155d2565b949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000008210612a4557506001919050565b506000919050565b610135805460005b81811015611198576000838281548110612a7157612a71615541565b6000918252602090912001546001600160a01b03169050612a9285826127b5565b612a9c8582612891565b50600101612a55565b6001600160a01b038116600090815261012d602090815260409182902082518084019093525460ff808216151580855261010090920416151591830191909152612b0257604051633aeb927b60e11b815260040160405180910390fd5b610135805460005b81811015612bdb576000838281548110612b2657612b26615541565b6000918252602090912001546001600160a01b03169050612b4786826127b5565b6001600160a01b03808216600081815261013460209081526040808320948b1683529381528382206001015492825261013390529190912060030154612b8d91906155d2565b6001600160a01b039182166000908152610133602090815260408083206003019390935561013481528282209389168252929092528120600180820183905560029091019190915501612b0a565b50826020015115612bff5761012e60008154612bf69061556d565b90915550612c14565b61012f60008154612c0f9061556d565b909155505b6001600160a01b038416600090815261012d60205260409020805461ffff19169055612c3f84613daa565b6040516001600160a01b038516907fe22de1457cb61fb61b60176bc4235a9abd19466126b46692bc14fc573f09924990600090a250505050565b6001600160a01b038116600090815261012d60205260409020805460ff1615612cb45760405162c4e3d160e01b815260040160405180910390fd5b8054831580156101000261ffff19909216919091176001178255612ceb5761012e60008154612ce2906159c1565b90915550612d00565b61012f60008154612cfb906159c1565b909155505b6101315461012e541180612d1957506101305461012f54115b15612d375760405163e55fb50960e01b815260040160405180910390fd5b612d4082613e1e565b816001600160a01b03167fdd032f28700d4e4b1719b8fa26918a7d68608b4e36def571ce5fe7a3ecd69f4584604051612d7d911515815260200190565b60405180910390a2505050565b610135805460005b81811015611198576000838281548110612dae57612dae615541565b6000918252602090912001546001600160a01b03169050612dce81611680565b6001600160a01b038082166000908152610133602090815260408083206002908101546101348452828520958b1685529490925282200191909155612e138287613a1a565b6001600160a01b03808416600081815261013460209081526040808320948c1683529381528382206001018590559181526101339091522060030154909150612e5d90829061563f565b6001600160a01b039092166000908152610133602052604090206003019190915550600101612d92565b61013b8054906000612e98836159c1565b919050555061012f5461012e54612eaf919061563f565b61013c81905561013d55565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612f1d57507f0000000000000000000000000000000000000000000000000000000000000000919050565b816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f5b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164191906159da565b606580546001600160a01b0319169055610af681613e5c565b6001600160a01b038116600090815261012d60205260408120805461ff00191661010017815561012e805491929091612fd0906159c1565b9091555061012f8054600090612fe59061556d565b909155506101315461012e5411156130105760405163e55fb50960e01b815260040160405180910390fd5b6040516001600160a01b038316907f5272e69bcef8da96614ac4a5d1e95ca02c35ea627bf7ecf389ec88d8d78b86bb90600090a25050565b60fb5481116130a45760405162461bcd60e51b815260206004820152602260248201527f436f6d7074726f6c6c65723a20496e76616c6964206d61784c6f6f70734c696d6044820152611a5d60f21b6064820152608401610dbe565b60fb80549082905560408051828152602081018490527fc2d09fef144f7c8a86f71ea459f8fc17f675768eb1ae369cbd77fb31d467aafa9101610e2c565b60c95460ff16156113e35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dbe565b6000806131358484612012565b6001600160a01b0380861660009081526101346020908152604080832093881683529290522054909150613169908261563f565b6001600160a01b038581166000908152610133602090815260408083206002908101546101348452828520958a16855294909252822090810192909255908190559091506131b685612ebb565b6040516370a0823160e01b815230600482015290915081906001600160a01b038216906370a0823190602401602060405180830381865afa1580156131ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322391906155e5565b8311156132a0576001600160a01b03828116600090815261014060205260408082209190915561014154905163192e7a7b60e01b8152838316600482015291169063192e7a7b90602401600060405180830381600087803b15801561328757600080fd5b505af115801561329b573d6000803e3d6000fd5b505050505b6132b46001600160a01b0382168685613eae565b856001600160a01b0316856001600160a01b03167fc7edf5cfe443c04a10a60ff6084c847114348c55b257a01d62700326219adbba856040516132f991815260200190565b60405180910390a35090949350505050565b806001600160801b0316826001600160801b031610158061333357506001600160801b038216155b1561200e57604051630381eb6d60e61b815260040160405180910390fd5b600054610100900460ff166133785760405162461bcd60e51b8152600401610dbe906159f7565b613380613f00565b610af681613f2f565b600054610100900460ff166133b05760405162461bcd60e51b8152600401610dbe906159f7565b6113e3613f56565b6133c06130e2565b60c9805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586133f53390565b6040516001600160a01b03909116815260200160405180910390a1565b60007f000000000000000000000000000000000000000000000000000000000000000082111561346357507f0000000000000000000000000000000000000000000000000000000000000000919050565b5090565b6134996040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6101375460408051631ac5701b60e11b815290516000926001600160a01b03169163358ae0369160048083019260209291908290030181865afa1580156134e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350891906159da565b610142546040516341976e0960e01b81526001600160a01b038084166004830152929350600092909116906341976e0990602401602060405180830381865afa158015613559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357d91906155e5565b6001600160a01b03851660009081526101336020526040902060010154909150670de0b6b3a76400009081906135b3908a6155fe565b6135bd919061562b565b6135c790836155fe565b6135d1919061562b565b60808401526001600160a01b03841660009081526101336020526040902054670de0b6b3a7640000908190613606908a6155fe565b613610919061562b565b61361a90836155fe565b613624919061562b565b60608401526101425460405163fc57d4df60e01b81526001600160a01b038681166004830152600092169063fc57d4df90602401602060405180830381865afa158015613675573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369991906155e5565b90506000670de0b6b3a76400006136b088846155fe565b6136ba919061562b565b90506000670de0b6b3a76400006136d18a856155fe565b6136db919061562b565b90508560600151821061371557816000036136f7576000613712565b8186606001518961370891906155fe565b613712919061562b565b97505b8560800151811061374d578060000361372f57600061374a565b8086608001518a61374091906155fe565b61374a919061562b565b98505b613757898961563f565b86525050505060208201939093526040810193909352509092915050565b6000841580613782575083155b1561378f57506000612a0c565b83850361379d575083612a0c565b8385106000816137b6576137b18688613f89565b6137c0565b6137c08787613f89565b905060006137fb6137d086613ff1565b6137d988613ff1565b6137e28561405b565b6137ec9190615a42565b6137f69190615a72565b614066565b905082156138175761380d8782614071565b9350505050612a0c565b61382187826140a3565b98975050505050505050565b600080826000036138435750600090508061390d565b60008361384f8b611316565b61385990876155fe565b613863919061562b565b90506000613871878961563f565b9050806000036138895760008093509350505061390d565b6127106000808361389a8c876155fe565b6138a4919061562b565b9150836138b18b876155fe565b6138bb919061562b565b90508c156138dd578c6138ce84846155fe565b6138d8919061562b565b6138e0565b60005b96508b15613902578b6138f384836155fe565b6138fd919061562b565b613905565b60005b955050505050505b97509795505050505050565b60fb54811115610af65760fb5460405163792bfb1b60e11b8152600481019190915260248101829052604401610dbe565b6139526140d5565b60c9805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336133f5565b6001600160a01b0380831660008181526101346020908152604080832094861683529381528382208451606081018652815481526001820154818401526002918201548187018190529484526101339092529382209093015490929183916139eb91906155d2565b6020830151909150670de0b6b3a7640000613a0682846155fe565b613a10919061562b565b9695505050505050565b600080613a2961257a8461296e565b6040516395dd919360e01b81526001600160a01b0385811660048301529192508591600091908316906395dd919390602401602060405180830381865afa158015613a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9c91906155e5565b90506000826001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0291906155e5565b6040516370a0823160e01b81526001600160a01b0388811660048301529192506000918516906370a0823190602401602060405180830381865afa158015613b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7291906155e5565b90506000670de0b6b3a7640000613b8983856155fe565b613b93919061562b565b9050600061013760009054906101000a90046001600160a01b03166001600160a01b031663358ae0366040518163ffffffff1660e01b8152600401602060405180830381865afa158015613beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0f91906159da565b6101425460405163b62cad6960e01b81526001600160a01b03808416600483015292935091169063b62cad6990602401600060405180830381600087803b158015613c5957600080fd5b505af1158015613c6d573d6000803e3d6000fd5b5050610142546040516396e85ced60e01b81526001600160a01b038e8116600483015290911692506396e85ced9150602401600060405180830381600087803b158015613cb957600080fd5b505af1158015613ccd573d6000803e3d6000fd5b505050506000613cdf8887858e613467565b90506000613cec8c612ebb565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4d9190615652565b60ff169050613d5d8160126155d2565b613d6890600a615759565b8251613d7491906155fe565b80835261013654613d9a918b916001600160801b0380821691600160801b900416613775565b9c9b505050505050505050505050565b61013c5415613dc85761013c60008154613dc39061556d565b909155505b61013d5415801590613e02575061013b54600090815261013a602090815260408083206001600160a01b038516845290915290205460ff16155b15610af65761013d60008154613e179061556d565b9091555050565b61013c5415610af65761013b54600090815261013a602090815260408083206001600160a01b03851684529091529020805460ff1916600117905550565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d7b90849061411e565b600054610100900460ff16613f275760405162461bcd60e51b8152600401610dbe906159f7565b6113e36141f3565b600054610100900460ff16610aed5760405162461bcd60e51b8152600401610dbe906159f7565b600054610100900460ff16613f7d5760405162461bcd60e51b8152600401610dbe906159f7565b60c9805460ff19169055565b6000613f9483613ff1565b613f9d83613ff1565b1215613fc6576040516360c1ae3960e01b81526004810184905260248101839052604401610dbe565b613fcf82613ff1565b6001607f1b613fdd85613ff1565b613fe79190615a42565b611c8a9190615a72565b60006001600160ff1b038211156134635760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610dbe565b600061164182614223565b600061164182614810565b60008082121561409457604051639603648160e01b815260040160405180910390fd5b6001607f1b82613fdd85613ff1565b6000808212156140c657604051639603648160e01b815260040160405180910390fd5b816001607f1b613fdd85613ff1565b60c95460ff166113e35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610dbe565b6000614173826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614f219092919063ffffffff16565b905080516000148061419457508080602001905181019061419491906158fa565b610d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610dbe565b600054610100900460ff1661421a5760405162461bcd60e51b8152600401610dbe906159f7565b6113e333612f7f565b60006001607f1b82131561424d57604051633ce23a3d60e11b815260048101839052602401610dbe565b60008213614271576040516330ecaa3d60e21b815260048101839052602401610dbe565b6001607f1b820361428457506000919050565b640733048c5a821361429e576116416101ff607c1b615aa0565b60008060006a01c8464f7616476000000085136142ec576142c3600160841b85615abc565b93506a01c8464f761647600000006142df6001607f1b87615a42565b6142e99190615a72565b94505b6cf1aaddd7742e9000000000000085136143395761430e600160831b85615abc565b93506cf1aaddd7742e9000000000000061432c6001607f1b87615a42565b6143369190615a72565b94505b6615fc21041027af603f1b851361438057614358600160821b85615abc565b93506615fc21041027af603f1b6143736001607f1b87615a42565b61437d9190615a72565b94505b660960aadc109e7b60461b85136143c75761439f600160811b85615abc565b9350660960aadc109e7b60461b6143ba6001607f1b87615a42565b6143c49190615a72565b94505b660454aaa8efe073604a1b851361440e576143e6600160801b85615abc565b9350660454aaa8efe073604a1b6144016001607f1b87615a42565b61440b9190615a72565b94505b6602f16ac6c59de7604c1b85136144555761442d6001607f1b85615abc565b93506602f16ac6c59de7604c1b6144486001607f1b87615a42565b6144529190615a72565b94505b6609b4597e37cb05604b1b851361449c576144746001607e1b85615abc565b93506609b4597e37cb05604b1b61448f6001607f1b87615a42565b6144999190615a72565b94505b6618ebef9eac820b604a1b85136144e3576144bb6001607d1b85615abc565b93506618ebef9eac820b604a1b6144d66001607f1b87615a42565b6144e09190615a72565b94505b6f70f5a893b608861e1f58934f97aea57d8513614536576145086001607c1b85615abc565b93506f70f5a893b608861e1f58934f97aea57d6145296001607f1b87615a42565b6145339190615a72565b94505b6145446001607f1b86615abc565b92508291506001607f1b6145588380615a42565b6145629190615a72565b9050600160801b6145738482615abc565b61457d9084615a42565b6145879190615a72565b6145919085615ae3565b93506001607f1b6145a28284615a42565b6145ac9190615a72565b9150600160811b6145cd846faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa615abc565b6145d79084615a42565b6145e19190615a72565b6145eb9085615ae3565b93506001607f1b6145fc8284615a42565b6146069190615a72565b9150600360801b614627846f99999999999999999999999999999999615abc565b6146319084615a42565b61463b9190615a72565b6146459085615ae3565b93506001607f1b6146568284615a42565b6146609190615a72565b9150600160821b614681846f92492492492492492492492492492492615abc565b61468b9084615a42565b6146959190615a72565b61469f9085615ae3565b93506001607f1b6146b08284615a42565b6146ba9190615a72565b9150600560801b6146db846f8e38e38e38e38e38e38e38e38e38e38e615abc565b6146e59084615a42565b6146ef9190615a72565b6146f99085615ae3565b93506001607f1b61470a8284615a42565b6147149190615a72565b9150600360811b614735846f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b615abc565b61473f9084615a42565b6147499190615a72565b6147539085615ae3565b93506001607f1b6147648284615a42565b61476e9190615a72565b9150600760801b61478f846f89d89d89d89d89d89d89d89d89d89d89615abc565b6147999084615a42565b6147a39190615a72565b6147ad9085615ae3565b93506001607f1b6147be8284615a42565b6147c89190615a72565b9150600160831b6147e9846f88888888888888888888888888888888615abc565b6147f39084615a42565b6147fd9190615a72565b6148079085615ae3565b95945050505050565b60006148206101ff607c1b615aa0565b82121561482f57506000919050565b8160000361484257506001607f1b919050565b600082131561486757604051631086170d60e01b815260048101839052602401610dbe565b6000806148786001607c1b85615b0b565b91508190506001607f1b61488c8280615a42565b6148969190615a72565b90506148aa816710e1b3be415a0000615a42565b6148b49084615ae3565b92506001607f1b6148c58383615a42565b6148cf9190615a72565b90506148e3816705a0913f6b1e0000615a42565b6148ed9084615ae3565b92506001607f1b6148fe8383615a42565b6149089190615a72565b905061491c81670168244fdac78000615a42565b6149269084615ae3565b92506001607f1b6149378383615a42565b6149419190615a72565b905061495481664807432bc18000615a42565b61495e9084615ae3565b92506001607f1b61496f8383615a42565b6149799190615a72565b905061498c81660c0135dca04000615a42565b6149969084615ae3565b92506001607f1b6149a78383615a42565b6149b19190615a72565b90506149c4816601b707b1cdc000615a42565b6149ce9084615ae3565b92506001607f1b6149df8383615a42565b6149e99190615a72565b90506149fb816536e0f639b800615a42565b614a059084615ae3565b92506001607f1b614a168383615a42565b614a209190615a72565b9050614a3281650618fee9f800615a42565b614a3c9084615ae3565b92506001607f1b614a4d8383615a42565b614a579190615a72565b9050614a6881649c197dcc00615a42565b614a729084615ae3565b92506001607f1b614a838383615a42565b614a8d9190615a72565b9050614a9e81640e30dce400615a42565b614aa89084615ae3565b92506001607f1b614ab98383615a42565b614ac39190615a72565b9050614ad48164012ebd1300615a42565b614ade9084615ae3565b92506001607f1b614aef8383615a42565b614af99190615a72565b9050614b09816317499f00615a42565b614b139084615ae3565b92506001607f1b614b248383615a42565b614b2e9190615a72565b9050614b3e816301a9d480615a42565b614b489084615ae3565b92506001607f1b614b598383615a42565b614b639190615a72565b9050614b7281621c6380615a42565b614b7c9084615ae3565b92506001607f1b614b8d8383615a42565b614b979190615a72565b9050614ba6816201c638615a42565b614bb09084615ae3565b92506001607f1b614bc18383615a42565b614bcb9190615a72565b9050614bd981611ab8615a42565b614be39084615ae3565b92506001607f1b614bf48383615a42565b614bfe9190615a72565b9050614c0c8161017c615a42565b614c169084615ae3565b92506001607f1b614c278383615a42565b614c319190615a72565b9050614c3e816014615a42565b614c489084615ae3565b92506001607f1b614c598383615a42565b614c639190615a72565b9050614c70816001615a42565b614c7a9084615ae3565b92506001607f1b82614c946721c3677c82b4000086615a72565b614c9e9190615ae3565b614ca89190615ae3565b9250614cb384615aa0565b9350600160841b841615614cf9577243cbaf42a000812488fc5c220ad7b97bf6e99e614cec6cf1aaddd7742e56d32fb9f9974485615a42565b614cf69190615a72565b92505b600160831b841615614d3e577105d27a9f51c31b7c2f8038212a0574779991614d316e0afe10820813d65dfe6a33c07f738f85615a42565b614d3b9190615a72565b92505b600160821b841615614d8357701b4c902e273a58678d6d3bfdb93db96d02614d766f02582ab704279e8efd15e0265855c47a85615a42565b614d809190615a72565b92505b600160811b841615614dc8577003b1cc971a9bb5b9867477440d6d157750614dbb6f1152aaa3bf81cb9fdb76eae12d02957185615a42565b614dc59190615a72565b92505b600160801b841615614e0d5770015bf0a8b1457695355fb8ac404e7a79e3614e006f2f16ac6c59de6f8d5d6f63c1482a7c8685615a42565b614e0a9190615a72565b92505b6001607f1b841615614e51576fd3094c70f034de4b96ff7d5b6f99fcd8614e446f4da2cbf1be5827f9eb3ad1aa9866ebb385615a42565b614e4e9190615a72565b92505b6001607e1b841615614e95576fa45af1e1f40c333b3de1db4dd55f29a7614e886f63afbe7ab2082ba1a0ae5e4eb1b479dc85615a42565b614e929190615a72565b92505b6001607d1b841615614ed9576f910b022db7ae67ce76b441c27035c6a1614ecc6f70f5a893b608861e1f58934f97aea57d85615a42565b614ed69190615a72565b92505b6001607c1b841615614f1a576f88415abbe9a76bead8d00cf112e4d4a8614f106f783eafef1c0a8f3978c7f81824d62ebf85615a42565b612a0c9190615a72565b5050919050565b6060612a0c848460008585600080866001600160a01b03168587604051614f489190615b1f565b60006040518083038185875af1925050503d8060008114614f85576040519150601f19603f3d011682016040523d82523d6000602084013e614f8a565b606091505b5091509150614f9b87838387614fa6565b979650505050505050565b6060831561501557825160000361500e576001600160a01b0385163b61500e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dbe565b5081612a0c565b612a0c838381511561502a5781518083602001fd5b8060405162461bcd60e51b8152600401610dbe9190615b3b565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610af657600080fd5b6000602082840312156150be57600080fd5b81356113ca81615097565b600080604083850312156150dc57600080fd5b50508035926020909101359150565b60008083601f8401126150fd57600080fd5b50813567ffffffffffffffff81111561511557600080fd5b6020830191508360208260051b850101111561513057600080fd5b9250929050565b6000806020838503121561514a57600080fd5b823567ffffffffffffffff81111561516157600080fd5b61516d858286016150eb565b90969095509350505050565b60008060006060848603121561518e57600080fd5b833561519981615097565b95602085013595506040909401359392505050565b600080600080604085870312156151c457600080fd5b843567ffffffffffffffff808211156151dc57600080fd5b6151e8888389016150eb565b9096509450602087013591508082111561520157600080fd5b5061520e878288016150eb565b95989497509550505050565b8015158114610af657600080fd5b60008060006040848603121561523d57600080fd5b83356152488161521a565b9250602084013567ffffffffffffffff81111561526457600080fd5b615270868287016150eb565b9497909650939450505050565b60006020828403121561528f57600080fd5b5035919050565b600080604083850312156152a957600080fd5b8235915060208301356152bb81615097565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156153075783516001600160a01b0316835292840192918401916001016152e2565b50909695505050505050565b80356001600160801b038116811461164457600080fd5b6000806000806000806000806000806101408b8d03121561534a57600080fd5b8a3561535581615097565b995060208b013561536581615097565b985060408b0135975061537a60608c01615313565b965061538860808c01615313565b955060a08b013561539881615097565b945060c08b01356153a881615097565b935060e08b01356153b881615097565b92506101008b01356153c981615097565b809250506101208b013590509295989b9194979a5092959850565b600080600080600060a086880312156153fc57600080fd5b853561540781615097565b9450602086013561541781615097565b94979496505050506040830135926060810135926080909101359150565b6000806040838503121561544857600080fd5b823561545381615097565b915060208301356152bb81615097565b6000806000806080858703121561547957600080fd5b843561548481615097565b9350602085013561549481615097565b93969395505050506040820135916060013590565b600080604083850312156154bc57600080fd5b6154c583615313565b91506154d360208401615313565b90509250929050565b602080825282518282018190526000919060409081850190868401855b8281101561553457815180516001600160a01b03908116865287820151168786015285015185850152606090930192908501906001016154f9565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008161557c5761557c615557565b506000190190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b81810381811115611c8d57611c8d615557565b6000602082840312156155f757600080fd5b5051919050565b8082028115828204841417611c8d57611c8d615557565b634e487b7160e01b600052601260045260246000fd5b60008261563a5761563a615615565b500490565b80820180821115611c8d57611c8d615557565b60006020828403121561566457600080fd5b815160ff811681146113ca57600080fd5b600181815b808511156156b057816000190482111561569657615696615557565b808516156156a357918102915b93841c939080029061567a565b509250929050565b6000826156c757506001611c8d565b816156d457506000611c8d565b81600181146156ea57600281146156f457615710565b6001915050611c8d565b60ff84111561570557615705615557565b50506001821b611c8d565b5060208310610133831016604e8410600b8410161715615733575081810a611c8d565b61573d8383615675565b806000190482111561575157615751615557565b029392505050565b6000611c8a83836156b8565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561579e5761579e615765565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156157cd576157cd615765565b604052919050565b60005b838110156157f05781810151838201526020016157d8565b50506000910152565b805161164481615097565b6000602080838503121561581757600080fd5b825167ffffffffffffffff8082111561582f57600080fd5b9084019060a0828703121561584357600080fd5b61584b61577b565b82518281111561585a57600080fd5b8301601f8101881361586b57600080fd5b80518381111561587d5761587d615765565b61588f601f8201601f191687016157a4565b935080845288868284010111156158a557600080fd5b6158b4818786018885016157d5565b50508181526158c48484016157f9565b848201526158d4604084016157f9565b604082015260608301516060820152608083015160808201528094505050505092915050565b60006020828403121561590c57600080fd5b81516113ca8161521a565b6000815180845261592f8160208601602086016157d5565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090612a0c90830184615917565b6001600160a01b0384811682528316602082015260606040820181905260009061480790830184615917565b6000806000606084860312156159a857600080fd5b8351925060208401519150604084015190509250925092565b6000600182016159d3576159d3615557565b5060010190565b6000602082840312156159ec57600080fd5b81516113ca81615097565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80820260008212600160ff1b84141615615a5e57615a5e615557565b8181058314821517611c8d57611c8d615557565b600082615a8157615a81615615565b600160ff1b821460001984141615615a9b57615a9b615557565b500590565b6000600160ff1b8201615ab557615ab5615557565b5060000390565b8181036000831280158383131683831282161715615adc57615adc615557565b5092915050565b8082018281126000831280158216821582161715615b0357615b03615557565b505092915050565b600082615b1a57615b1a615615565b500790565b60008251615b318184602087016157d5565b9190910192915050565b602081526000611c8a602083018461591756fe7570646174654d756c7469706c6965727328616464726573732c75696e743235362c75696e743235362909d2594e8892daceca055f74be758146a8b8b1167444d0b4ccb96e74168198cc6164644d61726b657428616464726573732c616464726573732c75696e743235362c75696e7432353629a2646970667358221220d7842351882c76ed9cd16c268489fd8f3a58a0b4e004c3ca395a20eaf26d410a64736f6c63430008190033000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000a07c5b74c9b40447a954e1466938b865b6bbea36000000000000000000000000000000000000000000000000000000000140cd00000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000152d02c7e14af68000000000000000000000000000000000000000000000000000000000000000000000