Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 2 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xcff9b9f8a06f55b99cd601144a4f12c3fc9965c45bb00c84425bf3b6672db4b3 | 30066717 | 341 days 22 mins ago | 0x88d05a027ccc02c09110a7c113a54cc4910aa806 | 0x84c06895e37a0c5cdb2196d204d7ef8ea0a4ff4f | 209.425 MATIC | ||
0xb16e591c8896b677732297510e4b4b3fb26aaee957b2e2511941b3a7f3414031 | 29969691 | 343 days 12 hrs ago | 0x88d05a027ccc02c09110a7c113a54cc4910aa806 | 0x84c06895e37a0c5cdb2196d204d7ef8ea0a4ff4f | 49.425 MATIC |
[ Download CSV Export ]
Contract Name:
ElegantEV1
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; interface RulesInterface{ function tokenCheck (uint id, uint valToCheck) external view returns (bool); function prizeCheck () external view returns (uint[] calldata); function nutPrizeCheck () external view returns (uint[] calldata); } contract ElegantEV1 is Ownable, AccessControl { using SafeMath for uint256; address organs = 0x5FD77E43f7BF27e8E7Cb4056ec2a2773930828d6; address public racerAddress = 0x72106Bbe2b447ECB9b52370Ddc63cfa8e553B08C; //peanuts address public tokenAddress = address(0x56C025A10C5F28611fbF6AAfd225Be702B335289); IERC20 rewardToken = IERC20(tokenAddress); //Racers address public erc721Contract = address(0x72106Bbe2b447ECB9b52370Ddc63cfa8e553B08C); IERC721 stakeableNFT = IERC721(erc721Contract); uint deployT; //data// uint public raceNum = 1; uint public currentRace = 0; uint public currentEvent = 0; struct performance{ uint id; uint contractType; address nftContract; address user; uint firstLeg; uint secondLeg; uint steps; uint finishPos; uint eventWanted; uint raceIn; } struct raceRules{ uint gridSize; address conCheck; uint conValue; uint matPrice; uint nutPrice; uint devMat; uint refNut; uint cofMat; uint cofNut; } mapping(address => uint[]) public nftByOwner; //mapping each race id to the racers mapping(uint => uint[]) public racersByRace; //mapping each racer number to their performance mapping(uint => performance) public perfByRacer; //mapping race number to its ruleset mapping(uint => raceRules) public rulesByRace; //mapping racers to chosen event //event => racers mapping(uint => uint[]) public racersByEvent; // mapping(uint => uint) public racesByEvent; uint coffers = 0; uint nutBowl = 0; uint[] public currentlyStaked; //team addresses go here// struct theTeam { bool member; uint maticEarned; uint maticTaken; uint nutsEarned; uint nutsTaken; } bool public paused; mapping(address => theTeam) public teamInfo; uint256 public totalEarned = 0; uint256 public nutsToRef = 0; bytes32 public constant TEAM_ROLE = keccak256("TEAM_ROLE"); constructor() { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); grantRole(TEAM_ROLE, msg.sender); deployT = block.timestamp; teamInfo[msg.sender].member = true; teamInfo[0x3e3F56c7C4873A4516b78FE989e9f8be18968a38].member = true; } // ADMIN // function teamUpdate(address to, bool _member, uint _perc, uint _nutperc) public { require(teamInfo[msg.sender].member == true, "Caller is not a member of the team."); teamInfo[to].member = _member; } function createEvent(uint _id, uint _size, address _conCheck, uint _conValue, uint _matP, uint _nutP, uint _dev, uint _ref, uint _cofMat, uint _cofNut) public { raceRules memory _rules; _rules.gridSize = _size; _rules.conCheck = _conCheck; _rules.conValue = _conValue; _rules.matPrice = _matP; _rules.nutPrice = _nutP; _rules.devMat = _dev; _rules.refNut = _ref; _rules.cofMat = _cofMat; _rules.cofNut = _cofNut; rulesByRace[_id] = _rules; } function pause(bool _state) public onlyOwner { paused = _state; } // STORAGE AND RACE MANAGEMENT // function addRacer(uint _tokenID, uint _event) internal { require(!paused, "Racing is currently not open."); uint teehee = currentlyStaked.length; nftByOwner[msg.sender].push(teehee); perfByRacer[teehee].id = _tokenID; perfByRacer[teehee].user = msg.sender; perfByRacer[teehee].eventWanted = _event; currentlyStaked.push(teehee); racersByEvent[_event].push(teehee); require(stakeableNFT.getApproved(_tokenID) == address(this) || stakeableNFT.isApprovedForAll(msg.sender,address(this)), "You need to allow the contract access to your Racer."); stakeableNFT.safeTransferFrom(msg.sender, address(this),_tokenID); } function signUp (uint[] calldata _racers, uint _event) public payable{ uint _count = _racers.length; uint money = _count.mul(rulesByRace[_event].matPrice); uint nutso = _count.mul(rulesByRace[_event].nutPrice); require(msg.value >= money, "Not enough matic to race that many."); require(rewardToken.balanceOf(msg.sender) >= nutso, "You don't have enough Peanuts for that."); require(rewardToken.transferFrom(msg.sender, address(this), nutso), "You need to allow transfer of Peanuts."); for(uint i=0; i<_count; i++){ addRacer(_racers[i], _event); if (rulesByRace[_event].conCheck != address(0)){ bool answer = RulesInterface(rulesByRace[_event].conCheck).tokenCheck(_racers[i],rulesByRace[_event].conValue); require(answer == true, "At least one chosen token does not meet the event requirements."); } } uint moolah = money.mul(rulesByRace[_event].devMat).div(100); uint nards = nutso.mul(rulesByRace[_event].refNut).div(100); uint coffee = money.mul(rulesByRace[_event].cofMat).div(100); uint bowel = nutso.mul(rulesByRace[_event].cofNut).div(100); teamInfo[0x84C06895E37A0c5CdB2196D204d7EF8eA0a4fF4F].maticEarned = teamInfo[0x84C06895E37A0c5CdB2196D204d7EF8eA0a4fF4F].maticEarned.add(moolah); teamInfo[0x3e3F56c7C4873A4516b78FE989e9f8be18968a38].nutsEarned = teamInfo[0x3e3F56c7C4873A4516b78FE989e9f8be18968a38].nutsEarned.add(moolah); coffers = coffers.add(coffee); nutBowl = nutBowl.add(bowel); } function onERC721Received(address _op, address _from, uint256 _token, bytes memory) public virtual returns (bytes4) { //require((msg.sender == erc721Contract),"Contract not recognised!"); require(!paused, "the contract is paused"); return this.onERC721Received.selector; } function getTokensOfOwner(address _owner) public view returns ( uint [] memory){ uint[] memory ownersTokens; ownersTokens = nftByOwner[_owner]; return ownersTokens; } function returnRacers(uint _num) public view returns(uint[] memory){ uint[] memory _racers = racersByRace[_num]; return _racers; } function returnSteps(uint first, uint second) public view returns(uint){ uint _steps = 0; uint _rem = 0; uint fHundo = 500; _rem = fHundo.mod(first); if (_rem > 0){_rem = 1;} _steps = fHundo.div(first) + _rem; _rem = fHundo.mod(second); if (_rem > 0){_rem = 1;} _steps = _steps + fHundo.div(second) + _rem; return _steps; } function getSteps(uint _id) public view returns(uint){ uint _steps; _steps = perfByRacer[_id].steps; return _steps; } function getRaceSize(uint _num) public view returns(uint){ uint[] memory _racers = racersByRace[_num]; uint _size = _racers.length; return _size; } function returnRace(uint _num) public view returns(uint[] memory){ uint[] memory _racers = racersByRace[_num]; uint _size = _racers.length; uint[] memory _steps = new uint[](_size); uint i; for (i = 0; i < _size; i ++ ) { _steps[i] = getSteps(_racers[i]); } return _steps; } function returnRaceFull(uint _num) public view returns(uint[] memory){ uint[] memory _racers = racersByRace[_num]; uint _size = _racers.length; uint[] memory _steps = new uint[](_size); uint[] memory positions = new uint[](_size); bool[] memory done = new bool[](_size); uint _rem = 0; uint fHundo = 500; for (uint i=0; i<_size; i++){ uint _rc = _racers[i]; uint first = perfByRacer[_rc].firstLeg; uint second = perfByRacer[_rc].secondLeg; _steps[i] = returnSteps(first, second); } //run through all finish positions uint _gogo; uint _c; for (uint j=0; j<_size; j++){ _gogo = 0; _c = 500; for (uint h=0; h<_size; h++){ if (_steps[h] < _c && done[h] == false){ _gogo = h; _c = _steps[h]; } } positions[j] = _gogo; done[_gogo] = true; } return positions; } function flush(uint _event) public { require(teamInfo[msg.sender].member == true, "Caller is not a member of the team."); coffers = 0; nutBowl = 0; } function nextRace() public { require(hasRole(TEAM_ROLE, msg.sender), "Caller is not a member of the team."); if (currentRace < (raceNum-1)){ currentRace = currentRace + 1; uint _ev = racesByEvent[currentRace]; uint[] memory positions = returnRaceFull(currentRace); address _con = rulesByRace[_ev].conCheck; uint[] memory prizes = RulesInterface(_con).prizeCheck(); uint[] memory nutses = RulesInterface(_con).nutPrizeCheck(); uint i = 0; for (i; i < positions.length; i ++){ uint _tok = positions[i]; uint payOut = prizes[i]; uint payNut = nutses[i]; address winner = perfByRacer[_tok].user; if (payOut > 0){ (bool success, ) = (winner).call{value: payOut}(""); require(success, "Transfer failed."); } if (payNut > 0){ require(rewardToken.transfer(winner, payNut)); } } } } function build(uint _amount, uint _event) public { require(hasRole(TEAM_ROLE, msg.sender), "Caller is not a member of the team."); for (uint i=0; i<_amount; i++){ buildRace(_event); } } function buildRace(uint _event) internal { require(hasRole(TEAM_ROLE, msg.sender), "Caller is not a member of the team."); uint i = 0; uint total = racersByEvent[_event].length; uint racing = 0; uint rMax = rulesByRace[_event].gridSize; if (total >= rMax){ racing = rMax; } else { racing = total; } for(i; i<racing; i++){ //go through every racer uint rNonce = block.timestamp.sub(deployT)+i; uint _r = randomNumber(rNonce, 0, (racersByEvent[_event].length)); uint _racer = racersByEvent[_event][_r]; racersByRace[raceNum].push(_racer); uint _nonce = block.timestamp.sub(deployT)+racersByEvent[_event].length; perfByRacer[_racer].firstLeg = randomNumber(_nonce, 4, 11); _nonce = _nonce + 1; perfByRacer[_racer].secondLeg = randomNumber(_nonce, 6, 13); perfByRacer[_racer].steps = returnSteps(perfByRacer[_racer].firstLeg,perfByRacer[_racer].secondLeg); perfByRacer[_racer].raceIn = raceNum; racersByEvent[_event][_r] = racersByEvent[_event][(racersByEvent[_event].length - 1)]; racersByEvent[_event].pop(); } racesByEvent[raceNum] = _event; raceNum = raceNum.add(1); } function returnToken(uint256 _tokenID) public { require(perfByRacer[_tokenID].user == msg.sender, "That NFT does not belong to you."); performance storage staking = perfByRacer[_tokenID]; uint256[] storage stakedNFTs = nftByOwner[msg.sender]; uint index; for (index = 0; index < stakedNFTs.length; index ++){ if (stakedNFTs[index] == _tokenID) { break; } } uint _tt = perfByRacer[_tokenID].id; uint _ev = staking.eventWanted; uint256[] storage eventNFTs = racersByEvent[_ev]; uint i = 0; if (currentlyStaked.length > 0) { for(i; i< currentlyStaked.length; i++){ if (currentlyStaked[i] == _tokenID){ currentlyStaked[i] = currentlyStaked[(currentlyStaked.length-1)]; currentlyStaked.pop(); break; } } } uint j = 0; if (eventNFTs.length > 0) { for(j; j< eventNFTs.length; j++){ if (eventNFTs[j] == _tokenID){ eventNFTs[j] = eventNFTs[(eventNFTs.length-1)]; eventNFTs.pop(); break; } } } require(index < stakedNFTs.length, "NFT with that ID was not found."); stakedNFTs[index] = stakedNFTs[(stakedNFTs.length - 1)]; stakedNFTs.pop(); staking.user = address(0); stakeableNFT.safeTransferFrom(address(this), msg.sender, _tt); } function returnTokenAll() public { uint256[] storage stakedNFTs = nftByOwner[msg.sender]; while (stakedNFTs.length > 0) { uint index = stakedNFTs.length - 1; //stake id uint _stakeID = stakedNFTs[index]; //get token id uint _tokenID = perfByRacer[_stakeID].id; //create temp object for token performance storage staking = perfByRacer[_stakeID]; uint _tt = perfByRacer[_stakeID].id; uint _ev = staking.eventWanted; uint256[] storage eventNFTs = racersByEvent[_ev]; uint i = 0; if (currentlyStaked.length > 0) { for(i; i< currentlyStaked.length; i++){ if (currentlyStaked[i] == _stakeID){ currentlyStaked[i] = currentlyStaked[(currentlyStaked.length-1)]; currentlyStaked.pop(); break; } } } uint j = 0; if (eventNFTs.length > 0) { for(j; j< eventNFTs.length; j++){ if (eventNFTs[j] == _stakeID){ eventNFTs[j] = eventNFTs[(eventNFTs.length-1)]; eventNFTs.pop(); break; } } } require(index < stakedNFTs.length, "NFT with that ID was not found."); stakedNFTs[index] = stakedNFTs[(stakedNFTs.length - 1)]; stakedNFTs.pop(); staking.user = address(0); stakeableNFT.safeTransferFrom(address(this), msg.sender, _tt); } } function withdraw() public { require(teamInfo[msg.sender].member == true, "Caller is not a member of the team."); uint _mat = 0; uint _nut = 0; _mat = teamInfo[msg.sender].maticEarned.sub(teamInfo[msg.sender].maticTaken); _nut = teamInfo[msg.sender].nutsEarned.sub(teamInfo[msg.sender].nutsTaken); teamInfo[msg.sender].maticTaken = _mat; teamInfo[msg.sender].nutsTaken = _nut; if (_mat > 0){ (bool success, ) = (msg.sender).call{value: _mat}(""); require(success, "Transfer failed."); } if (_nut > 0){ require(rewardToken.transfer(msg.sender, _nut)); } } function randomNumber(uint _nonce, uint _start, uint _end) private view returns (uint){ uint _far = _end.sub(_start); uint random = uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, _nonce))).mod(_far); random = random.add(_start); return random; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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 substraction 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 // OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControl.sol) pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "../utils/Context.sol"; import "../utils/Strings.sol"; import "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_event","type":"uint256"}],"name":"build","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"address","name":"_conCheck","type":"address"},{"internalType":"uint256","name":"_conValue","type":"uint256"},{"internalType":"uint256","name":"_matP","type":"uint256"},{"internalType":"uint256","name":"_nutP","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_ref","type":"uint256"},{"internalType":"uint256","name":"_cofMat","type":"uint256"},{"internalType":"uint256","name":"_cofNut","type":"uint256"}],"name":"createEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRace","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"currentlyStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc721Contract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_event","type":"uint256"}],"name":"flush","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"getRaceSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getSteps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftByOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nutsToRef","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_op","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_token","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"perfByRacer","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"contractType","type":"uint256"},{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"firstLeg","type":"uint256"},{"internalType":"uint256","name":"secondLeg","type":"uint256"},{"internalType":"uint256","name":"steps","type":"uint256"},{"internalType":"uint256","name":"finishPos","type":"uint256"},{"internalType":"uint256","name":"eventWanted","type":"uint256"},{"internalType":"uint256","name":"raceIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raceNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"racerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"racersByEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"racersByRace","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"racesByEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"returnRace","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"returnRaceFull","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"returnRacers","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"first","type":"uint256"},{"internalType":"uint256","name":"second","type":"uint256"}],"name":"returnSteps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"returnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnTokenAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rulesByRace","outputs":[{"internalType":"uint256","name":"gridSize","type":"uint256"},{"internalType":"address","name":"conCheck","type":"address"},{"internalType":"uint256","name":"conValue","type":"uint256"},{"internalType":"uint256","name":"matPrice","type":"uint256"},{"internalType":"uint256","name":"nutPrice","type":"uint256"},{"internalType":"uint256","name":"devMat","type":"uint256"},{"internalType":"uint256","name":"refNut","type":"uint256"},{"internalType":"uint256","name":"cofMat","type":"uint256"},{"internalType":"uint256","name":"cofNut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_racers","type":"uint256[]"},{"internalType":"uint256","name":"_event","type":"uint256"}],"name":"signUp","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"teamInfo","outputs":[{"internalType":"bool","name":"member","type":"bool"},{"internalType":"uint256","name":"maticEarned","type":"uint256"},{"internalType":"uint256","name":"maticTaken","type":"uint256"},{"internalType":"uint256","name":"nutsEarned","type":"uint256"},{"internalType":"uint256","name":"nutsTaken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"_member","type":"bool"},{"internalType":"uint256","name":"_perc","type":"uint256"},{"internalType":"uint256","name":"_nutperc","type":"uint256"}],"name":"teamUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052735fd77e43f7bf27e8e7cb4056ec2a2773930828d6600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507372106bbe2b447ecb9b52370ddc63cfa8e553b08c600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507356c025a10c5f28611fbf6aafd225be702b335289600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507372106bbe2b447ecb9b52370ddc63cfa8e553b08c600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009556000600a556000600b5560006012556000601355600060175560006018553480156200024e57600080fd5b506200026f620002636200038d60201b60201c565b6200039560201b60201c565b620002846000801b336200045960201b60201c565b620002b67f5146a08baf902532d0ee2f909971144f12ca32651cd70cbee1117cddfb3b3b33336200046f60201b60201c565b426008819055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600160166000733e3f56c7c4873a4516b78fe989e9f8be18968a3873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555062000d35565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200046b8282620004b860201b60201c565b5050565b6200048082620005a960201b60201c565b620004a181620004956200038d60201b60201c565b620005c960201b60201c565b620004b38383620004b860201b60201c565b505050565b620004ca82826200068d60201b60201c565b620005a557600180600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200054a6200038d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600060016000838152602001908152602001600020600101549050919050565b620005db82826200068d60201b60201c565b62000689576200060e8173ffffffffffffffffffffffffffffffffffffffff166014620006f860201b620034ef1760201c565b620006298360001c6020620006f860201b620034ef1760201c565b6040516020016200063c92919062000a40565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000680919062000a82565b60405180910390fd5b5050565b60006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600060028360026200070d919062000b4c565b62000719919062000aef565b67ffffffffffffffff81111562000735576200073462000c7a565b5b6040519080825280601f01601f191660200182016040528015620007685781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110620007a357620007a262000c4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106200080a576200080962000c4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026200084c919062000b4c565b62000858919062000aef565b90505b600181111562000902577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106200089e576200089d62000c4b565b5b1a60f81b828281518110620008b857620008b762000c4b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080620008fa9062000bed565b90506200085b565b506000841462000949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009409062000aa6565b60405180910390fd5b8091505092915050565b6000620009608262000ac8565b6200096c818562000ad3565b93506200097e81856020860162000bb7565b620009898162000ca9565b840191505092915050565b6000620009a18262000ac8565b620009ad818562000ae4565b9350620009bf81856020860162000bb7565b80840191505092915050565b6000620009da60208362000ad3565b9150620009e78262000cba565b602082019050919050565b600062000a0160178362000ae4565b915062000a0e8262000ce3565b601782019050919050565b600062000a2860118362000ae4565b915062000a358262000d0c565b601182019050919050565b600062000a4d82620009f2565b915062000a5b828562000994565b915062000a688262000a19565b915062000a76828462000994565b91508190509392505050565b6000602082019050818103600083015262000a9e818462000953565b905092915050565b6000602082019050818103600083015262000ac181620009cb565b9050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600062000afc8262000bad565b915062000b098362000bad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b415762000b4062000c1c565b5b828201905092915050565b600062000b598262000bad565b915062000b668362000bad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ba25762000ba162000c1c565b5b828202905092915050565b6000819050919050565b60005b8381101562000bd757808201518184015260208101905062000bba565b8381111562000be7576000848401525b50505050565b600062000bfa8262000bad565b9150600082141562000c115762000c1062000c1c565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b615d148062000d456000396000f3fe60806040526004361061027d5760003560e01c80637adb62451161014f578063c4fc3b2e116100c1578063d7c97fb41161007a578063d7c97fb4146109f8578063d95a2da314610a23578063e2fa112214610a68578063ebd3968414610aa5578063f2fde38b14610ace578063fb6df75f14610af75761027d565b8063c4fc3b2e146108e4578063cb3119bd1461090f578063cf1779ba14610950578063d16f8ea81461098d578063d17554aa146109a4578063d547741f146109cf5761027d565b8063960980751161011357806396098075146107c25780639d76ea58146107eb578063a06d3e5314610816578063a217fddf14610853578063a502e1a21461087e578063b3d1958d146108bb5761027d565b80637adb62451461069a5780638242e365146106d75780638da5cb5b1461071d57806391ce46bc1461074857806391d14854146107855761027d565b80633d1bc076116101f35780635de6dc55116101ac5780635de6dc55146105785780636178efee146105b5578063675266e1146105de578063695e8c001461061b5780636dfa8d9914610658578063715018a6146106835761027d565b80633d1bc076146104735780634629e6191461048f57806349d5e604146104ba57806350750f25146104e557806354066835146105105780635c975abb1461054d5761027d565b80631d175758116102455780631d17575814610379578063248a9ca3146103a4578063271acaf3146103e15780632f2ff15d1461040a57806336568abe146104335780633ccfd60b1461045c5761027d565b806301ffc9a71461028257806302329a29146102bf5780630d82d80c146102e85780630d98a33e146102ff578063150b7a021461033c575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a491906148aa565b610b34565b6040516102b69190614f80565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e191906147e3565b610bae565b005b3480156102f457600080fd5b506102fd610c47565b005b34801561030b57600080fd5b50610326600480360381019061032191906146fa565b611083565b6040516103339190615226565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190614610565b6110b4565b6040516103709190615009565b60405180910390f35b34801561038557600080fd5b5061038e611118565b60405161039b9190614eba565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c6919061483d565b61113e565b6040516103d89190614fee565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614931565b61115e565b005b34801561041657600080fd5b50610431600480360381019061042c919061486a565b6111f3565b005b34801561043f57600080fd5b5061045a6004803603810190610455919061486a565b61121c565b005b34801561046857600080fd5b5061047161129f565b005b61048d6004803603810190610488919061473a565b611675565b005b34801561049b57600080fd5b506104a4611da8565b6040516104b19190615226565b60405180910390f35b3480156104c657600080fd5b506104cf611dae565b6040516104dc9190614fee565b60405180910390f35b3480156104f157600080fd5b506104fa611dd2565b6040516105079190615226565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906148d7565b611dd8565b6040516105449190614f5e565b60405180910390f35b34801561055957600080fd5b50610562611eff565b60405161056f9190614f80565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a91906145b6565b611f12565b6040516105ac9190614f5e565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d791906148d7565b611fae565b005b3480156105ea57600080fd5b5061060560048036038101906106009190614931565b612474565b6040516106129190615226565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d91906148d7565b612520565b60405161064f9190615226565b60405180910390f35b34801561066457600080fd5b5061066d612538565b60405161067a9190615226565b60405180910390f35b34801561068f57600080fd5b5061069861253e565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906148d7565b6125c6565b6040516106ce9190615226565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f991906148d7565b61263d565b6040516107149a999897969594939291906152f7565b60405180910390f35b34801561072957600080fd5b506107326126d1565b60405161073f9190614eba565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a91906148d7565b6126fa565b60405161077c9190615226565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a7919061486a565b61271f565b6040516107b99190614f80565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190614971565b61278a565b005b3480156107f757600080fd5b506108006128d7565b60405161080d9190614eba565b60405180910390f35b34801561082257600080fd5b5061083d600480360381019061083891906148d7565b6128fd565b60405161084a9190614f5e565b60405180910390f35b34801561085f57600080fd5b50610868612c09565b6040516108759190614fee565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190614931565b612c10565b6040516108b29190615226565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd91906148d7565b612c41565b005b3480156108f057600080fd5b506108f9612cea565b6040516109069190615226565b60405180910390f35b34801561091b57600080fd5b50610936600480360381019061093191906145b6565b612cf0565b604051610947959493929190614f9b565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190614931565b612d33565b6040516109849190615226565b60405180910390f35b34801561099957600080fd5b506109a2612d64565b005b3480156109b057600080fd5b506109b96131a9565b6040516109c69190615226565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f1919061486a565b6131af565b005b348015610a0457600080fd5b50610a0d6131d8565b604051610a1a9190614eba565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a4591906148d7565b6131fe565b604051610a5f99989796959493929190615241565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a91906148d7565b61326c565b604051610a9c9190615226565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190614693565b613290565b005b348015610ada57600080fd5b50610af56004803603810190610af091906145b6565b613386565b005b348015610b0357600080fd5b50610b1e6004803603810190610b1991906148d7565b61347e565b604051610b2b9190614f5e565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba75750610ba68261372b565b5b9050919050565b610bb6613795565b73ffffffffffffffffffffffffffffffffffffffff16610bd46126d1565b73ffffffffffffffffffffffffffffffffffffffff1614610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190615146565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090505b60008180549050111561108057600060018280549050610cab9190615561565b90506000828281548110610cc257610cc16157e5565b5b906000526020600020015490506000600e60008381526020019081526020016000206000015490506000600e600084815260200190815260200160002090506000600e600085815260200190815260200160002060000154905060008260080154905060006010600083815260200190815260200160002090506000806014805490501115610e12575b601480549050811015610e11578660148281548110610d6e57610d6d6157e5565b5b90600052602060002001541415610dfe5760146001601480549050610d939190615561565b81548110610da457610da36157e5565b5b906000526020600020015460148281548110610dc357610dc26157e5565b5b90600052602060002001819055506014805480610de357610de26157b6565b5b60019003818190600052602060002001600090559055610e11565b8080610e09906156b0565b915050610d4c565b5b60008083805490501115610ee1575b8280549050811015610ee05787838281548110610e4157610e406157e5565b5b90600052602060002001541415610ecd578260018480549050610e649190615561565b81548110610e7557610e746157e5565b5b9060005260206000200154838281548110610e9357610e926157e5565b5b906000526020600020018190555082805480610eb257610eb16157b6565b5b60019003818190600052602060002001600090559055610ee0565b8080610ed8906156b0565b915050610e21565b5b89805490508910610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906150c6565b60405180910390fd5b8960018b80549050610f399190615561565b81548110610f4a57610f496157e5565b5b90600052602060002001548a8a81548110610f6857610f676157e5565b5b906000526020600020018190555089805480610f8757610f866157b6565b5b6001900381819060005260206000200160009055905560008660030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033886040518463ffffffff1660e01b815260040161104093929190614efe565b600060405180830381600087803b15801561105a57600080fd5b505af115801561106e573d6000803e3d6000fd5b50505050505050505050505050610c8b565b50565b600c602052816000526040600020818154811061109f57600080fd5b90600052602060002001600091509150505481565b6000601560009054906101000a900460ff1615611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90615166565b60405180910390fd5b63150b7a0260e01b9050949350505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060016000838152602001908152602001600020600101549050919050565b6111887f5146a08baf902532d0ee2f909971144f12ca32651cd70cbee1117cddfb3b3b333361271f565b6111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be906150e6565b60405180910390fd5b60005b828110156111ee576111db8261379d565b80806111e6906156b0565b9150506111ca565b505050565b6111fc8261113e565b61120d81611208613795565b613b2a565b6112178383613bc7565b505050565b611224613795565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890615206565b60405180910390fd5b61129b8282613ca7565b5050565b60011515601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c906150e6565b60405180910390fd5b6000806113cf601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154613d8990919063ffffffff16565b9150611468601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154613d8990919063ffffffff16565b905081601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555060008211156115af5760003373ffffffffffffffffffffffffffffffffffffffff168360405161152790614e2e565b60006040518083038185875af1925050503d8060008114611564576040519150601f19603f3d011682016040523d82523d6000602084013e611569565b606091505b50509050806115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a4906151a6565b60405180910390fd5b505b600081111561167157600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611615929190614f35565b602060405180830381600087803b15801561162f57600080fd5b505af1158015611643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116679190614810565b61167057600080fd5b5b5050565b600083839050905060006116a8600f60008581526020019081526020016000206003015483613d9f90919063ffffffff16565b905060006116d5600f60008681526020019081526020016000206004015484613d9f90919063ffffffff16565b90508134101561171a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611711906151c6565b60405180910390fd5b80600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117769190614eba565b60206040518083038186803b15801561178e57600080fd5b505afa1580156117a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c69190614904565b1015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90615106565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161186693929190614efe565b602060405180830381600087803b15801561188057600080fd5b505af1158015611894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b89190614810565b6118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90615186565b60405180910390fd5b60005b83811015611adf57611925878783818110611918576119176157e5565b5b9050602002013586613db5565b600073ffffffffffffffffffffffffffffffffffffffff16600f600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acc576000600f600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663206e9a9b8989858181106119f6576119f56157e5565b5b90506020020135600f60008a8152602001908152602001600020600201546040518363ffffffff1660e01b8152600401611a319291906152ce565b60206040518083038186803b158015611a4957600080fd5b505afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190614810565b90506001151581151514611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac1906150a6565b60405180910390fd5b505b8080611ad7906156b0565b9150506118fa565b506000611b1e6064611b10600f60008981526020019081526020016000206005015486613d9f90919063ffffffff16565b6141c590919063ffffffff16565b90506000611b5e6064611b50600f60008a81526020019081526020016000206006015486613d9f90919063ffffffff16565b6141c590919063ffffffff16565b90506000611b9e6064611b90600f60008b81526020019081526020016000206007015488613d9f90919063ffffffff16565b6141c590919063ffffffff16565b90506000611bde6064611bd0600f60008c81526020019081526020016000206008015488613d9f90919063ffffffff16565b6141c590919063ffffffff16565b9050611c4984601660007384c06895e37a0c5cdb2196d204d7ef8ea0a4ff4f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546141db90919063ffffffff16565b601660007384c06895e37a0c5cdb2196d204d7ef8ea0a4ff4f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611d0c8460166000733e3f56c7c4873a4516b78fe989e9f8be18968a3873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546141db90919063ffffffff16565b60166000733e3f56c7c4873a4516b78fe989e9f8be18968a3873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550611d7b826012546141db90919063ffffffff16565b601281905550611d96816013546141db90919063ffffffff16565b60138190555050505050505050505050565b60095481565b7f5146a08baf902532d0ee2f909971144f12ca32651cd70cbee1117cddfb3b3b3381565b600b5481565b60606000600d6000848152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611e3957602002820191906000526020600020905b815481526020019060010190808311611e25575b5050505050905060008151905060008167ffffffffffffffff811115611e6257611e61615814565b5b604051908082528060200260200182016040528015611e905781602001602082028036833780820191505090505b50905060005b82811015611ef357611ec1848281518110611eb457611eb36157e5565b5b60200260200101516126fa565b828281518110611ed457611ed36157e5565b5b6020026020010181815250508080611eeb906156b0565b915050611e96565b81945050505050919050565b601560009054906101000a900460ff1681565b606080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611f9e57602002820191906000526020600020905b815481526020019060010190808311611f8a575b5050505050905080915050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600e600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990615066565b60405180910390fd5b6000600e600083815260200190815260200160002090506000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b81805490508110156120f857838282815481106120cf576120ce6157e5565b5b906000526020600020015414156120e5576120f8565b80806120f0906156b0565b9150506120af565b6000600e600086815260200190815260200160002060000154905060008460080154905060006010600083815260200190815260200160002090506000806014805490501115612209575b601480549050811015612208578760148281548110612165576121646157e5565b5b906000526020600020015414156121f5576014600160148054905061218a9190615561565b8154811061219b5761219a6157e5565b5b9060005260206000200154601482815481106121ba576121b96157e5565b5b906000526020600020018190555060148054806121da576121d96157b6565b5b60019003818190600052602060002001600090559055612208565b8080612200906156b0565b915050612143565b5b600080838054905011156122d8575b82805490508110156122d75788838281548110612238576122376157e5565b5b906000526020600020015414156122c457826001848054905061225b9190615561565b8154811061226c5761226b6157e5565b5b906000526020600020015483828154811061228a576122896157e5565b5b9060005260206000200181905550828054806122a9576122a86157b6565b5b600190038181906000526020600020016000905590556122d7565b80806122cf906156b0565b915050612218565b5b8680549050861061231e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612315906150c6565b60405180910390fd5b86600188805490506123309190615561565b81548110612341576123406157e5565b5b906000526020600020015487878154811061235f5761235e6157e5565b5b90600052602060002001819055508680548061237e5761237d6157b6565b5b6001900381819060005260206000200160009055905560008860030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033886040518463ffffffff1660e01b815260040161243793929190614efe565b600060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b50505050505050505050505050565b600080600090506000806101f4905061249686826141f190919063ffffffff16565b915060008211156124a657600191505b816124ba87836141c590919063ffffffff16565b6124c49190615480565b92506124d985826141f190919063ffffffff16565b915060008211156124e957600191505b816124fd86836141c590919063ffffffff16565b846125089190615480565b6125129190615480565b925082935050505092915050565b60116020528060005260406000206000915090505481565b60175481565b612546613795565b73ffffffffffffffffffffffffffffffffffffffff166125646126d1565b73ffffffffffffffffffffffffffffffffffffffff16146125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190615146565b60405180910390fd5b6125c46000614207565b565b600080600d600084815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561262657602002820191906000526020600020905b815481526020019060010190808311612612575b505050505090506000815190508092505050919050565b600e6020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005015490806006015490806007015490806008015490806009015490508a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600e600084815260200190815260200160002060060154905080915050919050565b60006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612792614348565b8981600001818152505088816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050878160400181815250508681606001818152505085816080018181525050848160a0018181525050838160c0018181525050828160e0018181525050818161010001818152505080600f60008d81526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050505050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600d600084815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561295e57602002820191906000526020600020905b81548152602001906001019080831161294a575b5050505050905060008151905060008167ffffffffffffffff81111561298757612986615814565b5b6040519080825280602002602001820160405280156129b55781602001602082028036833780820191505090505b50905060008267ffffffffffffffff8111156129d4576129d3615814565b5b604051908082528060200260200182016040528015612a025781602001602082028036833780820191505090505b50905060008367ffffffffffffffff811115612a2157612a20615814565b5b604051908082528060200260200182016040528015612a4f5781602001602082028036833780820191505090505b5090506000806101f4905060005b86811015612af9576000888281518110612a7a57612a796157e5565b5b602002602001015190506000600e60008381526020019081526020016000206004015490506000600e6000848152602001908152602001600020600501549050612ac48282612474565b898581518110612ad757612ad66157e5565b5b6020026020010181815250505050508080612af1906156b0565b915050612a5d565b5060008060005b88811015612bf757600092506101f4915060005b89811015612b9c5782898281518110612b3057612b2f6157e5565b5b6020026020010151108015612b63575060001515878281518110612b5757612b566157e5565b5b60200260200101511515145b15612b8957809350888181518110612b7e57612b7d6157e5565b5b602002602001015192505b8080612b94906156b0565b915050612b14565b5082878281518110612bb157612bb06157e5565b5b6020026020010181815250506001868481518110612bd257612bd16157e5565b5b6020026020010190151590811515815250508080612bef906156b0565b915050612b00565b50859950505050505050505050919050565b6000801b81565b600d6020528160005260406000208181548110612c2c57600080fd5b90600052602060002001600091509150505481565b60011515601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514612cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cce906150e6565b60405180910390fd5b6000601281905550600060138190555050565b600a5481565b60166020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154905085565b60106020528160005260406000208181548110612d4f57600080fd5b90600052602060002001600091509150505481565b612d8e7f5146a08baf902532d0ee2f909971144f12ca32651cd70cbee1117cddfb3b3b333361271f565b612dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc4906150e6565b60405180910390fd5b6001600954612ddc9190615561565b600a5410156131a7576001600a54612df49190615480565b600a81905550600060116000600a5481526020019081526020016000205490506000612e21600a546128fd565b90506000600f600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663f4df466d6040518163ffffffff1660e01b815260040160006040518083038186803b158015612ea657600080fd5b505afa158015612eba573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612ee3919061479a565b905060008273ffffffffffffffffffffffffffffffffffffffff16632b99bec76040518163ffffffff1660e01b815260040160006040518083038186803b158015612f2d57600080fd5b505afa158015612f41573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612f6a919061479a565b905060005b84518110156131a0576000858281518110612f8d57612f8c6157e5565b5b602002602001015190506000848381518110612fac57612fab6157e5565b5b602002602001015190506000848481518110612fcb57612fca6157e5565b5b602002602001015190506000600e600085815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008311156130c75760008173ffffffffffffffffffffffffffffffffffffffff168460405161303f90614e2e565b60006040518083038185875af1925050503d806000811461307c576040519150601f19603f3d011682016040523d82523d6000602084013e613081565b606091505b50509050806130c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bc906151a6565b60405180910390fd5b505b600082111561318957600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b815260040161312d929190614f35565b602060405180830381600087803b15801561314757600080fd5b505af115801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190614810565b61318857600080fd5b5b505050508080613198906156b0565b915050612f6f565b5050505050505b565b60185481565b6131b88261113e565b6131c9816131c4613795565b613b2a565b6131d38383613ca7565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6014818154811061327c57600080fd5b906000526020600020016000915090505481565b60011515601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331d906150e6565b60405180910390fd5b82601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690831515021790555050505050565b61338e613795565b73ffffffffffffffffffffffffffffffffffffffff166133ac6126d1565b73ffffffffffffffffffffffffffffffffffffffff1614613402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f990615146565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346990615086565b60405180910390fd5b61347b81614207565b50565b60606000600d60008481526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156134df57602002820191906000526020600020905b8154815260200190600101908083116134cb575b5050505050905080915050919050565b6060600060028360026135029190615507565b61350c9190615480565b67ffffffffffffffff81111561352557613524615814565b5b6040519080825280601f01601f1916602001820160405280156135575781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061358f5761358e6157e5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106135f3576135f26157e5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026136339190615507565b61363d9190615480565b90505b60018111156136dd577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061367f5761367e6157e5565b5b1a60f81b828281518110613696576136956157e5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806136d690615655565b9050613640565b5060008414613721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371890615046565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6137c77f5146a08baf902532d0ee2f909971144f12ca32651cd70cbee1117cddfb3b3b333361271f565b613806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137fd906150e6565b60405180910390fd5b60008060106000848152602001908152602001600020805490509050600080600f600086815260200190815260200160002060000154905080831061384d57809150613851565b8291505b5b81841015613aed5760008461387260085442613d8990919063ffffffff16565b61387c9190615480565b905060006138a2826000601060008b8152602001908152602001600020805490506142cb565b905060006010600089815260200190815260200160002082815481106138cb576138ca6157e5565b5b90600052602060002001549050600d600060095481526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556000601060008a81526020019081526020016000208054905061394260085442613d8990919063ffffffff16565b61394c9190615480565b905061395b816004600b6142cb565b600e6000848152602001908152602001600020600401819055506001816139829190615480565b9050613991816006600d6142cb565b600e6000848152602001908152602001600020600501819055506139e1600e600084815260200190815260200160002060040154600e600085815260200190815260200160002060050154612474565b600e600084815260200190815260200160002060060181905550600954600e600084815260200190815260200160002060090181905550601060008a81526020019081526020016000206001601060008c815260200190815260200160002080549050613a4e9190615561565b81548110613a5f57613a5e6157e5565b5b9060005260206000200154601060008b81526020019081526020016000208481548110613a8f57613a8e6157e5565b5b9060005260206000200181905550601060008a8152602001908152602001600020805480613ac057613abf6157b6565b5b60019003818190600052602060002001600090559055505050508380613ae5906156b0565b945050613852565b8460116000600954815260200190815260200160002081905550613b1d60016009546141db90919063ffffffff16565b6009819055505050505050565b613b34828261271f565b613bc357613b598173ffffffffffffffffffffffffffffffffffffffff1660146134ef565b613b678360001c60206134ef565b604051602001613b78929190614e43565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bba9190615024565b60405180910390fd5b5050565b613bd1828261271f565b613ca357600180600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613c48613795565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b613cb1828261271f565b15613d855760006001600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d2a613795565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008183613d979190615561565b905092915050565b60008183613dad9190615507565b905092915050565b601560009054906101000a900460ff1615613e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dfc90615126565b60405180910390fd5b60006014805490509050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505582600e60008381526020019081526020016000206000018190555033600e600083815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e6000838152602001908152602001600020600801819055506014819080600181540180825580915050600190039060005260206000200160009091909190915055601060008381526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150553073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663081812fc856040518263ffffffff1660e01b8152600401613fd59190615226565b60206040518083038186803b158015613fed57600080fd5b505afa158015614001573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402591906145e3565b73ffffffffffffffffffffffffffffffffffffffff1614806140f05750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b815260040161409f929190614ed5565b60206040518083038186803b1580156140b757600080fd5b505afa1580156140cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ef9190614810565b5b61412f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614126906151e6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330866040518463ffffffff1660e01b815260040161418e93929190614efe565b600060405180830381600087803b1580156141a857600080fd5b505af11580156141bc573d6000803e3d6000fd5b50505050505050565b600081836141d391906154d6565b905092915050565b600081836141e99190615480565b905092915050565b600081836141ff9190615727565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806142e18484613d8990919063ffffffff16565b90506000614325824233896040516020016142fe93929190614e7d565b6040516020818303038152906040528051906020012060001c6141f190919063ffffffff16565b905061433a85826141db90919063ffffffff16565b905080925050509392505050565b60405180610120016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006143bd6143b8846153b8565b615393565b905080838252602082019050828560208602820111156143e0576143df61584d565b5b60005b8581101561441057816143f688826145a1565b8452602084019350602083019250506001810190506143e3565b5050509392505050565b600061442d614428846153e4565b615393565b90508281526020810184848401111561444957614448615852565b5b614454848285615613565b509392505050565b60008135905061446b81615c6b565b92915050565b60008151905061448081615c6b565b92915050565b60008083601f84011261449c5761449b615848565b5b8235905067ffffffffffffffff8111156144b9576144b8615843565b5b6020830191508360208202830111156144d5576144d461584d565b5b9250929050565b600082601f8301126144f1576144f0615848565b5b81516145018482602086016143aa565b91505092915050565b60008135905061451981615c82565b92915050565b60008151905061452e81615c82565b92915050565b60008135905061454381615c99565b92915050565b60008135905061455881615cb0565b92915050565b600082601f83011261457357614572615848565b5b813561458384826020860161441a565b91505092915050565b60008135905061459b81615cc7565b92915050565b6000815190506145b081615cc7565b92915050565b6000602082840312156145cc576145cb61585c565b5b60006145da8482850161445c565b91505092915050565b6000602082840312156145f9576145f861585c565b5b600061460784828501614471565b91505092915050565b6000806000806080858703121561462a5761462961585c565b5b60006146388782880161445c565b94505060206146498782880161445c565b935050604061465a8782880161458c565b925050606085013567ffffffffffffffff81111561467b5761467a615857565b5b6146878782880161455e565b91505092959194509250565b600080600080608085870312156146ad576146ac61585c565b5b60006146bb8782880161445c565b94505060206146cc8782880161450a565b93505060406146dd8782880161458c565b92505060606146ee8782880161458c565b91505092959194509250565b600080604083850312156147115761471061585c565b5b600061471f8582860161445c565b92505060206147308582860161458c565b9150509250929050565b6000806000604084860312156147535761475261585c565b5b600084013567ffffffffffffffff81111561477157614770615857565b5b61477d86828701614486565b935093505060206147908682870161458c565b9150509250925092565b6000602082840312156147b0576147af61585c565b5b600082015167ffffffffffffffff8111156147ce576147cd615857565b5b6147da848285016144dc565b91505092915050565b6000602082840312156147f9576147f861585c565b5b60006148078482850161450a565b91505092915050565b6000602082840312156148265761482561585c565b5b60006148348482850161451f565b91505092915050565b6000602082840312156148535761485261585c565b5b600061486184828501614534565b91505092915050565b600080604083850312156148815761488061585c565b5b600061488f85828601614534565b92505060206148a08582860161445c565b9150509250929050565b6000602082840312156148c0576148bf61585c565b5b60006148ce84828501614549565b91505092915050565b6000602082840312156148ed576148ec61585c565b5b60006148fb8482850161458c565b91505092915050565b60006020828403121561491a5761491961585c565b5b6000614928848285016145a1565b91505092915050565b600080604083850312156149485761494761585c565b5b60006149568582860161458c565b92505060206149678582860161458c565b9150509250929050565b6000806000806000806000806000806101408b8d0312156149955761499461585c565b5b60006149a38d828e0161458c565b9a505060206149b48d828e0161458c565b99505060406149c58d828e0161445c565b98505060606149d68d828e0161458c565b97505060806149e78d828e0161458c565b96505060a06149f88d828e0161458c565b95505060c0614a098d828e0161458c565b94505060e0614a1a8d828e0161458c565b935050610100614a2c8d828e0161458c565b925050610120614a3e8d828e0161458c565b9150509295989b9194979a5092959850565b6000614a5c8383614df9565b60208301905092915050565b614a7181615595565b82525050565b614a88614a8382615595565b6156f9565b82525050565b6000614a9982615425565b614aa38185615448565b9350614aae83615415565b8060005b83811015614adf578151614ac68882614a50565b9750614ad18361543b565b925050600181019050614ab2565b5085935050505092915050565b614af5816155a7565b82525050565b614b04816155b3565b82525050565b614b13816155bd565b82525050565b6000614b2482615430565b614b2e8185615464565b9350614b3e818560208601615622565b614b4781615861565b840191505092915050565b6000614b5d82615430565b614b678185615475565b9350614b77818560208601615622565b80840191505092915050565b6000614b90602083615464565b9150614b9b8261587f565b602082019050919050565b6000614bb3602083615464565b9150614bbe826158a8565b602082019050919050565b6000614bd6602683615464565b9150614be1826158d1565b604082019050919050565b6000614bf9603f83615464565b9150614c0482615920565b604082019050919050565b6000614c1c601f83615464565b9150614c278261596f565b602082019050919050565b6000614c3f602383615464565b9150614c4a82615998565b604082019050919050565b6000614c62602783615464565b9150614c6d826159e7565b604082019050919050565b6000614c85601d83615464565b9150614c9082615a36565b602082019050919050565b6000614ca8602083615464565b9150614cb382615a5f565b602082019050919050565b6000614ccb601683615464565b9150614cd682615a88565b602082019050919050565b6000614cee602683615464565b9150614cf982615ab1565b604082019050919050565b6000614d11600083615459565b9150614d1c82615b00565b600082019050919050565b6000614d34601083615464565b9150614d3f82615b03565b602082019050919050565b6000614d57602383615464565b9150614d6282615b2c565b604082019050919050565b6000614d7a601783615475565b9150614d8582615b7b565b601782019050919050565b6000614d9d603483615464565b9150614da882615ba4565b604082019050919050565b6000614dc0601183615475565b9150614dcb82615bf3565b601182019050919050565b6000614de3602f83615464565b9150614dee82615c1c565b604082019050919050565b614e0281615609565b82525050565b614e1181615609565b82525050565b614e28614e2382615609565b61571d565b82525050565b6000614e3982614d04565b9150819050919050565b6000614e4e82614d6d565b9150614e5a8285614b52565b9150614e6582614db3565b9150614e718284614b52565b91508190509392505050565b6000614e898286614e17565b602082019150614e998285614a77565b601482019150614ea98284614e17565b602082019150819050949350505050565b6000602082019050614ecf6000830184614a68565b92915050565b6000604082019050614eea6000830185614a68565b614ef76020830184614a68565b9392505050565b6000606082019050614f136000830186614a68565b614f206020830185614a68565b614f2d6040830184614e08565b949350505050565b6000604082019050614f4a6000830185614a68565b614f576020830184614e08565b9392505050565b60006020820190508181036000830152614f788184614a8e565b905092915050565b6000602082019050614f956000830184614aec565b92915050565b600060a082019050614fb06000830188614aec565b614fbd6020830187614e08565b614fca6040830186614e08565b614fd76060830185614e08565b614fe46080830184614e08565b9695505050505050565b60006020820190506150036000830184614afb565b92915050565b600060208201905061501e6000830184614b0a565b92915050565b6000602082019050818103600083015261503e8184614b19565b905092915050565b6000602082019050818103600083015261505f81614b83565b9050919050565b6000602082019050818103600083015261507f81614ba6565b9050919050565b6000602082019050818103600083015261509f81614bc9565b9050919050565b600060208201905081810360008301526150bf81614bec565b9050919050565b600060208201905081810360008301526150df81614c0f565b9050919050565b600060208201905081810360008301526150ff81614c32565b9050919050565b6000602082019050818103600083015261511f81614c55565b9050919050565b6000602082019050818103600083015261513f81614c78565b9050919050565b6000602082019050818103600083015261515f81614c9b565b9050919050565b6000602082019050818103600083015261517f81614cbe565b9050919050565b6000602082019050818103600083015261519f81614ce1565b9050919050565b600060208201905081810360008301526151bf81614d27565b9050919050565b600060208201905081810360008301526151df81614d4a565b9050919050565b600060208201905081810360008301526151ff81614d90565b9050919050565b6000602082019050818103600083015261521f81614dd6565b9050919050565b600060208201905061523b6000830184614e08565b92915050565b600061012082019050615257600083018c614e08565b615264602083018b614a68565b615271604083018a614e08565b61527e6060830189614e08565b61528b6080830188614e08565b61529860a0830187614e08565b6152a560c0830186614e08565b6152b260e0830185614e08565b6152c0610100830184614e08565b9a9950505050505050505050565b60006040820190506152e36000830185614e08565b6152f06020830184614e08565b9392505050565b60006101408201905061530d600083018d614e08565b61531a602083018c614e08565b615327604083018b614a68565b615334606083018a614a68565b6153416080830189614e08565b61534e60a0830188614e08565b61535b60c0830187614e08565b61536860e0830186614e08565b615376610100830185614e08565b615384610120830184614e08565b9b9a5050505050505050505050565b600061539d6153ae565b90506153a9828261567f565b919050565b6000604051905090565b600067ffffffffffffffff8211156153d3576153d2615814565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153ff576153fe615814565b5b61540882615861565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061548b82615609565b915061549683615609565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154cb576154ca615758565b5b828201905092915050565b60006154e182615609565b91506154ec83615609565b9250826154fc576154fb615787565b5b828204905092915050565b600061551282615609565b915061551d83615609565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561555657615555615758565b5b828202905092915050565b600061556c82615609565b915061557783615609565b92508282101561558a57615589615758565b5b828203905092915050565b60006155a0826155e9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615640578082015181840152602081019050615625565b8381111561564f576000848401525b50505050565b600061566082615609565b9150600082141561567457615673615758565b5b600182039050919050565b61568882615861565b810181811067ffffffffffffffff821117156156a7576156a6615814565b5b80604052505050565b60006156bb82615609565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156ee576156ed615758565b5b600182019050919050565b60006157048261570b565b9050919050565b600061571682615872565b9050919050565b6000819050919050565b600061573282615609565b915061573d83615609565b92508261574d5761574c615787565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f54686174204e465420646f6573206e6f742062656c6f6e6720746f20796f752e600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4174206c65617374206f6e652063686f73656e20746f6b656e20646f6573206e60008201527f6f74206d65657420746865206576656e7420726571756972656d656e74732e00602082015250565b7f4e46542077697468207468617420494420776173206e6f7420666f756e642e00600082015250565b7f43616c6c6572206973206e6f742061206d656d626572206f662074686520746560008201527f616d2e0000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520656e6f756768205065616e75747320666f60008201527f7220746861742e00000000000000000000000000000000000000000000000000602082015250565b7f526163696e672069732063757272656e746c79206e6f74206f70656e2e000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f596f75206e65656420746f20616c6c6f77207472616e73666572206f6620506560008201527f616e7574732e0000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e6f7420656e6f756768206d6174696320746f20726163652074686174206d6160008201527f6e792e0000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f596f75206e65656420746f20616c6c6f772074686520636f6e7472616374206160008201527f636365737320746f20796f75722052616365722e000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b615c7481615595565b8114615c7f57600080fd5b50565b615c8b816155a7565b8114615c9657600080fd5b50565b615ca2816155b3565b8114615cad57600080fd5b50565b615cb9816155bd565b8114615cc457600080fd5b50565b615cd081615609565b8114615cdb57600080fd5b5056fea26469706673582212208c3814707c4c4a148e40597584568d8f951b5bc48192fba101e800b79cec8de164736f6c63430008070033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.