124.3k txs
221.5k calls
constructor
constructor(address _tokiemonNFT, address _manaSystem, address _tokiemonEquipment, address _tokiemonEnergy, address _oracle)
functions
availableBattles
viewfunction availableBattles(uint256) view returns (uint256)
battleCount
viewfunction battleCount() view returns (uint256)
battlePacks
viewfunction battlePacks(uint256) view returns (uint256 price, uint256 numberOfBattles, bool active)
battles
viewfunction battles(uint256) view returns (uint256 winner, uint256 challenger, uint256 opponent, address challengerAddress, address opponentAddress, uint8 challengerStyle, uint8 opponentStyle, uint256 challengerTotalLevel, uint256 opponentTotalLevel)
battleSettings
viewfunction battleSettings() view returns (bool equipmentOn, bool energyOn, uint8 energyLossChallenger, uint8 energyLossOpponent)
calculateBattleReward
viewfunction calculateBattleReward(uint256 winnerTokenId, uint256 loserTokenId, uint256 challengerTokenId) view returns (uint256)
calculateTokenAmount
viewfunction calculateTokenAmount(address paymentToken, uint256 packId) view returns (uint256 tokenPriceNative, uint256 tokenAmount)
calculateWinProbability
viewfunction calculateWinProbability(uint256 challengerTokenId, uint256 opponentTokenId, uint8 challengerStyle) view returns (uint256)
criticalEnergyProbability
viewfunction criticalEnergyProbability() view returns (int256)
criticalEnergyThreshold
viewfunction criticalEnergyThreshold() view returns (uint256)
dailyBattleSettings
viewfunction dailyBattleSettings() view returns (uint256 freeMaxDailyBattles, uint256 freeBattleRegenerationTime, uint256 standardMaxDailyBattles, uint256 standardBattleRegenerationTime, uint256 maxFreeTierDailyBattlesPerAddress)
dailyFreeTierBattlesUsedByAddress
viewfunction dailyFreeTierBattlesUsedByAddress(address) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
energyThresholds
viewfunction energyThresholds(uint256) view returns (uint256 threshold, int256 adjustment)
freeTier
viewfunction freeTier() view returns (uint256)
getAvailableBattles
viewfunction getAvailableBattles(uint256 tokenId) view returns (uint256)
getBattleResult
viewfunction getBattleResult(uint256 battleId) view returns (tuple)
getBattlesLeftBreakdown
viewfunction getBattlesLeftBreakdown(uint256 tokenId) view returns (uint256, uint256)
getEnergyProbabilityImpact
viewfunction getEnergyProbabilityImpact(uint256 currentEnergy) view returns (int256)
getNextBattleRegenerationTime
viewfunction getNextBattleRegenerationTime(uint256 tokenId) view returns (uint256)
getRemainingDailyFreeTierBattles
viewfunction getRemainingDailyFreeTierBattles(address player) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSkillInfo
viewfunction getSkillInfo(uint256 tokenId) view returns (uint8[3] skillLevels, uint256 totalLevel, uint8 bestSkill)
getTotalBattlesLeft
viewfunction getTotalBattlesLeft(uint256 tokenId) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastBattleTimestamp
viewfunction lastBattleTimestamp(uint256) view returns (uint256)
lastDailyResetForFreeTierByAddress
viewfunction lastDailyResetForFreeTierByAddress(address) view returns (uint256)
manaSystem
viewfunction manaSystem() view returns (address)
MINTER_ROLE
viewfunction MINTER_ROLE() view returns (bytes32)
nextBattlePackId
viewfunction nextBattlePackId() view returns (uint256)
oracle
viewfunction oracle() view returns (address)
purchasedBattles
viewfunction purchasedBattles(uint256) view returns (uint256)
regenSurplus
viewfunction regenSurplus(uint256) view returns (uint256)
rewardConfig
viewfunction rewardConfig() view returns (uint256 minReward, uint256 maxReward, uint256 maxLevel, uint256 freeTierMultiplier, uint256 bonusMultiplier, uint256 idleMultiplier)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tierManaPerBattle
viewfunction tierManaPerBattle(uint256) view returns (uint256)
tokiemonEnergy
viewfunction tokiemonEnergy() view returns (address)
tokiemonEquipment
viewfunction tokiemonEquipment() view returns (address)
tokiemonNFT
viewfunction tokiemonNFT() view returns (address)
addBattlePack
nonpayablefunction addBattlePack(uint256 _price, uint256 _battles)
addBattlesToToken
nonpayablefunction addBattlesToToken(uint256 tokenId, uint256 amount)
battle
nonpayablefunction battle(uint256 challengerTokenId, uint256 opponentTokenId, uint8 challengerStyle)
buyBattles
payablefunction buyBattles(uint256 _tokenId, uint256 _packId) payable
buyBattlesWithERC20
nonpayablefunction buyBattlesWithERC20(uint256 _tokenId, uint256 _packId, address paymentToken, uint256 maxPaymentTokenAmount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
removeBattlePack
nonpayablefunction removeBattlePack(uint256 _packId)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setBattleSettings
nonpayablefunction setBattleSettings(bool _equipmentOn, bool _energyOn, uint8 _energyLossChallenger, uint8 _energyLossOpponent)
setCriticalEnergySettings
nonpayablefunction setCriticalEnergySettings(uint256 _threshold, int256 _probability)
setDailyBattleSettings
nonpayablefunction setDailyBattleSettings(uint256 _freeMaxDailyBattles, uint256 _freeBattleRegenerationTime, uint256 _standardMaxDailyBattles, uint256 _standardBattleRegenerationTime, uint256 _maxFreeTierDailyBattlesPerAddress)
setEnergyThresholds
nonpayablefunction setEnergyThresholds(tuple[] _newThresholds)
setOracle
nonpayablefunction setOracle(address _oracle)
setRewardConfig
nonpayablefunction setRewardConfig(uint256 _minReward, uint256 _maxReward, uint256 _maxLevel, uint256 _freeTierMultiplier, uint256 _bonusMultiplier, uint256 _idleMultiplier)
setTierManaPerBattle
nonpayablefunction setTierManaPerBattle(uint256 tier, uint256 manaAmount)
trainBatch
nonpayablefunction trainBatch(uint256[] tokenIds)
updateBattlePack
nonpayablefunction updateBattlePack(uint256 _packId, uint256 _price, uint256 _battles, bool _active)
withdrawFunds
nonpayablefunction withdrawFunds(address _to)
events
BattleComplete
event BattleComplete(uint256 battleId, uint256 indexed winner, uint256 indexed challenger, uint256 indexed opponent, address challengerAddress, address opponentAddress, uint8 challengerStyle, uint8 opponentStyle, uint256 challengerTotalLevel, uint256 opponentTotalLevel, uint8[3] challengerSkillLevels, uint8[3] opponentSkillLevels)
BattlePackPurchased
event BattlePackPurchased(uint256 tokenId, uint256 numberOfBattles)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080604052600460065561ea606007553480156200001c57600080fd5b50604051620052f4380380620052f48339810160408190526200003f91620003fa565b600180546001600160a01b03199081166001600160a01b038881169190911790925560028054821687841617905560038054821686841617905560048054821685841617905560058054909116918316919091179055620000a26000336200032e565b50620000cf7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336200032e565b50506040805160c081018252601680825260de6020808401829052610129848601819052606460608087018290526080808801839052601460a0988901819052600c889055600d96909655600e93909355600f8290556010829055601185905587519687018852600280885261a8c08886018190526004898b018190526154608a850181905260059a87018b9052601284905560139290925590965560159590955594869055865191820187526001808352828401819052600a8389018190526003939096018390526017805463ffffffff191663030a0101179055875180890189526019808252600919828701908152600b80548086018255600082815294517f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9918b028281019190915592517f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dba938401558c51808e018e5260328152600419818b01908152835480890185558488529151918c028084019290925551908401558c51808e018e5260508152808a01868152835480890185558488529151918c028084019290925551908401558c51808e01909d52958c528b88018b8152815495860182559084529a51939097029384019290925597519190940155600984905591835580527f156774b33c8bc7cb83eda4cbc43b36c7c9490ff8913c488ccd5132cfc71344ea9290925560077f2c5f9a2e204d4db70ad0f9037679e33061b4c51a386497019bee969e16be28d75591527f1ae1eab41a4db68d73559dd6c8b7ac16a4bc819634768486d35edbff05543abf55506200046a92505050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16620003d3576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200038a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620003d7565b5060005b92915050565b80516001600160a01b0381168114620003f557600080fd5b919050565b600080600080600060a086880312156200041357600080fd5b6200041e86620003dd565b94506200042e60208701620003dd565b93506200043e60408701620003dd565b92506200044e60608701620003dd565b91506200045e60808701620003dd565b90509295509295909350565b614e7a806200047a6000396000f3fe6080604052600436106103815760003560e01c80637b739cab116101d1578063b27e66ff11610102578063d547741f116100a0578063e66173461161006f578063e661734614610c51578063ed2ed4db14610c67578063ed88dc3c14610c87578063fc4297c814610c9a57600080fd5b8063d547741f14610bc1578063e00b636314610be1578063e521945414610bf7578063e55e1e5114610c2457600080fd5b8063b9282d53116100dc578063b9282d5314610b37578063d4b95f0714610b4d578063d533d23c14610b6d578063d539139314610b8d57600080fd5b8063b27e66ff14610a87578063b3ee719614610ab6578063b55d846d14610b1757600080fd5b80639ce22e8f1161016f578063a217fddf11610149578063a217fddf14610a12578063a8e138e914610a27578063aa38e60514610a47578063aac61a1f14610a6757600080fd5b80639ce22e8f146109a55780639d6a72a9146109c5578063a043710f146109e557600080fd5b80638433d09b116101ab5780638433d09b146108f65780638fa81d251461094557806391d148541461096557806396edf7d01461098557600080fd5b80637b739cab146108745780637dc0d1d0146108a15780637fe78382146108c157600080fd5b806336568abe116102b6578063603cf731116102545780636cd7d1aa116102235780636cd7d1aa146107e457806371b8b83a1461081157806372f2f6891461083e5780637adbf9731461085457600080fd5b8063603cf731146106ea578063606d2e96146107165780636408fa48146107a457806368742da6146107c457600080fd5b80633c0452b1116102905780633c0452b11461063c5780633cce56771461065c5780634e94c2851461067257806351f9149e146106ca57600080fd5b806336568abe146105dc5780633890d81c146105fc5780633b929bfc1461061c57600080fd5b806315de61881161032357806324bd783f116102fd57806324bd783f146105375780632904c5291461056f5780632f2ff15d1461059c578063334a104c146105bc57600080fd5b806315de6188146104c7578063218dee89146104e7578063248a9ca31461050757600080fd5b806309d999751161035f57806309d999751461040b5780630d90df791461042b578063122eb65014610487578063133ae3bc146104a757600080fd5b806301ffc9a7146103865780630407586e146103bb57806304ffeaa3146103e9575b600080fd5b34801561039257600080fd5b506103a66103a1366004614359565b610cba565b60405190151581526020015b60405180910390f35b3480156103c757600080fd5b506103db6103d6366004614383565b610cf1565b6040519081526020016103b2565b3480156103f557600080fd5b5061040961040436600461439c565b610e14565b005b34801561041757600080fd5b506104096104263660046143d9565b61151d565b34801561043757600080fd5b5061046a610446366004614383565b60186020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016103b2565b34801561049357600080fd5b506104096104a236600461444e565b61171d565b3480156104b357600080fd5b506104096104c236600461444e565b61173a565b3480156104d357600080fd5b506103db6104e2366004614383565b611856565b3480156104f357600080fd5b506103db610502366004614383565b611975565b34801561051357600080fd5b506103db610522366004614383565b60009081526020819052604090206001015490565b34801561054357600080fd5b50600454610557906001600160a01b031681565b6040516001600160a01b0390911681526020016103b2565b34801561057b57600080fd5b5061058f61058a366004614383565b611a35565b6040516103b291906144ce565b3480156105a857600080fd5b506104096105b736600461459f565b611bcf565b3480156105c857600080fd5b50600154610557906001600160a01b031681565b3480156105e857600080fd5b506104096105f736600461459f565b611bf4565b34801561060857600080fd5b506103db610617366004614383565b611c2c565b34801561062857600080fd5b506103db6106373660046145cf565b611c4e565b34801561064857600080fd5b50600354610557906001600160a01b031681565b34801561066857600080fd5b506103db600a5481565b34801561067e57600080fd5b50600c54600d54600e54600f5460105460115461069d95949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103b2565b3480156106d657600080fd5b506104096106e5366004614609565b611ccc565b3480156106f657600080fd5b506103db610705366004614383565b602080526000908152604090205481565b34801561072257600080fd5b5061078f610731366004614383565b60196020526000908152604090208054600182015460028301546003840154600485015460058601546006909601549495939492936001600160a01b03928316939282169260ff600160a01b8404811693600160a81b900416919089565b6040516103b299989796959493929190614665565b3480156107b057600080fd5b506103db6107bf3660046146c4565b611d4a565b3480156107d057600080fd5b506104096107df3660046145cf565b611edc565b3480156107f057600080fd5b506103db6107ff366004614383565b601a6020526000908152604090205481565b34801561081d57600080fd5b506103db61082c3660046145cf565b601f6020526000908152604090205481565b34801561084a57600080fd5b506103db60085481565b34801561086057600080fd5b5061040961086f3660046145cf565b611fc6565b34801561088057600080fd5b506103db61088f3660046145cf565b601e6020526000908152604090205481565b3480156108ad57600080fd5b50600554610557906001600160a01b031681565b3480156108cd57600080fd5b506108e16108dc366004614383565b611ff4565b604080519283526020830191909152016103b2565b34801561090257600080fd5b5060125460135460145460155460165461091d949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103b2565b34801561095157600080fd5b5061040961096036600461444e565b612022565b34801561097157600080fd5b506103a661098036600461459f565b612092565b34801561099157600080fd5b506104096109a03660046146f0565b6120bb565b3480156109b157600080fd5b506104096109c036600461472b565b612105565b3480156109d157600080fd5b506104096109e036600461444e565b61220b565b3480156109f157600080fd5b506103db610a00366004614383565b601b6020526000908152604090205481565b348015610a1e57600080fd5b506103db600081565b348015610a3357600080fd5b50600254610557906001600160a01b031681565b348015610a5357600080fd5b506103db610a6236600461439c565b61225d565b348015610a7357600080fd5b506108e1610a8236600461476e565b612332565b348015610a9357600080fd5b50610aa7610aa2366004614383565b612436565b6040516103b29392919061479a565b348015610ac257600080fd5b50601754610aec9060ff808216916101008104821691620100008204811691630100000090041684565b604080519415158552921515602085015260ff918216928401929092521660608201526080016103b2565b348015610b2357600080fd5b50610409610b323660046147bb565b612654565b348015610b4357600080fd5b506103db60095481565b348015610b5957600080fd5b506108e1610b68366004614383565b6128ce565b348015610b7957600080fd5b50610409610b8836600461481e565b6128f1565b348015610b9957600080fd5b506103db7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b348015610bcd57600080fd5b50610409610bdc36600461459f565b612b9f565b348015610bed57600080fd5b506103db60075481565b348015610c0357600080fd5b506103db610c12366004614383565b601c6020526000908152604090205481565b348015610c3057600080fd5b506103db610c3f366004614383565b601d6020526000908152604090205481565b348015610c5d57600080fd5b506103db60065481565b348015610c7357600080fd5b50610409610c8236600461485d565b612bc4565b610409610c9536600461444e565b612c6e565b348015610ca657600080fd5b50610409610cb5366004614383565b612d38565b60006001600160e01b03198216637965db0b60e01b1480610ceb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600154604051632e2349af60e11b81526004810183905260009182916001600160a01b0390911690635c46935e90602401600060405180830381865afa158015610d3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d679190810190614974565b509250505060006006548214610d7f57601454610d83565b6012545b905060006006548314610d9857601554610d9c565b6013545b6000868152601b602052604081205491925090610db99042614a03565b6000878152601d6020526040812054919250908390610dd89084614a16565b610de29190614a3f565b6000888152601c6020526040902054909150610e0990610e03908390614a16565b85612db0565b979650505050505050565b600154604051632e2349af60e11b8152600481018590526000916001600160a01b031690635c46935e90602401600060405180830381865afa158015610e5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e869190810190614974565b506006546001546040516331a9108f60e11b8152600481018a905292955090851493503392506001600160a01b031690636352211e90602401602060405180830381865afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190614a53565b6001600160a01b031614610f695760405162461bcd60e51b815260206004820152602560248201527f596f7520646f6e2774206f776e20746865206368616c6c656e67657220546f6b60448201526434b2b6b7b760d91b60648201526084015b60405180910390fd5b6001546040516331a9108f60e11b8152600481018690526000916001600160a01b031690636352211e90602401602060405180830381865afa158015610fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd79190614a53565b6001600160a01b03160361102d5760405162461bcd60e51b815260206004820152601f60248201527f4f70706f6e656e7420546f6b69656d6f6e20646f65736e2774206578697374006044820152606401610f60565b8385036110735760405162461bcd60e51b8152602060048201526014602482015273446f6e2774206875727420796f757273656c662160601b6044820152606401610f60565b6001546040516331a9108f60e11b81526004810186905233916001600160a01b031690636352211e90602401602060405180830381865afa1580156110bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e09190614a53565b6001600160a01b0316036111465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420626174746c6520616761696e737420796f7572206f776e205460448201526637b5b4b2b6b7b760c91b6064820152608401610f60565b6000858152601b60205260408120549003611178576111686201518042614a03565b6000868152601b60205260409020555b61118185612dc6565b600061118c86611c2c565b9050600081116111d05760405162461bcd60e51b815260206004820152600f60248201526e139bc818985d1d1b195cc81b19599d608a1b6044820152606401610f60565b6000868152601c602052604090205415158280156111eb5750805b1561127d576111f933612f1b565b601654336000908152601f6020526040902054108061122557506000878152601a602052604090205415155b61127d5760405162461bcd60e51b8152602060048201526024808201527f4461696c792066726565207469657220626174746c65206c696d69742072656160448201526318da195960e21b6064820152608401610f60565b80156112ce576000878152601c6020526040812080549161129d83614a70565b919050555082156112c957336000908152601f602052604081208054916112c383614a87565b91905055505b6112ee565b6000878152601a602052604081208054916112e883614a70565b91905055505b60006112f987612436565b92505050600061130a898989612fad565b9050600089821461131b578961131d565b885b9050600061132c83838d611d4a565b6002546001546040516331a9108f60e11b8152600481018790529293506001600160a01b039182169263510941129290911690636352211e90602401602060405180830381865afa158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190614a53565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b1580156113f157600080fd5b505af1158015611405573d6000803e3d6000fd5b5050601754610100900460ff161591506115039050578a82036114945760048054601754604051631548dde560e11b81529283018e905262010000900460ff1660248301526001600160a01b031690632a91bbca90604401600060405180830381600087803b15801561147757600080fd5b505af115801561148b573d6000803e3d6000fd5b50505050611503565b60048054601754604051631548dde560e11b81529283018d90526301000000900460ff1660248301526001600160a01b031690632a91bbca90604401600060405180830381600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050505b6115108b8b8b8787613047565b5050505050505050505050565b6000611528816132dc565b816115815760405162461bcd60e51b815260206004820152602360248201527f4d7573742070726f76696465206174206c65617374206f6e65207468726573686044820152621bdb1960ea1b6064820152608401610f60565b828261158e600182614a03565b81811061159d5761159d614aa0565b905060400201600001356064146115f65760405162461bcd60e51b815260206004820152601a60248201527f4c617374207468726573686f6c64206d757374206265203130300000000000006044820152606401610f60565b60015b828110156116a65783838281811061161357611613614aa0565b60400291909101359050848461162a600185614a03565b81811061163957611639614aa0565b905060400201600001351061169e5760405162461bcd60e51b815260206004820152602560248201527f5468726573686f6c6473206d75737420626520696e20617363656e64696e672060448201526437b93232b960d91b6064820152608401610f60565b6001016115f9565b506116b3600b60006140ed565b60005b8281101561171757600b8484838181106116d2576116d2614aa0565b83546001810185556000948552602090942060409091029290920192600202909101905061170d828281358155602082013560018201555050565b50506001016116b6565b50505050565b6000611728816132dc565b50600091825260208052604090912055565b6000611745816132dc565b600b60008154811061175957611759614aa0565b90600052602060002090600202016000015483106117df5760405162461bcd60e51b815260206004820152603c60248201527f437269746963616c207468726573686f6c64206d757374206265206c6573732060448201527f7468616e20666972737420726567756c6172207468726573686f6c64000000006064820152608401610f60565b600082121580156117f257506126f78213155b61184a5760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420637269746963616c20656e657267792070726f626162696c60448201526269747960e81b6064820152608401610f60565b50600991909155600a55565b600154604051632e2349af60e11b81526004810183905260009182916001600160a01b0390911690635c46935e90602401600060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118cc9190810190614974565b5092505050600060065482146118e4576014546118e8565b6012545b9050600060065483146118fd57601554611901565b6013545b90508161190d86610cf1565b1061191d57506000949350505050565b6000858152601b60205260408120546119369042614a03565b6000878152601d60205260408120549192509083906119559084614a16565b61195f9190614ab6565b6119699084614a03565b9050610e098142614a16565b6000600954821161198a57506126f619919050565b600b80546000919061199e90600190614a03565b815481106119ae576119ae614aa0565b906000526020600020906002020160010154905060005b600b54811015611a2e57600b81815481106119e2576119e2614aa0565b9060005260206000209060020201600001548411611a2657600b8181548110611a0d57611a0d614aa0565b9060005260206000209060020201600101549150611a2e565b6001016119c5565b5092915050565b611a3d61410e565b600082815260196020908152604091829020825161016081018452815481526001820154928101929092526002808201549383019390935260038101546001600160a01b039081166060840152600482015490811660808401529192909160a0840191600160a01b90910460ff1690811115611abb57611abb614470565b6002811115611acc57611acc614470565b81526020016004820160159054906101000a900460ff166002811115611af457611af4614470565b6002811115611b0557611b05614470565b8152600582015460208201526006820154604080830191909152805160608082019283905290920191906007840190600390826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611b3c57505050928452505060408051606081019182905260209093019291506008840190600390826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611b915790505050505050815250509050919050565b600082815260208190526040902060010154611bea816132dc565b61171783836132e9565b6001600160a01b0381163314611c1d5760405163334bd91960e11b815260040160405180910390fd5b611c27828261337b565b505050565b6000818152601a6020526040812054611c4483610cf1565b610ceb9190614a16565b600080611c5e6201518042614a3f565b6001600160a01b0384166000908152601e602052604081205491925090611c89906201518090614a3f565b905080821115611c9e57505060165492915050565b6001600160a01b0384166000908152601f6020526040902054601654611cc49190614a03565b949350505050565b6000611cd7816132dc565b50604080516080810182529415158086529315156020860181905260ff9384169186018290529190921660609094018490526017805461ffff191661ff0019909416939093176101009091021763ffff000019166201000090910263ff0000001916176301000000909202919091179055565b600080611d5684612436565b50600154604051632e2349af60e11b815260048101899052919350600092506001600160a01b031690635c46935e90602401600060405180830381865afa158015611da5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dcd9190810190614974565b509250505060006001611de4600c600201546133e6565b611dee9190614a03565b6001611df9856133e6565b611e039190614a03565b600c54600d54611e139190614a03565b611e1d9190614aca565b611e279190614a3f565b600c54611e349085614a16565b611e3e9190614a16565b9050611e65611e5282600c6000015461347a565b600d54611e60908690614a16565b612db0565b60065490915082148015611e9057600f54606490611e839084614aca565b611e8d9190614a3f565b91505b858814611eb457601154606490611ea79084614aca565b611eb19190614a3f565b91505b601054606490611ec49084614aca565b611ece9190614a3f565b9450505050505b9392505050565b6000611ee7816132dc565b4780611f2c5760405162461bcd60e51b81526020600482015260146024820152734e6f2066756e647320746f20776974686472617760601b6044820152606401610f60565b6000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f79576040519150601f19603f3d011682016040523d82523d6000602084013e611f7e565b606091505b50509050806117175760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610f60565b6000611fd1816132dc565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600b818154811061200457600080fd5b60009182526020909120600290910201805460019091015490915082565b600061202d816132dc565b6040805160608101825284815260208082018581526001838501818152600880546000908152601890955295842094518555915190840155516002909201805460ff1916921515929092179091558154919061208883614a87565b9190505550505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006120c6816132dc565b506040805160a0810182528681526020810186905290810184905260608101839052608001819052601294909455601392909255601455601555601655565b6000612110816132dc565b85871061216f5760405162461bcd60e51b815260206004820152602760248201527f4d696e20726577617264206d757374206265206c657373207468616e206d6178604482015266081c995dd85c9960ca1b6064820152608401610f60565b600185116121bf5760405162461bcd60e51b815260206004820181905260248201527f4d6178206c6576656c206d7573742062652067726561746572207468616e20316044820152606401610f60565b506040805160c08101825287815260208101879052908101859052606081018490526080810183905260a001819052600c95909555600d93909355600e91909155600f55601055601155565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6612235816132dc565b6000838152601a602052604081208054849290612253908490614a16565b9091555050505050565b60008061226b858585613489565b90506000611388905061228981836101000151846101200151613843565b905061229e818360c001518460e0015161393b565b90506122bd8183608001518460a0015185604001518660600151613981565b60175490915060ff16156122e3576122e0818361014001518461016001516139d4565b90505b601754610100900460ff16156123055761230281836101800151613a16565b90505b6000811215612312575060005b6123286123216126f783612db0565b601961347a565b9695505050505050565b60008181526018602090815260408083208151606081018352815481526001820154938101939093526002015460ff1615159082018190528291906123895760405162461bcd60e51b8152600401610f6090614ae1565b60008160200151116123ad5760405162461bcd60e51b8152600401610f6090614b18565b600554815160405163f1958d8960e01b81526001600160a01b03888116600483015260248201929092526001604482015291169063f1958d89906064016040805180830381865afa158015612406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242a9190614b45565b92509250509250929050565b61243e614173565b600154604051632c170c9d60e21b81526004810184905260006024820181905291829182916001600160a01b03169063b05c327490604401608060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190614b82565b60018054604051632c170c9d60e21b81526004810189905260248101929092529192506000916001600160a01b03169063b05c327490604401608060405180830381865afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125319190614b82565b600154604051632c170c9d60e21b815260048101899052600260248201529192506000916001600160a01b039091169063b05c327490604401608060405180830381865afa158015612587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ab9190614b82565b60408051606081018252855160ff90811682528551811660208301528351811692820192909252825185518751929a509394508216926125ef929081169116614a16565b6125f99190614a16565b8251845191965060ff90811691161080159061261e57508051835160ff918216911610155b1561262c576000935061264a565b8051825160ff918216911610612645576001935061264a565b600293505b5050509193909250565b6000805b8281101561286457600084848381811061267457612674614aa0565b6001546040516331a9108f60e11b8152602092909202939093013560048201819052935033926001600160a01b03169150636352211e90602401602060405180830381865afa1580156126cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ef9190614a53565b6001600160a01b0316146127455760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f6e2774206f776e2074686520546f6b69656d6f6e0000000000006044820152606401610f60565b600154604051632e2349af60e11b8152600481018390526000916001600160a01b031690635c46935e90602401600060405180830381865afa15801561278f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127b79190810190614974565b50925050508060040361280c5760405162461bcd60e51b815260206004820152601f60248201527f46726565207469657220546f6b69656d6f6e2063616e6e6f7420747261696e006044820152606401610f60565b600081815260208052604090205461282383612dc6565b600061282e84610cf1565b905061283a8183614aca565b6128449087614a16565b6000948552601c6020526040852094909455509193505050600101612658565b50600254604051632884a08960e11b8152336004820152602481018390526001600160a01b0390911690635109411290604401600060405180830381600087803b1580156128b157600080fd5b505af11580156128c5573d6000803e3d6000fd5b50505050505050565b6000818152601a602052604081205481906128e884610cf1565b91509150915091565b600083815260186020908152604091829020825160608101845281548152600182015492810183905260029091015460ff161515928101929092526129485760405162461bcd60e51b8152600401610f6090614b18565b80604001516129695760405162461bcd60e51b8152600401610f6090614ae1565b60055460405163b5af090f60e01b81526001600160a01b0385811660048301529091169063b5af090f90602401602060405180830381865afa1580156129b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d79190614bdf565b612a235760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7420746f6b656e206e6f742077686974656c69737465640000006044820152606401610f60565b600554815160405163f1958d8960e01b81526001600160a01b038681166004830152602482019290925260016044820152600092919091169063f1958d89906064016040805180830381865afa158015612a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa59190614b45565b91505082811115612af85760405162461bcd60e51b815260206004820181905260248201527f536c6970706167653a20616d6f756e742065786365656473206d6178696d756d6044820152606401610f60565b600554604051634ec4224d60e11b81526001600160a01b038681166004830152602482018490526000928392839283921690639d88449a90604401608060405180830381865afa158015612b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b749190614bfc565b9350935093509350612b898885858585613afd565b612b938a8a613c5c565b50505050505050505050565b600082815260208190526040902060010154612bba816132dc565b611717838361337b565b6000612bcf816132dc565b600085815260186020526040902054612c205760405162461bcd60e51b8152602060048201526013602482015272141858dac8191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606401610f60565b50604080516060810182529384526020808501938452911515848201908152600095865260189092529093209151825551600182015590516002909101805460ff1916911515919091179055565b600081815260186020908152604091829020825160608101845281548152600182015492810183905260029091015460ff16151592810192909252612cc55760405162461bcd60e51b8152600401610f6090614b18565b8060400151612ce65760405162461bcd60e51b8152600401610f6090614ae1565b8051341015612d2e5760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58da595b9d081c185e5b595b9d60621b6044820152606401610f60565b611c278383613c5c565b6000612d43816132dc565b600082815260186020526040902054612d945760405162461bcd60e51b8152602060048201526013602482015272141858dac8191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606401610f60565b506000908152601860205260409020600201805460ff19169055565b6000818310612dbf5781611ed5565b5090919050565b600154604051632e2349af60e11b8152600481018390526000916001600160a01b031690635c46935e90602401600060405180830381865afa158015612e10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e389190810190614974565b509250505060006006548214612e5057601454612e54565b6012545b905060006006548314612e6957601554612e6d565b6013545b6000858152601b602052604081205491925090612e8a9042614a03565b6000868152601d602052604081205491925090612ea79083614a16565b90506000612eb58483614a3f565b6000888152601c6020526040902054909150612edb90612ed59083614a16565b86612db0565b6000888152601c6020526040902055612ef48483614ab6565b6000978852601d60209081526040808a2092909255601b9052909620429055505050505050565b6000612f2a6201518042614a3f565b6001600160a01b0383166000908152601e602052604081205491925090612f55906201518090614a3f565b905080821115611c27576001600160a01b0383166000908152601f6020526040812055612f856201518042614ab6565b612f8f9042614a03565b6001600160a01b0384166000908152601e6020526040902055505050565b600080612fbb85858561225d565b90506000612710424433898960405160200161300b959493929190948552602085019390935260609190911b6bffffffffffffffffffffffff191660408401526054830152607482015260940190565b6040516020818303038152906040528051906020012060001c61302e9190614ab6565b905081811061303d5784612328565b5093949350505050565b60008061305387612436565b509150915060008061306488612436565b506001546040516331a9108f60e11b8152600481018c90529294509092506000916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156130b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130db9190614a53565b90506040518061016001604052808781526020018b81526020018a8152602001336001600160a01b03168152602001826001600160a01b0316815260200189600281111561312b5761312b614470565b815260200188600281111561314257613142614470565b81526020808201879052604080830186905260608084018a905260809384018890526007546000908152601984528290208551815592850151600184015590840151600280840191909155908401516003830180546001600160a01b03199081166001600160a01b03938416179091559385015160048401805495861691909216908117825560a0860151939491926001600160a81b03199092161790600160a01b9084908111156131f6576131f6614470565b021790555060c082015160048201805460ff60a81b1916600160a81b83600281111561322457613224614470565b021790555060e0820151600582015561010082015160068201556101208201516132549060078301906003614191565b5061014082015161326b9060088301906003614191565b50905050888a877f8155235603d37f25ad52306d34158a723ffb5cacad0e048d15cb08a1d5b0e66e60075433868e8e8c8b8f8e6040516132b399989796959493929190614c32565b60405180910390a4600780549060006132cb83614a87565b919050555050505050505050505050565b6132e68133613cfb565b50565b60006132f58383612092565b613373576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561332b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610ceb565b506000610ceb565b60006133878383612092565b15613373576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610ceb565b600080608083901c156133fb57608092831c92015b604083901c1561340d57604092831c92015b602083901c1561341f57602092831c92015b601083901c1561343157601092831c92015b600883901c1561344357600892831c92015b600483901c1561345557600492831c92015b600283901c1561346757600292831c92015b600183901c15610ceb5760010192915050565b6000818311612dbf5781611ed5565b613491614220565b61349a84612436565b50604083015281526134ab83612436565b836020018460600185610120018360028111156134ca576134ca614470565b60028111156134db576134db614470565b905292909252505280518260028111156134f7576134f7614470565b6003811061350757613507614aa0565b602002015160ff168160800181815250508060200151816101200151600281111561353457613534614470565b6003811061354457613544614aa0565b602002015160ff1660a0820152610100810182600281111561356857613568614470565b9081600281111561357b5761357b614470565b905250600154604051632e2349af60e11b8152600481018690526001600160a01b0390911690635c46935e90602401600060405180830381865afa1580156135c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135ef9190810190614974565b9250505060c0820181600481111561360957613609614470565b600481111561361a5761361a614470565b905250600154604051632e2349af60e11b8152600481018590526001600160a01b0390911690635c46935e90602401600060405180830381865afa158015613666573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261368e9190810190614974565b9250505060e082018160048111156136a8576136a8614470565b60048111156136b9576136b9614470565b90525060175460ff16156137b957600354604051637ce2316d60e01b8152600481018690526001600160a01b0390911690637ce2316d90602401608060405180830381865afa158015613710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137349190614ca0565b610140820152600354604051637ce2316d60e01b8152600481018590526001600160a01b0390911690637ce2316d90602401608060405180830381865afa158015613783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a79190614ca0565b6101608201526137b681613d38565b90505b601754610100900460ff1615611ed55760048054604051633252bec760e21b81529182018690526001600160a01b03169063c94afb1c9060240160e060405180830381865afa158015613810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138349190614ce6565b610180820152611cc481613ea8565b60008083600281111561385857613858614470565b1480156138765750600282600281111561387457613874614470565b145b806138ae5750600183600281111561389057613890614470565b1480156138ae575060008260028111156138ac576138ac614470565b145b806138e6575060028360028111156138c8576138c8614470565b1480156138e6575060018260028111156138e4576138e4614470565b145b156138fe576138f7846101f4614d82565b9050611ed5565b81600281111561391057613910614470565b83600281111561392257613922614470565b14613933576138f76101f485614daa565b509192915050565b600081600481111561394f5761394f614470565b83600481111561396157613961614470565b61396b9190614daa565b6139779061012c614dca565b611cc49085614d82565b60008061398e8587614daa565b9050600061399c8486614daa565b90506139a981604b614dca565b6139b48360c8614dca565b6139be908a614d82565b6139c89190614d82565b98975050505050505050565b600080826060015184606001516139eb9190614daa565b905060646139f98282614d82565b613a039087614dca565b613a0d9190614dfa565b95945050505050565b6000600954826020015160ff1611613a315750600a54610ceb565b600b805460009190613a4590600190614a03565b81548110613a5557613a55614aa0565b906000526020600020906002020160010154905060005b600b54811015613adc57600b8181548110613a8957613a89614aa0565b906000526020600020906002020160000154846020015160ff1611613ad457600b8181548110613abb57613abb614aa0565b9060005260206000209060020201600101549150613adc565b600101613a6c565b506064613ae98282614d82565b613af39086614dca565b611cc49190614dfa565b8315613b9057613b9033600560009054906101000a90046001600160a01b03166001600160a01b0316634e6fd6c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7e9190614a53565b6001600160a01b038816919087613f41565b8215613c2357613c2333600560009054906101000a90046001600160a01b03166001600160a01b0316632131c68c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c119190614a53565b6001600160a01b038816919086613f41565b600082118015613c3b57506001600160a01b03811615155b15613c5557613c556001600160a01b038616338385613f41565b5050505050565b6000818152601860209081526040808320815160608101835281548152600182015481850181905260029092015460ff16151581840152868552601a909352908320805492939192909190613cb2908490614a16565b909155505060208181015160408051868152928301919091527f90f11f0279de9dae5d76170349d67dad468358725d042b860b31d710923f1f7e910160405180910390a1505050565b613d058282612092565b613d345760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610f60565b5050565b613d40614220565b6101408201516040810151602082015191519091613d5d91614a16565b613d679190614a16565b82604001818151613d789190614a16565b9052506101608201516040810151602082015191519091613d9891614a16565b613da29190614a16565b82606001818151613db39190614a16565b90525060008261010001516002811115613dcf57613dcf614470565b14613e105760018261010001516002811115613ded57613ded614470565b14613e015781610140015160400151613e18565b81610140015160200151613e18565b610140820151515b82608001818151613e299190614a16565b90525060008261012001516002811115613e4557613e45614470565b14613e865760018261012001516002811115613e6357613e63614470565b14613e775781610160015160400151613e8e565b81610160015160200151613e8e565b610160820151515b8260a001818151613e9f9190614a16565b90525090919050565b613eb0614220565b4282610180015160a00151118015613ee657508161010001516002811115613eda57613eda614470565b82610180015160600151145b15613f3d5781610180015160c0015115613f1f578161018001516080015160ff1682608001818151613f189190614a16565b9052505090565b8161018001516080015160ff1682608001818151613e9f9190614a03565b5090565b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092019092526020810180516001600160e01b03166323b872dd60e01b17905261171791869190600090613fa790841683613ff5565b90508051600014158015613fcc575080806020019051810190613fca9190614bdf565b155b15611c2757604051635274afe760e01b81526001600160a01b0384166004820152602401610f60565b6060611ed58383600084600080856001600160a01b0316848660405161401b9190614e28565b60006040518083038185875af1925050503d8060008114614058576040519150601f19603f3d011682016040523d82523d6000602084013e61405d565b606091505b509150915061232886838360608261407d57614078826140c4565b611ed5565b815115801561409457506001600160a01b0384163b155b156140bd57604051639996b31560e01b81526001600160a01b0385166004820152602401610f60565b5080611ed5565b8051156140d45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805460008255600202906000526020600020908101906132e69190614329565b604080516101608101825260008082526020820181905291810182905260608101829052608081018290529060a08201908152602001600081526020016000815260200160008152602001614161614173565b815260200161416e614173565b905290565b60405180606001604052806003906020820280368337509192915050565b6001830191839082156142145791602002820160005b838211156141e557835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026141a7565b80156142125782816101000a81549060ff02191690556001016020816000010492830192600103026141e5565b505b50613f3d929150614344565b604051806101a00160405280614234614173565b8152602001614241614173565b8152602001600081526020016000815260200160008152602001600081526020016000600481111561427557614275614470565b81526020016000815260200160008152602001600081526020016142ba6040518060800160405280600081526020016000815260200160008152602001600081525090565b81526020016142ea6040518060800160405280600081526020016000815260200160008152602001600081525090565b81526040805160e08101825260008082526020828101829052928201819052606082018190526080820181905260a0820181905260c082015291015290565b5b80821115613f3d576000808255600182015560020161432a565b5b80821115613f3d5760008155600101614345565b60006020828403121561436b57600080fd5b81356001600160e01b031981168114611ed557600080fd5b60006020828403121561439557600080fd5b5035919050565b6000806000606084860312156143b157600080fd5b83359250602084013591506040840135600381106143ce57600080fd5b809150509250925092565b600080602083850312156143ec57600080fd5b823567ffffffffffffffff8082111561440457600080fd5b818501915085601f83011261441857600080fd5b81358181111561442757600080fd5b8660208260061b850101111561443c57600080fd5b60209290920196919550909350505050565b6000806040838503121561446157600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106144a457634e487b7160e01b600052602160045260246000fd5b9052565b8060005b600381101561171757815160ff168452602093840193909101906001016144ac565b60006101e082019050825182526020830151602083015260408301516040830152606083015161450960608401826001600160a01b03169052565b50608083015161452460808401826001600160a01b03169052565b5060a083015161453760a0840182614486565b5060c083015161454a60c0840182614486565b5060e083015160e083015261010080840151818401525061012080840151614574828501826144a8565b5050610140830151611a2e6101808401826144a8565b6001600160a01b03811681146132e657600080fd5b600080604083850312156145b257600080fd5b8235915060208301356145c48161458a565b809150509250929050565b6000602082840312156145e157600080fd5b8135611ed58161458a565b80151581146132e657600080fd5b60ff811681146132e657600080fd5b6000806000806080858703121561461f57600080fd5b843561462a816145ec565b9350602085013561463a816145ec565b9250604085013561464a816145fa565b9150606085013561465a816145fa565b939692955090935050565b89815260208101899052604081018890526001600160a01b03878116606083015286166080820152610120810161469f60a0830187614486565b6146ac60c0830186614486565b60e08201939093526101000152979650505050505050565b6000806000606084860312156146d957600080fd5b505081359360208301359350604090920135919050565b600080600080600060a0868803121561470857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060008060008060c0878903121561474457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561478157600080fd5b823561478c8161458a565b946020939093013593505050565b60a081016147a882866144a8565b836060830152611cc46080830184614486565b600080602083850312156147ce57600080fd5b823567ffffffffffffffff808211156147e657600080fd5b818501915085601f8301126147fa57600080fd5b81358181111561480957600080fd5b8660208260051b850101111561443c57600080fd5b6000806000806080858703121561483457600080fd5b8435935060208501359250604085013561484d8161458a565b9396929550929360600135925050565b6000806000806080858703121561487357600080fd5b843593506020850135925060408501359150606085013561465a816145ec565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156148cc576148cc614893565b60405290565b60005b838110156148ed5781810151838201526020016148d5565b50506000910152565b600082601f83011261490757600080fd5b815167ffffffffffffffff8082111561492257614922614893565b604051601f8301601f19908116603f0116810190828211818310171561494a5761494a614893565b8160405283815286602085880101111561496357600080fd5b6123288460208301602089016148d2565b6000806000806080858703121561498a57600080fd5b845167ffffffffffffffff808211156149a257600080fd5b6149ae888389016148f6565b955060208701519150808211156149c457600080fd5b506149d1878288016148f6565b9350506040850151915060608501516005811061465a57600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ceb57610ceb6149ed565b80820180821115610ceb57610ceb6149ed565b634e487b7160e01b600052601260045260246000fd5b600082614a4e57614a4e614a29565b500490565b600060208284031215614a6557600080fd5b8151611ed58161458a565b600081614a7f57614a7f6149ed565b506000190190565b600060018201614a9957614a996149ed565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600082614ac557614ac5614a29565b500690565b8082028115828204841417610ceb57610ceb6149ed565b60208082526019908201527f426174746c65207061636b206973206e6f742061637469766500000000000000604082015260600190565b602080825260139082015272496e76616c696420626174746c65207061636b60681b604082015260600190565b60008060408385031215614b5857600080fd5b505080516020909101519092909150565b805163ffffffff81168114614b7d57600080fd5b919050565b600060808284031215614b9457600080fd5b614b9c6148a9565b8251614ba7816145fa565b8152614bb560208401614b69565b6020820152614bc660408401614b69565b6040820152606083015160608201528091505092915050565b600060208284031215614bf157600080fd5b8151611ed5816145ec565b60008060008060808587031215614c1257600080fd5b845193506020850151925060408501519150606085015161465a8161458a565b8981526001600160a01b038981166020830152881660408201526101a08101614c5e6060830189614486565b614c6b6080830188614486565b8560a08301528460c0830152614c8460e08301856144a8565b614c926101408301846144a8565b9a9950505050505050505050565b600060808284031215614cb257600080fd5b614cba6148a9565b825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600060e08284031215614cf857600080fd5b60405160e0810181811067ffffffffffffffff82111715614d1b57614d1b614893565b604052825181526020830151614d30816145fa565b8060208301525060408301516040820152606083015160608201526080830151614d59816145fa565b608082015260a0838101519082015260c0830151614d76816145ec565b60c08201529392505050565b8082018281126000831280158216821582161715614da257614da26149ed565b505092915050565b8181036000831280158383131683831282161715611a2e57611a2e6149ed565b80820260008212600160ff1b84141615614de657614de66149ed565b8181058314821517610ceb57610ceb6149ed565b600082614e0957614e09614a29565b600160ff1b821460001984141615614e2357614e236149ed565b500590565b60008251614e3a8184602087016148d2565b919091019291505056fea264697066735822122048fe1391e4b5a73ca18847bc34b25b1afccf890e4370eccaa125039ce7d84e9a64736f6c63430008180033000000000000000000000000802187c392b15cdc8df8aa05bfef314df1f65c62000000000000000000000000901a60c22ebf6b3799bb0d14d97a1908bbc0e7a90000000000000000000000006dca4408f97e9b22ab6df1b1dbc123f1a58e905800000000000000000000000028d05798e79c146976c5329b8588885a44660931000000000000000000000000fb63ff06b4203e450a626e264f7702be9d148fd7