0 txs
764 calls
constructor
No constructor.
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
arenas
viewfunction arenas(uint256) view returns (uint256 id, address creator, uint256 entryFee, uint256 duration, uint256 startTime, uint256 endTime, uint256 createdAt, uint256 requiredPlayers, uint256 players, uint256 initialPrizePool, uint8 arenaType, bool emergencyClosed, tuple boolParams, string name)
claimed
viewfunction claimed(bytes32) view returns (bool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
durationConfig
viewfunction durationConfig() view returns (uint256 min, uint256 max)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
feeBPS
viewfunction feeBPS() view returns (uint16)
feesByArena
viewfunction feesByArena(uint256) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
intervalToStartConfig
viewfunction intervalToStartConfig() view returns (uint256 min, uint256 max)
MAX_BPS
viewfunction MAX_BPS() view returns (uint16)
minEntryFee
viewfunction minEntryFee() view returns (uint256)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
paidForParticipate
viewfunction paidForParticipate(bytes32) view returns (uint256)
participants
viewfunction participants(bytes32) view returns (bool)
playersConfig
viewfunction playersConfig() view returns (uint256 min, uint256 max)
rootProofByArena
viewfunction rootProofByArena(uint256) view returns (bytes32)
SIGNER_ROLE
viewfunction SIGNER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timeLeftToRebuyBPS
viewfunction timeLeftToRebuyBPS() view returns (uint16)
treasury
viewfunction treasury() view returns (address)
claimRewards
nonpayablefunction claimRewards(uint256 _arenaId, uint256 _amount, bytes32[] _proofs)
createArena
payablefunction createArena(uint8 _type, uint256 _entryFee, uint256 _duration, uint256 _startTime, uint256 _requiredPlayers, string _name, tuple _boolParams) payable returns (uint256 arenaId)
emergencyClose
nonpayablefunction emergencyClose(uint256 _arenaId)
endArenaAndDistributeRewards
nonpayablefunction endArenaAndDistributeRewards(uint256 _arenaId, bytes32 _root)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
joinArena
payablefunction joinArena(tuple data, bytes signature) payable
joinArena
payablefunction joinArena(uint256 _arenaId) payable
leaveArena
nonpayablefunction leaveArena(uint256 _arenaId)
rebuy
payablefunction rebuy(uint256 _arenaId) payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setDurationConfig
nonpayablefunction setDurationConfig(tuple _config)
setFeeBPS
nonpayablefunction setFeeBPS(uint16 _feeBPS)
setIntervalToStartConfig
nonpayablefunction setIntervalToStartConfig(tuple _config)
setMinEntryFee
nonpayablefunction setMinEntryFee(uint256 _newFee)
setPlayersConfig
nonpayablefunction setPlayersConfig(tuple _config)
setTimeLeftToRebuyBPS
nonpayablefunction setTimeLeftToRebuyBPS(uint16 _timeLeftToRebuyBPS)
setTreasury
nonpayablefunction setTreasury(address _treasury)
updateMerkleRoot
nonpayablefunction updateMerkleRoot(uint256 _arenaId, bytes32 _root)
events
ArenaCreated
event ArenaCreated(uint256 indexed arenaId, address indexed creator, uint8 arenaType, bool signatured)
ArenaDeleted
event ArenaDeleted(uint256 indexed arenaId)
ArenaEnded
event ArenaEnded(uint256 indexed arenaId, bytes32 root)
DurationConfigSet
event DurationConfigSet(address indexed caller, uint256 min, uint256 max)
EIP712DomainChanged
event EIP712DomainChanged()
EmergencyClosed
event EmergencyClosed(address indexed caller, uint256 arenaId)
FeeBpsSet
event FeeBpsSet(address indexed caller, uint16 indexed newFeeBPS)
Initialized
event Initialized(uint64 version)
IntervalToStartConfigSet
event IntervalToStartConfigSet(address indexed caller, uint256 min, uint256 max)
MinEntryFeeUpdated
event MinEntryFeeUpdated(address indexed caller, uint256 newFee)
PlayerJoined
event PlayerJoined(uint256 indexed arenaId, address indexed player)
PlayerLeft
event PlayerLeft(uint256 indexed arenaId, address indexed player)
PlayerRebuy
event PlayerRebuy(uint256 indexed arenaId, address indexed player)
PlayersConfigSet
event PlayersConfigSet(address indexed caller, uint256 min, uint256 max)
RewardsClaimed
event RewardsClaimed(uint256 indexed arenaId, address indexed player, uint256 amount)
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)
RootUpdated
event RootUpdated(address indexed caller, uint256 arenaId, bytes32 newRoot)
TimeLeftToRebuyBPSSet
event TimeLeftToRebuyBPSSet(address indexed caller, uint16 indexed newTimeLeftToRebuyBPS)
TreasurySet
event TreasurySet(address indexed caller, address indexed newTreasury)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
PVPArena__AlreadyClaimed
error PVPArena__AlreadyClaimed()
PVPArena__AlreadyEnded
error PVPArena__AlreadyEnded()
PVPArena__AlreadyJoined
error PVPArena__AlreadyJoined()
PVPArena__ArenaCanceled
error PVPArena__ArenaCanceled()
PVPArena__ArenaIsSignatured
error PVPArena__ArenaIsSignatured()
PVPArena__ArenaLockedOnStart
error PVPArena__ArenaLockedOnStart()
PVPArena__ArenaNotEnded
error PVPArena__ArenaNotEnded()
PVPArena__ArenaNotStarted
error PVPArena__ArenaNotStarted()
PVPArena__ArenaRebuyLocked
error PVPArena__ArenaRebuyLocked()
PVPArena__ArenaRebuyTimeExeeded
error PVPArena__ArenaRebuyTimeExeeded()
PVPArena__ArenaStarted
error PVPArena__ArenaStarted()
PVPArena__EmergencyClosed
error PVPArena__EmergencyClosed()
PVPArena__InvalidAddress
error PVPArena__InvalidAddress()
PVPArena__InvalidArenaID
error PVPArena__InvalidArenaID()
PVPArena__InvalidDuration
error PVPArena__InvalidDuration()
PVPArena__InvalidFeeAmount
error PVPArena__InvalidFeeAmount()
PVPArena__InvalidMinMax
error PVPArena__InvalidMinMax()
PVPArena__InvalidPlayersRequired
error PVPArena__InvalidPlayersRequired()
PVPArena__InvalidProofs
error PVPArena__InvalidProofs()
PVPArena__InvalidTimestamp
error PVPArena__InvalidTimestamp()
PVPArena__IsNotSigner
error PVPArena__IsNotSigner()
PVPArena__NonceAlreadyUsed
error PVPArena__NonceAlreadyUsed()
PVPArena__NotJoined
error PVPArena__NotJoined()
PVPArena__RewardsNotDistributed
error PVPArena__RewardsNotDistributed()
PVPArena__TransferFailed
error PVPArena__TransferFailed()
PVPArena__ZeroValue
error PVPArena__ZeroValue()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
creation bytecode
0x608060405234801561001057600080fd5b506140c6806100206000396000f3fe6080604052600436106102465760003560e01c806376e5b86211610139578063c596e156116100b6578063f0f442601161007a578063f0f4426014610746578063f1e3311514610766578063f5b541a614610786578063f6b3a00a146107a8578063f996a5a5146107bb578063fd967f47146107dd57600080fd5b8063c596e1561461068e578063cc3c0f06146106ae578063d486481a146106de578063d547741f1461070b578063e975c5301461072b57600080fd5b80638ca5f739116100fd5780638ca5f739146105e557806391d148541461060557806396a4415014610625578063a1ebf35d14610645578063a217fddf1461067957600080fd5b806376e5b862146105205780638460c2de1461053657806384b0196e1461055657806384f4319c1461057e5780638ad18f88146105b857600080fd5b806348425952116101c7578063653e0f7f1161018b578063653e0f7f1461046157806366351b94146104915780636643def7146104b15780636a40b66b146104d157806375b238fc146104fe57600080fd5b806348425952146103bb57806348ff1387146103d65780634ae0ccdd146103e95780635b027c331461040957806361d027b31461042957600080fd5b8063262b7ae61161020e578063262b7ae6146103355780632babd51e146103485780632f2ff15d1461035b57806336568abe1461037b57806346feb24a1461039b57600080fd5b806301ffc9a71461024b57806306e47421146102805780631a1c6e53146102a257806320b8ebc0146102d7578063248a9ca314610307575b600080fd5b34801561025757600080fd5b5061026b61026636600461387c565b6107f3565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b3660046138a6565b61082a565b005b3480156102ae57600080fd5b506001546102c490600160a01b900461ffff1681565b60405161ffff9091168152602001610277565b3480156102e357600080fd5b506006546007546102f2919082565b60408051928352602083019190915201610277565b34801561031357600080fd5b506103276103223660046138c8565b610c08565b604051908152602001610277565b61032761034336600461392a565b610c2a565b6102a06103563660046139c7565b610fb2565b34801561036757600080fd5b506102a0610376366004613a3e565b6111c0565b34801561038757600080fd5b506102a0610396366004613a3e565b6111e2565b3480156103a757600080fd5b506102a06103b63660046138c8565b611215565b3480156103c757600080fd5b506002546003546102f2919082565b6102a06103e43660046138c8565b61184c565b3480156103f557600080fd5b506102a06104043660046138c8565b611c62565b34801561041557600080fd5b506102a06104243660046138c8565b61204f565b34801561043557600080fd5b50600154610449906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561046d57600080fd5b5061026b61047c3660046138c8565b600b6020526000908152604090205460ff1681565b34801561049d57600080fd5b506102a06104ac366004613a6a565b6120a6565b3480156104bd57600080fd5b506102a06104cc366004613aed565b6122a6565b3480156104dd57600080fd5b506103276104ec3660046138c8565b600a6020526000908152604090205481565b34801561050a57600080fd5b5061032760008051602061407183398151915281565b34801561052c57600080fd5b50610327600f5481565b34801561054257600080fd5b506102a0610551366004613b11565b61230d565b34801561056257600080fd5b5061056b612392565b6040516102779796959493929190613b6f565b34801561058a57600080fd5b5061059e6105993660046138c8565b612443565b6040516102779e9d9c9b9a99989796959493929190613c40565b3480156105c457600080fd5b506103276105d33660046138c8565b600e6020526000908152604090205481565b3480156105f157600080fd5b506102a0610600366004613b11565b612580565b34801561061157600080fd5b5061026b610620366004613a3e565b612605565b34801561063157600080fd5b506102a0610640366004613aed565b61263d565b34801561065157600080fd5b506103277fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7081565b34801561068557600080fd5b50610327600081565b34801561069a57600080fd5b506102a06106a9366004613b11565b6126a4565b3480156106ba57600080fd5b5061026b6106c93660046138c8565b600d6020526000908152604090205460ff1681565b3480156106ea57600080fd5b506103276106f93660046138c8565b600c6020526000908152604090205481565b34801561071757600080fd5b506102a0610726366004613a3e565b612729565b34801561073757600080fd5b506004546005546102f2919082565b34801561075257600080fd5b506102a0610761366004613cec565b612745565b34801561077257600080fd5b506102a06107813660046138a6565b6127d1565b34801561079257600080fd5b5061032760008051602061401183398151915281565b6102a06107b63660046138c8565b612851565b3480156107c757600080fd5b506001546102c490600160b01b900461ffff1681565b3480156107e957600080fd5b506102c461271081565b60006001600160e01b03198216637965db0b60e01b148061082457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061401183398151915261084281612a51565b600083815260096020818152604080842081516101c081018352815481526001808301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015292830154610120820152600a83015490929161014084019160ff16908111156108ea576108ea613c08565b60018111156108fb576108fb613c08565b8152600a82015460ff61010091829004811615156020808501919091526040805160608082018352600b8801548086161515835295860485161515938201939093526201000090940490921615158383015290830191909152600c8301805491909201919061096990613d07565b80601f016020809104026020016040519081016040528092919081815260200182805461099590613d07565b80156109e25780601f106109b7576101008083540402835291602001916109e2565b820191906000526020600020905b8154815290600101906020018083116109c557829003601f168201915b50505050508152505090508060000151600003610a125760405163291002e960e21b815260040160405180910390fd5b80610160015115610a3657604051632881aebf60e21b815260040160405180910390fd5b8060800151421080610a5057508060e00151816101000151105b15610a6e5760405163080097bb60e01b815260040160405180910390fd5b8060a00151421015610a935760405163ed4645b160e01b815260040160405180910390fd5b6000848152600e602052604090205415610ac357604051600162e49b8d60e01b0319815260040160405180910390fd5b6000848152600e60209081526040808320869055600a9091528120546101208301519091908210610af957826101200151610afb565b815b905060008361012001518311610b1657836101200151610b18565b825b60015490915060009061271090610b3a90600160a01b900461ffff1684613d51565b610b449190613d68565b6001549091506000906001600160a01b0316610b608584613d8a565b604051600081818185875af1925050503d8060008114610b9c576040519150601f19603f3d011682016040523d82523d6000602084013e610ba1565b606091505b5050905080610bc357604051630fa6f1df60e31b815260040160405180910390fd5b887fe61e04e257d33c3e1afe24affe0fba46cc64be9e6923d9d1e5b204809209d78289604051610bf591815260200190565b60405180910390a2505050505050505050565b6000908152600080516020614031833981519152602052604090206001015490565b6000610c3c6060830160408401613dad565b15610c5857610c58600080516020614011833981519152612a51565b600f54881015610c7b57604051633f0234f760e11b815260040160405180910390fd5b610c888989898989612a5b565b600080549080610c9783613dc8565b9190505590506000610cb760008051602061401183398151915233612605565b905080158015610cc657508834105b15610ce457604051633f0234f760e11b815260040160405180910390fd5b600081610cfa57610cf58a34613de1565b610cfc565b345b90506000604051806101c00160405280858152602001336001600160a01b031681526020018c81526020018b81526020018a815260200160006001811115610d4657610d46613c08565b8e6001811115610d5857610d58613c08565b14610d64576000610d6e565b610d6e8c8c613d8a565b81526020014281526020016002600001548a10610d8b5789610d8f565b6002545b8152602001600081526020018381526020018d6001811115610db357610db3613c08565b815260006020820152604001610dce36889003880188613e0a565b815260200188888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050868152600960208181526040928390208551815590850151600180830180546001600160a01b0319166001600160a01b0390931692909217909155928501516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e08501516007820155610100850151600882015561012085015191810191909155610140840151600a8201805495965086959294509092909160ff1916908381811115610ec757610ec7613c08565b0217905550610160820151600a8201805491151561010090810261ff0019938416179091556101808401518051600b8501805460208401516040909401511515620100000262ff00001994151590950292151590951661ffff199095169490941717161790556101a0820151600c820190610f429082613ec6565b503391508590507fe1c5ddbdae1fd561f10f2dfd531a613fc68c5fd0450af18276de5e0d095606a28e610f7b60608a0160408b01613dad565b604051610f89929190613f86565b60405180910390a382610fa357610fa38133600080612b6d565b50505098975050505050505050565b610fba612fee565b610fc5838383613026565b8235600090815260096020818152604080842081516101c081018352815481526001808301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015292830154610120820152600a83015490929161014084019160ff169081111561106f5761106f613c08565b600181111561108057611080613c08565b8152600a82015460ff61010091829004811615156020808501919091526040805160608082018352600b8801548086161515835295860485161515938201939093526201000090940490921615158383015290830191909152600c830180549190920191906110ee90613d07565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90613d07565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b50505050508152505090506111a3818560200160208101906111899190613cec565b6111996060880160408901613dad565b8760600135612b6d565b506111bb600160008051602061405183398151915255565b505050565b6111c982610c08565b6111d281612a51565b6111dc83836130d3565b50505050565b6001600160a01b038116331461120b5760405163334bd91960e11b815260040160405180910390fd5b6111bb8282613178565b61121d612fee565b600081815260096020818152604080842081516101c081018352815481526001808301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015292830154610120820152600a83015490929161014084019160ff16908111156112c5576112c5613c08565b60018111156112d6576112d6613c08565b8152600a82015460ff61010091829004811615156020808501919091526040805160608082018352600b8801548086161515835295860485161515938201939093526201000090940490921615158383015290830191909152600c8301805491909201919061134490613d07565b80601f016020809104026020016040519081016040528092919081815260200182805461137090613d07565b80156113bd5780601f10611392576101008083540402835291602001916113bd565b820191906000526020600020905b8154815290600101906020018083116113a057829003601f168201915b505050505081525050905080600001516000036113ed5760405163291002e960e21b815260040160405180910390fd5b806101600151611432578060800151421015801561141457508060e0015181610100015110155b156114325760405163e5049d2b60e01b815260040160405180910390fd5b805160405160009161144a9160200190815260200190565b60405160208183030381529060405280519060200120905060008133604051602001611477929190613fa3565b60408051601f1981840301815291815281516020928301206000818152600b90935291205490915060ff166114be576040516262a6dd60e71b815260040160405180910390fd5b61010083018051906114cf82613fc3565b9052506000848152600960208181526040928390208651815590860151600180830180546001600160a01b0319166001600160a01b0390931692909217909155928601516002820155606086015160038201556080860151600482015560a0860151600582015560c0860151600682015560e08601516007820155610100860151600882015561012086015191810191909155610140850151600a82018054879460ff1990911690838181111561158857611588613c08565b0217905550610160820151600a8201805491151561010090810261ff0019938416179091556101808401518051600b8501805460208401516040909401511515620100000262ff00001994151590950292151590951661ffff199095169490941717161790556101a0820151600c8201906116039082613ec6565b5050506000818152600b60209081526040808320805460ff19169055600c90915290205480156116bb576000858152600a60205260408120805483929061164b908490613de1565b9091555050604051600090339083908381818185875af1925050503d8060008114611692576040519150601f19603f3d011682016040523d82523d6000602084013e611697565b606091505b50509050806116b957604051630fa6f1df60e31b815260040160405180910390fd5b505b836101000151600003611801576101208401511561174e576001546101208501516040516000926001600160a01b031691908381818185875af1925050503d8060008114611725576040519150601f19603f3d011682016040523d82523d6000602084013e61172a565b606091505b505090508061174c57604051630fa6f1df60e31b815260040160405180910390fd5b505b600085815260096020819052604082208281556001810180546001600160a01b031916905560028101839055600381018390556004810183905560058101839055600681018390556007810183905560088101839055908101829055600a8101805461ffff19169055600b8101805462ffffff19169055906117d3600c83018261382e565b505060405185907fbf81a732f8c4c0e62f4e19afe5809646ae160e69f5c01f18e0fa945065c70be190600090a25b604051339086907fb2bd643202385c64d9814c6c3fa61b1ba098d6652292e9d9a6f1a0cdae6eb82490600090a350505050611849600160008051602061405183398151915255565b50565b611854612fee565b600081815260096020818152604080842081516101c081018352815481526001808301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015292830154610120820152600a83015490929161014084019160ff16908111156118fc576118fc613c08565b600181111561190d5761190d613c08565b8152600a82015460ff61010091829004811615156020808501919091526040805160608082018352600b8801548086161515835295860485161515938201939093526201000090940490921615158383015290830191909152600c8301805491909201919061197b90613d07565b80601f01602080910402602001604051908101604052809291908181526020018280546119a790613d07565b80156119f45780601f106119c9576101008083540402835291602001916119f4565b820191906000526020600020905b8154815290600101906020018083116119d757829003601f168201915b50505050508152505090508060000151600003611a245760405163291002e960e21b815260040160405180910390fd5b80610160015115611a4857604051632881aebf60e21b815260040160405180910390fd5b8060800151421080611a6257508060e00151816101000151105b15611a805760405163080097bb60e01b815260040160405180910390fd5b8061018001516020015115611aa857604051631b5b9e9360e11b815260040160405180910390fd5b8060400151341015611acd57604051633f0234f760e11b815260040160405180910390fd5b600082604051602001611ae291815260200190565b60405160208183030381529060405280519060200120905060008133604051602001611b0f929190613fa3565b60408051601f1981840301815291815281516020928301206000818152600b90935291205490915060ff16611b56576040516262a6dd60e71b815260040160405180910390fd5b600154606084015160009161271091611b7a91600160b01b900461ffff1690613d51565b611b849190613d68565b8460600151611b939190613de1565b8460800151611ba29190613d8a565b905080421115611bc557604051630ac3c28d60e31b815260040160405180910390fd5b8360400151600a60008781526020019081526020016000206000828254611bec9190613d8a565b90915550506040808501516000848152600c602052918220805491929091611c15908490613d8a565b9091555050604051339086907fca32fe3b9efc84074882b84add8029e850f9ff31c753d5a6d4b39b2e7241fe9590600090a350505050611849600160008051602061405183398151915255565b600080516020614071833981519152611c7a81612a51565b600082815260096020818152604080842081516101c081018352815481526001808301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015292830154610120820152600a83015490929161014084019160ff1690811115611d2257611d22613c08565b6001811115611d3357611d33613c08565b8152600a82015460ff61010091829004811615156020808501919091526040805160608082018352600b8801548086161515835295860485161515938201939093526201000090940490921615158383015290830191909152600c83018054919092019190611da190613d07565b80601f0160208091040260200160405190810160405280929190818152602001828054611dcd90613d07565b8015611e1a5780601f10611def57610100808354040283529160200191611e1a565b820191906000526020600020905b815481529060010190602001808311611dfd57829003601f168201915b50505050508152505090508060000151600003611e4a5760405163291002e960e21b815260040160405180910390fd5b600161016082015261012081015115611ee0576001546101208201516040516000926001600160a01b031691908381818185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b5050905080611ed657604051630fa6f1df60e31b815260040160405180910390fd5b5060006101208201525b6000838152600960208181526040928390208451815590840151600180830180546001600160a01b0319166001600160a01b0390931692909217909155928401516002820155606084015160038201556080840151600482015560a0840151600582015560c0840151600682015560e08401516007820155610100840151600882015561012084015191810191909155610140830151600a82018054859460ff19909116908381811115611f9657611f96613c08565b0217905550610160820151600a8201805491151561010090810261ff0019938416179091556101808401518051600b8501805460208401516040909401511515620100000262ff00001994151590950292151590951661ffff199095169490941717161790556101a0820151600c8201906120119082613ec6565b50506040518481523391507f7405381a1827aaba86170e7ed7f497a4f0eef033e3430a2ffa79ef51497d7e73906020015b60405180910390a2505050565b60008051602061407183398151915261206781612a51565b600f82905560405182815233907f69a999c34f0af5a9cf85e8d893126b0b946b996fa4eb33cb8a3ee472ccdddb74906020015b60405180910390a25050565b6120ae612fee565b6000846040516020016120c391815260200190565b604051602081830303815290604052805190602001209050600081336040516020016120f0929190613fa3565b60408051601f1981840301815291815281516020928301206000818152600d90935291205490915060ff1615612139576040516319e058af60e11b815260040160405180910390fd5b6000868152600e6020526040902054806121665760405163266d929d60e01b815260040160405180910390fd5b6040516bffffffffffffffffffffffff193360601b1660208201526034810187905260009060540160405160208183030381529060405280519060200120905060006121b4878785856131f4565b9050806121d457604051631844047b60e21b815260040160405180910390fd5b6000848152600d6020526040808220805460ff191660011790555133908a908381818185875af1925050503d806000811461222b576040519150601f19603f3d011682016040523d82523d6000602084013e612230565b606091505b505090508061225257604051630fa6f1df60e31b815260040160405180910390fd5b60405189815233908b907f3300bdb359cfb956935bca32e9db727413eab1ca84341f2e36caea85bb7969689060200160405180910390a35050505050506111dc600160008051602061405183398151915255565b6000805160206140718339815191526122be81612a51565b6001805461ffff60b01b1916600160b01b61ffff85169081029190911790915560405133907f2a2cba0f6ebe77e7b9bb2c7bf34dafaed2302a814bd149e9061e65524fdacdfa90600090a35050565b60008051602061407183398151915261232581612a51565b81356020830135101561234b5760405163de07f0d360e01b815260040160405180910390fd5b813560068190556020808401356007819055604080519384529183015233917f15f4cbbc375032f396d24f92fb31d1cc72c43c32ce157d61d8e248e34e66ca64910161209a565b60006060808280808381600080516020613ff183398151915280549091501580156123bf57506001810154155b6124085760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b61241061320c565b6124186132cf565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6009602081815260009283526040928390208054600182015460028301546003840154600485015460058601546006870154600788015460088901549a890154600a8a01548d51606081018f52600b8c015460ff81811615158352610100808304821615159f84019f909f5262010000909104811615159f82019f909f52600c8c0180549b9f6001600160a01b03909b169e999d989c979b969a95999498949793968684169695909304909416939092916124fd90613d07565b80601f016020809104026020016040519081016040528092919081815260200182805461252990613d07565b80156125765780601f1061254b57610100808354040283529160200191612576565b820191906000526020600020905b81548152906001019060200180831161255957829003601f168201915b505050505090508e565b60008051602061407183398151915261259881612a51565b8135602083013510156125be5760405163de07f0d360e01b815260040160405180910390fd5b813560048190556020808401356005819055604080519384529183015233917f80acd7fd479f032d5b2a89461b956524f4838960dadf25a4872eecd12e62b07c910161209a565b6000918252600080516020614031833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008051602061407183398151915261265581612a51565b6001805461ffff60a01b1916600160a01b61ffff85169081029190911790915560405133907f0bcdc810829268922dbb0548dd6b2d9d1a5ef4a26e74ff802191f8037d7caf2c90600090a35050565b6000805160206140718339815191526126bc81612a51565b8135602083013510156126e25760405163de07f0d360e01b815260040160405180910390fd5b813560028190556020808401356003819055604080519384529183015233917feecee8aeed9d0345c74f699c3805a337423db64ad46524c9a244fbc0fd19382f910161209a565b61273282610c08565b61273b81612a51565b6111dc8383613178565b60008051602061407183398151915261275d81612a51565b6001600160a01b03821661278457604051638416f54160e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03841690811790915560405133907f21eb548722a564f6e09f039f7aa858ae94c911910f3823b37af2250eeca4f40390600090a35050565b6000805160206140718339815191526127e981612a51565b8161280757604051631844047b60e21b815260040160405180910390fd5b6000838152600e6020908152604091829020849055815185815290810184905233917f457140640dcc3b50fdae363812d3c67d2e7ff25adf0fe3c4dfcb48edca5b712e9101612042565b612859612fee565b600081815260096020818152604080842081516101c081018352815481526001808301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015292830154610120820152600a83015490929161014084019160ff169081111561290157612901613c08565b600181111561291257612912613c08565b8152600a82015460ff61010091829004811615156020808501919091526040805160608082018352600b8801548086161515835295860485161515938201939093526201000090940490921615158383015290830191909152600c8301805491909201919061298090613d07565b80601f01602080910402602001604051908101604052809291908181526020018280546129ac90613d07565b80156129f95780601f106129ce576101008083540402835291602001916129f9565b820191906000526020600020905b8154815290600101906020018083116129dc57829003601f168201915b50505050508152505090508061018001516040015115612a2c5760405163833332bb60e01b815260040160405180910390fd5b612a398133600080612b6d565b50611849600160008051602061405183398151915255565b611849813361330e565b600654831080612a6c575060075483115b15612a8a57604051636c7ad48f60e01b815260040160405180910390fd5b83600003612aab5760405163b1c87e8160e01b815260040160405180910390fd5b6000856001811115612abf57612abf613c08565b03612b1e57600454612ad19042613d8a565b821015612af15760405163a3866e9d60e01b815260040160405180910390fd5b600554612afe9042613d8a565b821115612b1e5760405163a3866e9d60e01b815260040160405180910390fd5b6001856001811115612b3257612b32613c08565b03612b6657600254811080612b48575060035481115b15612b665760405163549abce960e01b815260040160405180910390fd5b5050505050565b8351600003612b8f5760405163291002e960e21b815260040160405180910390fd5b83610160015115612bb357604051632881aebf60e21b815260040160405180910390fd5b600061271061ffff16828660400151612bcc9190613d51565b612bd69190613d68565b8560400151612be59190613de1565b905082158015612bf457508034105b15612c1257604051633f0234f760e11b815260040160405180910390fd5b60008561014001516001811115612c2b57612c2b613c08565b148015612c3c575084608001514210155b8015612c5057508460e00151856101000151105b15612c6e57604051637bc7dbbb60e11b815260040160405180910390fd5b84608001514210158015612c8b57508460e0015185610100015110155b15612d26576101808501515115612cb5576040516368ebb68d60e01b815260040160405180910390fd5b600154606086015160009161271091612cd991600160b01b900461ffff1690613d51565b612ce39190613d68565b8660600151612cf29190613de1565b8660800151612d019190613d8a565b905080421115612d2457604051630ac3c28d60e31b815260040160405180910390fd5b505b8451604051600091612d3e9160200190815260200190565b60405160208183030381529060405280519060200120905060008186604051602001612d6b929190613fa3565b60408051601f1981840301815291815281516020928301206000818152600b90935291205490915060ff1615612db457604051633d98bab560e11b815260040160405180910390fd5b6101008701805190612dc582613dc8565b90525060018761014001516001811115612de157612de1613c08565b148015612df657508660e00151876101000151145b15612e175742608088018190526060880151612e1191613d8a565b60a08801525b86516000908152600960208181526040928390208a518155908a0151600180830180546001600160a01b0319166001600160a01b0390931692909217909155928a0151600282015560608a0151600382015560808a0151600482015560a08a0151600582015560c08a0151600682015560e08a015160078201556101008a015160088201556101208a015191810191909155610140890151600a820180548b9460ff19909116908381811115612ecf57612ecf613c08565b0217905550610160820151600a8201805491151561010090810261ff0019938416179091556101808401518051600b8501805460208401516040909401511515620100000262ff00001994151590950292151590951661ffff199095169490941717161790556101a0820151600c820190612f4a9082613ec6565b5050506000818152600b60205260409020805460ff1916600117905584612f915786516000908152600a602052604081208054859290612f8b908490613d8a565b90915550505b84612f9c5782612f9f565b60005b6000828152600c602052604080822092909255885191516001600160a01b03891692917f87969bc7faf902221a147b95ceba76e011c5efb0339a0a8ee7a2bb82d9cfbbd691a350505050505050565b60008051602061405183398151915280546001190161302057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b600061303384848461334b565b905061305f7fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7082612605565b61307c57604051630dc20df960e11b815260040160405180910390fd5b608084013560009081526008602052604090205460ff16156130b157604051639b5cd90760e01b815260040160405180910390fd5b505050608001356000908152600860205260409020805460ff19166001179055565b60006000805160206140318339815191526130ee8484612605565b61316e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556131243390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610824565b6000915050610824565b60006000805160206140318339815191526131938484612605565b1561316e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610824565b6000826132028686856133a4565b1495945050505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020613ff18339815191529161324b90613d07565b80601f016020809104026020016040519081016040528092919081815260200182805461327790613d07565b80156132c45780601f10613299576101008083540402835291602001916132c4565b820191906000526020600020905b8154815290600101906020018083116132a757829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020613ff18339815191529161324b90613d07565b6133188282612605565b6133475760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016123ff565b5050565b600080613357856133e6565b905061339b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506134009050565b95945050505050565b600081815b848110156133dd576133d3828787848181106133c7576133c7613fda565b9050602002013561342a565b91506001016133a9565b50949350505050565b60006108246133f48361345c565b805190602001206134fb565b6000806000806134108686613528565b9250925092506134208282613575565b5090949350505050565b6000818310613446576000828152602084905260409020613455565b60008381526020839052604090205b9392505050565b60607f6e6d4963ef78c7556a8d3fbed4642f7153928409e8fe19d0c1d51e8a3737984e82356134916040850160208601613cec565b6134a16060860160408701613dad565b6040805160208101959095528401929092526001600160a01b03166060838101919091529015156080838101919091529084013560a083015283013560c082015260e0016040516020818303038152906040529050919050565b600061082461350861362e565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600083516041036135625760208401516040850151606086015160001a6135548882858561363d565b95509550955050505061356e565b50508151600091506002905b9250925092565b600082600381111561358957613589613c08565b03613592575050565b60018260038111156135a6576135a6613c08565b036135c45760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156135d8576135d8613c08565b036135f95760405163fce698f760e01b8152600481018290526024016123ff565b600382600381111561360d5761360d613c08565b03613347576040516335e2f38360e21b8152600481018290526024016123ff565b600061363861370c565b905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156136785750600091506003905082613702565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156136cc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166136f857506000925060019150829050613702565b9250600091508190505b9450945094915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613737613780565b61373f6137ea565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000600080516020613ff18339815191528161379a61320c565b8051909150156137b257805160209091012092915050565b815480156137c1579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020613ff1833981519152816138046132cf565b80519091501561381c57805160209091012092915050565b600182015480156137c1579392505050565b50805461383a90613d07565b6000825580601f1061384a575050565b601f01602090049060005260206000209081019061184991905b808211156138785760008155600101613864565b5090565b60006020828403121561388e57600080fd5b81356001600160e01b03198116811461345557600080fd5b600080604083850312156138b957600080fd5b50508035926020909101359150565b6000602082840312156138da57600080fd5b5035919050565b60008083601f8401126138f357600080fd5b50813567ffffffffffffffff81111561390b57600080fd5b60208301915083602082850101111561392357600080fd5b9250929050565b600080600080600080600080888a0361012081121561394857600080fd5b89356002811061395757600080fd5b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a013567ffffffffffffffff81111561398f57600080fd5b61399b8c828d016138e1565b909550935050606060bf19820112156139b357600080fd5b5060c0890190509295985092959890939650565b600080600083850360c08112156139dd57600080fd5b60a08112156139eb57600080fd5b5083925060a084013567ffffffffffffffff811115613a0957600080fd5b613a15868287016138e1565b9497909650939450505050565b80356001600160a01b0381168114613a3957600080fd5b919050565b60008060408385031215613a5157600080fd5b82359150613a6160208401613a22565b90509250929050565b60008060008060608587031215613a8057600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115613aa657600080fd5b818701915087601f830112613aba57600080fd5b813581811115613ac957600080fd5b8860208260051b8501011115613ade57600080fd5b95989497505060200194505050565b600060208284031215613aff57600080fd5b813561ffff8116811461345557600080fd5b600060408284031215613b2357600080fd5b50919050565b6000815180845260005b81811015613b4f57602081850181015186830182015201613b33565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e06020840152613b9060e084018a613b29565b8381036040850152613ba2818a613b29565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613bf657835183529284019291840191600101613bda565b50909c9b505050505050505050505050565b634e487b7160e01b600052602160045260246000fd5b60028110613c3c57634e487b7160e01b600052602160045260246000fd5b9052565b8e815260018060a01b038e1660208201528c60408201528b60608201528a60808201528960a08201528860c08201528760e08201528661010082015285610120820152613c91610140820186613c1e565b83151561016082015282511515610180820152602083015115156101a0820152604083015115156101c08201526102006101e08201526000613cd7610200830184613b29565b90509f9e505050505050505050505050505050565b600060208284031215613cfe57600080fd5b61345582613a22565b600181811c90821680613d1b57607f821691505b602082108103613b2357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761082457610824613d3b565b600082613d8557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561082457610824613d3b565b80358015158114613a3957600080fd5b600060208284031215613dbf57600080fd5b61345582613d9d565b600060018201613dda57613dda613d3b565b5060010190565b8181038181111561082457610824613d3b565b634e487b7160e01b600052604160045260246000fd5b600060608284031215613e1c57600080fd5b6040516060810181811067ffffffffffffffff82111715613e3f57613e3f613df4565b604052613e4b83613d9d565b8152613e5960208401613d9d565b6020820152613e6a60408401613d9d565b60408201529392505050565b601f8211156111bb576000816000526020600020601f850160051c81016020861015613e9f5750805b601f850160051c820191505b81811015613ebe57828155600101613eab565b505050505050565b815167ffffffffffffffff811115613ee057613ee0613df4565b613ef481613eee8454613d07565b84613e76565b602080601f831160018114613f295760008415613f115750858301515b600019600386901b1c1916600185901b178555613ebe565b600085815260208120601f198616915b82811015613f5857888601518255948401946001909101908401613f39565b5085821015613f765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408101613f948285613c1e565b82151560208301529392505050565b91825260601b6bffffffffffffffffffffffff1916602082015260340190565b600081613fd257613fd2613d3b565b506000190190565b634e487b7160e01b600052603260045260246000fdfea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10097667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212200e72f12c1e26e43b27e28dc7bef8ea9ef4bde20b5c32cf476dab5f28598df89164736f6c63430008160033