Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 50,589 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Join Race | 65275713 | 134 days ago | IN | 0 POL | 0.01127305 | ||||
Upload Races | 65159152 | 137 days ago | IN | 0 POL | 0.00392938 | ||||
Upload Races | 65159148 | 137 days ago | IN | 0 POL | 0.00394183 | ||||
Join Race | 65156097 | 137 days ago | IN | 0 POL | 0.0097336 | ||||
Join Race | 65156050 | 137 days ago | IN | 0 POL | 0.00992938 | ||||
Join Race | 65056600 | 140 days ago | IN | 0 POL | 0.00421782 | ||||
Join Race | 61535924 | 227 days ago | IN | 0 POL | 0.0042162 | ||||
Join Race | 58628808 | 300 days ago | IN | 0 POL | 0.00361884 | ||||
Upload Races | 56692985 | 350 days ago | IN | 0 POL | 0.0273718 | ||||
Upload Races | 56692984 | 350 days ago | IN | 0 POL | 0.0247144 | ||||
Claim Locked Win... | 56681917 | 350 days ago | IN | 0 POL | 0.0350007 | ||||
Claim Locked Win... | 56681632 | 350 days ago | IN | 0 POL | 0.01355564 | ||||
Upload Races | 56681534 | 350 days ago | IN | 0 POL | 0.0273718 | ||||
Add Race | 56681390 | 350 days ago | IN | 0 POL | 0.0049728 | ||||
Add Race | 56681390 | 350 days ago | IN | 0 POL | 0.0049728 | ||||
Add Race | 56681390 | 350 days ago | IN | 0 POL | 0.0049728 | ||||
Add Race | 56681390 | 350 days ago | IN | 0 POL | 0.0049728 | ||||
Add Race | 56681389 | 350 days ago | IN | 0 POL | 0.0049728 | ||||
Claim Locked Win... | 56681278 | 350 days ago | IN | 0 POL | 0.05348585 | ||||
Claim Locked Win... | 56681008 | 350 days ago | IN | 0 POL | 0.05008347 | ||||
Upload Races | 56680875 | 350 days ago | IN | 0 POL | 0.0273706 | ||||
Claim Locked Win... | 56680194 | 350 days ago | IN | 0 POL | 0.02727436 | ||||
Claim Locked Win... | 56680143 | 350 days ago | IN | 0 POL | 0.06069546 | ||||
Claim Locked Win... | 56679891 | 350 days ago | IN | 0 POL | 0.05669007 | ||||
Claim Locked Win... | 56676849 | 350 days ago | IN | 0 POL | 0.00394176 |
Loading...
Loading
Contract Name:
WofRacingContract
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; // Chainlink Keepers import "@chainlink/contracts/src/v0.8/KeeperCompatible.sol"; interface IWofToken { function transferFrom( address from, address to, uint256 amount ) external; function transfer(address to, uint256 amount) external; function allowance(address owner, address spender) external returns (uint256); } interface ILeasingContract { function useInRace(uint256 _tokenID) external; function isTokenLeased(uint256 _tokenID) external view returns ( bool, bool, uint256, address ); function getLeaseData(uint256 _tokenID, uint256 _leaseID) external view returns (address, address, uint256, uint256, uint256, uint256); } contract WofRacingContract is KeeperCompatibleInterface { uint256 public s_requestId; //CHAINLINK KEEPERS uint256 public interval; uint256 public lastTimeStamp; //CONTRACT VARIABLES address public owner; address public garageContract; uint256 public MAX_PARTICIPANTS = 12; //INTERFACES IWofToken public wofToken; ILeasingContract public leasingContract; //EVENTS event JoinRace( uint256 raceID, address racer, uint256 token_id, uint256 punkID ); event LeaveRace( uint256 raceID, address racer, uint256 token_id, uint256 punkID ); event SeedsGenerated(uint256 raceID); event PayOut(address racer, uint256 amount); constructor( uint256 updateInterval, address _wofTokenAddress, address _garageContract, address _leasingContract ) { owner = msg.sender; interval = updateInterval; lastTimeStamp = block.timestamp; wofToken = IWofToken(_wofTokenAddress); garageContract = _garageContract; leasingContract = ILeasingContract(_leasingContract); } //DATA STRUCTURES /* ----- RACE STRUCT ----- */ mapping(uint256 => Race) public races; struct Race { uint256 prizePool; uint256 entranceFee; mapping(uint256 => Participant) participants; bool finished; uint256 participant_count; } struct Participant { address user; uint256 punkID; uint256 entranceFee; uint256 place; } /* ----- RACE CLAIMS ----- */ struct Earnings { address user; uint256 totalEarned; uint256 totalClaimed; uint256 unclaimable; } struct LockedRaceWinnings { address user; uint timestamp; uint256 amount; bool claimed; } address[] public unclaimedAddresses; mapping(address => uint256) public totalRewardsEarned; mapping(address => uint256) public totalRewardsClaimed; mapping(address => LockedRaceWinnings[]) public unclaimableRewards; /* ----- TOKEN STATS ----- */ struct TokenStats { uint256 racesJoined; uint256 firstPlaces; uint256 secondPlaces; uint256 thirdPlaces; uint256 tokensWon; } mapping(uint256 => TokenStats) public tokenStats; mapping(uint256 => bool) public tokenInrace; /* ----- FREIGHT PUNK STATS STATS ----- */ mapping(uint256 => TokenStats) public freightPunkStats; mapping(uint256 => bool) public punkInRace; /* ----- CONTESTANT STRUCT ----- */ struct Contestants { address racer; uint256 tokenID; uint256 punkID; uint256 place; } /* ----- KEEPERS AND VRF FNC ----- */ function checkUpkeep(bytes calldata) external view override returns (bool upkeepNeeded, bytes memory) { upkeepNeeded = (block.timestamp - lastTimeStamp) > interval; } //PAY OUT THE REWARDS function performUpkeep(bytes calldata) external override { if ((block.timestamp - lastTimeStamp) > interval) { lastTimeStamp = block.timestamp; payOut(); } } /* ----- RACE FNC ----- */ function addRace( uint256 _raceID, uint256 _entranceFee, uint256 _prizePool ) public { races[_raceID].entranceFee = _entranceFee; races[_raceID].finished = false; if (_entranceFee == 0) { races[_raceID].prizePool = _prizePool; } emit SeedsGenerated(_raceID); } function unJoinRace( uint256 _raceID, address _user, uint256 _tokenID, uint256 _punkID ) public { require( races[_raceID].participants[_tokenID].user == msg.sender, "Can not unjoin other people" ); tokenInrace[_tokenID] == false; //DECREMENT THE RACE delete races[_raceID].participants[_tokenID]; //TRANSFER TOKENS BACK TO USER uint256 entranceFee = races[_raceID].entranceFee; wofToken.transfer(_user, entranceFee); //DECREMENT RACERS COUNT races[_raceID].participant_count = races[_raceID].participant_count - 1; //DECREMENT PRIZE POOL races[_raceID].prizePool = races[_raceID].prizePool - entranceFee; emit LeaveRace(_raceID, _user, _tokenID, _punkID); } function joinRace( uint256 _raceID, address _user, uint256 _tokenID, uint256 _entranceFee, uint256 _punkID ) public { uint256 raceParticipants = races[_raceID].participant_count; require(_user == msg.sender, "Can only join with your address"); require(tokenInrace[_tokenID] != true, "Token already racing"); require( wofToken.allowance(_user, address(this)) > _entranceFee, "Entrance Fee exceeds allowance" ); require( _entranceFee >= races[_raceID].entranceFee, "Entrance fee higher than sent" ); require( raceParticipants <= MAX_PARTICIPANTS, "Max number of racers already registered" ); //APPEND TOKEN STATS tokenInrace[_tokenID] == true; //JOIN THE RACE races[_raceID].participants[_tokenID] = Participant({ user: _user, punkID: _punkID, entranceFee: _entranceFee, place: 0 }); //TRANSFER TOKENS TO CONTRACT wofToken.transferFrom(_user, address(this), _entranceFee); //APPEND RACERS COUNT races[_raceID].participant_count = raceParticipants + 1; //APPEND PRIZE POOL races[_raceID].prizePool = races[_raceID].prizePool + _entranceFee; emit JoinRace(_raceID, _user, _tokenID, _punkID); } function uploadRaces(uint256 _raceID, Contestants[] memory _results) public { require( owner == msg.sender, "Not Authorized" ); uint256 prizePool = races[_raceID].prizePool; uint256 entranceFee = races[_raceID].entranceFee; for (uint256 i = 0; i < _results.length; i++) { uint256 reward = 0; if ( entranceFee == 0 || isTokenInRace(_raceID, _results[i].tokenID) == true ) { //UNJOIN TOKEN FROM THE RACE tokenInrace[_results[i].tokenID] = false; if (_results[i].punkID > 0) { punkInRace[_results[i].punkID] = false; } tokenStats[_results[i].tokenID].racesJoined = tokenStats[_results[i].tokenID].racesJoined + 1; //APPEND PUNK STATS if (_results[i].punkID > 0) { punkInRace[_results[i].punkID] == true; freightPunkStats[_results[i].punkID].racesJoined = freightPunkStats[_results[i].punkID].racesJoined + 1; } //ASSIGN PLACES if (_results[i].place == 1) { //APPEND STATS tokenStats[_results[i].tokenID].firstPlaces = tokenStats[_results[i].tokenID].firstPlaces + 1; if (_results[i].punkID != 0) { freightPunkStats[_results[i].punkID].firstPlaces = freightPunkStats[_results[i].punkID].firstPlaces + 1; } reward = getRewardAmount(prizePool, _results[i].place); } if (_results[i].place == 2) { //APPEND STATS tokenStats[_results[i].tokenID].secondPlaces = tokenStats[_results[i].tokenID].secondPlaces + 1; if (_results[i].punkID != 0) { freightPunkStats[_results[i].punkID].secondPlaces = freightPunkStats[_results[i].punkID].secondPlaces + 1; } reward = getRewardAmount(prizePool, _results[i].place); } if (_results[i].place == 3) { //APPEND STATS tokenStats[_results[i].tokenID].thirdPlaces = tokenStats[_results[i].tokenID].thirdPlaces + 1; if (_results[i].punkID != 0) { freightPunkStats[_results[i].punkID].thirdPlaces = freightPunkStats[_results[i].punkID].thirdPlaces + 1; } reward = getRewardAmount(prizePool, _results[i].place); } //APPEND LEASE STATS bool isLeased; (,isLeased,,) = leasingContract.isTokenLeased(_results[i].tokenID); if (isLeased) { leasingContract.useInRace(_results[i].tokenID); reward = (reward * 95) / 100; } } if (reward > 0) { bool isLeased; uint256 leaseID; address leaser; (,isLeased,leaseID,leaser) = leasingContract.isTokenLeased(_results[i].tokenID); // PAY OUT RACES WHERE ENTRANCE FEE IS NOT 0 if (races[_raceID].entranceFee != 0) { if (isLeased) { address tokenOwner; uint256 leaseType; uint256 paymentType; uint256 winShare; (tokenOwner, leaser, leaseType, paymentType,, winShare)= leasingContract.getLeaseData(_results[i].tokenID, leaseID); if (paymentType == 1 || paymentType == 3) { uint256 ownersCut = (reward * winShare) / 100; wofToken.transfer(tokenOwner, ownersCut); reward = reward - ownersCut; wofToken.transfer(_results[i].racer, reward); } else { wofToken.transfer(_results[i].racer, reward); } } else { wofToken.transfer(_results[i].racer, reward); } } else { if (totalRewardsEarned[_results[i].racer] == 0) { unclaimedAddresses.push(_results[i].racer); } if (isLeased) { address tokenOwner; uint256 leaseType; uint256 paymentType; uint256 winShare; (tokenOwner, leaser, leaseType, paymentType,, winShare) = leasingContract.getLeaseData(_results[i].tokenID, leaseID); if (paymentType == 1 || paymentType == 3) { uint256 ownersCut = (reward * winShare) / 100; totalRewardsEarned[tokenOwner] = totalRewardsEarned[tokenOwner] + ownersCut; reward = reward - ownersCut; unclaimableRewards[_results[i].racer].push(LockedRaceWinnings(_results[i].racer, block.timestamp, reward, false)); totalRewardsEarned[_results[i].racer] = totalRewardsEarned[_results[i].racer] + reward; } else { unclaimableRewards[_results[i].racer].push(LockedRaceWinnings(_results[i].racer, block.timestamp, reward, false)); totalRewardsEarned[_results[i].racer] = totalRewardsEarned[_results[i].racer] + reward; } } else { totalRewardsEarned[_results[i].racer] = totalRewardsEarned[_results[i].racer] + reward; } } } } } /* ----- HELPER FNC ----- */ function getLeaseStatus(uint256 _tokenID) public view returns( bool isLeased ) { (, isLeased, ,) = leasingContract.isTokenLeased(_tokenID); } function isTokenInRace(uint256 raceID, uint256 tokenID) public view returns (bool) { address racerAddress = races[raceID].participants[tokenID].user; if (racerAddress == address(0)) { return false; } return true; } function getParticipant(uint256 _raceID, uint256 tokenID) public view returns (Participant memory) { return races[_raceID].participants[tokenID]; } function getRewardAmount(uint256 prizePool, uint256 place) internal pure returns (uint256) { if (place == 1) { return (prizePool * 60) / 100; } if (place == 2) { return (prizePool * 25) / 100; } if (place == 3) { return (prizePool * 15) / 100; } return 0; } function getLockedRewards(address _address) public view returns (uint256) { uint256 lockedRewards; for (uint256 i = 0; i < unclaimableRewards[_address].length; i++) { if (unclaimableRewards[_address][i].amount > 0 && unclaimableRewards[_address][i].claimed == false) { lockedRewards = lockedRewards + unclaimableRewards[_address][i].amount; } } return lockedRewards; } function getUnlockedRewards(address _address) public view returns (uint256) { uint256 unlockedRewards; uint256 lockedRewards = getLockedRewards(_address); unlockedRewards = totalRewardsEarned[_address] - totalRewardsClaimed[_address] - lockedRewards; return unlockedRewards; } function unlockRewards(address _address) internal { uint twoweeksago = block.timestamp - 1209600; for (uint256 j = 0; j < unclaimableRewards[_address].length; j++) { if (unclaimableRewards[_address][j].amount > 0 && unclaimableRewards[_address][j].claimed == false && unclaimableRewards[_address][j].timestamp < twoweeksago) { totalRewardsEarned[_address] = totalRewardsEarned[_address] + unclaimableRewards[_address][j].amount; delete unclaimableRewards[_address][j]; } } } function claimWinnings() public { unlockRewards(msg.sender); uint256 lockedRewards = getLockedRewards(msg.sender); uint256 payout = totalRewardsEarned[msg.sender] - totalRewardsClaimed[msg.sender] - lockedRewards; totalRewardsClaimed[msg.sender] = totalRewardsClaimed[msg.sender] + payout; wofToken.transferFrom(garageContract, msg.sender, payout); } function claimLockedWinnings() public { unlockRewards(msg.sender); uint lockedWinnings = 0; for (uint256 j = 0; j < unclaimableRewards[msg.sender].length; j++) { if (unclaimableRewards[msg.sender][j].amount > 0 && unclaimableRewards[msg.sender][j].claimed == false) { lockedWinnings = lockedWinnings + unclaimableRewards[msg.sender][j].amount; delete unclaimableRewards[msg.sender][j]; } } uint256 payout = totalRewardsEarned[msg.sender] - totalRewardsClaimed[msg.sender] - (lockedWinnings * 65 / 100); if (payout > 0) { totalRewardsClaimed[msg.sender] = totalRewardsClaimed[msg.sender] + payout; wofToken.transferFrom(garageContract, msg.sender, payout); } } function payOut() internal { if (unclaimedAddresses.length > 0) { for (uint256 i = 0; i < unclaimedAddresses.length; i++) { address userAddress = unclaimedAddresses[i]; uint twoweeksago = block.timestamp - 1209600; uint lockedBalance = 0; for (uint j = 0; j < unclaimableRewards[userAddress].length; j++) { if (unclaimableRewards[userAddress][j].amount > 0 && unclaimableRewards[userAddress][j].claimed == false && unclaimableRewards[userAddress][j].timestamp > twoweeksago) { lockedBalance = lockedBalance + unclaimableRewards[userAddress][j].amount; } } uint256 payout = totalRewardsEarned[userAddress] - totalRewardsClaimed[userAddress] - lockedBalance; if (payout > 0) { totalRewardsClaimed[userAddress] = totalRewardsClaimed[userAddress] + payout; wofToken.transferFrom(garageContract, userAddress, payout); emit PayOut(userAddress, payout); } } delete unclaimedAddresses; } } function payOutWithLocked(address _address) public { uint lockedWinnings = 0; for (uint256 j = 0; j < unclaimableRewards[_address].length; j++) { if (unclaimableRewards[_address][j].amount > 0 && unclaimableRewards[_address][j].claimed == false) { lockedWinnings = lockedWinnings + unclaimableRewards[_address][j].amount; delete unclaimableRewards[_address][j]; } } uint256 payout = totalRewardsEarned[_address] - totalRewardsClaimed[_address] - (lockedWinnings * 65 / 100); if (payout > 0) { totalRewardsClaimed[_address] = totalRewardsClaimed[_address] + payout; wofToken.transferFrom(garageContract, _address, payout); emit PayOut(_address, payout); delete unclaimedAddresses; } } /* ----- MANAGEMENT FNC ----- */ function setOwner(address _address) public { require(msg.sender == owner, "Not the owner"); owner = _address; } function setTokenContract(address _address) public { require(msg.sender == owner, "Not the owner"); wofToken = IWofToken(_address); } function setLeaseContract(address _address) public { require(msg.sender == owner, "Not the owner"); leasingContract = ILeasingContract(_address); } function setGarageContract(address _address) public { require(msg.sender == owner, "Not the owner"); garageContract = _address; } //WIDTHRAW WOF TOKENS function withdraw(address _to, uint256 _amount) public { require(msg.sender == owner, "Not the owner"); wofToken.transfer(_to, _amount); } //SET MAX PARTICIPANTS function setMaxParticipants(uint256 _amount) public { require(msg.sender == owner, "Not the owner"); MAX_PARTICIPANTS = _amount; } //CHANGE KEEPERS INTERVAL function setInterval(uint256 updateInterval) public { require(msg.sender == owner, "Not the owner"); interval = updateInterval; } // ADD INITIAL DATA struct TkStats { uint256 id; uint256 firstPlaces; uint256 secondPlaces; uint256 thirdPlaces; uint256 racesJoined; } bool public canUplaod = true; function disableUploadStats() public { require(msg.sender == owner, "Not the owner"); canUplaod = false; } function uploadInitialStats(TkStats[] memory _arr) public { require(msg.sender == owner, "Not the owner"); require(canUplaod, "Uploading is disabled"); for (uint256 i = 0; i < _arr.length; i++) { tokenStats[_arr[i].id].racesJoined = _arr[i].racesJoined; tokenStats[_arr[i].id].firstPlaces = _arr[i].firstPlaces; tokenStats[_arr[i].id].secondPlaces = _arr[i].secondPlaces; tokenStats[_arr[i].id].thirdPlaces = _arr[i].thirdPlaces; } } function uploadPunkStats(TkStats[] memory _arr) public { require(msg.sender == owner, "Not the owner"); require(canUplaod, "Uploading is disabled"); for (uint256 i = 0; i < _arr.length; i++) { freightPunkStats[_arr[i].id].racesJoined = _arr[i].racesJoined; freightPunkStats[_arr[i].id].firstPlaces = _arr[i].firstPlaces; freightPunkStats[_arr[i].id].secondPlaces = _arr[i].secondPlaces; freightPunkStats[_arr[i].id].thirdPlaces = _arr[i].thirdPlaces; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./KeeperBase.sol"; import "./interfaces/KeeperCompatibleInterface.sol"; abstract contract KeeperCompatible is KeeperBase, KeeperCompatibleInterface {}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract KeeperBase { error OnlySimulatedBackend(); /** * @notice method that allows it to be simulated via eth_call by checking that * the sender is the zero address. */ function preventExecution() internal view { if (tx.origin != address(0)) { revert OnlySimulatedBackend(); } } /** * @notice modifier that allows it to be simulated via eth_call by checking * that the sender is the zero address. */ modifier cannotExecute() { preventExecution(); _; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface KeeperCompatibleInterface { /** * @notice method that is simulated by the keepers to see if any work actually * needs to be performed. This method does does not actually need to be * executable, and since it is only ever simulated it can consume lots of gas. * @dev To ensure that it is never called, you may want to add the * cannotExecute modifier from KeeperBase to your implementation of this * method. * @param checkData specified in the upkeep registration so it is always the * same for a registered upkeep. This can easily be broken down into specific * arguments using `abi.decode`, so multiple upkeeps can be registered on the * same contract and easily differentiated by the contract. * @return upkeepNeeded boolean to indicate whether the keeper should call * performUpkeep or not. * @return performData bytes that the keeper should call performUpkeep with, if * upkeep is needed. If you would like to encode data to decode later, try * `abi.encode`. */ function checkUpkeep(bytes calldata checkData) external returns (bool upkeepNeeded, bytes memory performData); /** * @notice method that is actually executed by the keepers, via the registry. * The data returned by the checkUpkeep simulation will be passed into * this method to actually be executed. * @dev The input to this method should not be trusted, and the caller of the * method should not even be restricted to any single registry. Anyone should * be able call it, and the input should be validated, there is no guarantee * that the data passed in is the performData returned from checkUpkeep. This * could happen due to malicious keepers, racing keepers, or simply a state * change while the performUpkeep transaction is waiting for confirmation. * Always validate the data passed in. * @param performData is the data which was passed back from the checkData * simulation. If it is encoded, it can easily be decoded into other types by * calling `abi.decode`. This data should not be trusted, and should be * validated against the contract's current state. */ function performUpkeep(bytes calldata performData) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"updateInterval","type":"uint256"},{"internalType":"address","name":"_wofTokenAddress","type":"address"},{"internalType":"address","name":"_garageContract","type":"address"},{"internalType":"address","name":"_leasingContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"raceID","type":"uint256"},{"indexed":false,"internalType":"address","name":"racer","type":"address"},{"indexed":false,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"punkID","type":"uint256"}],"name":"JoinRace","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"raceID","type":"uint256"},{"indexed":false,"internalType":"address","name":"racer","type":"address"},{"indexed":false,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"punkID","type":"uint256"}],"name":"LeaveRace","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"racer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PayOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"raceID","type":"uint256"}],"name":"SeedsGenerated","type":"event"},{"inputs":[],"name":"MAX_PARTICIPANTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raceID","type":"uint256"},{"internalType":"uint256","name":"_entranceFee","type":"uint256"},{"internalType":"uint256","name":"_prizePool","type":"uint256"}],"name":"addRace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"canUplaod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimLockedWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableUploadStats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"freightPunkStats","outputs":[{"internalType":"uint256","name":"racesJoined","type":"uint256"},{"internalType":"uint256","name":"firstPlaces","type":"uint256"},{"internalType":"uint256","name":"secondPlaces","type":"uint256"},{"internalType":"uint256","name":"thirdPlaces","type":"uint256"},{"internalType":"uint256","name":"tokensWon","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"garageContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"getLeaseStatus","outputs":[{"internalType":"bool","name":"isLeased","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLockedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raceID","type":"uint256"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"getParticipant","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"punkID","type":"uint256"},{"internalType":"uint256","name":"entranceFee","type":"uint256"},{"internalType":"uint256","name":"place","type":"uint256"}],"internalType":"struct WofRacingContract.Participant","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUnlockedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"raceID","type":"uint256"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"isTokenInRace","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raceID","type":"uint256"},{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"uint256","name":"_entranceFee","type":"uint256"},{"internalType":"uint256","name":"_punkID","type":"uint256"}],"name":"joinRace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leasingContract","outputs":[{"internalType":"contract ILeasingContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"payOutWithLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"performUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"punkInRace","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"races","outputs":[{"internalType":"uint256","name":"prizePool","type":"uint256"},{"internalType":"uint256","name":"entranceFee","type":"uint256"},{"internalType":"bool","name":"finished","type":"bool"},{"internalType":"uint256","name":"participant_count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"s_requestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setGarageContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"updateInterval","type":"uint256"}],"name":"setInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLeaseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxParticipants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenInrace","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenStats","outputs":[{"internalType":"uint256","name":"racesJoined","type":"uint256"},{"internalType":"uint256","name":"firstPlaces","type":"uint256"},{"internalType":"uint256","name":"secondPlaces","type":"uint256"},{"internalType":"uint256","name":"thirdPlaces","type":"uint256"},{"internalType":"uint256","name":"tokensWon","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalRewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalRewardsEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raceID","type":"uint256"},{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"uint256","name":"_punkID","type":"uint256"}],"name":"unJoinRace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"unclaimableRewards","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"unclaimedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"firstPlaces","type":"uint256"},{"internalType":"uint256","name":"secondPlaces","type":"uint256"},{"internalType":"uint256","name":"thirdPlaces","type":"uint256"},{"internalType":"uint256","name":"racesJoined","type":"uint256"}],"internalType":"struct WofRacingContract.TkStats[]","name":"_arr","type":"tuple[]"}],"name":"uploadInitialStats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"firstPlaces","type":"uint256"},{"internalType":"uint256","name":"secondPlaces","type":"uint256"},{"internalType":"uint256","name":"thirdPlaces","type":"uint256"},{"internalType":"uint256","name":"racesJoined","type":"uint256"}],"internalType":"struct WofRacingContract.TkStats[]","name":"_arr","type":"tuple[]"}],"name":"uploadPunkStats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raceID","type":"uint256"},{"components":[{"internalType":"address","name":"racer","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"uint256","name":"punkID","type":"uint256"},{"internalType":"uint256","name":"place","type":"uint256"}],"internalType":"struct WofRacingContract.Contestants[]","name":"_results","type":"tuple[]"}],"name":"uploadRaces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wofToken","outputs":[{"internalType":"contract IWofToken","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600c6005556011805460ff191660011790553480156200002357600080fd5b5060405162003ac938038062003ac98339810160408190526200004691620000b8565b60038054336001600160a01b031991821617909155600194909455426002556006805485166001600160a01b03948516179055600480548516928416929092179091556007805490931691161790556200010c565b80516001600160a01b0381168114620000b357600080fd5b919050565b60008060008060808587031215620000cf57600080fd5b84519350620000e1602086016200009b565b9250620000f1604086016200009b565b915062000101606086016200009b565b905092959194509250565b6139ad806200011c6000396000f3fe608060405234801561001057600080fd5b506004361061025d5760003560e01c80637673399a11610146578063c5260042116100c3578063e89e106a11610087578063e89e106a14610653578063e926ca951461065c578063e953ba7314610699578063f3baf070146106ac578063f3fef3a3146106b5578063f6ce9004146106c857600080fd5b8063c5260042146105ed578063cb441dea14610600578063e4341cea14610613578063e438005d14610620578063e4f24cb01461063357600080fd5b8063947a36fb1161010a578063947a36fb146105a3578063987f70ff146105ac578063b401faf1146105bf578063b859f825146105c7578063bbcd5bbe146105da57600080fd5b80637673399a146105015780637bbc469e1461051457806382689a0114610575578063833a71d7146105885780638da5cb5b1461059057600080fd5b80632ac426aa116101df57806352e320a0116101a357806352e320a01461047c57806360bd65631461049f57806362581a27146104b25780636e04ff0d146104ba5780636ea3d9be146104db5780637592b77f146104ee57600080fd5b80632ac426aa146104195780632bf7299b1461042c5780633b68705b1461043f5780633f3b3b27146104525780634585e33b1461046957600080fd5b806313af40351161022657806313af4035146103005780631aed59f014610313578063212b33f01461036257806322a90082146103c757806329250cb8146103da57600080fd5b8062f88a6614610262578063081e8924146102775780630c243484146102a75780630c2e6f18146102ba578063129927d3146102cd575b600080fd5b6102756102703660046133d7565b6106e8565b005b61028a6102853660046134bb565b6118ae565b6040516001600160a01b0390911681526020015b60405180910390f35b6102756102b53660046134d4565b6118d8565b6102756102c83660046134f8565b611924565b6102f06102db3660046134bb565b60106020526000908152604090205460ff1681565b604051901515815260200161029e565b61027561030e3660046134d4565b611af7565b610326610321366004613535565b611b43565b60405161029e919081516001600160a01b0316815260208083015190820152604080830151908201526060918201519181019190915260800190565b61039f6103703660046134bb565b600f60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a00161029e565b6102756103d53660046134bb565b611bd2565b6103ed6103e8366004613557565b611c01565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161029e565b610275610427366004613583565b611c54565b61027561043a3660046134bb565b61201a565b60075461028a906001600160a01b031681565b61045b60025481565b60405190815260200161029e565b6102756104773660046135cb565b612049565b6102f061048a3660046134bb565b600e6020526000908152604090205460ff1681565b61045b6104ad3660046134d4565b61206f565b6102756120c3565b6104cd6104c83660046135cb565b6122fd565b60405161029e92919061363d565b6102756104e936600461369c565b61231c565b6102756104fc3660046136c8565b61238b565b61027561050f3660046136c8565b612572565b61054f6105223660046134bb565b60086020526000908152604090208054600182015460038301546004909301549192909160ff9091169084565b60408051948552602085019390935290151591830191909152606082015260800161029e565b6102f0610583366004613535565b612759565b610275612798565b60035461028a906001600160a01b031681565b61045b60015481565b60065461028a906001600160a01b031681565b6102756127ce565b60045461028a906001600160a01b031681565b6102756105e83660046134d4565b612835565b6102756105fb3660046134d4565b612881565b61045b61060e3660046134d4565b612b42565b6011546102f09060ff1681565b61027561062e3660046134d4565b612c57565b61045b6106413660046134d4565b600a6020526000908152604090205481565b61045b60005481565b61039f61066a3660046134bb565b600d60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b6102f06106a73660046134bb565b612ca3565b61045b60055481565b6102756106c3366004613557565b612d2a565b61045b6106d63660046134d4565b600b6020526000908152604090205481565b6003546001600160a01b031633146107385760405162461bcd60e51b815260206004820152600e60248201526d139bdd08105d5d1a1bdc9a5e995960921b60448201526064015b60405180910390fd5b6000828152600860205260408120805460019091015490915b83518110156118a7576000821580610791575061078b8686848151811061077a5761077a61379a565b602002602001015160200151612759565b15156001145b15610ef0576000600e60008785815181106107ae576107ae61379a565b602002602001015160200151815260200190815260200160002060006101000a81548160ff02191690831515021790555060008583815181106107f3576107f361379a565b602002602001015160400151111561084f5760006010600087858151811061081d5761081d61379a565b602002602001015160400151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60008684815181106108655761086561379a565b602002602001015160200151815260200190815260200160002060000154600161088f91906137c6565b600d60008785815181106108a5576108a561379a565b60200260200101516020015181526020019081526020016000206000018190555060008583815181106108da576108da61379a565b602002602001015160400151111561099257601060008684815181106109025761090261379a565b60209081029190910181015160400151825201528451600f906000908790859081106109305761093061379a565b602002602001015160400151815260200190815260200160002060000154600161095a91906137c6565b600f60008785815181106109705761097061379a565b6020026020010151604001518152602001908152602001600020600001819055505b8482815181106109a4576109a461379a565b60200260200101516060015160011415610af657600d60008684815181106109ce576109ce61379a565b60200260200101516020015181526020019081526020016000206001015460016109f891906137c6565b600d6000878581518110610a0e57610a0e61379a565b602002602001015160200151815260200190815260200160002060010181905550848281518110610a4157610a4161379a565b602002602001015160400151600014610acc57600f6000868481518110610a6a57610a6a61379a565b6020026020010151604001518152602001908152602001600020600101546001610a9491906137c6565b600f6000878581518110610aaa57610aaa61379a565b6020026020010151604001518152602001908152602001600020600101819055505b610af384868481518110610ae257610ae261379a565b602002602001015160600151612d8d565b90505b848281518110610b0857610b0861379a565b60200260200101516060015160021415610c4957600d6000868481518110610b3257610b3261379a565b6020026020010151602001518152602001908152602001600020600201546001610b5c91906137c6565b600d6000878581518110610b7257610b7261379a565b602002602001015160200151815260200190815260200160002060020181905550848281518110610ba557610ba561379a565b602002602001015160400151600014610c3057600f6000868481518110610bce57610bce61379a565b6020026020010151604001518152602001908152602001600020600201546001610bf891906137c6565b600f6000878581518110610c0e57610c0e61379a565b6020026020010151604001518152602001908152602001600020600201819055505b610c4684868481518110610ae257610ae261379a565b90505b848281518110610c5b57610c5b61379a565b60200260200101516060015160031415610d9c57600d6000868481518110610c8557610c8561379a565b6020026020010151602001518152602001908152602001600020600301546001610caf91906137c6565b600d6000878581518110610cc557610cc561379a565b602002602001015160200151815260200190815260200160002060030181905550848281518110610cf857610cf861379a565b602002602001015160400151600014610d8357600f6000868481518110610d2157610d2161379a565b6020026020010151604001518152602001908152602001600020600301546001610d4b91906137c6565b600f6000878581518110610d6157610d6161379a565b6020026020010151604001518152602001908152602001600020600301819055505b610d9984868481518110610ae257610ae261379a565b90505b60075485516000916001600160a01b03169063a7147de690889086908110610dc657610dc661379a565b6020026020010151602001516040518263ffffffff1660e01b8152600401610df091815260200190565b60806040518083038186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4091906137f3565b509092505081159050610eee5760075486516001600160a01b03909116906331c6c7e190889086908110610e7657610e7661379a565b6020026020010151602001516040518263ffffffff1660e01b8152600401610ea091815260200190565b600060405180830381600087803b158015610eba57600080fd5b505af1158015610ece573d6000803e3d6000fd5b50505050606482605f610ee19190613842565b610eeb9190613861565b91505b505b8015611894576007548551600091829182916001600160a01b03169063a7147de6908a9088908110610f2457610f2461379a565b6020026020010151602001516040518263ffffffff1660e01b8152600401610f4e91815260200190565b60806040518083038186803b158015610f6657600080fd5b505afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e91906137f3565b60008d81526008602052604090206001015492965090945092501590506112fe57821561126d57600080600080600760009054906101000a90046001600160a01b03166001600160a01b03166335af1a4e8d8b815181106110015761100161379a565b602002602001015160200151886040518363ffffffff1660e01b8152600401611034929190918252602082015260400190565b60c06040518083038186803b15801561104c57600080fd5b505afa158015611060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110849190613883565b939950939750909550935091505060018214806110a15750816003145b156111ce57600060646110b4838b613842565b6110be9190613861565b60065460405163a9059cbb60e01b81526001600160a01b0388811660048301526024820184905292935091169063a9059cbb90604401600060405180830381600087803b15801561110e57600080fd5b505af1158015611122573d6000803e3d6000fd5b50505050808961113291906138e1565b6006548e51919a506001600160a01b03169063a9059cbb908f908d90811061115c5761115c61379a565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018c9052604401600060405180830381600087803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b5050505050611264565b6006548c516001600160a01b039091169063a9059cbb908e908c9081106111f7576111f761379a565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018b9052604401600060405180830381600087803b15801561124b57600080fd5b505af115801561125f573d6000803e3d6000fd5b505050505b50505050611890565b60065488516001600160a01b039091169063a9059cbb908a90889081106112965761129661379a565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101879052604401600060405180830381600087803b1580156112ea57600080fd5b505af1158015611264573d6000803e3d6000fd5b600a60008987815181106113145761131461379a565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020546000141561139a57600988868151811061135d5761135d61379a565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b821561180657600080600080600760009054906101000a90046001600160a01b03166001600160a01b03166335af1a4e8d8b815181106113dc576113dc61379a565b602002602001015160200151886040518363ffffffff1660e01b815260040161140f929190918252602082015260400190565b60c06040518083038186803b15801561142757600080fd5b505afa15801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f9190613883565b9399509397509095509350915050600182148061147c5750816003145b1561168c576000606461148f838b613842565b6114999190613861565b6001600160a01b0386166000908152600a60205260409020549091506114c09082906137c6565b6001600160a01b0386166000908152600a60205260409020556114e3818a6138e1565b9850600c60008e8c815181106114fb576114fb61379a565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060405180608001604052808f8d815181106115445761154461379a565b6020026020010151600001516001600160a01b031681526020014281526020018b815260200160001515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550505088600a60008f8d815181106116145761161461379a565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000205461164b91906137c6565b600a60008f8d815181106116615761166161379a565b602090810291909101810151516001600160a01b031682528101919091526040016000205550611264565b600c60008d8b815181106116a2576116a261379a565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060405180608001604052808e8c815181106116eb576116eb61379a565b602090810291909101810151516001600160a01b039081168352428383015260408084018e905260006060948501819052865460018082018955978252848220875160049092020180546001600160a01b0319169190941617835592850151958201959095559383015160028501559101516003909201805460ff1916921515929092179091558c518991600a918f908d90811061178b5761178b61379a565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020546117c291906137c6565b600a60008e8c815181106117d8576117d861379a565b602090810291909101810151516001600160a01b031682528101919091526040016000205550505050611890565b83600a60008a888151811061181d5761181d61379a565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000205461185491906137c6565b600a60008a888151811061186a5761186a61379a565b602090810291909101810151516001600160a01b03168252810191909152604001600020555b5050505b508061189f816138f8565b915050610751565b5050505050565b600981815481106118be57600080fd5b6000918252602090912001546001600160a01b0316905081565b6003546001600160a01b031633146119025760405162461bcd60e51b815260040161072f90613913565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008481526008602090815260408083208584526002019091529020546001600160a01b031633146119985760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f7420756e6a6f696e206f746865722070656f706c650000000000604482015260640161072f565b60008481526008602081815260408084208685526002808201845282862080546001600160a01b031916815560018082018890559181018790556003018690559489905292909152910154600654915163a9059cbb60e01b81526001600160a01b038681166004830152602482018390529192919091169063a9059cbb90604401600060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050600086815260086020526040902060040154611a6991506001906138e1565b6000868152600860205260409020600481019190915554611a8b9082906138e1565b6000868152600860209081526040918290209290925580518781526001600160a01b038716928101929092528101849052606081018390527f486610e7950cc18b99f2e96078158edbdb0a971f7520894f5428b07ca8f6d1a69060800160405180910390a15050505050565b6003546001600160a01b03163314611b215760405162461bcd60e51b815260040161072f90613913565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b611b77604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b5060008281526008602090815260408083208484526002908101835292819020815160808101835281546001600160a01b03168152600182015493810193909352928301549082015260039091015460608201525b92915050565b6003546001600160a01b03163314611bfc5760405162461bcd60e51b815260040161072f90613913565b600155565b600c6020528160005260406000208181548110611c1d57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6000858152600860205260409020600401546001600160a01b0385163314611cbe5760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c79206a6f696e207769746820796f7572206164647265737300604482015260640161072f565b6000848152600e602052604090205460ff16151560011415611d195760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c726561647920726163696e6760601b604482015260640161072f565b600654604051636eb1769f60e11b81526001600160a01b0387811660048301523060248301528592169063dd62ed3e90604401602060405180830381600087803b158015611d6657600080fd5b505af1158015611d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9e919061393a565b11611deb5760405162461bcd60e51b815260206004820152601e60248201527f456e7472616e636520466565206578636565647320616c6c6f77616e63650000604482015260640161072f565b600086815260086020526040902060010154831015611e4c5760405162461bcd60e51b815260206004820152601d60248201527f456e7472616e63652066656520686967686572207468616e2073656e74000000604482015260640161072f565b600554811115611eae5760405162461bcd60e51b815260206004820152602760248201527f4d6178206e756d626572206f662072616365727320616c7265616479207265676044820152661a5cdd195c995960ca1b606482015260840161072f565b604080516080810182526001600160a01b03878116825260208083018681528385018881526000606086018181528d8252600885528782208c8352600290810190955290879020955186546001600160a01b0319169086161786559151600186015551918401919091555160039092019190915560065491516323b872dd60e01b81529116906323b872dd90611f4c90889030908890600401613953565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b50505050806001611f8b91906137c6565b6000878152600860205260409020600481019190915554611fad9084906137c6565b6000878152600860209081526040918290209290925580518881526001600160a01b038816928101929092528101859052606081018390527fc746505e2fda0290ec371b3b777afb0ff319bfa21d64b2bb398d9beca68083079060800160405180910390a1505050505050565b6003546001600160a01b031633146120445760405162461bcd60e51b815260040161072f90613913565b600555565b60015460025461205990426138e1565b111561206b574260025561206b612deb565b5050565b600080600061207d84612b42565b6001600160a01b0385166000908152600b6020908152604080832054600a9092529091205491925082916120b191906138e1565b6120bb91906138e1565b949350505050565b6120cc336130dd565b6000805b336000908152600c602052604090205481101561220e57336000908152600c602052604081208054839081106121085761210861379a565b90600052602060002090600402016002015411801561215c5750336000908152600c602052604090208054829081106121435761214361379a565b600091825260209091206003600490920201015460ff16155b156121fc57336000908152600c602052604090208054829081106121825761218261379a565b9060005260206000209060040201600201548261219f91906137c6565b336000908152600c60205260409020805491935090829081106121c4576121c461379a565b60009182526020822060049091020180546001600160a01b0319168155600181018290556002810191909155600301805460ff191690555b80612206816138f8565b9150506120d0565b506000606461221e836041613842565b6122289190613861565b336000908152600b6020908152604080832054600a9092529091205461224e91906138e1565b61225891906138e1565b9050801561206b57336000908152600b602052604090205461227b9082906137c6565b336000818152600b602052604090819020929092556006546004805493516323b872dd60e01b81526001600160a01b03928316946323b872dd946122c794909116929091879101613953565b600060405180830381600087803b1580156122e157600080fd5b505af11580156122f5573d6000803e3d6000fd5b505050505050565b600060606001546002544261231291906138e1565b1191509250929050565b600083815260086020526040902060018101839055600301805460ff19169055816123535760008381526008602052604090208190555b6040518381527f46d937130e22cbf287447003c079f8f4bd89aa30903898fe55e61bcf7a92526f9060200160405180910390a1505050565b6003546001600160a01b031633146123b55760405162461bcd60e51b815260040161072f90613913565b60115460ff166123ff5760405162461bcd60e51b8152602060048201526015602482015274155c1b1bd8591a5b99c81a5cc8191a5cd8589b1959605a1b604482015260640161072f565b60005b815181101561206b5781818151811061241d5761241d61379a565b602002602001015160800151600d600084848151811061243f5761243f61379a565b6020026020010151600001518152602001908152602001600020600001819055508181815181106124725761247261379a565b602002602001015160200151600d60008484815181106124945761249461379a565b6020026020010151600001518152602001908152602001600020600101819055508181815181106124c7576124c761379a565b602002602001015160400151600d60008484815181106124e9576124e961379a565b60200260200101516000015181526020019081526020016000206002018190555081818151811061251c5761251c61379a565b602002602001015160600151600d600084848151811061253e5761253e61379a565b602002602001015160000151815260200190815260200160002060030181905550808061256a906138f8565b915050612402565b6003546001600160a01b0316331461259c5760405162461bcd60e51b815260040161072f90613913565b60115460ff166125e65760405162461bcd60e51b8152602060048201526015602482015274155c1b1bd8591a5b99c81a5cc8191a5cd8589b1959605a1b604482015260640161072f565b60005b815181101561206b578181815181106126045761260461379a565b602002602001015160800151600f60008484815181106126265761262661379a565b6020026020010151600001518152602001908152602001600020600001819055508181815181106126595761265961379a565b602002602001015160200151600f600084848151811061267b5761267b61379a565b6020026020010151600001518152602001908152602001600020600101819055508181815181106126ae576126ae61379a565b602002602001015160400151600f60008484815181106126d0576126d061379a565b6020026020010151600001518152602001908152602001600020600201819055508181815181106127035761270361379a565b602002602001015160600151600f60008484815181106127255761272561379a565b6020026020010151600001518152602001908152602001600020600301819055508080612751906138f8565b9150506125e9565b60008281526008602090815260408083208484526002019091528120546001600160a01b03168061278e576000915050611bcc565b5060019392505050565b6003546001600160a01b031633146127c25760405162461bcd60e51b815260040161072f90613913565b6011805460ff19169055565b6127d7336130dd565b60006127e233612b42565b336000908152600b6020908152604080832054600a9092528220549293509091839161280d916138e1565b61281791906138e1565b336000908152600b602052604090205490915061227b9082906137c6565b6003546001600160a01b0316331461285f5760405162461bcd60e51b815260040161072f90613913565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b6001600160a01b0383166000908152600c60205260409020548110156129f0576001600160a01b0383166000908152600c602052604081208054839081106128cf576128cf61379a565b90600052602060002090600402016002015411801561292c57506001600160a01b0383166000908152600c602052604090208054829081106129135761291361379a565b600091825260209091206003600490920201015460ff16155b156129de576001600160a01b0383166000908152600c6020526040902080548290811061295b5761295b61379a565b9060005260206000209060040201600201548261297891906137c6565b6001600160a01b0384166000908152600c60205260409020805491935090829081106129a6576129a661379a565b60009182526020822060049091020180546001600160a01b0319168155600181018290556002810191909155600301805460ff191690555b806129e8816138f8565b915050612885565b5060006064612a00836041613842565b612a0a9190613861565b6001600160a01b0384166000908152600b6020908152604080832054600a90925290912054612a3991906138e1565b612a4391906138e1565b90508015612b3d576001600160a01b0383166000908152600b6020526040902054612a6f9082906137c6565b6001600160a01b038085166000908152600b602052604090819020929092556006546004805493516323b872dd60e01b8152918316936323b872dd93612abc939116918891879101613953565b600060405180830381600087803b158015612ad657600080fd5b505af1158015612aea573d6000803e3d6000fd5b5050604080516001600160a01b0387168152602081018590527f9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc935001905060405180910390a1612b3d600960006132d1565b505050565b60008060005b6001600160a01b0384166000908152600c6020526040902054811015612c50576001600160a01b0384166000908152600c60205260408120805483908110612b9257612b9261379a565b906000526020600020906004020160020154118015612bef57506001600160a01b0384166000908152600c60205260409020805482908110612bd657612bd661379a565b600091825260209091206003600490920201015460ff16155b15612c3e576001600160a01b0384166000908152600c60205260409020805482908110612c1e57612c1e61379a565b90600052602060002090600402016002015482612c3b91906137c6565b91505b80612c48816138f8565b915050612b48565b5092915050565b6003546001600160a01b03163314612c815760405162461bcd60e51b815260040161072f90613913565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60075460405163538a3ef360e11b8152600481018390526000916001600160a01b03169063a7147de69060240160806040518083038186803b158015612ce857600080fd5b505afa158015612cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2091906137f3565b5090949350505050565b6003546001600160a01b03163314612d545760405162461bcd60e51b815260040161072f90613913565b60065460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016122c7565b60008160011415612db6576064612da584603c613842565b612daf9190613861565b9050611bcc565b8160021415612dcc576064612da5846019613842565b8160031415612de2576064612da584600f613842565b50600092915050565b600954156130db5760005b6009548110156130ce57600060098281548110612e1557612e1561379a565b60009182526020822001546001600160a01b03169150612e3862127500426138e1565b90506000805b6001600160a01b0384166000908152600c6020526040902054811015612f8e576001600160a01b0384166000908152600c60205260408120805483908110612e8857612e8861379a565b906000526020600020906004020160020154118015612ee557506001600160a01b0384166000908152600c60205260409020805482908110612ecc57612ecc61379a565b600091825260209091206003600490920201015460ff16155b8015612f2d57506001600160a01b0384166000908152600c60205260409020805484919083908110612f1957612f1961379a565b906000526020600020906004020160010154115b15612f7c576001600160a01b0384166000908152600c60205260409020805482908110612f5c57612f5c61379a565b90600052602060002090600402016002015482612f7991906137c6565b91505b80612f86816138f8565b915050612e3e565b506001600160a01b0383166000908152600b6020908152604080832054600a9092528220548391612fbe916138e1565b612fc891906138e1565b905080156130b7576001600160a01b0384166000908152600b6020526040902054612ff49082906137c6565b6001600160a01b038086166000908152600b602052604090819020929092556006546004805493516323b872dd60e01b8152918316936323b872dd93613041939116918991879101613953565b600060405180830381600087803b15801561305b57600080fd5b505af115801561306f573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018590527f9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc935001905060405180910390a15b5050505080806130c6906138f8565b915050612df6565b506130db600960006132d1565b565b60006130ec62127500426138e1565b905060005b6001600160a01b0383166000908152600c6020526040902054811015612b3d576001600160a01b0383166000908152600c6020526040812080548390811061313b5761313b61379a565b90600052602060002090600402016002015411801561319857506001600160a01b0383166000908152600c6020526040902080548290811061317f5761317f61379a565b600091825260209091206003600490920201015460ff16155b80156131e057506001600160a01b0383166000908152600c602052604090208054839190839081106131cc576131cc61379a565b906000526020600020906004020160010154105b156132bf576001600160a01b0383166000908152600c6020526040902080548290811061320f5761320f61379a565b906000526020600020906004020160020154600a6000856001600160a01b03166001600160a01b031681526020019081526020016000205461325191906137c6565b6001600160a01b0384166000908152600a6020908152604080832093909355600c9052208054829081106132875761328761379a565b60009182526020822060049091020180546001600160a01b0319168155600181018290556002810191909155600301805460ff191690555b806132c9816138f8565b9150506130f1565b50805460008255906000526020600020908101906132ef91906132f2565b50565b5b8082111561330757600081556001016132f3565b5090565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156133445761334461330b565b60405290565b60405160a0810167ffffffffffffffff811182821017156133445761334461330b565b604051601f8201601f1916810167ffffffffffffffff811182821017156133965761339661330b565b604052919050565b600067ffffffffffffffff8211156133b8576133b861330b565b5060051b60200190565b6001600160a01b03811681146132ef57600080fd5b60008060408084860312156133eb57600080fd5b8335925060208085013567ffffffffffffffff81111561340a57600080fd5b8501601f8101871361341b57600080fd5b803561342e6134298261339e565b61336d565b81815260079190911b8201830190838101908983111561344d57600080fd5b928401925b828410156134ab576080848b03121561346b5760008081fd5b613473613321565b843561347e816133c2565b81528486013586820152868501358782015260608086013590820152825260809093019290840190613452565b8096505050505050509250929050565b6000602082840312156134cd57600080fd5b5035919050565b6000602082840312156134e657600080fd5b81356134f1816133c2565b9392505050565b6000806000806080858703121561350e57600080fd5b843593506020850135613520816133c2565b93969395505050506040820135916060013590565b6000806040838503121561354857600080fd5b50508035926020909101359150565b6000806040838503121561356a57600080fd5b8235613575816133c2565b946020939093013593505050565b600080600080600060a0868803121561359b57600080fd5b8535945060208601356135ad816133c2565b94979496505050506040830135926060810135926080909101359150565b600080602083850312156135de57600080fd5b823567ffffffffffffffff808211156135f657600080fd5b818501915085601f83011261360a57600080fd5b81358181111561361957600080fd5b86602082850101111561362b57600080fd5b60209290920196919550909350505050565b821515815260006020604081840152835180604085015260005b8181101561367357858101830151858201606001528201613657565b81811115613685576000606083870101525b50601f01601f191692909201606001949350505050565b6000806000606084860312156136b157600080fd5b505081359360208301359350604090920135919050565b600060208083850312156136db57600080fd5b823567ffffffffffffffff8111156136f257600080fd5b8301601f8101851361370357600080fd5b80356137116134298261339e565b81815260a0918202830184019184820191908884111561373057600080fd5b938501935b8385101561378e5780858a03121561374d5760008081fd5b61375561334a565b85358152868601358782015260408087013590820152606080870135908201526080808701359082015283529384019391850191613735565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156137d9576137d96137b0565b500190565b805180151581146137ee57600080fd5b919050565b6000806000806080858703121561380957600080fd5b613812856137de565b9350613820602086016137de565b9250604085015191506060850151613837816133c2565b939692955090935050565b600081600019048311821515161561385c5761385c6137b0565b500290565b60008261387e57634e487b7160e01b600052601260045260246000fd5b500490565b60008060008060008060c0878903121561389c57600080fd5b86516138a7816133c2565b60208801519096506138b8816133c2565b6040880151606089015160808a015160a0909a0151989b929a5090989097909650945092505050565b6000828210156138f3576138f36137b0565b500390565b600060001982141561390c5761390c6137b0565b5060010190565b6020808252600d908201526c2737ba103a34329037bbb732b960991b604082015260600190565b60006020828403121561394c57600080fd5b5051919050565b6001600160a01b03938416815291909216602082015260408101919091526060019056fea2646970667358221220a9dc701847eb833221f31fb5c366d2c0e55cc4584045a389b6a6336f84b964ef64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000a6680000000000000000000000007f8a13a102aaaa5fc3ab87e5162b1b50e022d1d200000000000000000000000030264a8866a4c83d58d396854fca311fb5d37de0000000000000000000000000d2def97f0e67b8cbc5b7e530da58e5daae88c322
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025d5760003560e01c80637673399a11610146578063c5260042116100c3578063e89e106a11610087578063e89e106a14610653578063e926ca951461065c578063e953ba7314610699578063f3baf070146106ac578063f3fef3a3146106b5578063f6ce9004146106c857600080fd5b8063c5260042146105ed578063cb441dea14610600578063e4341cea14610613578063e438005d14610620578063e4f24cb01461063357600080fd5b8063947a36fb1161010a578063947a36fb146105a3578063987f70ff146105ac578063b401faf1146105bf578063b859f825146105c7578063bbcd5bbe146105da57600080fd5b80637673399a146105015780637bbc469e1461051457806382689a0114610575578063833a71d7146105885780638da5cb5b1461059057600080fd5b80632ac426aa116101df57806352e320a0116101a357806352e320a01461047c57806360bd65631461049f57806362581a27146104b25780636e04ff0d146104ba5780636ea3d9be146104db5780637592b77f146104ee57600080fd5b80632ac426aa146104195780632bf7299b1461042c5780633b68705b1461043f5780633f3b3b27146104525780634585e33b1461046957600080fd5b806313af40351161022657806313af4035146103005780631aed59f014610313578063212b33f01461036257806322a90082146103c757806329250cb8146103da57600080fd5b8062f88a6614610262578063081e8924146102775780630c243484146102a75780630c2e6f18146102ba578063129927d3146102cd575b600080fd5b6102756102703660046133d7565b6106e8565b005b61028a6102853660046134bb565b6118ae565b6040516001600160a01b0390911681526020015b60405180910390f35b6102756102b53660046134d4565b6118d8565b6102756102c83660046134f8565b611924565b6102f06102db3660046134bb565b60106020526000908152604090205460ff1681565b604051901515815260200161029e565b61027561030e3660046134d4565b611af7565b610326610321366004613535565b611b43565b60405161029e919081516001600160a01b0316815260208083015190820152604080830151908201526060918201519181019190915260800190565b61039f6103703660046134bb565b600f60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a00161029e565b6102756103d53660046134bb565b611bd2565b6103ed6103e8366004613557565b611c01565b604080516001600160a01b0390951685526020850193909352918301521515606082015260800161029e565b610275610427366004613583565b611c54565b61027561043a3660046134bb565b61201a565b60075461028a906001600160a01b031681565b61045b60025481565b60405190815260200161029e565b6102756104773660046135cb565b612049565b6102f061048a3660046134bb565b600e6020526000908152604090205460ff1681565b61045b6104ad3660046134d4565b61206f565b6102756120c3565b6104cd6104c83660046135cb565b6122fd565b60405161029e92919061363d565b6102756104e936600461369c565b61231c565b6102756104fc3660046136c8565b61238b565b61027561050f3660046136c8565b612572565b61054f6105223660046134bb565b60086020526000908152604090208054600182015460038301546004909301549192909160ff9091169084565b60408051948552602085019390935290151591830191909152606082015260800161029e565b6102f0610583366004613535565b612759565b610275612798565b60035461028a906001600160a01b031681565b61045b60015481565b60065461028a906001600160a01b031681565b6102756127ce565b60045461028a906001600160a01b031681565b6102756105e83660046134d4565b612835565b6102756105fb3660046134d4565b612881565b61045b61060e3660046134d4565b612b42565b6011546102f09060ff1681565b61027561062e3660046134d4565b612c57565b61045b6106413660046134d4565b600a6020526000908152604090205481565b61045b60005481565b61039f61066a3660046134bb565b600d60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b6102f06106a73660046134bb565b612ca3565b61045b60055481565b6102756106c3366004613557565b612d2a565b61045b6106d63660046134d4565b600b6020526000908152604090205481565b6003546001600160a01b031633146107385760405162461bcd60e51b815260206004820152600e60248201526d139bdd08105d5d1a1bdc9a5e995960921b60448201526064015b60405180910390fd5b6000828152600860205260408120805460019091015490915b83518110156118a7576000821580610791575061078b8686848151811061077a5761077a61379a565b602002602001015160200151612759565b15156001145b15610ef0576000600e60008785815181106107ae576107ae61379a565b602002602001015160200151815260200190815260200160002060006101000a81548160ff02191690831515021790555060008583815181106107f3576107f361379a565b602002602001015160400151111561084f5760006010600087858151811061081d5761081d61379a565b602002602001015160400151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60008684815181106108655761086561379a565b602002602001015160200151815260200190815260200160002060000154600161088f91906137c6565b600d60008785815181106108a5576108a561379a565b60200260200101516020015181526020019081526020016000206000018190555060008583815181106108da576108da61379a565b602002602001015160400151111561099257601060008684815181106109025761090261379a565b60209081029190910181015160400151825201528451600f906000908790859081106109305761093061379a565b602002602001015160400151815260200190815260200160002060000154600161095a91906137c6565b600f60008785815181106109705761097061379a565b6020026020010151604001518152602001908152602001600020600001819055505b8482815181106109a4576109a461379a565b60200260200101516060015160011415610af657600d60008684815181106109ce576109ce61379a565b60200260200101516020015181526020019081526020016000206001015460016109f891906137c6565b600d6000878581518110610a0e57610a0e61379a565b602002602001015160200151815260200190815260200160002060010181905550848281518110610a4157610a4161379a565b602002602001015160400151600014610acc57600f6000868481518110610a6a57610a6a61379a565b6020026020010151604001518152602001908152602001600020600101546001610a9491906137c6565b600f6000878581518110610aaa57610aaa61379a565b6020026020010151604001518152602001908152602001600020600101819055505b610af384868481518110610ae257610ae261379a565b602002602001015160600151612d8d565b90505b848281518110610b0857610b0861379a565b60200260200101516060015160021415610c4957600d6000868481518110610b3257610b3261379a565b6020026020010151602001518152602001908152602001600020600201546001610b5c91906137c6565b600d6000878581518110610b7257610b7261379a565b602002602001015160200151815260200190815260200160002060020181905550848281518110610ba557610ba561379a565b602002602001015160400151600014610c3057600f6000868481518110610bce57610bce61379a565b6020026020010151604001518152602001908152602001600020600201546001610bf891906137c6565b600f6000878581518110610c0e57610c0e61379a565b6020026020010151604001518152602001908152602001600020600201819055505b610c4684868481518110610ae257610ae261379a565b90505b848281518110610c5b57610c5b61379a565b60200260200101516060015160031415610d9c57600d6000868481518110610c8557610c8561379a565b6020026020010151602001518152602001908152602001600020600301546001610caf91906137c6565b600d6000878581518110610cc557610cc561379a565b602002602001015160200151815260200190815260200160002060030181905550848281518110610cf857610cf861379a565b602002602001015160400151600014610d8357600f6000868481518110610d2157610d2161379a565b6020026020010151604001518152602001908152602001600020600301546001610d4b91906137c6565b600f6000878581518110610d6157610d6161379a565b6020026020010151604001518152602001908152602001600020600301819055505b610d9984868481518110610ae257610ae261379a565b90505b60075485516000916001600160a01b03169063a7147de690889086908110610dc657610dc661379a565b6020026020010151602001516040518263ffffffff1660e01b8152600401610df091815260200190565b60806040518083038186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4091906137f3565b509092505081159050610eee5760075486516001600160a01b03909116906331c6c7e190889086908110610e7657610e7661379a565b6020026020010151602001516040518263ffffffff1660e01b8152600401610ea091815260200190565b600060405180830381600087803b158015610eba57600080fd5b505af1158015610ece573d6000803e3d6000fd5b50505050606482605f610ee19190613842565b610eeb9190613861565b91505b505b8015611894576007548551600091829182916001600160a01b03169063a7147de6908a9088908110610f2457610f2461379a565b6020026020010151602001516040518263ffffffff1660e01b8152600401610f4e91815260200190565b60806040518083038186803b158015610f6657600080fd5b505afa158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e91906137f3565b60008d81526008602052604090206001015492965090945092501590506112fe57821561126d57600080600080600760009054906101000a90046001600160a01b03166001600160a01b03166335af1a4e8d8b815181106110015761100161379a565b602002602001015160200151886040518363ffffffff1660e01b8152600401611034929190918252602082015260400190565b60c06040518083038186803b15801561104c57600080fd5b505afa158015611060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110849190613883565b939950939750909550935091505060018214806110a15750816003145b156111ce57600060646110b4838b613842565b6110be9190613861565b60065460405163a9059cbb60e01b81526001600160a01b0388811660048301526024820184905292935091169063a9059cbb90604401600060405180830381600087803b15801561110e57600080fd5b505af1158015611122573d6000803e3d6000fd5b50505050808961113291906138e1565b6006548e51919a506001600160a01b03169063a9059cbb908f908d90811061115c5761115c61379a565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018c9052604401600060405180830381600087803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b5050505050611264565b6006548c516001600160a01b039091169063a9059cbb908e908c9081106111f7576111f761379a565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018b9052604401600060405180830381600087803b15801561124b57600080fd5b505af115801561125f573d6000803e3d6000fd5b505050505b50505050611890565b60065488516001600160a01b039091169063a9059cbb908a90889081106112965761129661379a565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101879052604401600060405180830381600087803b1580156112ea57600080fd5b505af1158015611264573d6000803e3d6000fd5b600a60008987815181106113145761131461379a565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020546000141561139a57600988868151811061135d5761135d61379a565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b821561180657600080600080600760009054906101000a90046001600160a01b03166001600160a01b03166335af1a4e8d8b815181106113dc576113dc61379a565b602002602001015160200151886040518363ffffffff1660e01b815260040161140f929190918252602082015260400190565b60c06040518083038186803b15801561142757600080fd5b505afa15801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f9190613883565b9399509397509095509350915050600182148061147c5750816003145b1561168c576000606461148f838b613842565b6114999190613861565b6001600160a01b0386166000908152600a60205260409020549091506114c09082906137c6565b6001600160a01b0386166000908152600a60205260409020556114e3818a6138e1565b9850600c60008e8c815181106114fb576114fb61379a565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060405180608001604052808f8d815181106115445761154461379a565b6020026020010151600001516001600160a01b031681526020014281526020018b815260200160001515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550505088600a60008f8d815181106116145761161461379a565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000205461164b91906137c6565b600a60008f8d815181106116615761166161379a565b602090810291909101810151516001600160a01b031682528101919091526040016000205550611264565b600c60008d8b815181106116a2576116a261379a565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060405180608001604052808e8c815181106116eb576116eb61379a565b602090810291909101810151516001600160a01b039081168352428383015260408084018e905260006060948501819052865460018082018955978252848220875160049092020180546001600160a01b0319169190941617835592850151958201959095559383015160028501559101516003909201805460ff1916921515929092179091558c518991600a918f908d90811061178b5761178b61379a565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020546117c291906137c6565b600a60008e8c815181106117d8576117d861379a565b602090810291909101810151516001600160a01b031682528101919091526040016000205550505050611890565b83600a60008a888151811061181d5761181d61379a565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000205461185491906137c6565b600a60008a888151811061186a5761186a61379a565b602090810291909101810151516001600160a01b03168252810191909152604001600020555b5050505b508061189f816138f8565b915050610751565b5050505050565b600981815481106118be57600080fd5b6000918252602090912001546001600160a01b0316905081565b6003546001600160a01b031633146119025760405162461bcd60e51b815260040161072f90613913565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008481526008602090815260408083208584526002019091529020546001600160a01b031633146119985760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f7420756e6a6f696e206f746865722070656f706c650000000000604482015260640161072f565b60008481526008602081815260408084208685526002808201845282862080546001600160a01b031916815560018082018890559181018790556003018690559489905292909152910154600654915163a9059cbb60e01b81526001600160a01b038681166004830152602482018390529192919091169063a9059cbb90604401600060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050600086815260086020526040902060040154611a6991506001906138e1565b6000868152600860205260409020600481019190915554611a8b9082906138e1565b6000868152600860209081526040918290209290925580518781526001600160a01b038716928101929092528101849052606081018390527f486610e7950cc18b99f2e96078158edbdb0a971f7520894f5428b07ca8f6d1a69060800160405180910390a15050505050565b6003546001600160a01b03163314611b215760405162461bcd60e51b815260040161072f90613913565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b611b77604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b5060008281526008602090815260408083208484526002908101835292819020815160808101835281546001600160a01b03168152600182015493810193909352928301549082015260039091015460608201525b92915050565b6003546001600160a01b03163314611bfc5760405162461bcd60e51b815260040161072f90613913565b600155565b600c6020528160005260406000208181548110611c1d57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169450925060ff1684565b6000858152600860205260409020600401546001600160a01b0385163314611cbe5760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c79206a6f696e207769746820796f7572206164647265737300604482015260640161072f565b6000848152600e602052604090205460ff16151560011415611d195760405162461bcd60e51b8152602060048201526014602482015273546f6b656e20616c726561647920726163696e6760601b604482015260640161072f565b600654604051636eb1769f60e11b81526001600160a01b0387811660048301523060248301528592169063dd62ed3e90604401602060405180830381600087803b158015611d6657600080fd5b505af1158015611d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9e919061393a565b11611deb5760405162461bcd60e51b815260206004820152601e60248201527f456e7472616e636520466565206578636565647320616c6c6f77616e63650000604482015260640161072f565b600086815260086020526040902060010154831015611e4c5760405162461bcd60e51b815260206004820152601d60248201527f456e7472616e63652066656520686967686572207468616e2073656e74000000604482015260640161072f565b600554811115611eae5760405162461bcd60e51b815260206004820152602760248201527f4d6178206e756d626572206f662072616365727320616c7265616479207265676044820152661a5cdd195c995960ca1b606482015260840161072f565b604080516080810182526001600160a01b03878116825260208083018681528385018881526000606086018181528d8252600885528782208c8352600290810190955290879020955186546001600160a01b0319169086161786559151600186015551918401919091555160039092019190915560065491516323b872dd60e01b81529116906323b872dd90611f4c90889030908890600401613953565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b50505050806001611f8b91906137c6565b6000878152600860205260409020600481019190915554611fad9084906137c6565b6000878152600860209081526040918290209290925580518881526001600160a01b038816928101929092528101859052606081018390527fc746505e2fda0290ec371b3b777afb0ff319bfa21d64b2bb398d9beca68083079060800160405180910390a1505050505050565b6003546001600160a01b031633146120445760405162461bcd60e51b815260040161072f90613913565b600555565b60015460025461205990426138e1565b111561206b574260025561206b612deb565b5050565b600080600061207d84612b42565b6001600160a01b0385166000908152600b6020908152604080832054600a9092529091205491925082916120b191906138e1565b6120bb91906138e1565b949350505050565b6120cc336130dd565b6000805b336000908152600c602052604090205481101561220e57336000908152600c602052604081208054839081106121085761210861379a565b90600052602060002090600402016002015411801561215c5750336000908152600c602052604090208054829081106121435761214361379a565b600091825260209091206003600490920201015460ff16155b156121fc57336000908152600c602052604090208054829081106121825761218261379a565b9060005260206000209060040201600201548261219f91906137c6565b336000908152600c60205260409020805491935090829081106121c4576121c461379a565b60009182526020822060049091020180546001600160a01b0319168155600181018290556002810191909155600301805460ff191690555b80612206816138f8565b9150506120d0565b506000606461221e836041613842565b6122289190613861565b336000908152600b6020908152604080832054600a9092529091205461224e91906138e1565b61225891906138e1565b9050801561206b57336000908152600b602052604090205461227b9082906137c6565b336000818152600b602052604090819020929092556006546004805493516323b872dd60e01b81526001600160a01b03928316946323b872dd946122c794909116929091879101613953565b600060405180830381600087803b1580156122e157600080fd5b505af11580156122f5573d6000803e3d6000fd5b505050505050565b600060606001546002544261231291906138e1565b1191509250929050565b600083815260086020526040902060018101839055600301805460ff19169055816123535760008381526008602052604090208190555b6040518381527f46d937130e22cbf287447003c079f8f4bd89aa30903898fe55e61bcf7a92526f9060200160405180910390a1505050565b6003546001600160a01b031633146123b55760405162461bcd60e51b815260040161072f90613913565b60115460ff166123ff5760405162461bcd60e51b8152602060048201526015602482015274155c1b1bd8591a5b99c81a5cc8191a5cd8589b1959605a1b604482015260640161072f565b60005b815181101561206b5781818151811061241d5761241d61379a565b602002602001015160800151600d600084848151811061243f5761243f61379a565b6020026020010151600001518152602001908152602001600020600001819055508181815181106124725761247261379a565b602002602001015160200151600d60008484815181106124945761249461379a565b6020026020010151600001518152602001908152602001600020600101819055508181815181106124c7576124c761379a565b602002602001015160400151600d60008484815181106124e9576124e961379a565b60200260200101516000015181526020019081526020016000206002018190555081818151811061251c5761251c61379a565b602002602001015160600151600d600084848151811061253e5761253e61379a565b602002602001015160000151815260200190815260200160002060030181905550808061256a906138f8565b915050612402565b6003546001600160a01b0316331461259c5760405162461bcd60e51b815260040161072f90613913565b60115460ff166125e65760405162461bcd60e51b8152602060048201526015602482015274155c1b1bd8591a5b99c81a5cc8191a5cd8589b1959605a1b604482015260640161072f565b60005b815181101561206b578181815181106126045761260461379a565b602002602001015160800151600f60008484815181106126265761262661379a565b6020026020010151600001518152602001908152602001600020600001819055508181815181106126595761265961379a565b602002602001015160200151600f600084848151811061267b5761267b61379a565b6020026020010151600001518152602001908152602001600020600101819055508181815181106126ae576126ae61379a565b602002602001015160400151600f60008484815181106126d0576126d061379a565b6020026020010151600001518152602001908152602001600020600201819055508181815181106127035761270361379a565b602002602001015160600151600f60008484815181106127255761272561379a565b6020026020010151600001518152602001908152602001600020600301819055508080612751906138f8565b9150506125e9565b60008281526008602090815260408083208484526002019091528120546001600160a01b03168061278e576000915050611bcc565b5060019392505050565b6003546001600160a01b031633146127c25760405162461bcd60e51b815260040161072f90613913565b6011805460ff19169055565b6127d7336130dd565b60006127e233612b42565b336000908152600b6020908152604080832054600a9092528220549293509091839161280d916138e1565b61281791906138e1565b336000908152600b602052604090205490915061227b9082906137c6565b6003546001600160a01b0316331461285f5760405162461bcd60e51b815260040161072f90613913565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b6001600160a01b0383166000908152600c60205260409020548110156129f0576001600160a01b0383166000908152600c602052604081208054839081106128cf576128cf61379a565b90600052602060002090600402016002015411801561292c57506001600160a01b0383166000908152600c602052604090208054829081106129135761291361379a565b600091825260209091206003600490920201015460ff16155b156129de576001600160a01b0383166000908152600c6020526040902080548290811061295b5761295b61379a565b9060005260206000209060040201600201548261297891906137c6565b6001600160a01b0384166000908152600c60205260409020805491935090829081106129a6576129a661379a565b60009182526020822060049091020180546001600160a01b0319168155600181018290556002810191909155600301805460ff191690555b806129e8816138f8565b915050612885565b5060006064612a00836041613842565b612a0a9190613861565b6001600160a01b0384166000908152600b6020908152604080832054600a90925290912054612a3991906138e1565b612a4391906138e1565b90508015612b3d576001600160a01b0383166000908152600b6020526040902054612a6f9082906137c6565b6001600160a01b038085166000908152600b602052604090819020929092556006546004805493516323b872dd60e01b8152918316936323b872dd93612abc939116918891879101613953565b600060405180830381600087803b158015612ad657600080fd5b505af1158015612aea573d6000803e3d6000fd5b5050604080516001600160a01b0387168152602081018590527f9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc935001905060405180910390a1612b3d600960006132d1565b505050565b60008060005b6001600160a01b0384166000908152600c6020526040902054811015612c50576001600160a01b0384166000908152600c60205260408120805483908110612b9257612b9261379a565b906000526020600020906004020160020154118015612bef57506001600160a01b0384166000908152600c60205260409020805482908110612bd657612bd661379a565b600091825260209091206003600490920201015460ff16155b15612c3e576001600160a01b0384166000908152600c60205260409020805482908110612c1e57612c1e61379a565b90600052602060002090600402016002015482612c3b91906137c6565b91505b80612c48816138f8565b915050612b48565b5092915050565b6003546001600160a01b03163314612c815760405162461bcd60e51b815260040161072f90613913565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60075460405163538a3ef360e11b8152600481018390526000916001600160a01b03169063a7147de69060240160806040518083038186803b158015612ce857600080fd5b505afa158015612cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2091906137f3565b5090949350505050565b6003546001600160a01b03163314612d545760405162461bcd60e51b815260040161072f90613913565b60065460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016122c7565b60008160011415612db6576064612da584603c613842565b612daf9190613861565b9050611bcc565b8160021415612dcc576064612da5846019613842565b8160031415612de2576064612da584600f613842565b50600092915050565b600954156130db5760005b6009548110156130ce57600060098281548110612e1557612e1561379a565b60009182526020822001546001600160a01b03169150612e3862127500426138e1565b90506000805b6001600160a01b0384166000908152600c6020526040902054811015612f8e576001600160a01b0384166000908152600c60205260408120805483908110612e8857612e8861379a565b906000526020600020906004020160020154118015612ee557506001600160a01b0384166000908152600c60205260409020805482908110612ecc57612ecc61379a565b600091825260209091206003600490920201015460ff16155b8015612f2d57506001600160a01b0384166000908152600c60205260409020805484919083908110612f1957612f1961379a565b906000526020600020906004020160010154115b15612f7c576001600160a01b0384166000908152600c60205260409020805482908110612f5c57612f5c61379a565b90600052602060002090600402016002015482612f7991906137c6565b91505b80612f86816138f8565b915050612e3e565b506001600160a01b0383166000908152600b6020908152604080832054600a9092528220548391612fbe916138e1565b612fc891906138e1565b905080156130b7576001600160a01b0384166000908152600b6020526040902054612ff49082906137c6565b6001600160a01b038086166000908152600b602052604090819020929092556006546004805493516323b872dd60e01b8152918316936323b872dd93613041939116918991879101613953565b600060405180830381600087803b15801561305b57600080fd5b505af115801561306f573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018590527f9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc935001905060405180910390a15b5050505080806130c6906138f8565b915050612df6565b506130db600960006132d1565b565b60006130ec62127500426138e1565b905060005b6001600160a01b0383166000908152600c6020526040902054811015612b3d576001600160a01b0383166000908152600c6020526040812080548390811061313b5761313b61379a565b90600052602060002090600402016002015411801561319857506001600160a01b0383166000908152600c6020526040902080548290811061317f5761317f61379a565b600091825260209091206003600490920201015460ff16155b80156131e057506001600160a01b0383166000908152600c602052604090208054839190839081106131cc576131cc61379a565b906000526020600020906004020160010154105b156132bf576001600160a01b0383166000908152600c6020526040902080548290811061320f5761320f61379a565b906000526020600020906004020160020154600a6000856001600160a01b03166001600160a01b031681526020019081526020016000205461325191906137c6565b6001600160a01b0384166000908152600a6020908152604080832093909355600c9052208054829081106132875761328761379a565b60009182526020822060049091020180546001600160a01b0319168155600181018290556002810191909155600301805460ff191690555b806132c9816138f8565b9150506130f1565b50805460008255906000526020600020908101906132ef91906132f2565b50565b5b8082111561330757600081556001016132f3565b5090565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156133445761334461330b565b60405290565b60405160a0810167ffffffffffffffff811182821017156133445761334461330b565b604051601f8201601f1916810167ffffffffffffffff811182821017156133965761339661330b565b604052919050565b600067ffffffffffffffff8211156133b8576133b861330b565b5060051b60200190565b6001600160a01b03811681146132ef57600080fd5b60008060408084860312156133eb57600080fd5b8335925060208085013567ffffffffffffffff81111561340a57600080fd5b8501601f8101871361341b57600080fd5b803561342e6134298261339e565b61336d565b81815260079190911b8201830190838101908983111561344d57600080fd5b928401925b828410156134ab576080848b03121561346b5760008081fd5b613473613321565b843561347e816133c2565b81528486013586820152868501358782015260608086013590820152825260809093019290840190613452565b8096505050505050509250929050565b6000602082840312156134cd57600080fd5b5035919050565b6000602082840312156134e657600080fd5b81356134f1816133c2565b9392505050565b6000806000806080858703121561350e57600080fd5b843593506020850135613520816133c2565b93969395505050506040820135916060013590565b6000806040838503121561354857600080fd5b50508035926020909101359150565b6000806040838503121561356a57600080fd5b8235613575816133c2565b946020939093013593505050565b600080600080600060a0868803121561359b57600080fd5b8535945060208601356135ad816133c2565b94979496505050506040830135926060810135926080909101359150565b600080602083850312156135de57600080fd5b823567ffffffffffffffff808211156135f657600080fd5b818501915085601f83011261360a57600080fd5b81358181111561361957600080fd5b86602082850101111561362b57600080fd5b60209290920196919550909350505050565b821515815260006020604081840152835180604085015260005b8181101561367357858101830151858201606001528201613657565b81811115613685576000606083870101525b50601f01601f191692909201606001949350505050565b6000806000606084860312156136b157600080fd5b505081359360208301359350604090920135919050565b600060208083850312156136db57600080fd5b823567ffffffffffffffff8111156136f257600080fd5b8301601f8101851361370357600080fd5b80356137116134298261339e565b81815260a0918202830184019184820191908884111561373057600080fd5b938501935b8385101561378e5780858a03121561374d5760008081fd5b61375561334a565b85358152868601358782015260408087013590820152606080870135908201526080808701359082015283529384019391850191613735565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156137d9576137d96137b0565b500190565b805180151581146137ee57600080fd5b919050565b6000806000806080858703121561380957600080fd5b613812856137de565b9350613820602086016137de565b9250604085015191506060850151613837816133c2565b939692955090935050565b600081600019048311821515161561385c5761385c6137b0565b500290565b60008261387e57634e487b7160e01b600052601260045260246000fd5b500490565b60008060008060008060c0878903121561389c57600080fd5b86516138a7816133c2565b60208801519096506138b8816133c2565b6040880151606089015160808a015160a0909a0151989b929a5090989097909650945092505050565b6000828210156138f3576138f36137b0565b500390565b600060001982141561390c5761390c6137b0565b5060010190565b6020808252600d908201526c2737ba103a34329037bbb732b960991b604082015260600190565b60006020828403121561394c57600080fd5b5051919050565b6001600160a01b03938416815291909216602082015260408101919091526060019056fea2646970667358221220a9dc701847eb833221f31fb5c366d2c0e55cc4584045a389b6a6336f84b964ef64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000a6680000000000000000000000007f8a13a102aaaa5fc3ab87e5162b1b50e022d1d200000000000000000000000030264a8866a4c83d58d396854fca311fb5d37de0000000000000000000000000d2def97f0e67b8cbc5b7e530da58e5daae88c322
-----Decoded View---------------
Arg [0] : updateInterval (uint256): 42600
Arg [1] : _wofTokenAddress (address): 0x7F8a13a102AaAA5Fc3Ab87E5162B1b50e022D1d2
Arg [2] : _garageContract (address): 0x30264a8866A4c83d58d396854fca311FB5D37dE0
Arg [3] : _leasingContract (address): 0xd2def97f0E67b8cBC5b7e530Da58e5DaaE88C322
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000a668
Arg [1] : 0000000000000000000000007f8a13a102aaaa5fc3ab87e5162b1b50e022d1d2
Arg [2] : 00000000000000000000000030264a8866a4c83d58d396854fca311fb5d37de0
Arg [3] : 000000000000000000000000d2def97f0e67b8cbc5b7e530da58e5daae88c322
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.