0 txs
12.1k calls
constructor
No constructor.
functions
batchVerifyMerkleTree
purefunction batchVerifyMerkleTree(tuple[] _marketTradeData, bytes32[] _rootPerGame) pure
calculateCapToBeUsed
viewfunction calculateCapToBeUsed(bytes32 _gameId, uint16 _sportId, uint16 _typeId, uint24 _playerId, int24 _line, uint256 _maturity, bool _isLive) view returns (uint256 cap)
calculateTotalRiskOnGame
viewfunction calculateTotalRiskOnGame(bytes32 _gameId, uint16 _sportId, uint256 _maturity) view returns (uint256 totalRisk)
capPerMarket
viewfunction capPerMarket(bytes32, uint256, uint256, int256) view returns (uint256)
capPerSport
viewfunction capPerSport(uint256) view returns (uint256)
capPerSportAndType
viewfunction capPerSportAndType(uint256, uint256) view returns (uint256)
capPerSportChild
viewfunction capPerSportChild(uint256) view returns (uint256)
checkLimits
viewfunction checkLimits(uint256 _buyInAmount, uint256 _totalQuote, uint256 _payout, uint256 _expectedPayout, uint256 _additionalSlippage, uint256 _ticketSize) view
checkRisks
viewfunction checkRisks(tuple[] _tradeData, uint256 _buyInAmount, bool _isLive, uint8 _systemBetDenominator) view returns (uint8 riskStatus, bool[] isMarketOutOfLiquidity)
combiningPerSportEnabled
viewfunction combiningPerSportEnabled(uint256) view returns (bool)
DEFAULT_DYNAMIC_LIQUIDITY_CUTOFF_DIVIDER
viewfunction DEFAULT_DYNAMIC_LIQUIDITY_CUTOFF_DIVIDER() view returns (uint256)
defaultCap
viewfunction defaultCap() view returns (uint256)
defaultLiveCapDivider
viewfunction defaultLiveCapDivider() view returns (uint256)
defaultRiskMultiplier
viewfunction defaultRiskMultiplier() view returns (uint256)
dynamicLiquidityCutoffDividerPerSport
viewfunction dynamicLiquidityCutoffDividerPerSport(uint256) view returns (uint256)
dynamicLiquidityCutoffTimePerSport
viewfunction dynamicLiquidityCutoffTimePerSport(uint256) view returns (uint256)
expiryDuration
viewfunction expiryDuration() view returns (uint256)
generateCombinations
purefunction generateCombinations(uint8 n, uint8 k) pure returns (uint8[][])
getMaxSystemBetPayout
viewfunction getMaxSystemBetPayout(tuple[] _tradeData, uint8 _systemBetDenominator, uint256 _buyInAmount, uint256 _addedPayoutPercentage) view returns (uint256 systemBetPayout, uint256 systemBetQuote)
getRiskData
viewfunction getRiskData(uint256[] _sportIds, uint256[] _typeIds) view returns (tuple[] riskData)
getSGPCombinationRisk
viewfunction getSGPCombinationRisk(tuple[] trades) view returns (uint256)
getSGPHash
purefunction getSGPHash(tuple[] trades) pure returns (bytes32)
isSportIdFuture
viewfunction isSportIdFuture(uint16) view returns (bool)
lastPauseTime
viewfunction lastPauseTime() view returns (uint256)
liveCapDividerPerSport
viewfunction liveCapDividerPerSport(uint256) view returns (uint256)
liveTradingPerSportAndTypeEnabled
viewfunction liveTradingPerSportAndTypeEnabled(uint256, uint256) view returns (bool)
manager
viewfunction manager() view returns (address)
maxAllowedSystemCombinations
viewfunction maxAllowedSystemCombinations() view returns (uint256)
maxCap
viewfunction maxCap() view returns (uint256)
maxRiskMultiplier
viewfunction maxRiskMultiplier() view returns (uint256)
maxSupportedAmount
viewfunction maxSupportedAmount() view returns (uint256)
maxSupportedOdds
viewfunction maxSupportedOdds() view returns (uint256)
maxTicketSize
viewfunction maxTicketSize() view returns (uint256)
minBuyInAmount
viewfunction minBuyInAmount() view returns (uint256)
minimalTimeLeftToMaturity
viewfunction minimalTimeLeftToMaturity() view returns (uint256)
nominatedOwner
viewfunction nominatedOwner() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
resultManager
viewfunction resultManager() view returns (address)
riskMultiplierPerGame
viewfunction riskMultiplierPerGame(bytes32) view returns (uint256)
riskMultiplierPerSport
viewfunction riskMultiplierPerSport(uint256) view returns (uint256)
riskPerMarketTypeAndPosition
viewfunction riskPerMarketTypeAndPosition(bytes32, uint256, uint256, uint256) view returns (int256)
sgpCapDivider
viewfunction sgpCapDivider() view returns (uint256)
sgpOnSportIdEnabled
viewfunction sgpOnSportIdEnabled(uint16) view returns (bool)
sgpRiskPerCombination
viewfunction sgpRiskPerCombination(bytes32) view returns (uint256)
sgpSpentOnGame
viewfunction sgpSpentOnGame(bytes32) view returns (uint256)
spentOnGame
viewfunction spentOnGame(bytes32) view returns (uint256)
sportsAMM
viewfunction sportsAMM() view returns (address)
verifyMerkleTree
purefunction verifyMerkleTree(tuple _marketTradeData, bytes32 _rootPerGame) pure
acceptOwnership
nonpayablefunction acceptOwnership()
checkAndUpdateRisks
nonpayablefunction checkAndUpdateRisks(tuple[] _tradeData, uint256 _buyInAmount, uint256 _payout, bool _isLive, uint8 _systemBetDenominator, bool _isSGP)
initialize
nonpayablefunction initialize(address _owner, address _manager, address _resultManager, uint256 _defaultCap, uint256 _defaultRiskMultiplier, uint256 _maxCap, uint256 _maxRiskMultiplier)
initNonReentrant
nonpayablefunction initNonReentrant()
nominateNewOwner
nonpayablefunction nominateNewOwner(address _owner)
setBatchLiveTradingPerSportAndTypeEnabled
nonpayablefunction setBatchLiveTradingPerSportAndTypeEnabled(uint256[] _sportIds, uint256[] _typeIds, bool _enabled)
setCaps
nonpayablefunction setCaps(uint256[] _sportIds, uint256[] _capsPerSport, uint256[] _sportIdsForChild, uint256[] _capsPerSportChild, uint256[] _sportIdsForType, uint256[] _typeIds, uint256[] _capsPerSportAndType)
setCapsPerMarket
nonpayablefunction setCapsPerMarket(bytes32[] _gameIds, uint16[] _typeIds, uint24[] _playerIds, int24[] _lines, uint256[] _capsPerMarket)
setCapsPerSport
nonpayablefunction setCapsPerSport(uint256[] _sportIds, uint256[] _capsPerSport)
setCapsPerSportAndType
nonpayablefunction setCapsPerSportAndType(uint256[] _sportIds, uint256[] _typeIds, uint256[] _capsPerType)
setCapsPerSportChild
nonpayablefunction setCapsPerSportChild(uint256[] _sportIds, uint256[] _capsPerSportChild)
setCombiningPerSportEnabled
nonpayablefunction setCombiningPerSportEnabled(uint256 _sportID, bool _enabled)
setDefaultCapAndDefaultRiskMultiplier
nonpayablefunction setDefaultCapAndDefaultRiskMultiplier(uint256 _defaultCap, uint256 _defaultRiskMultiplier)
setDefaultLiveCapDivider
nonpayablefunction setDefaultLiveCapDivider(uint256 _divider)
setDynamicLiquidityParamsPerSport
nonpayablefunction setDynamicLiquidityParamsPerSport(uint256 _sportId, uint256 _dynamicLiquidityCutoffTime, uint256 _dynamicLiquidityCutoffDivider)
setIsSportIdFuture
nonpayablefunction setIsSportIdFuture(uint16 _sportId, bool _isFuture)
setLiveCapDivider
nonpayablefunction setLiveCapDivider(uint256 _sportId, uint256 _divider)
setLiveTradingPerSportAndTypeEnabled
nonpayablefunction setLiveTradingPerSportAndTypeEnabled(uint256 _sportId, uint256 _typeId, bool _enabled)
setMaxCapAndMaxRiskMultiplier
nonpayablefunction setMaxCapAndMaxRiskMultiplier(uint256 _maxCap, uint256 _maxRiskMultiplier)
setOwner
nonpayablefunction setOwner(address _owner)
setPaused
nonpayablefunction setPaused(bool _paused)
setResultManager
nonpayablefunction setResultManager(address _resultManager)
setRiskMultipliersPerGame
nonpayablefunction setRiskMultipliersPerGame(bytes32[] _gameIds, uint256[] _riskMultipliersPerGame)
setRiskMultipliersPerSport
nonpayablefunction setRiskMultipliersPerSport(uint256[] _sportIds, uint256[] _riskMultipliersPerSport)
setSGPCapDivider
nonpayablefunction setSGPCapDivider(uint256 _divider)
setSGPEnabledOnSportIds
nonpayablefunction setSGPEnabledOnSportIds(uint16[] _sportIds, bool _isEnabled)
setSportsAMM
nonpayablefunction setSportsAMM(address _sportsAMM)
setSportsManager
nonpayablefunction setSportsManager(address _manager)
setTicketParams
nonpayablefunction setTicketParams(uint256 _minBuyInAmount, uint256 _maxTicketSize, uint256 _maxSupportedAmount, uint256 _maxSupportedOdds, uint256 _maxAllowedSystemCombinations)
setTimes
nonpayablefunction setTimes(uint256 _minimalTimeLeftToMaturity, uint256 _expiryDuration)
transferOwnershipAtInit
nonpayablefunction transferOwnershipAtInit(address proxyAddress)
events
Initialized
event Initialized(uint64 version)
OwnerChanged
event OwnerChanged(address oldOwner, address newOwner)
OwnerNominated
event OwnerNominated(address newOwner)
PauseChanged
event PauseChanged(bool isPaused)
SetCapPerMarket
event SetCapPerMarket(bytes32 gameId, uint16 typeId, uint24 playerId, int24 line, uint256 cap)
SetCapPerSport
event SetCapPerSport(uint256 sportId, uint256 cap)
SetCapPerSportAndType
event SetCapPerSportAndType(uint256 sportId, uint256 typeId, uint256 cap)
SetCapPerSportChild
event SetCapPerSportChild(uint256 sportId, uint256 cap)
SetCombiningPerSportEnabled
event SetCombiningPerSportEnabled(uint256 _sportID, bool _enabled)
SetDefaultCapAndDefaultRiskMultiplier
event SetDefaultCapAndDefaultRiskMultiplier(uint256 defaultCap, uint256 defaultRiskMultiplier)
SetDefaultLiveCapDivider
event SetDefaultLiveCapDivider(uint256 _divider)
SetDynamicLiquidityParams
event SetDynamicLiquidityParams(uint256 sportId, uint256 dynamicLiquidityCutoffTime, uint256 dynamicLiquidityCutoffDivider)
SetIsSportIdFuture
event SetIsSportIdFuture(uint16 _sportId, bool _isFuture)
SetLiveCapDivider
event SetLiveCapDivider(uint256 _sportId, uint256 _divider)
SetLiveTradingPerSportAndTypeEnabled
event SetLiveTradingPerSportAndTypeEnabled(uint256 _sportId, uint256 _typeId, bool _enabled)
SetMaxCapAndMaxRiskMultiplier
event SetMaxCapAndMaxRiskMultiplier(uint256 maxCap, uint256 maxRiskMultiplier)
SetResultManager
event SetResultManager(address resultManager)
SetRiskMultiplierPerGame
event SetRiskMultiplierPerGame(bytes32 gameId, uint256 riskMultiplier)
SetRiskMultiplierPerSport
event SetRiskMultiplierPerSport(uint256 sportId, uint256 riskMultiplier)
SetSGPCapDivider
event SetSGPCapDivider(uint256 _divider)
SetSGPEnabledOnSport
event SetSGPEnabledOnSport(uint16 _sportId, bool _isEnabled)
SetSportsAMM
event SetSportsAMM(address sportsAMM)
SetSportsManager
event SetSportsManager(address manager)
TicketParamsUpdated
event TicketParamsUpdated(uint256 minBuyInAmount, uint256 maxTicketSize, uint256 maxSupportedAmount, uint256 maxSupportedOdds, uint256 maxAllowedSystemCombinations)
TimesUpdated
event TimesUpdated(uint256 minimalTimeLeftToMaturity, uint256 expiryDuration)
errors
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
creation bytecode
0x608060405234801561001057600080fd5b50615e8d80620000216000396000f3fe608060405234801561001057600080fd5b50600436106104805760003560e01c806380be635511610257578063c5d89be811610146578063e2022213116100c3578063ea8b414011610087578063ea8b414014610b04578063eafea26514610b24578063ebc7977214610b37578063f9c2262214610b3f578063ff527ee314610b5257600080fd5b8063e202221314610aac578063e365da7814610ab5578063e625afc614610ad5578063e81e52ee14610ae8578063e88698bf14610afb57600080fd5b8063ce440b931161010a578063ce440b9314610a2f578063d5bdface14610a5d578063dc55793614610a70578063dddf183514610a83578063df8974d014610aa357600080fd5b8063c5d89be8146109b3578063c6334f9f146109c6578063c758d1f5146109cf578063c9925288146109e2578063ca9ef2e6146109f557600080fd5b8063a90888fc116101d4578063b7d3327811610198578063b7d3327814610946578063c064649e14610959578063c2a16a981461096c578063c360aded1461097f578063c3b83f5f146109a057600080fd5b8063a90888fc146108fb578063a9772e781461090e578063a9dfd88714610921578063aa0f0bb014610934578063b3ee14241461093d57600080fd5b806391db39db1161021b57806391db39db1461088757806393de7792146108aa57806399182a82146108cc578063a33a154e146108df578063a5f32b1e146108e857600080fd5b806380be6355146108255780638bb78dbd146108385780638da5cb5b146108585780638ff9d5cf1461086b57806391b4ded91461087e57600080fd5b8063422f96bf116103735780635cab25d9116102f057806367c24124116102b457806367c24124146107db578063689df56e146107ee57806379ba5097146107f75780637a0918cf146107ff5780637daed3291461081257600080fd5b80635cab25d9146107625780635d6a738c146107755780635e0d66b01461079557806360315786146107a857806362185d9f146107c857600080fd5b80635037dc99116103375780635037dc991461071357806353a47bb71461071c57806354c054511461072f57806359dc8257146107425780635c975abb1461075557600080fd5b8063422f96bf1461069e578063481c6a75146106a7578063489685b4146106d75780634dfbc89c146106f75780634fc44ee71461070057600080fd5b806323548b8b1161040157806331483e0f116103c557806331483e0f146106015780633305a15d1461063b5780633f282a8d1461065b578063404f57881461066a57806341dcd5fe1461069557600080fd5b806323548b8b1461059f5780632367b6ae146105a85780632a8321b2146105bb5780632b4656c8146105db5780632b7288ae146105ee57600080fd5b80631401f934116104485780631401f934146105335780631627540c1461055357806316c38b3c146105665780631ad483b514610579578063224348361461058c57600080fd5b8063035478d21461048557806305954ad4146104bd5780630a2cc72c146104eb5780630d1a2f891461050057806313af403514610520575b600080fd5b6104a86104933660046149a2565b60226020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104dd6104cb3660046149bd565b60176020526000908152604090205481565b6040519081526020016104b4565b6104fe6104f9366004614a2f565b610b7a565b005b6104dd61050e3660046149bd565b600f6020526000908152604090205481565b6104fe61052e366004614a9a565b610c2c565b610546610541366004614ac8565b610d62565b6040516104b49190614afb565b6104fe610561366004614a9a565b611121565b6104fe610574366004614b88565b611177565b6104fe610587366004614ba5565b6111e9565b6104fe61059a366004614bd1565b6112f7565b6104dd60105481565b6104fe6105b6366004614f62565b611347565b6104dd6105c93660046149bd565b60256020526000908152604090205481565b6104fe6105e9366004614fa6565b611355565b6104fe6105fc366004615014565b6114c4565b6104dd61060f36600461509b565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b6104dd6106493660046149bd565b60236020526000908152604090205481565b6104dd671bc16d674ec8000081565b6104dd610678366004614bd1565b600b60209081526000928352604080842090915290825290205481565b6104dd60195481565b6104dd601a5481565b6005546106bf9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016104b4565b6106ea6106e53660046150cd565b6115e7565b6040516104b49190615130565b6104dd60115481565b6104fe61070e366004614a9a565b61181f565b6104dd60245481565b6001546106bf906001600160a01b031681565b6104fe61073d3660046152a6565b61189b565b6104dd61075036600461532c565b611cd9565b6003546104a89060ff1681565b6104fe6107703660046153a8565b611cf8565b6104dd6107833660046149bd565b60096020526000908152604090205481565b6104fe6107a33660046150cd565b611d10565b6104dd6107b63660046149bd565b60126020526000908152604090205481565b6104fe6107d63660046150cd565b611e12565b6104fe6107e93660046149bd565b611ff5565b6104dd60085481565b6104fe612101565b6104fe61080d3660046153d6565b6121eb565b6104fe610820366004614bd1565b6122f3565b6104fe610833366004614a9a565b61238a565b6104dd6108463660046149bd565b600a6020526000908152604090205481565b6000546106bf906001600160a01b031681565b6006546106bf906001600160a01b031681565b6104dd60025481565b6104a86108953660046149bd565b60156020526000908152604090205460ff1681565b6104a86108b83660046149a2565b602080526000908152604090205460ff1681565b6104dd6108da36600461540d565b61240e565b6104dd601f5481565b6104fe6108f6366004615442565b612424565b6104dd6109093660046154c5565b6124ff565b6104fe61091c36600461561f565b6126f7565b6104fe61092f3660046156f0565b6129bb565b6104dd600d5481565b6104dd601d5481565b6104fe61095436600461580a565b612b3b565b6104fe610967366004614bd1565b612b95565b6104fe61097a36600461582f565b612cb4565b61099261098d366004615872565b612e34565b6040516104b49291906158f1565b6104fe6109ae366004614a9a565b6130b6565b6104fe6109c1366004615951565b6131bf565b6104dd60185481565b6104fe6109dd3660046149bd565b61325c565b6007546106bf906001600160a01b031681565b6104dd610a0336600461509b565b601660209081526000948552604080862082529385528385208152918452828420909152825290205481565b6104a8610a3d366004614bd1565b601460209081526000928352604080842090915290825290205460ff1681565b6104fe610a6b366004614bd1565b613368565b6104fe610a7e3660046150cd565b6133fd565b6104dd610a913660046149bd565b601e6020526000908152604090205481565b6104dd601c5481565b6104dd60215481565b6104dd610ac33660046149bd565b60136020526000908152604090205481565b6104fe610ae33660046150cd565b6135e0565b6104fe610af6366004614a9a565b6136d5565b6104dd601b5481565b6104dd610b123660046149bd565b600e6020526000908152604090205481565b6104dd610b323660046154c5565b613751565b6104fe613773565b6104fe610b4d366004615987565b6137d1565b610b65610b603660046159c2565b613848565b604080519283526020830191909152016104b4565b610b82613aab565b60005b82811015610c26576000848483818110610ba157610ba1615a1e565b9050602002016020810190610bb691906149a2565b61ffff8116600081815260226020908152604091829020805460ff19168815159081179091558251938452908301529192507f6df8945bb4c412ec4a960d2d0c8d268565213a3ef867bd9c00ed2c104932513f910160405180910390a15080610c1e81615a4a565b915050610b85565b50505050565b6001600160a01b038116610c875760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f7420626520300000000000000060448201526064015b60405180910390fd5b600154600160a01b900460ff1615610cf35760405162461bcd60e51b815260206004820152602960248201527f416c726561647920696e697469616c697a65642c20757365206e6f6d696e617460448201526832a732bba7bbb732b960b91b6064820152608401610c7e565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b0383166001600160a01b0319909116811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b606060018260ff16118015610d7c57508260ff168260ff16105b610db75760405162461bcd60e51b815260206004820152600c60248201526b42616452616e6765466f724b60a01b6044820152606401610c7e565b600160005b8360ff168160ff161015610e0b57610dd5816001615a63565b60ff16610de28287615a7c565b610def9060ff1684615a95565b610df99190615aac565b9150610e0481615ace565b9050610dbc565b506000816001600160401b03811115610e2657610e26614bf3565b604051908082528060200260200182016040528015610e5957816020015b6060815260200190600190039081610e445790505b50905060008460ff166001600160401b03811115610e7957610e79614bf3565b604051908082528060200260200182016040528015610ea2578160200160208202803683370190505b50905060005b8560ff168160ff161015610eee5780828260ff1681518110610ecc57610ecc615a1e565b60ff90921660209283029190910190910152610ee781615ace565b9050610ea8565b5060005b60008660ff166001600160401b03811115610f0f57610f0f614bf3565b604051908082528060200260200182016040528015610f38578160200160208202803683370190505b50905060005b8760ff168160ff161015610fa057838160ff1681518110610f6157610f61615a1e565b6020026020010151828260ff1681518110610f7e57610f7e615a1e565b60ff90921660209283029190910190910152610f9981615ace565b9050610f3e565b5080848381518110610fb457610fb4615a1e565b60200260200101819052508180610fca90615a4a565b925060019050875b60ff8116156110ff57610fe6600182615a7c565b610ff0908a615a7c565b610ffa908b615a7c565b60ff1685611009600184615a7c565b60ff168151811061101c5761101c615a1e565b602002602001015160ff1610156110ed5784611039600183615a7c565b60ff168151811061104c5761104c615a1e565b60200260200101805180919061106190615ace565b60ff16905250805b8960ff168160ff1610156110e35785611083600183615a7c565b60ff168151811061109657611096615a1e565b602002602001015160016110aa9190615a63565b868260ff16815181106110bf576110bf615a1e565b60ff90921660209283029190910190910152806110db81615ace565b915050611069565b50600091506110ff565b806110f781615aed565b915050610fd2565b50801561110d575050611114565b5050610ef2565b5090925050505b92915050565b611129613aab565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290602001610d57565b61117f613aab565b60035460ff161515811515146111e6576003805460ff191682151590811790915560ff16156111ad57426002555b60035460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec590602001610d57565b50565b60005433906001600160a01b0316811480611277575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590611236908490600190600401615b0a565b602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190615b37565b6112935760405162461bcd60e51b8152600401610c7e90615b54565b6000848152601260209081526040808320869055601382529182902084905581518681529081018590529081018390527f73231c1da1a7341edd4af21892fc5e1c1f340ae5726ee3e20714c146c968558a906060015b60405180910390a150505050565b6112ff613aab565b601c829055601d81905560408051838152602081018390527f8f8d0d2155084c34c7e189b664aa128aebfd57e564d2d01c82a148d3da3a3bbc91015b60405180910390a15050565b6113518282613b1f565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561139a5750825b90506000826001600160401b031660011480156113b65750303b155b9050811580156113c4575080155b156113e25760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561140c57845460ff60401b1916600160401b1785555b6114158c610c2c565b61141d613773565b60058054610100600160a81b0319166101006001600160a01b038e81169190910291909117909155600680546001600160a01b031916918c169190911790556008899055600d8890556010879055601186905583156114b657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b60005433906001600160a01b0316811480611552575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590611511908490600190600401615b0a565b602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190615b37565b61156e5760405162461bcd60e51b8152600401610c7e90615b54565b60005b84518110156115e0576115d085828151811061158f5761158f615a1e565b60200260200101518583815181106115a9576115a9615a1e565b60200260200101518584815181106115c3576115c3615a1e565b6020026020010151613b7d565b6115d981615a4a565b9050611571565b5050505050565b606082516001600160401b0381111561160257611602614bf3565b60405190808252806020026020018201604052801561163b57816020015b611628614927565b8152602001906001900390816116205790505b50905060005b835181101561181857600084828151811061165e5761165e615a1e565b60200260200101519050600084516001600160401b0381111561168357611683614bf3565b6040519080825280602002602001820160405280156116c857816020015b60408051808201909152600080825260208201528152602001906001900390816116a15790505b50905060005b855181101561175f5760008682815181106116eb576116eb615a1e565b602002602001015190506040518060400160405280828152602001600b600087815260200190815260200160002060008481526020019081526020016000205481525083838151811061174057611740615a1e565b602002602001018190525050808061175790615a4a565b9150506116ce565b506040805160608082018352600085815260096020908152848220548452868252600a8152848220548185015283850186905284518086018652878352601282528583205481528783526013825285832054818301528551608081018752888152808301869052888452600e9092529185902054948101949094529083018190528651919290918790879081106117f8576117f8615a1e565b6020026020010181905250505050508061181190615a4a565b9050611641565b5092915050565b611827613aab565b6001600160a01b03811661184d5760405162461bcd60e51b8152600401610c7e90615b7b565b600680546001600160a01b0319166001600160a01b0383169081179091556040519081527f8e82800b59523f810c97593baf42dfc0492840b36dc94ab1c2d1b167d8b0cb8990602001610d57565b60075433906001600160a01b031681146118e85760405162461bcd60e51b815260206004820152600e60248201526d13db9b1e505353505b1b1bddd95960921b6044820152606401610c7e565b8651600160ff85161160005b82811015611bf75760008a828151811061191057611910615a1e565b6020908102919091018101518082015161ffff16600090815291805260409091205490915060ff16158061194557508a516001145b6119855760405162461bcd60e51b815260206004820152601160248201527043616e745061726c61794675747572657360781b6044820152606401610c7e565b60e0810151610120820151815160ff8216106119d65760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103837b9b4ba34b7b760811b6044820152606401610c7e565b6119df83613c22565b611a195760405162461bcd60e51b815260206004820152600b60248201526a4e6f742074726164696e6760a81b6044820152606401610c7e565b6000828260ff1681518110611a3057611a30615a1e565b6020026020010151600014611a7f57828260ff1681518110611a5457611a54615a1e565b60200260200101518d670de0b6b3a7640000611a709190615a95565b611a7a9190615aac565b611a82565b60005b90508c811115611be2576000611a988e83615ba3565b90508615611adf57611ab2670de0b6b3a764000089615a95565b60ff8c16611ac8670de0b6b3a764000084615a95565b611ad29190615a95565b611adc9190615aac565b90505b611aea85828e613d29565b15611b375760405162461bcd60e51b815260206004820152601a60248201527f45786365656465644d61726b6574506f736974696f6e5269736b0000000000006044820152606401610c7e565b611b418582613dac565b15611b815760405162461bcd60e51b815260206004820152601060248201526f457863656564656447616d655269736b60801b6044820152606401610c7e565b8980611b955750611b938f8688613df5565b155b611bd65760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b221b7b6b134b730ba34b7b760711b6044820152606401610c7e565b611be08582613edd565b505b5050505080611bf090615a4a565b90506118f4565b508315611cce576000611c0a8989615ba3565b9050611c168a82613fc7565b15611c555760405162461bcd60e51b815260206004820152600f60248201526e45786365656465645347505269736b60881b6044820152606401610c7e565b80602360008c600081518110611c6d57611c6d615a1e565b60200260200101516000015181526020019081526020016000206000828254611c969190615bb6565b9091555081905060256000611caa8d6124ff565b81526020019081526020016000206000828254611cc79190615bb6565b9091555050505b505050505050505050565b6000611cea888888888888886140e5565b90505b979650505050505050565b611d00613aab565b611d0b838383614332565b505050565b60005433906001600160a01b0316811480611d9e575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590611d5d908490600190600401615b0a565b602060405180830381865afa158015611d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9e9190615b37565b611dba5760405162461bcd60e51b8152600401610c7e90615b54565b60005b8351811015610c2657611e02848281518110611ddb57611ddb615a1e565b6020026020010151848381518110611df557611df5615a1e565b6020026020010151614397565b611e0b81615a4a565b9050611dbd565b60005433906001600160a01b0316811480611ea0575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590611e5f908490600190600401615b0a565b602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190615b37565b611ebc5760405162461bcd60e51b8152600401610c7e90615b54565b60005b8351811015610c2657601154838281518110611edd57611edd615a1e565b60200260200101511115611f275760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b226bab63a34b83634b2b960791b6044820152606401610c7e565b828181518110611f3957611f39615a1e565b6020026020010151600f6000868481518110611f5757611f57615a1e565b60200260200101518152602001908152602001600020819055507fad3938ddda68b0c35a94769b9bfe09359d462174ac669a50c54f6913ffee2387848281518110611fa457611fa4615a1e565b6020026020010151848381518110611fbe57611fbe615a1e565b6020026020010151604051611fdd929190918252602082015260400190565b60405180910390a1611fee81615a4a565b9050611ebf565b60005433906001600160a01b0316811480612083575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590612042908490600190600401615b0a565b602060405180830381865afa15801561205f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120839190615b37565b61209f5760405162461bcd60e51b8152600401610c7e90615b54565b6000821180156120b05750600a8211155b6120cc5760405162461bcd60e51b8152600401610c7e90615bc9565b60248290556040518281527f0c239364e4f5adc356c13510be0c9eb7d5cf361baf8315222cd91233a10c599d9060200161133b565b6001546001600160a01b031633146121795760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b6064820152608401610c7e565b600054600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60005433906001600160a01b0316811480612279575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590612238908490600190600401615b0a565b602060405180830381865afa158015612255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122799190615b37565b6122955760405162461bcd60e51b8152600401610c7e90615b54565b61ffff831660008181526020808052604091829020805460ff19168615159081179091558251938452908301527fb51232e4b8914c35311ac17f4d60b83e968f42365fe9f84d7e79f678971f88bf91015b60405180910390a1505050565b6122fb613aab565b601054821115801561230f57506011548111155b61234a5760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59125b9c1d5d60a21b6044820152606401610c7e565b6008829055600d81905560408051838152602081018390527f66f5882a9629034cfbaab9f0e58425ef198945ed475f313968d861fc699c03c0910161133b565b612392613aab565b6001600160a01b0381166123b85760405162461bcd60e51b8152600401610c7e90615b7b565b60058054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527f3f95458abea6f2ed78f07dd5ee75af62322c77d86a51a87aabc86aa92d34a6b190602001610d57565b600061241b848484614401565b50949350505050565b61242c613aab565b831580159061243a57508115155b6124745760405162461bcd60e51b815260206004820152600b60248201526a456d70747941727261797360a81b6044820152606401610c7e565b60005b848110156124f757600086868381811061249357612493615a1e565b90506020020135905060005b848110156124e25760008686838181106124bb576124bb615a1e565b9050602002013590506124cf838287614332565b50806124da81615a4a565b91505061249f565b505080806124ef90615a4a565b915050612477565b505050505050565b600061250a8261443b565b600082516001600160401b0381111561252557612525614bf3565b60405190808252806020026020018201604052801561254e578160200160208202803683370190505b509050600083516001600160401b0381111561256c5761256c614bf3565b604051908082528060200260200182016040528015612595578160200160208202803683370190505b509050600084516001600160401b038111156125b3576125b3614bf3565b6040519080825280602002602001820160405280156125dc578160200160208202803683370190505b50905060005b85518110156126c1578581815181106125fd576125fd615a1e565b60200260200101516000015184828151811061261b5761261b615a1e565b60200260200101818152505085818151811061263957612639615a1e565b60200260200101516040015183828151811061265757612657615a1e565b602002602001019061ffff16908161ffff168152505085818151811061267f5761267f615a1e565b602002602001015160c0015182828151811061269d5761269d615a1e565b62ffffff909216602092830291909101909101526126ba81615a4a565b90506125e2565b508282826040516020016126d793929190615c32565b604051602081830303815290604052805190602001209350505050919050565b60005433906001600160a01b0316811480612785575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590612744908490600190600401615b0a565b602060405180830381865afa158015612761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127859190615b37565b6127a15760405162461bcd60e51b8152600401610c7e90615b54565b60005b86518110156129b2576010548382815181106127c2576127c2615a1e565b602002602001015111156127e85760405162461bcd60e51b8152600401610c7e90615cb8565b8281815181106127fa576127fa615a1e565b6020026020010151600c600089848151811061281857612818615a1e565b60200260200101518152602001908152602001600020600088848151811061284257612842615a1e565b602002602001015161ffff168152602001908152602001600020600087848151811061287057612870615a1e565b602002602001015162ffffff168152602001908152602001600020600086848151811061289f5761289f615a1e565b602002602001015160020b8152602001908152602001600020819055507fc14b7699de20e98a6336e1020b227f531f06ec5cc9d0f7ba40e51827524fb64a8782815181106128ef576128ef615a1e565b602002602001015187838151811061290957612909615a1e565b602002602001015187848151811061292357612923615a1e565b602002602001015187858151811061293d5761293d615a1e565b602002602001015187868151811061295757612957615a1e565b602002602001015160405161299a95949392919094855261ffff93909316602085015262ffffff91909116604084015260020b6060830152608082015260a00190565b60405180910390a16129ab81615a4a565b90506127a4565b50505050505050565b60005433906001600160a01b0316811480612a49575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590612a08908490600190600401615b0a565b602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a499190615b37565b612a655760405162461bcd60e51b8152600401610c7e90615b54565b60005b8851811015612ab057612aa0898281518110612a8657612a86615a1e565b6020026020010151898381518110611df557611df5615a1e565b612aa981615a4a565b9050612a68565b5060005b8651811015612b0957612af9878281518110612ad257612ad2615a1e565b6020026020010151878381518110612aec57612aec615a1e565b6020026020010151614540565b612b0281615a4a565b9050612ab4565b5060005b8451811015611cce57612b2b85828151811061158f5761158f615a1e565b612b3481615a4a565b9050612b0d565b612b43613aab565b600082815260156020908152604091829020805460ff19168415159081179091558251858152918201527fd6607d95dba4bba9cc6488f5d59c8c13fd3393bb32e524cbfebe05e87796e774910161133b565b60005433906001600160a01b0316811480612c23575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c39590612be2908490600190600401615b0a565b602060405180830381865afa158015612bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c239190615b37565b612c3f5760405162461bcd60e51b8152600401610c7e90615b54565b600082118015612c505750600a8211155b612c6c5760405162461bcd60e51b8152600401610c7e90615bc9565b6000838152601e602090815260409182902084905581518581529081018490527fc8ec738370e588095f95e158fd2cd81a0a2ce198cf844dfba650f0719abd4a9491016122e6565b601854861015612cf15760405162461bcd60e51b81526020600482015260086024820152672637bba13abcb4b760c11b6044820152606401610c7e565b601b54851015612d355760405162461bcd60e51b815260206004820152600f60248201526e45786365656465644d61784f64647360881b6044820152606401610c7e565b601a54612d428786615ba3565b1115612d845760405162461bcd60e51b8152602060048201526011602482015270115e18d95959195913585e105b5bdd5b9d607a1b6044820152606401610c7e565b612d9682670de0b6b3a7640000615bb6565b84612da985670de0b6b3a7640000615a95565b612db39190615aac565b1115612df05760405162461bcd60e51b815260206004820152600c60248201526b0a6d8d2e0e0c2ceca90d2ced60a31b6044820152606401610c7e565b6019548111156124f75760405162461bcd60e51b815260206004820152600f60248201526e45786365656465644d617853697a6560881b6044820152606401610c7e565b8351600090606090806001600160401b03811115612e5457612e54614bf3565b604051908082528060200260200182016040528015612e7d578160200160208202803683370190505b5091506000600160ff861611815b838110156130a95760008a8281518110612ea757612ea7615a1e565b6020908102919091018101518082015161ffff16600090815291805260409091205490915060ff168015612edb5750600185115b935060008160e0015182610120015160ff1681518110612efd57612efd615a1e565b6020026020010151118015612f3e5750670de0b6b3a76400008160e0015182610120015160ff1681518110612f3457612f34615a1e565b6020026020010151105b612f785760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69644f64647360a81b6044820152606401610c7e565b60008160e0015182610120015160ff1681518110612f9857612f98615a1e565b60200260200101518b670de0b6b3a7640000612fb49190615a95565b612fbe9190615aac565b90506000612fcc8c83615ba3565b9050841561301357612fe6670de0b6b3a764000088615a95565b60ff8b16612ffc670de0b6b3a764000084615a95565b6130069190615a95565b6130109190615aac565b90505b858061302557506130258d8486613df5565b156130335760029850613095565b61303e83828d613d29565b8061304e575061304e8382613dac565b1561309557600188858151811061306757613067615a1e565b91151560209283029190910190910152600089600281111561308b5761308b6158db565b0361309557600198505b505050806130a290615a4a565b9050612e8b565b5050505094509492505050565b6130be613aab565b6001600160a01b0381166131065760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c7e565b600154600160a81b900460ff16156131565760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481d1c985b9cd9995c9c9959606a1b6044820152606401610c7e565b600080546001600160a01b0383166001600160a01b031990911681179091556001805460ff60a81b1916600160a81b1790556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9101610d57565b80518251146132045760405162461bcd60e51b81526020600482015260116024820152704d6973736d617463686564496e7075747360781b6044820152606401610c7e565b60005b8251811015611d0b5761324c83828151811061322557613225615a1e565b602002602001015183838151811061323f5761323f615a1e565b6020026020010151613b1f565b61325581615a4a565b9050613207565b60005433906001600160a01b03168114806132ea575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c395906132a9908490600190600401615b0a565b602060405180830381865afa1580156132c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ea9190615b37565b6133065760405162461bcd60e51b8152600401610c7e90615b54565b6000821180156133175750600a8211155b6133335760405162461bcd60e51b8152600401610c7e90615bc9565b601f8290556040518281527f71ada83bfd8e30b300b57f2f9d90cc70c7d3b027cd3e38967d588ec4378ecf629060200161133b565b613370613aab565b600854821180156133825750600d5481115b6133bd5760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59125b9c1d5d60a21b6044820152606401610c7e565b6010829055601181905560408051838152602081018390527f3ef96d50e94656fa01fa9c9a131bc026d07ed3bb6c53daff5695c3a4a2bad546910161133b565b60005433906001600160a01b031681148061348b575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c3959061344a908490600190600401615b0a565b602060405180830381865afa158015613467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348b9190615b37565b6134a75760405162461bcd60e51b8152600401610c7e90615b54565b60005b8351811015610c26576011548382815181106134c8576134c8615a1e565b602002602001015111156135125760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b226bab63a34b83634b2b960791b6044820152606401610c7e565b82818151811061352457613524615a1e565b6020026020010151600e600086848151811061354257613542615a1e565b60200260200101518152602001908152602001600020819055507fbc374ebda39a7586f4916c1911f82c2b045a44439acc485b4097428bf24ab9f984828151811061358f5761358f615a1e565b60200260200101518483815181106135a9576135a9615a1e565b60200260200101516040516135c8929190918252602082015260400190565b60405180910390a16135d981615a4a565b90506134aa565b60005433906001600160a01b031681148061366e575060055460405163e760c39560e01b81526101009091046001600160a01b03169063e760c3959061362d908490600190600401615b0a565b602060405180830381865afa15801561364a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366e9190615b37565b61368a5760405162461bcd60e51b8152600401610c7e90615b54565b60005b8351811015610c26576136c58482815181106136ab576136ab615a1e565b6020026020010151848381518110612aec57612aec615a1e565b6136ce81615a4a565b905061368d565b6136dd613aab565b6001600160a01b0381166137035760405162461bcd60e51b8152600401610c7e90615b7b565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f9985022676a73860c32a3b91ea7a7dfe2d5e87c148f50eb519d8b0f33ab7f8b990602001610d57565b60008061375d836124ff565b6000908152602560205260409020549392505050565b60055460ff16156137bc5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610c7e565b6005805460ff19166001908117909155600455565b6137d9613aab565b60188590556019849055601a839055601b8290556021819055604080518681526020810186905290810184905260608101839052608081018290527f6cde94c5ae9fdbda396942be459bab30f8a54e9fc195bca3ab452ab19d4e04069060a00160405180910390a15050505050565b6000806000613858875187610d62565b8051602154919250908111156138b05760405162461bcd60e51b815260206004820152601760248201527f45786365656465644d6178436f6d62696e6174696f6e730000000000000000006044820152606401610c7e565b6000670de0b6b3a7640000826138c6828a615a95565b6138d09190615aac565b6138da9190615aac565b905060005b82811015613a7f5760008482815181106138fb576138fb615a1e565b60200260200101519050600080600090505b82518160ff161015613a36576000838260ff168151811061393057613930615a1e565b6020026020010151905060008e8260ff168151811061395157613951615a1e565b602002602001015160e001518f8360ff168151811061397257613972615a1e565b6020026020010151610120015160ff168151811061399257613992615a1e565b60200260200101519050670de0b6b3a7640000818d6139b19190615a95565b6139bb9190615aac565b6139cd8d670de0b6b3a7640000615bb6565b6139d79190615ba3565b6139e9670de0b6b3a764000083615a95565b6139f39190615aac565b90508315613a1d57670de0b6b3a7640000613a0e8286615a95565b613a189190615aac565b613a1f565b805b935050508080613a2e90615ace565b91505061390d565b508015613a6c57600081613a52670de0b6b3a764000087615a95565b613a5c9190615aac565b9050613a68818a615bb6565b9850505b505080613a7890615a4a565b90506138df565b5084613a9388670de0b6b3a7640000615a95565b613a9d9190615aac565b935050505094509492505050565b6000546001600160a01b03163314613b1d5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610c7e565b565b6000613b2a836145d5565b9050613b3c836101000151838361478a565b611d0b5760405162461bcd60e51b8152602060048201526012602482015271141c9bdbd9881a5cc81b9bdd081d985b1a5960721b6044820152606401610c7e565b600083815260096020526040812054613b9857600854613ba8565b6000848152600960205260409020545b905080821115613bca5760405162461bcd60e51b8152600401610c7e90615cb8565b6000848152600b6020908152604080832086845282529182902084905581518681529081018590529081018390527f38bba85d238b3778cdb675a039211d90996b1dc4b6c6301971bdbd43fbfe8864906060016112e9565b600080826060015190506000600660009054906101000a90046001600160a01b03166001600160a01b031663397f7823856000015186604001518760c001518860a001518961014001518a610120015160ff1681518110613c8557613c85615a1e565b60200260200101516040518663ffffffff1660e01b8152600401613cad959493929190615cdc565b602060405180830381865afa158015613cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cee9190615b37565b9050836080015160ff166000148015613d05575080155b15613d2257428210613d2257601c54613d1e4284615ba3565b1192505b5050919050565b8251604084015160c0850151602086015160a08701516060880151600095949392613d5a928692869186918b6140e5565b600084815260166020908152604080832061ffff87168452825280832062ffffff8616845282528083206101208c015160ff168452909152902054613da0908890615d6b565b13979650505050505050565b600080836000015190506000613dcb8286602001518760600151614401565b506000838152601760205260409020549091508190613deb908690615bb6565b1195945050505050565b600080613e03836001615bb6565b90505b8451811015613ed5576000858281518110613e2357613e23615a1e565b6020026020010151905080600001518560000151148015613e535750806020015161ffff16856020015161ffff16145b15613ec45760208086015161ffff1660009081526015909152604090205460ff161580613e9157508060c0015162ffffff168560c0015162ffffff16145b80613ea3575060c085015162ffffff16155b80613eb5575060c081015162ffffff16155b15613ec4576001925050613ed5565b50613ece81615a4a565b9050613e06565b509392505050565b8151604083015160c084015161012085015160005b8660e0015151811015613f9b57600085815260166020908152604080832061ffff88168452825280832062ffffff87168452825280832084845290915290205460ff83168214613f4b57613f468782615d93565b613f55565b613f558782615d6b565b600087815260166020908152604080832061ffff8a168452825280832062ffffff8916845282528083208684529091529020555080613f9381615a4a565b915050613ef2565b5060008481526017602052604081208054879290613fba908490615bb6565b9091555050505050505050565b600080600060245411613fdb576002613fdf565b6024545b905060008061404986600081518110613ffa57613ffa615a1e565b6020026020010151600001518760008151811061401957614019615a1e565b6020026020010151602001518860008151811061403857614038615a1e565b602002602001015160600151614401565b9092509050600061405a8484615aac565b86602360008a60008151811061407257614072615a1e565b6020026020010151600001518152602001908152602001600020546140979190615bb6565b11905060006140a68584615aac565b87602560006140b48c6124ff565b8152602001908152602001600020546140cd9190615bb6565b11905081806140d95750805b98975050505050505050565b600042831115611ced57506000878152600c6020908152604080832061ffff89168452825280832062ffffff881684528252808320600287900b8452909152812054908190036141fc5761ffff87166000908152600960205260409020548061415057600854614152565b805b915081905061ffff8716156141fa576000898152600c6020908152604080832083805282528083208252808320909152902054801561419d57614196600282615aac565b92506141f8565b61ffff808a166000908152600b60209081526040808320938c1683529290529081205493508390036141f85761ffff89166000908152600a6020526040902054806141f2576141ed600284615aac565b6141f4565b805b9350505b505b505b81156142555761ffff87166000908152601e6020526040902054614233576000601f541161422b576001614248565b601f54614248565b61ffff87166000908152601e60205260409020545b6142529082615aac565b90505b61ffff8716600090815260126020526040902054801561432657600061427b4286615ba3565b61ffff8a16600090815260136020526040812054919250906142a557671bc16d674ec800006142ba565b61ffff8a166000908152601360205260409020545b6142cc670de0b6b3a764000086615a95565b6142d69190615aac565b90508282106142e757809350614323565b60006142f38286615ba3565b905083816143018583615ba3565b61430b9190615a95565b6143159190615aac565b61431f9083615bb6565b9450505b50505b50979650505050505050565b6000838152601460209081526040808320858452825291829020805460ff19168415159081179091558251868152918201859052918101919091527ffdd6a752e1596b39b7dc599993db99ce8fcf9f740e9beb9fcd057228e19fc8db906060016122e6565b6010548111156143b95760405162461bcd60e51b8152600401610c7e90615cb8565b60008281526009602090815260409182902083905581518481529081018390527fdd336d23e5a148c17f76389d3ac4d0ab595ec1bc30e226f1d6ee3cd7714dd6f8910161133b565b600080614416858560008060008860006140e5565b9050600061442486866147a0565b90506144308183615a95565b925050935093915050565b805160005b61444b600183615ba3565b811015611d0b57600061445f826001615bb6565b90505b8281101561452f5760006144a885848151811061448157614481615a1e565b602002602001015186848151811061449b5761449b615a1e565b60200260200101516147e2565b131561451d578381815181106144c0576144c0615a1e565b60200260200101518483815181106144da576144da615a1e565b60200260200101518584815181106144f4576144f4615a1e565b6020026020010186848151811061450d5761450d615a1e565b6020026020010182905282905250505b8061452781615a4a565b915050614462565b5061453981615a4a565b9050614440565b60008281526009602052604081205461455b5760085461456b565b6000838152600960205260409020545b90508082111561458d5760405162461bcd60e51b8152600401610c7e90615cb8565b6000838152600a602090815260409182902084905581518581529081018490527ffbd9918f75c3522536de3aee36688a9c85119cfd97fab820e6c2a4bf5b08f46991016122e6565b6000808260000151836020015161ffff16846040015161ffff168560600151866080015160ff168760a0015160020b8860c0015162ffffff168960e0015160405160200161462a989796959493929190615db3565b604051602081830303815290604052905060005b8361014001515181101561477b5760005b846101400151828151811061466657614666615a1e565b60200260200101515181101561476a5782856101400151838151811061468e5761468e615a1e565b602002602001015182815181106146a7576146a7615a1e565b60200260200101516000015161ffff1686610140015184815181106146ce576146ce615a1e565b602002602001015183815181106146e7576146e7615a1e565b60200260200101516020015160ff16876101400151858151811061470d5761470d615a1e565b6020026020010151848151811061472657614726615a1e565b60200260200101516040015160020b6040516020016147489493929190615e18565b60405160208183030381529060405292508061476390615a4a565b905061464f565b5061477481615a4a565b905061463e565b50805160209091012092915050565b60008261479785846148b0565b14949350505050565b6000828152600f60205260408120549081900361111b5761ffff82166000908152600e6020526040902054806147d857600d546147da565b805b949350505050565b6000816040015161ffff16836040015161ffff161015614805575060001961111b565b816040015161ffff16836040015161ffff1611156148255750600161111b565b8160c0015162ffffff168360c0015162ffffff161015614848575060001961111b565b8160c0015162ffffff168360c0015162ffffff16111561486a5750600161111b565b8160a0015160020b8360a0015160020b1215614889575060001961111b565b8160a0015160020b8360a0015160020b13156148a75750600161111b565b50600092915050565b600081815b8451811015613ed5576148e1828683815181106148d4576148d4615a1e565b60200260200101516148f5565b9150806148ed81615a4a565b9150506148b5565b6000818310614911576000828152602084905260409020614920565b60008381526020839052604090205b9392505050565b60405180608001604052806000815260200161495d60405180606001604052806000815260200160008152602001606081525090565b815260200160008152602001614986604051806040016040528060008152602001600081525090565b905290565b803561ffff8116811461499d57600080fd5b919050565b6000602082840312156149b457600080fd5b6149208261498b565b6000602082840312156149cf57600080fd5b5035919050565b60008083601f8401126149e857600080fd5b5081356001600160401b038111156149ff57600080fd5b6020830191508360208260051b8501011115614a1a57600080fd5b9250929050565b80151581146111e657600080fd5b600080600060408486031215614a4457600080fd5b83356001600160401b03811115614a5a57600080fd5b614a66868287016149d6565b9094509250506020840135614a7a81614a21565b809150509250925092565b6001600160a01b03811681146111e657600080fd5b600060208284031215614aac57600080fd5b81356147d881614a85565b803560ff8116811461499d57600080fd5b60008060408385031215614adb57600080fd5b614ae483614ab7565b9150614af260208401614ab7565b90509250929050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b83811015614b7a57888603603f19018552825180518088529088019088880190845b81811015614b6457835160ff168352928a0192918a0191600101614b45565b5090975050509386019391860191600101614b23565b509398975050505050505050565b600060208284031215614b9a57600080fd5b81356147d881614a21565b600080600060608486031215614bba57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614be457600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614c2b57614c2b614bf3565b60405290565b60405161016081016001600160401b0381118282101715614c2b57614c2b614bf3565b604051601f8201601f191681016001600160401b0381118282101715614c7c57614c7c614bf3565b604052919050565b8035600281900b811461499d57600080fd5b803562ffffff8116811461499d57600080fd5b60006001600160401b03821115614cc257614cc2614bf3565b5060051b60200190565b600082601f830112614cdd57600080fd5b81356020614cf2614ced83614ca9565b614c54565b82815260059290921b84018101918181019086841115614d1157600080fd5b8286015b84811015614d2c5780358352918301918301614d15565b509695505050505050565b600082601f830112614d4857600080fd5b81356020614d58614ced83614ca9565b82815260059290921b84018101918181019086841115614d7757600080fd5b8286015b84811015614d2c5780356001600160401b03811115614d9a5760008081fd5b8701603f81018913614dac5760008081fd5b848101356040614dbe614ced83614ca9565b8281526060928302840182019288820191908d851115614dde5760008081fd5b948301945b84861015614e3b5780868f031215614dfb5760008081fd5b614e03614c09565b614e0c8761498b565b8152614e198b8801614ab7565b8b820152614e28858801614c84565b8186015283529485019491890191614de3565b50875250505092840192508301614d7b565b60006101608284031215614e6057600080fd5b614e68614c31565b905081358152614e7a6020830161498b565b6020820152614e8b6040830161498b565b604082015260608201356060820152614ea660808301614ab7565b6080820152614eb760a08301614c84565b60a0820152614ec860c08301614c96565b60c082015260e08201356001600160401b0380821115614ee757600080fd5b614ef385838601614ccc565b60e084015261010091508184013581811115614f0e57600080fd5b614f1a86828701614ccc565b83850152506101209150614f2f828501614ab7565b8284015261014091508184013581811115614f4957600080fd5b614f5586828701614d37565b8385015250505092915050565b60008060408385031215614f7557600080fd5b82356001600160401b03811115614f8b57600080fd5b614f9785828601614e4d565b95602094909401359450505050565b600080600080600080600060e0888a031215614fc157600080fd5b8735614fcc81614a85565b96506020880135614fdc81614a85565b95506040880135614fec81614a85565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b60008060006060848603121561502957600080fd5b83356001600160401b038082111561504057600080fd5b61504c87838801614ccc565b9450602086013591508082111561506257600080fd5b61506e87838801614ccc565b9350604086013591508082111561508457600080fd5b5061509186828701614ccc565b9150509250925092565b600080600080608085870312156150b157600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156150e057600080fd5b82356001600160401b03808211156150f757600080fd5b61510386838701614ccc565b9350602085013591508082111561511957600080fd5b5061512685828601614ccc565b9150509250929050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561521857898403603f190186528251805185528881015160a08a8701819052815190870152808a015160c0870152880151606060e0870181905281516101008801819052918b019185906101208901905b808310156151de576151ca82865180518252602090810151910152565b938d019360019290920191908c01906151ad565b50848c0151898d01529382015193615202838a018680518252602090810151910152565b998c019997505050938901935050600101615158565b50919998505050505050505050565b600082601f83011261523857600080fd5b81356020615248614ced83614ca9565b82815260059290921b8401810191818101908684111561526757600080fd5b8286015b84811015614d2c5780356001600160401b0381111561528a5760008081fd5b6152988986838b0101614e4d565b84525091830191830161526b565b60008060008060008060c087890312156152bf57600080fd5b86356001600160401b038111156152d557600080fd5b6152e189828a01615227565b9650506020870135945060408701359350606087013561530081614a21565b925061530e60808801614ab7565b915060a087013561531e81614a21565b809150509295509295509295565b600080600080600080600060e0888a03121561534757600080fd5b873596506153576020890161498b565b95506153656040890161498b565b945061537360608901614c96565b935061538160808901614c84565b925060a0880135915060c088013561539881614a21565b8091505092959891949750929550565b6000806000606084860312156153bd57600080fd5b83359250602084013591506040840135614a7a81614a21565b600080604083850312156153e957600080fd5b6153f28361498b565b9150602083013561540281614a21565b809150509250929050565b60008060006060848603121561542257600080fd5b833592506154326020850161498b565b9150604084013590509250925092565b60008060008060006060868803121561545a57600080fd5b85356001600160401b038082111561547157600080fd5b61547d89838a016149d6565b9097509550602088013591508082111561549657600080fd5b506154a3888289016149d6565b90945092505060408601356154b781614a21565b809150509295509295909350565b6000602082840312156154d757600080fd5b81356001600160401b038111156154ed57600080fd5b6147da84828501615227565b600082601f83011261550a57600080fd5b8135602061551a614ced83614ca9565b82815260059290921b8401810191818101908684111561553957600080fd5b8286015b84811015614d2c5761554e8161498b565b835291830191830161553d565b600082601f83011261556c57600080fd5b8135602061557c614ced83614ca9565b82815260059290921b8401810191818101908684111561559b57600080fd5b8286015b84811015614d2c576155b081614c96565b835291830191830161559f565b600082601f8301126155ce57600080fd5b813560206155de614ced83614ca9565b82815260059290921b840181019181810190868411156155fd57600080fd5b8286015b84811015614d2c5761561281614c84565b8352918301918301615601565b600080600080600060a0868803121561563757600080fd5b85356001600160401b038082111561564e57600080fd5b61565a89838a01614ccc565b9650602088013591508082111561567057600080fd5b61567c89838a016154f9565b9550604088013591508082111561569257600080fd5b61569e89838a0161555b565b945060608801359150808211156156b457600080fd5b6156c089838a016155bd565b935060808801359150808211156156d657600080fd5b506156e388828901614ccc565b9150509295509295909350565b600080600080600080600060e0888a03121561570b57600080fd5b87356001600160401b038082111561572257600080fd5b61572e8b838c01614ccc565b985060208a013591508082111561574457600080fd5b6157508b838c01614ccc565b975060408a013591508082111561576657600080fd5b6157728b838c01614ccc565b965060608a013591508082111561578857600080fd5b6157948b838c01614ccc565b955060808a01359150808211156157aa57600080fd5b6157b68b838c01614ccc565b945060a08a01359150808211156157cc57600080fd5b6157d88b838c01614ccc565b935060c08a01359150808211156157ee57600080fd5b506157fb8a828b01614ccc565b91505092959891949750929550565b6000806040838503121561581d57600080fd5b82359150602083013561540281614a21565b60008060008060008060c0878903121561584857600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806000806080858703121561588857600080fd5b84356001600160401b0381111561589e57600080fd5b6158aa87828801615227565b9450506020850135925060408501356158c281614a21565b91506158d060608601614ab7565b905092959194509250565b634e487b7160e01b600052602160045260246000fd5b60006040820160038510615907576159076158db565b8483526020604081850152818551808452606086019150828701935060005b81811015615944578451151583529383019391830191600101615926565b5090979650505050505050565b6000806040838503121561596457600080fd5b82356001600160401b038082111561597b57600080fd5b61510386838701615227565b600080600080600060a0868803121561599f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080600080608085870312156159d857600080fd5b84356001600160401b038111156159ee57600080fd5b6159fa87828801615227565b945050615a0960208601614ab7565b93969395505050506040820135916060013590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201615a5c57615a5c615a34565b5060010190565b60ff818116838216019081111561111b5761111b615a34565b60ff828116828216039081111561111b5761111b615a34565b808202811582820484141761111b5761111b615a34565b600082615ac957634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff8103615ae457615ae4615a34565b60010192915050565b600060ff821680615b0057615b00615a34565b6000190192915050565b6001600160a01b03831681526040810160048310615b2a57615b2a6158db565b8260208301529392505050565b600060208284031215615b4957600080fd5b81516147d881614a21565b6020808252600d908201526c24b73b30b634b229b2b73232b960991b604082015260600190565b6020808252600e908201526d496e76616c69644164647265737360901b604082015260600190565b8181038181111561111b5761111b615a34565b8082018082111561111b5761111b615a34565b6020808252600f908201526e4469766964657242616452616e676560881b604082015260600190565b600081518084526020808501945080840160005b83811015615c2757815162ffffff1687529582019590820190600101615c06565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b82811015615c6b57815184529284019290840190600101615c4f565b5050508381038285015285518082528683019183019060005b81811015615ca457835161ffff1683529284019291840191600101615c84565b505084810360408601526140d98187615bf2565b6020808252600a90820152690496e76616c69644361760b41b604082015260600190565b600060a08201878352602061ffff80891682860152604062ffffff8916818701526060600289810b8289015260a0608089015285895180885260c08a019150868b01975060005b81811015615d575788518051881684528881015160ff1689850152860151840b868401529787019791840191600101615d23565b50909e9d5050505050505050505050505050565b8082018281126000831280158216821582161715615d8b57615d8b615a34565b505092915050565b818103600083128015838313168383128216171561181857611818615a34565b8881526000602089818401528860408401528760608401528660808401528560a08401528460c084015260e08301845182860160005b82811015615e0557815184529284019290840190600101615de9565b50919d9c50505050505050505050505050565b6000855160005b81811015615e395760208189018101518583015201615e1f565b5091909101938452506020830191909152604082015260600191905056fea264697066735822122082c2ca4957d7d35ce9d6a062592ec6ec1ac4583b20e23fc8ad73b3a46298b81264736f6c63430008140033