74 txs
75 calls
constructor
constructor()
functions
admins
viewfunction admins(address) view returns (bool)
BASIS_POINTS
viewfunction BASIS_POINTS() view returns (uint256)
canAcceptNewParticipants
viewfunction canAcceptNewParticipants(uint256 gameId) view returns (bool)
feeCollector
viewfunction feeCollector() view returns (address)
feePercentage
viewfunction feePercentage() view returns (uint256)
gameExists
viewfunction gameExists(uint256 gameId) view returns (bool)
gamePlayers
viewfunction gamePlayers(uint256, uint256) view returns (address)
games
viewfunction games(uint256) view returns (address token, uint256 entryFee, uint256 totalCollected, uint256 currentPlayers, uint256 maxParticipants, bool rewardsDistributed, bool active, bool paused)
getAvailableSpots
viewfunction getAvailableSpots(uint256 gameId) view returns (uint256)
getGame
viewfunction getGame(uint256 gameId) view returns (tuple)
getGamePlayers
viewfunction getGamePlayers(uint256 gameId) view returns (address[])
getMaxParticipants
viewfunction getMaxParticipants(uint256 gameId) view returns (uint256)
getPlayerReward
viewfunction getPlayerReward(uint256 gameId, address player) view returns (uint256)
getPlayerStatus
viewfunction getPlayerStatus(uint256 gameId, address player) view returns (bool joined, bool isWinner, bool hasClaimed, uint256 availableReward)
getTokenBalance
viewfunction getTokenBalance(address token) view returns (uint256)
hasPlayerClaimed
viewfunction hasPlayerClaimed(uint256, address) view returns (bool)
hasPlayerClaimedReward
viewfunction hasPlayerClaimedReward(uint256 gameId, address player) view returns (bool)
hasPlayerJoined
viewfunction hasPlayerJoined(uint256, address) view returns (bool)
hasPlayerJoinedGame
viewfunction hasPlayerJoinedGame(uint256 gameId, address player) view returns (bool)
isAdmin
viewfunction isAdmin(address account) view returns (bool)
isGameFull
viewfunction isGameFull(uint256 gameId) view returns (bool)
isPlayerWinner
viewfunction isPlayerWinner(uint256 gameId, address player) view returns (bool)
nextGameId
viewfunction nextGameId() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
playerRewards
viewfunction playerRewards(uint256, address) view returns (uint256)
addAdmin
nonpayablefunction addAdmin(address admin)
addPool
nonpayablefunction addPool(uint256 gameId, uint256 amount)
claimReward
nonpayablefunction claimReward(uint256 gameId)
createGame
nonpayablefunction createGame(address token, uint256 entryFee, uint256 maxParticipants) returns (uint256)
deactivateGame
nonpayablefunction deactivateGame(uint256 gameId)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(uint256 gameId, uint256 amount)
enterGame
nonpayablefunction enterGame(uint256 gameId)
pause
nonpayablefunction pause()
pauseGame
nonpayablefunction pauseGame(uint256 gameId)
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceOwnership
nonpayablefunction renounceOwnership()
resumeGame
nonpayablefunction resumeGame(uint256 gameId)
setFeeCollector
nonpayablefunction setFeeCollector(address newFeeCollector)
setFeePercentage
nonpayablefunction setFeePercentage(uint256 newFeePercentage)
setRewards
nonpayablefunction setRewards(uint256 gameId, address[] winners, uint256[] percentages)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
AdminAdded
event AdminAdded(address indexed admin)
AdminRemoved
event AdminRemoved(address indexed admin)
FeeCollectorUpdated
event FeeCollectorUpdated(address indexed newFeeCollector)
FeePercentageUpdated
event FeePercentageUpdated(uint256 newFeePercentage)
GameCreated
event GameCreated(uint256 indexed gameId, address indexed token, uint256 entryFee, uint256 maxParticipants)
GameDeactivated
event GameDeactivated(uint256 indexed gameId)
GamePaused
event GamePaused(uint256 indexed gameId)
GameResumed
event GameResumed(uint256 indexed gameId)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PlayerJoined
event PlayerJoined(uint256 indexed gameId, address indexed player)
PoolAdded
event PoolAdded(uint256 indexed gameId, address indexed contributor, uint256 amount)
RewardClaimed
event RewardClaimed(uint256 indexed gameId, address indexed winner, uint256 amount)
RewardsSet
event RewardsSet(uint256 indexed gameId, address[] winners, uint256[] rewards)
Unpaused
event Unpaused(address account)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
GameNotActive
error GameNotActive()
GameNotFound
error GameNotFound()
InvalidFeePercentage
error InvalidFeePercentage()
MaxParticipantsReached
error MaxParticipantsReached()
NoRewardToClaim
error NoRewardToClaim()
NotAuthorized
error NotAuthorized()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PlayerAlreadyJoined
error PlayerAlreadyJoined()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608060405234801561001057600080fd5b5033600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100845760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161007b91906101ee565b60405180910390fd5b610093816100e960201b60201c565b50600180819055506001600b8190555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610209565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101d8826101ad565b9050919050565b6101e8816101cd565b82525050565b600060208201905061020360008301846101df565b92915050565b614ce7806102186000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80637048027511610151578063acb7d3b6116100c3578063c415b95c11610087578063c415b95c146107be578063dfefef9f146107dc578063e1f1c4a71461080c578063e4a22ca11461082a578063f2fde38b1461085a578063f87766091461087657610269565b8063acb7d3b61461071c578063ae06c1b714610738578063ae169a5014610754578063b135bbb014610770578063c1f947961461078e57610269565b80638da5cb5b116101155780638da5cb5b1461063157806392b463861461064f578063958b3bd31461067f578063a001ecdd146106b2578063a2f77bcc146106d0578063a42dce801461070057610269565b806370480275146105b5578063715018a6146105d157806381f95c8d146105db5780638456cb591461060b57806387249d081461061557610269565b80633aecd0e3116101ea5780634dd4671d116101ae5780634dd4671d146104bb5780634e805322146104eb5780635c975abb1461051b5780636d5c1e33146105395780636d89dbc51461056957806370370dd61461058557610269565b80633aecd0e3146104055780633b17469e146104355780633f4ba83a14610465578063429b62e51461046f57806343d6582b1461049f57610269565b8063188847b011610231578063188847b01461033d5780631a318be5146103595780631f276b6e1461038957806324d7806c146103a55780632a91b09f146103d557610269565b806307286e2f1461026e578063117a5b901461029e5780631214e31e146102d557806315a40f49146102f15780631785f53c14610321575b600080fd5b610288600480360381019061028391906139ee565b6108a6565b6040516102959190613a49565b60405180910390f35b6102b860048036038101906102b39190613a64565b6108d5565b6040516102cc989796959493929190613aff565b60405180910390f35b6102ef60048036038101906102ea9190613a64565b610964565b005b61030b60048036038101906103069190613a64565b610c20565b6040516103189190613c3b565b60405180910390f35b61033b60048036038101906103369190613c5d565b610cc1565b005b61035760048036038101906103529190613a64565b610df3565b005b610373600480360381019061036e91906139ee565b6110ae565b6040516103809190613a49565b60405180910390f35b6103a3600480360381019061039e9190613c8a565b6110dd565b005b6103bf60048036038101906103ba9190613c5d565b611257565b6040516103cc9190613a49565b60405180910390f35b6103ef60048036038101906103ea9190613a64565b6112ad565b6040516103fc9190613a49565b60405180910390f35b61041f600480360381019061041a9190613c5d565b6112e9565b60405161042c9190613cca565b60405180910390f35b61044f600480360381019061044a9190613ce5565b61136c565b60405161045c9190613cca565b60405180910390f35b61046d6116a3565b005b61048960048036038101906104849190613c5d565b6116b5565b6040516104969190613a49565b60405180910390f35b6104b960048036038101906104b49190613a64565b6116d5565b005b6104d560048036038101906104d09190613a64565b611b30565b6040516104e29190613cca565b60405180910390f35b610505600480360381019061050091906139ee565b611b50565b6040516105129190613cca565b60405180910390f35b610523611b75565b6040516105309190613a49565b60405180910390f35b610553600480360381019061054e91906139ee565b611b8c565b6040516105609190613cca565b60405180910390f35b610583600480360381019061057e9190613c8a565b611be7565b005b61059f600480360381019061059a9190613a64565b611e1b565b6040516105ac9190613a49565b60405180910390f35b6105cf60048036038101906105ca9190613c5d565b611e8a565b005b6105d961202c565b005b6105f560048036038101906105f091906139ee565b61203e565b6040516106029190613a49565b60405180910390f35b6106136120a6565b005b61062f600480360381019061062a9190613a64565b6120b8565b005b6106396122d0565b6040516106469190613d47565b60405180910390f35b610669600480360381019061066491906139ee565b6122f9565b6040516106769190613a49565b60405180910390f35b610699600480360381019061069491906139ee565b612361565b6040516106a99493929190613d62565b60405180910390f35b6106ba612491565b6040516106c79190613cca565b60405180910390f35b6106ea60048036038101906106e59190613a64565b612497565b6040516106f79190613e76565b60405180910390f35b61071a60048036038101906107159190613c5d565b612594565b005b61073660048036038101906107319190613f4d565b612692565b005b610752600480360381019061074d9190613a64565b612b14565b005b61076e60048036038101906107699190613a64565b612c5e565b005b610778612f65565b6040516107859190613cca565b60405180910390f35b6107a860048036038101906107a391906139ee565b612f6b565b6040516107b59190613a49565b60405180910390f35b6107c661302e565b6040516107d39190613d47565b60405180910390f35b6107f660048036038101906107f19190613c8a565b613054565b6040516108039190613d47565b60405180910390f35b6108146130a2565b6040516108219190613cca565b60405180910390f35b610844600480360381019061083f9190613a64565b6130a8565b6040516108519190613a49565b60405180910390f35b610874600480360381019061086f9190613c5d565b613132565b005b610890600480360381019061088b9190613a64565b6131b8565b60405161089d9190613cca565b60405180910390f35b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060050160019054906101000a900460ff16908060050160029054906101000a900460ff16905088565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156109f157506109c16122d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610a28576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ac5576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600084815260200190815260200160002090508060050160009054906101000a900460ff1615610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590614065565b60405180910390fd5b8060050160019054906101000a900460ff16610b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b76906140d1565b60405180910390fd5b8060050160029054906101000a900460ff1615610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc89061413d565b60405180910390fd5b60018160050160026101000a81548160ff021916908315150217905550827f60f26477008aa4c656f8e1e30cdc74fa0be1c07ff15eead918e9614cdca8d16660405160405180910390a2505050565b606060056000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610cb557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c6b575b50505050509050919050565b610cc961323b565b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c906141a9565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f60405160405180910390a250565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610e805750610e506122d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610eb7576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f54576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600084815260200190815260200160002090508060050160009054906101000a900460ff1615610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490614215565b60405180910390fd5b8060050160019054906101000a900460ff1661100e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611005906140d1565b60405180910390fd5b8060050160029054906101000a900460ff1661105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690614281565b60405180910390fd5b60008160050160026101000a81548160ff021916908315150217905550827f2eb1658d7e4a1b75683654edfe69728bf3961f370d3c5789c8b5e3d319d82e7b60405160405180910390a2505050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6110e561323b565b81600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611182576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858152602001908152602001600020905080600201548311156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906142ed565b60405180910390fd5b828160020160008282546111f4919061433c565b925050819055506112516112066122d0565b848360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132c29092919063ffffffff16565b50505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600360008481526020019081526020016000209050600081600401541180156112e157508060040154816003015410155b915050919050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113249190613d47565b602060405180830381865afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113659190614385565b9050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113fb57506113cb6122d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611432576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61143a613341565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a0906143fe565b60405180910390fd5b600083116114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e39061446a565b60405180910390fd5b6000600b60008154809291906115019061448a565b9190505590506040518061010001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020016000815260200160008152602001848152602001600015158152602001600115158152602001600015158152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e08201518160050160026101000a81548160ff0219169083151502179055509050508473ffffffffffffffffffffffffffffffffffffffff16817f7ed9b48d83e08a25a1572b27a365dfb386da7860c996e684e541e3433b79214786866040516116909291906144d2565b60405180910390a3809150509392505050565b6116ab61323b565b6116b3613382565b565b60086020528060005260406000206000915054906101000a900460ff1681565b80600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611772576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160006003600083815260200190815260200160002090508060050160019054906101000a900460ff166117d1576040517ea3097100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060050160029054906101000a900460ff1615611819576040517ea3097100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118216133e5565b611829613341565b60006003600086815260200190815260200160002090508060050160009054906101000a900460ff1615611888576040517ea3097100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561191d576040517fa627f53800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816004015411801561193957508060040154816003015410155b15611970576040517f6c8c8d2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119c5333083600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661342b909392919063ffffffff16565b80600101548160020160008282546119dd91906144fb565b9250508190555060018160030160008282546119f991906144fb565b9250508190555060016004600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060056000868152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16857f87969bc7faf902221a147b95ceba76e011c5efb0339a0a8ee7a2bb82d9cfbbd660405160405180910390a350611b2a6134ad565b50505050565b600060036000838152602001908152602001600020600401549050919050565b6006602052816000526040600020602052806000526040600020600091509150505481565b6000600260009054906101000a900460ff16905090565b60006006600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bef6133e5565b81600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611c8c576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600085815260200190815260200160002090508060050160019054906101000a900460ff168015611cd057508060050160029054906101000a900460ff16155b611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d06906140d1565b60405180910390fd5b60008311611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d499061457b565b60405180910390fd5b611da33330858460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661342b909392919063ffffffff16565b82816002016000828254611db791906144fb565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16847f6c5d0ef1d0199b6de41ecbce95f59643be4d723ca363faf92d756e61e82fb13e85604051611e059190613cca565b60405180910390a35050611e176134ad565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611e9261323b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef8906145e7565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590614653565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a250565b61203461323b565b61203c6134b6565b565b60006007600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120ae61323b565b6120b66134ca565b565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561214557506121156122d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561217c576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612219576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600084815260200190815260200160002090508060050160019054906101000a900460ff16612281576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612278906146bf565b60405180910390fd5b60008160050160016101000a81548160ff021916908315150217905550827f6c8c496ae0eeec2b747f05c7e544e74b0c579f7502058b1fd5c64e4bc65bc40d60405160405180910390a2505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006004600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806000806004600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1693506007600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691506006600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081806124865750600081115b925092959194509250565b600a5481565b61249f6138ef565b60036000838152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff161515151581526020016005820160019054906101000a900460ff161515151581526020016005820160029054906101000a900460ff1615151515815250509050919050565b61259c61323b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361260b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126029061472b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fe5693914d19c789bdee50a362998c0bc8d035a835f9871da5d51152f0582c34f60405160405180910390a250565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561271f57506126ef6122d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15612756576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61275e6133e5565b84600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036127fb576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612803613341565b60006003600088815260200190815260200160002090508060050160009054906101000a900460ff161561286c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286390614797565b60405180910390fd5b8060050160019054906101000a900460ff166128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b4906140d1565b60405180910390fd5b8060050160029054906101000a900460ff1615612905576040517ea3097100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83839050868690501461294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490614803565b60405180910390fd5b60008686905011612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a9061486f565b60405180910390fd5b600061299f858561352d565b90506127108111156129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd906148db565b60405180910390fd5b6000806129fa846002015484600a546135dd565b91509150612a0d8a8a8a8a8a878961366b565b6000811115612a8857612a87600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132c29092919063ffffffff16565b5b60018460050160006101000a81548160ff02191690831515021790555060008460050160016101000a81548160ff021916908315150217905550897f8f093435ac91e55428b799b105b58b4ef72637f745aa675f85b0515ae5cd82848a8a8a8a604051612af89493929190614a01565b60405180910390a25050505050612b0d6134ad565b5050505050565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ba15750612b716122d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15612bd8576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710811115612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1490614a88565b60405180910390fd5b80600a819055507f74516f05eb4bd2461d57aa1e935ee553f86a3e02bfed7759f2f772915de3d9be81604051612c539190613cca565b60405180910390a150565b612c666133e5565b80600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612d03576040517f26cf189c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600084815260200190815260200160002090508060050160009054906101000a900460ff16612d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6290614af4565b60405180910390fd5b60006006600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008103612dfa576040517f5aa9184d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016007600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006006600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f0833828460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132c29092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff16847f24b5efa61dd1cfc659205a97fb8ed868f3cb8c81922bab2b96423e5de1de2cb783604051612f4f9190613cca565b60405180910390a3505050612f626134ad565b50565b600b5481565b60006007600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613026575060006006600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052816000526040600020818154811061307057600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b6000806003600084815260200190815260200160002090508060050160019054906101000a900460ff1680156130ed57508060050160029054906101000a900460ff16155b801561310857508060050160009054906101000a900460ff16155b801561312a5750600081600401541480613129575080600401548160030154105b5b915050919050565b61313a61323b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131ac5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016131a39190613d47565b60405180910390fd5b6131b581613741565b50565b6000806003600084815260200190815260200160002090506000816004015403613205577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff915050613236565b806004015481600301541061321e576000915050613236565b80600301548160040154613232919061433c565b9150505b919050565b613243613805565b73ffffffffffffffffffffffffffffffffffffffff166132616122d0565b73ffffffffffffffffffffffffffffffffffffffff16146132c057613284613805565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016132b79190613d47565b60405180910390fd5b565b61333c838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016132f5929190614b14565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061380d565b505050565b613349611b75565b15613380576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61338a6138af565b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6133ce613805565b6040516133db9190613d47565b60405180910390a1565b600260015403613421576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b6134a7848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161346093929190614b3d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061380d565b50505050565b60018081905550565b6134be61323b565b6134c86000613741565b565b6134d2613341565b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613516613805565b6040516135239190613d47565b60405180910390a1565b6000806000905060005b848490508110156135d257600085858381811061355757613556614b74565b5b905060200201351161359e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359590614bef565b60405180910390fd5b8484828181106135b1576135b0614b74565b5b90506020020135826135c391906144fb565b91508080600101915050613537565b508091505092915050565b600080600061271085876135f19190614c0f565b6135fb9190614c80565b90506000612710858361360e9190614c0f565b6136189190614c80565b90508082613626919061433c565b935060006127108761271061363b919061433c565b896136469190614c0f565b6136509190614c80565b9050808261365e91906144fb565b9350505050935093915050565b60005b868690508110156137375760008286868481811061368f5761368e614b74565b5b90506020020135856136a19190614c0f565b6136ab9190614c80565b905080600660008b815260200190815260200160002060008a8a868181106136d6576136d5614b74565b5b90506020020160208101906136eb9190613c5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050808060010191505061366e565b5050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080602060008451602086016000885af180613830576040513d6000823e3d81fd5b3d92506000519150506000821461384b576001811415613867565b60008473ffffffffffffffffffffffffffffffffffffffff163b145b156138a957836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016138a09190613d47565b60405180910390fd5b50505050565b6138b7611b75565b6138ed576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b61396d8161395a565b811461397857600080fd5b50565b60008135905061398a81613964565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139bb82613990565b9050919050565b6139cb816139b0565b81146139d657600080fd5b50565b6000813590506139e8816139c2565b92915050565b60008060408385031215613a0557613a04613950565b5b6000613a138582860161397b565b9250506020613a24858286016139d9565b9150509250929050565b60008115159050919050565b613a4381613a2e565b82525050565b6000602082019050613a5e6000830184613a3a565b92915050565b600060208284031215613a7a57613a79613950565b5b6000613a888482850161397b565b91505092915050565b6000819050919050565b6000613ab6613ab1613aac84613990565b613a91565b613990565b9050919050565b6000613ac882613a9b565b9050919050565b6000613ada82613abd565b9050919050565b613aea81613acf565b82525050565b613af98161395a565b82525050565b600061010082019050613b15600083018b613ae1565b613b22602083018a613af0565b613b2f6040830189613af0565b613b3c6060830188613af0565b613b496080830187613af0565b613b5660a0830186613a3a565b613b6360c0830185613a3a565b613b7060e0830184613a3a565b9998505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bb2816139b0565b82525050565b6000613bc48383613ba9565b60208301905092915050565b6000602082019050919050565b6000613be882613b7d565b613bf28185613b88565b9350613bfd83613b99565b8060005b83811015613c2e578151613c158882613bb8565b9750613c2083613bd0565b925050600181019050613c01565b5085935050505092915050565b60006020820190508181036000830152613c558184613bdd565b905092915050565b600060208284031215613c7357613c72613950565b5b6000613c81848285016139d9565b91505092915050565b60008060408385031215613ca157613ca0613950565b5b6000613caf8582860161397b565b9250506020613cc08582860161397b565b9150509250929050565b6000602082019050613cdf6000830184613af0565b92915050565b600080600060608486031215613cfe57613cfd613950565b5b6000613d0c868287016139d9565b9350506020613d1d8682870161397b565b9250506040613d2e8682870161397b565b9150509250925092565b613d41816139b0565b82525050565b6000602082019050613d5c6000830184613d38565b92915050565b6000608082019050613d776000830187613a3a565b613d846020830186613a3a565b613d916040830185613a3a565b613d9e6060830184613af0565b95945050505050565b613db081613acf565b82525050565b613dbf8161395a565b82525050565b613dce81613a2e565b82525050565b61010082016000820151613deb6000850182613da7565b506020820151613dfe6020850182613db6565b506040820151613e116040850182613db6565b506060820151613e246060850182613db6565b506080820151613e376080850182613db6565b5060a0820151613e4a60a0850182613dc5565b5060c0820151613e5d60c0850182613dc5565b5060e0820151613e7060e0850182613dc5565b50505050565b600061010082019050613e8c6000830184613dd4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613eb757613eb6613e92565b5b8235905067ffffffffffffffff811115613ed457613ed3613e97565b5b602083019150836020820283011115613ef057613eef613e9c565b5b9250929050565b60008083601f840112613f0d57613f0c613e92565b5b8235905067ffffffffffffffff811115613f2a57613f29613e97565b5b602083019150836020820283011115613f4657613f45613e9c565b5b9250929050565b600080600080600060608688031215613f6957613f68613950565b5b6000613f778882890161397b565b955050602086013567ffffffffffffffff811115613f9857613f97613955565b5b613fa488828901613ea1565b9450945050604086013567ffffffffffffffff811115613fc757613fc6613955565b5b613fd388828901613ef7565b92509250509295509295909350565b600082825260208201905092915050565b7f50617573652064697361626c656420706f73742d646973747269627574696f6e60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061404f602183613fe2565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b7f47616d65206973206e6f74206163746976650000000000000000000000000000600082015250565b60006140bb601283613fe2565b91506140c682614085565b602082019050919050565b600060208201905081810360008301526140ea816140ae565b9050919050565b7f47616d6520697320616c72656164792070617573656400000000000000000000600082015250565b6000614127601683613fe2565b9150614132826140f1565b602082019050919050565b600060208201905081810360008301526141568161411a565b9050919050565b7f41646472657373206973206e6f7420616e2061646d696e000000000000000000600082015250565b6000614193601783613fe2565b915061419e8261415d565b602082019050919050565b600060208201905081810360008301526141c281614186565b9050919050565b7f43616e277420726573756d652067616d6520616674657220726577617264732e600082015250565b60006141ff602083613fe2565b915061420a826141c9565b602082019050919050565b6000602082019050818103600083015261422e816141f2565b9050919050565b7f47616d65206973206e6f74207061757365640000000000000000000000000000600082015250565b600061426b601283613fe2565b915061427682614235565b602082019050919050565b6000602082019050818103600083015261429a8161425e565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006142d7601483613fe2565b91506142e2826142a1565b602082019050919050565b60006020820190508181036000830152614306816142ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143478261395a565b91506143528361395a565b925082820390508181111561436a5761436961430d565b5b92915050565b60008151905061437f81613964565b92915050565b60006020828403121561439b5761439a613950565b5b60006143a984828501614370565b91505092915050565b7f496e76616c696420746f6b656e20616464726573730000000000000000000000600082015250565b60006143e8601583613fe2565b91506143f3826143b2565b602082019050919050565b60006020820190508181036000830152614417816143db565b9050919050565b7f456e74727920666565206d7573742062652067726561746572207468616e2030600082015250565b6000614454602083613fe2565b915061445f8261441e565b602082019050919050565b6000602082019050818103600083015261448381614447565b9050919050565b60006144958261395a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144c7576144c661430d565b5b600182019050919050565b60006040820190506144e76000830185613af0565b6144f46020830184613af0565b9392505050565b60006145068261395a565b91506145118361395a565b92508282019050808211156145295761452861430d565b5b92915050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000614565601d83613fe2565b91506145708261452f565b602082019050919050565b6000602082019050818103600083015261459481614558565b9050919050565b7f496e76616c69642061646d696e20616464726573730000000000000000000000600082015250565b60006145d1601583613fe2565b91506145dc8261459b565b602082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b7f4164647265737320697320616c726561647920616e2061646d696e0000000000600082015250565b600061463d601b83613fe2565b915061464882614607565b602082019050919050565b6000602082019050818103600083015261466c81614630565b9050919050565b7f47616d6520697320616c726561647920696e6163746976650000000000000000600082015250565b60006146a9601883613fe2565b91506146b482614673565b602082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f496e76616c69642066656520636f6c6c6563746f722061646472657373000000600082015250565b6000614715601d83613fe2565b9150614720826146df565b602082019050919050565b6000602082019050818103600083015261474481614708565b9050919050565b7f5265776172647320616c72656164792064697374726962757465640000000000600082015250565b6000614781601b83613fe2565b915061478c8261474b565b602082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f417272617973206c656e677468206d69736d6174636800000000000000000000600082015250565b60006147ed601683613fe2565b91506147f8826147b7565b602082019050919050565b6000602082019050818103600083015261481c816147e0565b9050919050565b7f4e6f2077696e6e6572732070726f766964656400000000000000000000000000600082015250565b6000614859601383613fe2565b915061486482614823565b602082019050919050565b600060208201905081810360008301526148888161484c565b9050919050565b7f546f74616c2070657263656e7461676520657863656564732031303025000000600082015250565b60006148c5601d83613fe2565b91506148d08261488f565b602082019050919050565b600060208201905081810360008301526148f4816148b8565b9050919050565b6000819050919050565b600061491460208401846139d9565b905092915050565b6000602082019050919050565b60006149358385613b88565b9350614940826148fb565b8060005b85811015614979576149568284614905565b6149608882613bb8565b975061496b8361491c565b925050600181019050614944565b5085925050509392505050565b600082825260208201905092915050565b600080fd5b82818337505050565b60006149b18385614986565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156149e4576149e3614997565b5b6020830292506149f583858461499c565b82840190509392505050565b60006040820190508181036000830152614a1c818688614929565b90508181036020830152614a318184866149a5565b905095945050505050565b7f496e76616c6964206665652070657263656e7461676500000000000000000000600082015250565b6000614a72601683613fe2565b9150614a7d82614a3c565b602082019050919050565b60006020820190508181036000830152614aa181614a65565b9050919050565b7f52657761726473206e6f74206469737472696275746564207965740000000000600082015250565b6000614ade601b83613fe2565b9150614ae982614aa8565b602082019050919050565b60006020820190508181036000830152614b0d81614ad1565b9050919050565b6000604082019050614b296000830185613d38565b614b366020830184613af0565b9392505050565b6000606082019050614b526000830186613d38565b614b5f6020830185613d38565b614b6c6040830184613af0565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50657263656e74616765206d757374203e203000000000000000000000000000600082015250565b6000614bd9601383613fe2565b9150614be482614ba3565b602082019050919050565b60006020820190508181036000830152614c0881614bcc565b9050919050565b6000614c1a8261395a565b9150614c258361395a565b9250828202614c338161395a565b91508282048414831517614c4a57614c4961430d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c8b8261395a565b9150614c968361395a565b925082614ca657614ca5614c51565b5b82820490509291505056fea26469706673582212200aab8027a77337f39918c24b156c3b6b6610c974d12c4c0b32688a880d4973a064736f6c634300081e0033