ERC-20
Overview
Max Total Supply
91 POP
Holders
0
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
REPOPCore
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-04 */ pragma solidity ^0.4.21; /// @author Luis Freitas, Miguel Amaral (https://repop.world) contract REPOPAccessControl { address public ceoAddress; address public cfoAddress; address public cooAddress; bool public paused = false; modifier onlyCEO() { require(msg.sender == ceoAddress); _; } modifier onlyCFO() { require(msg.sender == cfoAddress); _; } modifier onlyCOO() { require(msg.sender == cooAddress); _; } modifier onlyCLevel() { require( msg.sender == cooAddress || msg.sender == ceoAddress || msg.sender == cfoAddress ); _; } function setCEO(address _newCEO) external onlyCEO { require(_newCEO != address(0)); ceoAddress = _newCEO; } function setCFO(address _newCFO) external onlyCEO { require(_newCFO != address(0)); cfoAddress = _newCFO; } function setCOO(address _newCOO) external onlyCEO { require(_newCOO != address(0)); cooAddress = _newCOO; } modifier whenNotPaused() { require(!paused); _; } modifier whenPaused { require(paused); _; } function pause() external onlyCLevel whenNotPaused { paused = true; } function unpause() public onlyCEO whenPaused { paused = false; } } contract PullPayment { mapping(address => uint) public payments; function asyncSend(address dest, uint amount) internal { payments[dest] += amount; } function withdrawPayments() external { uint payment = payments[msg.sender]; payments[msg.sender] = 0; if (!msg.sender.send(payment)) { payments[msg.sender] = payment; } } } /// @author Dieter Shirley <[email protected]> (https://github.com/dete) contract ERC721 { function approve(address _to, uint256 _tokenId) public; function balanceOf(address _owner) public view returns (uint256 balance); function implementsERC721() public pure returns (bool); function ownerOf(uint256 _tokenId) public view returns (address addr); function takeOwnership(uint256 _tokenId) public; function totalSupply() public view returns (uint256 total); function transferFrom(address _from, address _to, uint256 _tokenId) public; function transfer(address _to, uint256 _tokenId) public; function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl); event Transfer(address indexed from, address indexed to, uint256 tokenId); event Approval(address indexed owner, address indexed approved, uint256 tokenId); function supportsInterface(bytes4 _interfaceID) external view returns (bool); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract MetadataContract{ function getMetadata(uint256 _tokenId) public view returns (bytes32[4] buffer, uint256 count) { buffer[0] = "https://meta.repop.world/"; buffer[1] = uintToBytes(_tokenId); count = 64; } function _memcpy(uint _dest, uint _src, uint _len) private view { for(; _len >= 32; _len -= 32) { assembly { mstore(_dest, mload(_src)) } _dest += 32; _src += 32; } uint256 mask = 256 ** (32 - _len) - 1; assembly { let srcpart := and(mload(_src), not(mask)) let destpart := and(mload(_dest), mask) mstore(_dest, or(destpart, srcpart)) } } function _toString(bytes32[4] _rawBytes, uint256 _stringLength) private view returns (string) { var outputString = new string(_stringLength); uint256 outputPtr; uint256 bytesPtr; assembly { outputPtr := add(outputString, 32) bytesPtr := _rawBytes } _memcpy(outputPtr, bytesPtr, _stringLength); return outputString; } function getMetadataUrl(uint256 _tokenId) external view returns (string infoUrl) { bytes32[4] memory buffer; uint256 count; (buffer, count) = getMetadata(_tokenId); return _toString(buffer, count); } function uintToBytes(uint v) public view returns (bytes32 ret) { if (v == 0) { ret = '0'; } else { while (v > 0) { ret = bytes32(uint(ret) / (2 ** 8)); ret |= bytes32(((v % 10) + 48) * 2 ** (8 * 31)); v /= 10; } } return ret; } } /// @author Luis Freitas, Miguel Amaral (https://repop.world) contract REPOPERC721 is ERC721, REPOPAccessControl{ MetadataContract public metadataContract; bytes4 constant InterfaceSignature_ERC165 = bytes4(keccak256('supportsInterface(bytes4)')); bytes4 constant InterfaceSignature_ERC721 = bytes4(keccak256('name()')) ^ bytes4(keccak256('symbol()')) ^ bytes4(keccak256('totalSupply()')) ^ bytes4(keccak256('balanceOf(address)')) ^ bytes4(keccak256('ownerOf(uint256)')) ^ bytes4(keccak256('approve(address,uint256)')) ^ bytes4(keccak256('transfer(address,uint256)')) ^ bytes4(keccak256('transferFrom(address,address,uint256)')) ^ bytes4(keccak256('tokensOfOwner(address)')) ^ bytes4(keccak256('tokenMetadata(uint256)')); function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl) { require(metadataContract != address(0)); require(_tokenId >= 0 && _tokenId <= pops.length); return metadataContract.getMetadataUrl(_tokenId); } function setMetadataContractAddress(address contractAddress) public onlyCEO{ require(contractAddress != address(0)); metadataContract = MetadataContract(contractAddress); } string public constant name = "REPOP WORLD"; string public constant symbol = "POP"; function supportsInterface(bytes4 _interfaceID) external view returns (bool) { return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721)); } function approve(address _to, uint256 _tokenId) public whenNotPaused{ require(_owns(msg.sender, _tokenId)); popIndexToApproved[_tokenId] = _to; emit Approval(msg.sender, _to, _tokenId); } function balanceOf(address _owner) public view returns (uint256 balance){ return ownershipTokenCount[_owner]; } function implementsERC721() public pure returns (bool){ return true; } function ownerOf(uint256 _tokenId) public view returns (address owner) { owner = popIndexToOwner[_tokenId]; require(owner != address(0)); } function takeOwnership(uint256 _tokenId) public { address currentOwner = ownerOf(_tokenId); address newOwner = msg.sender; require(_addressNotNull(newOwner)); require(_approved(newOwner, _tokenId)); _transfer(newOwner, _tokenId); emit Transfer(currentOwner, newOwner, _tokenId); } function tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 totalPops = totalSupply(); uint256 resultIndex = 0; uint256 popId; for (popId = 1; popId <= totalPops; popId++) { if (popIndexToOwner[popId] == _owner) { result[resultIndex] = popId; resultIndex++; } } return result; } } function totalSupply() public view returns (uint256 total) { return pops.length; } function transfer(address _to, uint256 _tokenId ) public whenNotPaused{ require(_owns(msg.sender, _tokenId)); require(_addressNotNull(_to)); _transfer(_to, _tokenId); emit Transfer(msg.sender, _to, _tokenId); } function transferFrom(address _from, address _to, uint256 _tokenId) public whenNotPaused{ require(_owns(_from, _tokenId)); require(_approved(msg.sender, _tokenId)); require(_addressNotNull(_to)); _transfer(_to, _tokenId); emit Transfer(_from, _to, _tokenId); } function _addressNotNull(address _to) private pure returns (bool){ return _to != address(0); } function _approved(address _to, uint256 _tokenId) private view returns (bool) { return popIndexToApproved[_tokenId] == _to; } function _owns(address claimant, uint256 _tokenId) private view returns (bool) { return claimant == popIndexToOwner[_tokenId]; } function _transfer(address _to, uint256 _tokenID) internal { address owner = popIndexToOwner[_tokenID]; ownershipTokenCount[owner] = ownershipTokenCount[owner] - 1 ; popIndexToApproved[_tokenID] = 0; popIndexToOwner[_tokenID] = _to; ownershipTokenCount[_to] = ownershipTokenCount[_to] + 1; } event Birth(address owner, uint256 popId, uint256 aParentId, uint256 bParentId, uint256 genes); event Transfer(address from, address to, uint256 tokenId); struct Pop { uint256 genes; uint64 birthTime; uint64 cooldownEndTimestamp; uint32 aParentId; uint32 bParentId; bytes32 popName; uint16 cooldownIndex; uint16 generation; } uint32[14] public cooldowns = [ uint32(10 minutes), uint32(20 minutes), uint32(40 minutes), uint32(1 hours), uint32(2 hours), uint32(3 hours), uint32(4 hours), uint32(5 hours), uint32(6 hours), uint32(12 hours), uint32(1 days), uint32(3 days), uint32(5 days), uint32(7 days) ]; Pop[] public pops; mapping (uint256 => address) public popIndexToOwner; mapping (address => uint256) public ownershipTokenCount; mapping (uint256 => address) public popIndexToApproved; mapping (uint256 => uint256) public genesToTokenId; function getPop(uint256 _popId) public view returns ( bool isReady, uint256 genes, uint64 birthTime, uint64 cooldownEndTimestamp, uint32 aParentId, uint32 bParentId, bytes32 popName, uint16 cooldownIndex, uint16 generation){ Pop memory pop = pops[_popId]; return( isReady = (pop.cooldownEndTimestamp <= now), pop.genes, pop.birthTime, pop.cooldownEndTimestamp, pop.aParentId, pop.bParentId, pop.popName, pop.cooldownIndex, pop.generation); } function createNewPop(uint256 genes, string popName) public onlyCLevel whenNotPaused{ bytes32 name32 = stringToBytes32(popName); uint256 index = pops.push(Pop(genes,uint64(now),1,0,0,name32,0,0)) -1; emit Birth(msg.sender,index,0,0,genes); genesToTokenId[genes] = index; popIndexToOwner[index] = msg.sender; ownershipTokenCount[msg.sender] = ownershipTokenCount[msg.sender]+1; } function _triggerCooldown(Pop storage _pop) internal { _pop.cooldownEndTimestamp = uint64(now + cooldowns[_pop.cooldownIndex]); } function stringToBytes32(string memory source) internal pure returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(source); if (tempEmptyStringTest.length == 0) { return 0x0; } assembly { result := mload(add(source, 32)) } } function setPopNameOriginal(uint256 popId, string newName) external onlyCLevel{ Pop storage pop = pops[popId]; require(pop.generation == 0); bytes32 name32 = stringToBytes32(newName); pop.popName = name32; } function setDNA(uint256 popId, uint256 newDna) external onlyCLevel{ require(_owns(msg.sender, popId)); Pop storage pop = pops[popId]; pop.genes = newDna; } } contract CarefulTransfer { uint constant suggestedExtraGasToIncludeWithSends = 23000; function carefulSendWithFixedGas( address _toAddress, uint _valueWei, uint _extraGasIncluded ) internal returns (bool success) { return _toAddress.call.value(_valueWei).gas(_extraGasIncluded)(); } } contract MoneyManager is PullPayment, CarefulTransfer, REPOPAccessControl { function _repopTransaction(address _receiver, uint256 _amountWei, uint256 _marginPerThousandForDevelopers) internal { uint256 commissionWei = (_amountWei * _marginPerThousandForDevelopers) / 1000; uint256 compensationWei = _amountWei - commissionWei; if( ! carefulSendWithFixedGas(_receiver,compensationWei,23000)) { asyncSend(_receiver, compensationWei); } } function withdraw(uint amount) external onlyCFO { require(amount < address(this).balance); cfoAddress.transfer(amount); } function getBalance() public view returns (uint256 balance) { return address(this).balance; } } library RoundMoneyNicely { function roundMoneyDownNicely(uint _rawValueWei) internal pure returns (uint nicerValueWei) { if (_rawValueWei < 1 finney) { return _rawValueWei; } else if (_rawValueWei < 10 finney) { return 10 szabo * (_rawValueWei / 10 szabo); } else if (_rawValueWei < 100 finney) { return 100 szabo * (_rawValueWei / 100 szabo); } else if (_rawValueWei < 1 ether) { return 1 finney * (_rawValueWei / 1 finney); } else if (_rawValueWei < 10 ether) { return 10 finney * (_rawValueWei / 10 finney); } else if (_rawValueWei < 100 ether) { return 100 finney * (_rawValueWei / 100 finney); } else if (_rawValueWei < 1000 ether) { return 1 ether * (_rawValueWei / 1 ether); } else if (_rawValueWei < 10000 ether) { return 10 ether * (_rawValueWei / 10 ether); } else { return _rawValueWei; } } function roundMoneyUpToWholeFinney(uint _valueWei) pure internal returns (uint valueFinney) { return (1 finney + _valueWei - 1 wei) / 1 finney; } } contract AuctionManager is MoneyManager { event Bid(address bidder, uint256 bid, uint256 auctionId); event NewAuction( uint256 itemForAuctionID, uint256 durationSeconds, address seller); event NewAuctionWinner(address highestBidder, uint256 auctionId); struct Auction{ uint auctionStart; uint auctionEnd; uint highestBid; address highestBidder; bool ended; } bool public isAuctionManager = true; uint256 private marginPerThousandForDevelopers = 50; uint256 private percentageBidIncrease = 33; uint256 private auctionsStartBid = 0.1 ether; address private auctionsStartAddress; mapping (uint256 => uint256) public _itemID2auctionID; mapping (uint256 => uint256) public _auctionID2itemID; Auction[] public _auctionsArray; ERC721 public nonFungibleContract; function AuctionManager() public { ceoAddress = msg.sender; cooAddress = msg.sender; cfoAddress = msg.sender; auctionsStartAddress = msg.sender; _auctionsArray.push(Auction(0,0,0,0,false)); } function setERCContract(address candidateAddress) public onlyCEO { ERC721 candidateContract = ERC721(candidateAddress); nonFungibleContract = candidateContract; } function getERCContractAddress() public view returns (address) { return address(nonFungibleContract); } function getAllActiveAuctions() external view returns (uint256[] popsIDs,uint256[] auctionsIDs,uint256[] sellingPrices, address[] highestBidders, bool[] canBeEnded){ uint256[] memory toReturnPopsIDs = new uint256[](_auctionsArray.length); uint256[] memory toReturnAuctionsIDs = new uint256[](_auctionsArray.length); uint256[] memory toReturnSellingPrices = new uint256[](_auctionsArray.length); address[] memory toReturnSellerAddress = new address[](_auctionsArray.length); bool[] memory toReturnCanBeEnded = new bool[](_auctionsArray.length); uint256 index = 0; for(uint256 i = 1; i < _auctionsArray.length; i++){ uint256 popId = _auctionID2itemID[i]; uint256 price = requiredBid(i); if(_auctionsArray[i].ended == false){ toReturnPopsIDs[index] = popId; toReturnAuctionsIDs[index] = i; toReturnSellingPrices[index] = price; toReturnSellerAddress[index] = _auctionsArray[i].highestBidder; toReturnCanBeEnded[index] = _auctionsArray[i].auctionEnd < now; index++; } } return (toReturnPopsIDs,toReturnAuctionsIDs,toReturnSellingPrices,toReturnSellerAddress,toReturnCanBeEnded); } function getAllAuctions() external view returns (uint256[] popsIDs,uint256[] auctionsIDs,uint256[] sellingPrices){ uint256[] memory toReturnPopsIDs = new uint256[](_auctionsArray.length); uint256[] memory toReturnAuctionsIDs = new uint256[](_auctionsArray.length); uint256[] memory toReturnSellingPrices = new uint256[](_auctionsArray.length); uint256 index = 0; for(uint256 i = 1; i < _auctionsArray.length; i++){ uint256 popId = _auctionID2itemID[i]; uint256 price = requiredBid(i); toReturnPopsIDs[index] = popId; toReturnAuctionsIDs[index] = i; toReturnSellingPrices[index] = price; index++; } return (toReturnPopsIDs,toReturnAuctionsIDs,toReturnSellingPrices); } function createAuction(uint256 _itemForAuctionID, uint256 _auctionDurationSeconds, address _seller) public { require(msg.sender == getERCContractAddress()); require(_auctionDurationSeconds >= 20 seconds); require(_auctionDurationSeconds < 45 days); require(_itemForAuctionID != 0); require(_seller != 0); _takeOwnershipOfTokenFrom(_itemForAuctionID,_seller); uint256 auctionEnd = SafeMath.add(now,_auctionDurationSeconds); uint256 auctionID = _itemID2auctionID[_itemForAuctionID]; if(auctionID == 0){ uint256 index = _auctionsArray.push(Auction(now, auctionEnd, 0, _seller, false)) - 1; _itemID2auctionID[_itemForAuctionID] = index; _auctionID2itemID[index] = _itemForAuctionID; } else { Auction storage previousAuction = _auctionsArray[auctionID]; require(previousAuction.ended == true); previousAuction.auctionStart = now; previousAuction.auctionEnd = auctionEnd; previousAuction.highestBidder = _seller; previousAuction.highestBid = 0; previousAuction.ended = false; } emit NewAuction(_itemForAuctionID, _auctionDurationSeconds, _seller); } function bid(uint auctionID) public payable whenNotPaused{ require(auctionID != 0); Auction storage auction = _auctionsArray[auctionID]; require(auction.ended == false); require(auction.auctionEnd >= now); uint claimBidPrice = requiredBid(auctionID); uint256 bidValue = msg.value; require(bidValue >= claimBidPrice); address previousHighestBidder = auction.highestBidder; auction.highestBid = msg.value; auction.highestBidder = msg.sender; _repopTransaction(previousHighestBidder, msg.value, marginPerThousandForDevelopers); emit Bid(msg.sender, msg.value, auctionID); } function endAuction(uint auctionID) public{ require(auctionID != 0); Auction storage auction = _auctionsArray[auctionID]; require(auction.ended == false); require(auction.auctionEnd < now); auction.ended = true; nonFungibleContract.transfer(auction.highestBidder, _auctionID2itemID[auctionID]); emit NewAuctionWinner(auction.highestBidder, auctionID); } function requiredBid(uint _auctionID) constant public returns (uint256 amountToOutBid) { require(_auctionID != 0); Auction memory auction = _auctionsArray[_auctionID]; if(auction.highestBid == 0){ return auctionsStartBid; } else { uint256 amountRequiredToOutBid = (auction.highestBid * (100 + percentageBidIncrease)) / 100; amountRequiredToOutBid = RoundMoneyNicely.roundMoneyDownNicely(amountRequiredToOutBid); return amountRequiredToOutBid; } } function getAuction(uint _itemForAuctionID) external constant returns (uint256 itemID, uint256 auctionStart, uint256 auctionEnd, address highestBidder, uint256 highestBid, bool ended){ require(_itemForAuctionID != 0); Auction memory auction = _auctionsArray[_itemID2auctionID[_itemForAuctionID]]; if(auction.highestBidder != 0) { itemID = _itemForAuctionID; auctionStart = auction.auctionStart; auctionEnd = auction.auctionEnd; highestBidder = auction.highestBidder; highestBid = auction.highestBid; ended = auction.ended; return(itemID,auctionStart,auctionEnd,highestBidder,highestBid,ended); } else { revert(); } } function getAuctionStartBid() public view returns(uint256){ return auctionsStartBid; } function setAuctionStartBid(uint256 _auctionStartBid) public onlyCLevel{ auctionsStartBid = _auctionStartBid; } function _addressNotNull(address _to) private pure returns (bool){ return _to != address(0); } function _takeOwnershipOfToken(uint256 _itemForAuctionID) internal { nonFungibleContract.takeOwnership(_itemForAuctionID); } function _takeOwnershipOfTokenFrom(uint256 _itemForAuctionID, address previousOwner) internal { nonFungibleContract.transferFrom(previousOwner,this,_itemForAuctionID); } } contract MarketManager is MoneyManager { event PopPurchased(address seller, address buyer, uint256 popId, uint256 sellingPrice); event PopCancelSale(address popOwner, uint256 popId); event PopChangedPrice(address popOwner, uint256 popId, uint256 newPrice); struct Sale { uint256 sellingPrice; address seller; } bool public isMarketManager = true; uint256 private marginPerThousandForDevelopers = 50; uint256 private MAX_SELLING_PRICE = 100000 ether; mapping (uint256 => uint256) public _itemID2saleID; mapping (uint256 => uint256) public _saleID2itemID; Sale[] public _salesArray; ERC721 public nonFungibleContract; function MarketManager() public { ceoAddress = msg.sender; cooAddress = msg.sender; cfoAddress = msg.sender; _salesArray.push(Sale(0,0)); _itemID2saleID[0] = 0; _saleID2itemID[0] = 0; } function setERCContract(address candidateAddress) public onlyCEO { require(candidateAddress != address(0)); ERC721 candidateContract = ERC721(candidateAddress); nonFungibleContract = candidateContract; } function getERCContractAddress() public view returns (address) { return address(nonFungibleContract); } function getAllActiveSales() external view returns (uint256[] popsIDs,uint256[] sellingPrices,address[] sellerAddresses){ uint256[] memory toReturnPopsIDs = new uint256[](_salesArray.length); uint256[] memory toReturnSellingPrices = new uint256[](_salesArray.length); address[] memory toReturnSellerAddress = new address[](_salesArray.length); uint256 index = 0; for(uint256 i = 1; i < _salesArray.length; i++){ uint256 popId = _saleID2itemID[i]; uint256 price = _salesArray[i].sellingPrice; address seller = _salesArray[i].seller; if(seller != 0){ toReturnSellerAddress[index] = seller; toReturnPopsIDs[index] = popId; toReturnSellingPrices[index] = price; index++; } } return (toReturnPopsIDs,toReturnSellingPrices,toReturnSellerAddress); } function getAllSalesByAddress(address addr) external view returns (uint256[] popsIDs,uint256[] sellingPrices,address[] sellerAddresses){ uint256[] memory toReturnPopsIDs = new uint256[](_salesArray.length); uint256[] memory toReturnSellingPrices = new uint256[](_salesArray.length); address[] memory toReturnSellerAddress = new address[](_salesArray.length); uint256 index = 0; for(uint256 i = 1; i < _salesArray.length; i++){ uint256 popId = _saleID2itemID[i]; uint256 price = _salesArray[i].sellingPrice; address seller = _salesArray[i].seller; if(seller == addr){ toReturnSellerAddress[index] = seller; toReturnPopsIDs[index] = popId; toReturnSellingPrices[index] = price; index++; } } return (toReturnPopsIDs,toReturnSellingPrices,toReturnSellerAddress); } function purchasePop(uint256 _popId) public payable whenNotPaused{ uint256 saleID = _itemID2saleID[_popId]; require(saleID != 0); Sale storage sale = _salesArray[saleID]; address popOwner = sale.seller; require(popOwner != 0); address newOwner = msg.sender; uint256 sellingPrice = sale.sellingPrice; require(popOwner != newOwner); require(_addressNotNull(newOwner)); require(msg.value == sellingPrice); sale.seller = 0; nonFungibleContract.transfer(newOwner,_popId); _repopTransaction(popOwner, msg.value, marginPerThousandForDevelopers); emit PopPurchased(popOwner, msg.sender, _popId, msg.value); } function sellerOf(uint _popId) public view returns (address) { uint256 saleID = _itemID2saleID[_popId]; Sale memory sale = _salesArray[saleID]; return sale.seller; } function sellPop(address seller, uint256 _popId, uint256 _sellingPrice) public whenNotPaused{ require(_sellingPrice < MAX_SELLING_PRICE); require(msg.sender == getERCContractAddress()); require(_sellingPrice > 0); _takeOwnershipOfTokenFrom(_popId,seller); uint256 saleID = _itemID2saleID[_popId]; if(saleID == 0) { uint256 index = _salesArray.push(Sale(_sellingPrice,seller)) - 1; _itemID2saleID[_popId] = index; _saleID2itemID[index] = _popId; } else { Sale storage sale = _salesArray[saleID]; require(sale.seller == 0); sale.seller = seller; sale.sellingPrice = _sellingPrice; } } function cancelSellPop(uint256 _popId) public { Sale storage sale = _salesArray[_itemID2saleID[_popId]]; require(sale.seller == msg.sender); sale.seller = 0; nonFungibleContract.transfer(msg.sender,_popId); emit PopCancelSale(msg.sender, _popId); } function changeSellPOPPrice(uint256 _popId, uint256 _newSellingValue) public whenNotPaused{ require(_newSellingValue < MAX_SELLING_PRICE); require(_newSellingValue > 0); Sale storage sale = _salesArray[_itemID2saleID[_popId]]; require(sale.seller == msg.sender); sale.sellingPrice = _newSellingValue; emit PopChangedPrice(msg.sender, _popId, _newSellingValue); } function _addressNotNull(address _to) private pure returns (bool){ return _to != address(0); } function _takeOwnershipOfToken(uint256 _itemForAuctionID) internal { nonFungibleContract.takeOwnership(_itemForAuctionID); } function _takeOwnershipOfTokenFrom(uint256 _itemForAuctionID, address previousOwner) internal { nonFungibleContract.transferFrom(previousOwner,this,_itemForAuctionID); } } contract CloningInterface{ function isGeneScience() public pure returns (bool); function mixGenes(uint256 genes1, uint256 genes2) public returns (uint256); } contract GenesMarket is MoneyManager { event GenesCancelSale(address popOwner, uint256 popId); event GenesPurchased(address buyer, address popOwner, uint256 popId, uint256 amount, uint256 price); event GenesChangedPrice(address popOwner, uint256 popId, uint256 newPrice); struct GeneForSale { uint256 sellingPrice; address currentOwner; } mapping (uint256 => uint256) public _itemID2geneSaleID; mapping (uint256 => uint256) public _geneSaleID2itemID; GeneForSale[] public _genesForSaleArray; uint256 marginPerThousandForDevelopers = 50; uint256 MAX_SELLING_PRICE = 10000 ether; mapping(address => mapping (uint256 => uint256)) _genesOwned; mapping(address => uint256[]) _ownedGenesPopsId; bool public isGenesMarket = true; function GenesMarket() public { ceoAddress = msg.sender; cooAddress = msg.sender; cfoAddress = msg.sender; _genesForSaleArray.push(GeneForSale(0,0)); } ERC721 public nonFungibleContract; function setERCContract(address candidateAddress) public onlyCEO() { ERC721 candidateContract = ERC721(candidateAddress); nonFungibleContract = candidateContract; } function getERCContractAddress() public view returns (address) { return address(nonFungibleContract); } function startSellingGenes(uint256 _popId, uint256 _sellingPrice, address _seller) public { require(_sellingPrice < MAX_SELLING_PRICE); require(msg.sender == getERCContractAddress()); require(_sellingPrice > 0); _takeOwnershipOfTokenFrom(_popId,_seller); uint256 geneSaleID = _itemID2geneSaleID[_popId]; if(geneSaleID == 0){ uint256 index = _genesForSaleArray.push(GeneForSale(_sellingPrice,_seller)) - 1; _itemID2geneSaleID[_popId] = index; _geneSaleID2itemID[index] = _popId; }else { GeneForSale storage previousSale = _genesForSaleArray[geneSaleID]; previousSale.sellingPrice = _sellingPrice; previousSale.currentOwner = _seller; } } function stopSellingGenes(uint _popId) public { uint256 geneSaleID = _itemID2geneSaleID[_popId]; require(geneSaleID != 0); GeneForSale storage gene = _genesForSaleArray[geneSaleID]; require(msg.sender == gene.currentOwner); require(gene.sellingPrice != 0); gene.sellingPrice = 0; nonFungibleContract.transfer(gene.currentOwner, _popId); emit GenesCancelSale(msg.sender, _popId); } function sellerOf(uint _popId) public view returns (address) { uint256 geneSaleID = _itemID2geneSaleID[_popId]; GeneForSale memory gene = _genesForSaleArray[geneSaleID]; if(gene.sellingPrice != 0) { return gene.currentOwner; } else { return 0; } } function useBottle(address _user, uint _popId) external whenNotPaused { require(msg.sender == getERCContractAddress()); require(_genesOwned[_user][_popId] > 0); _genesOwned[_user][_popId] = _genesOwned[_user][_popId] - 1; } function purchaseGenes(uint256 _popId, uint256 _amountGenes, bool update) public payable whenNotPaused{ require(_amountGenes > 0); uint256 geneSaleID = _itemID2geneSaleID[_popId]; GeneForSale memory gene = _genesForSaleArray[geneSaleID]; require(gene.sellingPrice != 0); address popOwner = gene.currentOwner; address genesReceiver = msg.sender; uint256 sellingPrice = gene.sellingPrice; require(popOwner != genesReceiver); require(msg.value == SafeMath.mul(sellingPrice, _amountGenes)); if( update && _genesOwned[msg.sender][_popId] == 0) { _ownedGenesPopsId[msg.sender].push(_popId); } _genesOwned[msg.sender][_popId] = _genesOwned[msg.sender][_popId] + _amountGenes; _repopTransaction(popOwner, msg.value, marginPerThousandForDevelopers); emit GenesPurchased(msg.sender, popOwner, _popId, _amountGenes, msg.value); } function getGenesForSale() public view returns (uint[] popIDs, uint[] sellingPrices, uint[] geneSaleIDs, address[] sellers){ uint256[] memory toReturnPopsIDs = new uint256[](_genesForSaleArray.length); uint256[] memory toReturnSellingPrices = new uint256[](_genesForSaleArray.length); uint256[] memory toReturnGeneSaleID = new uint256[](_genesForSaleArray.length); address[] memory toReturnSellers = new address[](_genesForSaleArray.length); uint256 index = 0; for(uint256 i = 1; i < _genesForSaleArray.length; i++){ uint256 popId = _geneSaleID2itemID[i]; uint256 price = _genesForSaleArray[i].sellingPrice; if(price != 0){ toReturnGeneSaleID[index] = i; toReturnPopsIDs[index] = popId; toReturnSellingPrices[index] = price; toReturnSellers[index] = _genesForSaleArray[i].currentOwner; index++; } } return (toReturnPopsIDs,toReturnSellingPrices,toReturnGeneSaleID, toReturnSellers); } function getGenesForSaleBySeller(address seller) public view returns (uint[] popIDs, uint[] sellingPrices, uint[] geneSaleIDs, address[] sellers){ uint256[] memory toReturnPopsIDs = new uint256[](_genesForSaleArray.length); uint256[] memory toReturnSellingPrices = new uint256[](_genesForSaleArray.length); uint256[] memory toReturnGeneSaleID = new uint256[](_genesForSaleArray.length); address[] memory toReturnSellers = new address[](_genesForSaleArray.length); uint256 index = 0; for(uint256 i = 1; i < _genesForSaleArray.length; i++){ uint256 popId = _geneSaleID2itemID[i]; uint256 price = _genesForSaleArray[i].sellingPrice; if(price != 0){ if(_genesForSaleArray[i].currentOwner == seller){ toReturnGeneSaleID[index] = i; toReturnPopsIDs[index] = popId; toReturnSellingPrices[index] = price; toReturnSellers[index] = _genesForSaleArray[i].currentOwner; index++; } } } return (toReturnPopsIDs,toReturnSellingPrices,toReturnGeneSaleID, toReturnSellers); } function getAmountOfGene(uint _popId) public view returns (uint amount){ return _genesOwned[msg.sender][_popId]; } function getMyGenes() public view returns (uint[] popIDs, uint[] amount) { uint256[] memory toReturnPopsIDs = new uint256[](_ownedGenesPopsId[msg.sender].length); uint256[] memory toReturnAmount = new uint256[](_ownedGenesPopsId[msg.sender].length); for(uint256 i = 0; i < _ownedGenesPopsId[msg.sender].length; i++) { toReturnPopsIDs[i] = _ownedGenesPopsId[msg.sender][i]; toReturnAmount[i] = _genesOwned[msg.sender][_ownedGenesPopsId[msg.sender][i]]; } return (toReturnPopsIDs,toReturnAmount); } function changeSellGenesPrice(uint256 _popId, uint256 _newSellingValue) public whenNotPaused{ require(_newSellingValue < MAX_SELLING_PRICE); require(_newSellingValue > 0); uint256 geneSaleID = _itemID2geneSaleID[_popId]; require(geneSaleID != 0); GeneForSale storage gene = _genesForSaleArray[geneSaleID]; require(msg.sender == gene.currentOwner); require(gene.sellingPrice != 0); gene.sellingPrice = _newSellingValue; emit GenesChangedPrice(msg.sender, _popId, _newSellingValue); } function _takeOwnershipOfTokenFrom(uint256 _popId, address previousOwner) internal { nonFungibleContract.transferFrom(previousOwner,this,_popId); } } contract REPOPCore is REPOPERC721, MoneyManager{ uint256 public refresherFee = 0.01 ether; AuctionManager public auctionManager; MarketManager public marketManager; GenesMarket public genesMarket; CloningInterface public geneScience; event CloneWithTwoPops(address creator, uint256 cloneId, uint256 aParentId, uint256 bParentId); event CloneWithPopAndBottle(address creator, uint256 cloneId, uint256 popId, uint256 bottleId); event SellingPop(address seller, uint256 popId, uint256 price); event SellingGenes(address seller, uint256 popId, uint256 price); event ChangedPopName(address owner, uint256 popId, bytes32 newName); event CooldownRemoval(uint256 popId, address owner, uint256 paidFee); function REPOPCore() public{ ceoAddress = msg.sender; cooAddress = msg.sender; cfoAddress = msg.sender; createNewPop(0x0, "Satoshi Nakamoto"); } function createNewAuction(uint256 _itemForAuctionID, uint256 _auctionDurationSeconds) public onlyCLevel{ approve(address(auctionManager),_itemForAuctionID); auctionManager.createAuction(_itemForAuctionID,_auctionDurationSeconds,msg.sender); } function setAuctionManagerAddress(address _address) external onlyCEO { AuctionManager candidateContract = AuctionManager(_address); require(candidateContract.isAuctionManager()); auctionManager = candidateContract; } function getAuctionManagerAddress() public view returns (address) { return address(auctionManager); } function setMarketManagerAddress(address _address) external onlyCEO { MarketManager candidateContract = MarketManager(_address); require(candidateContract.isMarketManager()); marketManager = candidateContract; } function getMarketManagerAddress() public view returns (address) { return address(marketManager); } function setGeneScienceAddress(address _address) external onlyCEO { CloningInterface candidateContract = CloningInterface(_address); require(candidateContract.isGeneScience()); geneScience = candidateContract; } function getGeneScienceAddress() public view returns (address) { return address(geneScience); } function setGenesMarketAddress(address _address) external onlyCEO { GenesMarket candidateContract = GenesMarket(_address); require(candidateContract.isGenesMarket()); genesMarket = candidateContract; } function getGenesMarketAddress() public view returns (address) { return address(genesMarket); } function sellPop(uint256 _popId, uint256 _price) public { Pop storage pop = pops[_popId]; require(pop.cooldownEndTimestamp <= now); approve(address(marketManager),_popId); marketManager.sellPop(msg.sender,_popId,_price); emit SellingPop(msg.sender, _popId, _price); } function sellGenes(uint256 _popId, uint256 _price) public { require(_popId > 0); approve(address(genesMarket),_popId); genesMarket.startSellingGenes(_popId,_price,msg.sender); emit SellingGenes(msg.sender, _popId, _price); } function getOwnerInAnyPlatformById(uint256 popId) public view returns (address){ if(ownerOf(popId) == address(marketManager)){ return marketManager.sellerOf(popId); } else if(ownerOf(popId) == address(genesMarket)){ return genesMarket.sellerOf(popId); } else if(ownerOf(popId) == address(auctionManager)){ return ceoAddress; } else{ return ownerOf(popId); } return 0x0; } function setPopName(uint256 popId, string newName) external { require(_ownerOfPopInAnyPlatform(popId)); Pop storage pop = pops[popId]; require(pop.generation > 0); bytes32 name32 = stringToBytes32(newName); pop.popName = name32; emit ChangedPopName(msg.sender, popId, name32); } function removeCooldown(uint256 popId) external payable { require(_ownerOfPopInAnyPlatform(popId)); require(msg.value >= refresherFee); Pop storage pop = pops[popId]; pop.cooldownEndTimestamp = 1; emit CooldownRemoval(popId, msg.sender, refresherFee); } function _ownerOfPopInAnyPlatform(uint _popId) internal view returns (bool) { return ownerOf(_popId) == msg.sender || genesMarket.sellerOf(_popId) == msg.sender || marketManager.sellerOf(_popId) == msg.sender; } function getOwnershipForCloning(uint _popId) internal view returns (bool) { return ownerOf(_popId) == msg.sender || genesMarket.sellerOf(_popId) == msg.sender; } function changeRefresherFee(uint256 _newFee) public onlyCLevel{ refresherFee = _newFee; } function cloneWithTwoPops(uint256 _aParentId, uint256 _bParentId) external whenNotPaused returns (uint256) { require(_aParentId > 0); require(_bParentId > 0); require(getOwnershipForCloning(_aParentId)); require(getOwnershipForCloning(_bParentId)); Pop storage aParent = pops[_aParentId]; Pop storage bParent = pops[_bParentId]; require(aParent.genes != bParent.genes); require(aParent.cooldownEndTimestamp <= now); require(bParent.cooldownEndTimestamp <= now); uint16 parentGen = aParent.generation; if (bParent.generation > aParent.generation) { parentGen = bParent.generation; } uint16 cooldownIndex = parentGen + 1; if (cooldownIndex > 13) { cooldownIndex = 13; } uint256 childGenes = geneScience.mixGenes(aParent.genes, bParent.genes); _triggerCooldown(aParent); _triggerCooldown(bParent); uint256 index = pops.push(Pop(childGenes,uint64(now), 1, uint32(_aParentId), uint32(_bParentId), 0, cooldownIndex, parentGen + 1)) -1; popIndexToOwner[index] = msg.sender; ownershipTokenCount[msg.sender] = ownershipTokenCount[msg.sender]+1; emit CloneWithTwoPops(msg.sender, index, _aParentId, _bParentId); emit Birth(msg.sender, index, _aParentId, _bParentId,childGenes); return index; } function cloneWithPopAndBottle(uint256 _aParentId, uint256 _bParentId_bottle) external whenNotPaused returns (uint256) { require(_aParentId > 0); require(getOwnershipForCloning(_aParentId)); Pop storage aParent = pops[_aParentId]; Pop memory bParent = pops[_bParentId_bottle]; require(aParent.genes != bParent.genes); require(aParent.cooldownEndTimestamp <= now); uint16 parentGen = aParent.generation; if (bParent.generation > aParent.generation) { parentGen = bParent.generation; } uint16 cooldownIndex = parentGen + 1; if (cooldownIndex > 13) { cooldownIndex = 13; } genesMarket.useBottle(msg.sender, _bParentId_bottle); uint256 childGenes = geneScience.mixGenes(aParent.genes, bParent.genes); _triggerCooldown(aParent); uint256 index = pops.push(Pop(childGenes,uint64(now), 1, uint32(_aParentId), uint32(_bParentId_bottle), 0, cooldownIndex, parentGen + 1)) -1; popIndexToOwner[index] = msg.sender; ownershipTokenCount[msg.sender] = ownershipTokenCount[msg.sender]+1; emit CloneWithPopAndBottle(msg.sender, index, _aParentId, _bParentId_bottle); emit Birth(msg.sender, index, _aParentId, _bParentId_bottle, childGenes); return index; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"genesToTokenId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"popId","type":"uint256"},{"name":"newName","type":"string"}],"name":"setPopNameOriginal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"genes","type":"uint256"},{"name":"popName","type":"string"}],"name":"createNewPop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_popId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"sellGenes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGenesMarketAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_popId","type":"uint256"}],"name":"getPop","outputs":[{"name":"isReady","type":"bool"},{"name":"genes","type":"uint256"},{"name":"birthTime","type":"uint64"},{"name":"cooldownEndTimestamp","type":"uint64"},{"name":"aParentId","type":"uint32"},{"name":"bParentId","type":"uint32"},{"name":"popName","type":"bytes32"},{"name":"cooldownIndex","type":"uint16"},{"name":"generation","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMarketManagerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGeneScienceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"popId","type":"uint256"}],"name":"getOwnerInAnyPlatformById","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"metadataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"popId","type":"uint256"},{"name":"newName","type":"string"}],"name":"setPopName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"marketManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contractAddress","type":"address"}],"name":"setMetadataContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"genesMarket","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_popId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"sellPop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawPayments","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"popIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenMetadata","outputs":[{"name":"infoUrl","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGenesMarketAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setMarketManagerAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"popId","type":"uint256"}],"name":"removeCooldown","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_aParentId","type":"uint256"},{"name":"_bParentId","type":"uint256"}],"name":"cloneWithTwoPops","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"popId","type":"uint256"},{"name":"newDna","type":"uint256"}],"name":"setDNA","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cooldowns","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"popIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_aParentId","type":"uint256"},{"name":"_bParentId_bottle","type":"uint256"}],"name":"cloneWithPopAndBottle","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"auctionManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refresherFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newFee","type":"uint256"}],"name":"changeRefresherFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setAuctionManagerAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ownershipTokenCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"pops","outputs":[{"name":"genes","type":"uint256"},{"name":"birthTime","type":"uint64"},{"name":"cooldownEndTimestamp","type":"uint64"},{"name":"aParentId","type":"uint32"},{"name":"bParentId","type":"uint32"},{"name":"popName","type":"bytes32"},{"name":"cooldownIndex","type":"uint16"},{"name":"generation","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemForAuctionID","type":"uint256"},{"name":"_auctionDurationSeconds","type":"uint256"}],"name":"createNewAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAuctionManagerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGeneScienceAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"geneScience","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"creator","type":"address"},{"indexed":false,"name":"cloneId","type":"uint256"},{"indexed":false,"name":"aParentId","type":"uint256"},{"indexed":false,"name":"bParentId","type":"uint256"}],"name":"CloneWithTwoPops","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"creator","type":"address"},{"indexed":false,"name":"cloneId","type":"uint256"},{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"bottleId","type":"uint256"}],"name":"CloneWithPopAndBottle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"seller","type":"address"},{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"SellingPop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"seller","type":"address"},{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"SellingGenes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"newName","type":"bytes32"}],"name":"ChangedPopName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"paidFee","type":"uint256"}],"name":"CooldownRemoval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"aParentId","type":"uint256"},{"indexed":false,"name":"bParentId","type":"uint256"},{"indexed":false,"name":"genes","type":"uint256"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
6003805460a060020a60ff021916905561024060405261025860809081526104b060a05261096060c052610e1060e052611c2061010052612a306101205261384061014052614650610160526154606101805261a8c06101a052620151806101c0526203f4806101e052620697806102005262093a80610220526200008990600590600e62000443565b50662386f26fc10000600c55348015620000a257600080fd5b5060018054600160a060020a033316600160a060020a031991821681179092556003805482168317905560028054909116909117905560408051808201909152601081527f5361746f736869204e616b616d6f746f000000000000000000000000000000006020820152620001239060009064010000000062000129810204565b6200050d565b600354600090819033600160a060020a03908116911614806200015a575060015433600160a060020a039081169116145b8062000174575060025433600160a060020a039081169116145b15156200018057600080fd5b60035474010000000000000000000000000000000000000000900460ff1615620001a957600080fd5b620001bd836401000000006200041d810204565b91506001600761010060405190810160405280878152602001426001604060020a0316815260200160016001604060020a03168152602001600063ffffffff168152602001600063ffffffff16815260200185600019168152602001600061ffff168152602001600061ffff16815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010160006101000a8154816001604060020a0302191690836001604060020a0316021790555060408201518160010160086101000a8154816001604060020a0302191690836001604060020a0316021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816002019060001916905560c08201518160030160006101000a81548161ffff021916908361ffff16021790555060e08201518160030160026101000a81548161ffff021916908361ffff16021790555050500390507f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad53382600080886040518086600160a060020a0316600160a060020a031681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a16000938452600b60209081526040808620839055918552600881528185208054600160a060020a03191633600160a060020a0316908117909155855260099052909220805460010190555050565b8051600090829015156200043557600091506200043d565b602083015191505b50919050565b600283019183908215620004d45791602002820160005b83821115620004a057835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200045a565b8015620004d25782816101000a81549063ffffffff0219169055600401602081600301049283019260010302620004a0565b505b50620004e2929150620004e6565b5090565b6200050a91905b80821115620004e257805463ffffffff19168155600101620004ed565b90565b613545806200051d6000396000f3006080604052600436106102b05763ffffffff60e060020a60003504166301b0c6e081146102b557806301ffc9a7146102df5780630479fcd01461032a5780630519ce791461035057806306fdde03146103815780630762c3171461040b578063095ea7b31461046957806309b70ad01461048d5780630a0f8168146104a85780631051db34146104bd57806312065fe0146104d257806318160ddd146104e757806319b466fa146104fc5780631d862a811461051d57806323b872dd14610596578063242db433146105c057806324e7a38a146105d557806327d7874c146105f65780632ba73c15146106175780632e1a7d4d1461063857806332be9502146106505780633520982114610668578063386e0d751461067d5780633f4ba83a146106a157806341ed2c12146106b65780634d74d3b4146106cb5780634ddad616146106ec5780634e0a3379146107015780635422cf34146107225780635c975abb1461073d5780636103d70b146107525780636352211e14610767578063672498541461077f5780636914db601461079757806370a08231146107af5780637d236928146107d0578063822f005a146107e55780638456cb59146108065780638462151c1461081b5780638a6508ce1461088c57806395d89b4114610897578063966588d4146108ac578063983a7f47146108c75780639d6fac6f146108e25780639eeab9c714610913578063a9059cbb1461092b578063aa056d2a1461094f578063b0192f9a1461096a578063b047fb501461097f578063b07741fd14610994578063b2e6ceeb146109a9578063c0f4f41e146109c1578063cd7dc52d146109d9578063cec21acb146109fa578063e2982c2114610a1b578063eb28a51514610a3c578063ee7e203914610ab2578063ef98dea314610acd578063f129c5d714610ae2578063f2b47d5214610af7575b600080fd5b3480156102c157600080fd5b506102cd600435610b0c565b60408051918252519081900360200190f35b3480156102eb57600080fd5b506103167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516610b1e565b604080519115158252519081900360200190f35b34801561033657600080fd5b5061034e600480359060248035908101910135610db3565b005b34801561035c57600080fd5b50610365610e89565b60408051600160a060020a039092168252519081900360200190f35b34801561038d57600080fd5b50610396610e98565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d05781810151838201526020016103b8565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261034e958335953695604494919390910191908190840183828082843750949750610ecf9650505050505050565b34801561047557600080fd5b5061034e600160a060020a03600435166024356111a9565b34801561049957600080fd5b5061034e60043560243561123e565b3480156104b457600080fd5b5061036561133c565b3480156104c957600080fd5b5061031661134b565b3480156104de57600080fd5b506102cd611350565b3480156104f357600080fd5b506102cd61135e565b34801561050857600080fd5b5061034e600160a060020a0360043516611364565b34801561052957600080fd5b5061053560043561141d565b604080519915158a5260208a019890985267ffffffffffffffff9687168989015294909516606088015263ffffffff9283166080880152911660a086015260c085015261ffff91821660e08501521661010083015251908190036101200190f35b3480156105a257600080fd5b5061034e600160a060020a03600435811690602435166044356115c7565b3480156105cc57600080fd5b50610365611675565b3480156105e157600080fd5b5061034e600160a060020a0360043516611684565b34801561060257600080fd5b5061034e600160a060020a036004351661173d565b34801561062357600080fd5b5061034e600160a060020a036004351661178f565b34801561064457600080fd5b5061034e6004356117e1565b34801561065c57600080fd5b50610365600435611850565b34801561067457600080fd5b506103656119b6565b34801561068957600080fd5b5061034e6004803590602480359081019101356119c5565b3480156106ad57600080fd5b5061034e611aaa565b3480156106c257600080fd5b50610365611afd565b3480156106d757600080fd5b5061034e600160a060020a0360043516611b0c565b3480156106f857600080fd5b50610365611b5e565b34801561070d57600080fd5b5061034e600160a060020a0360043516611b6d565b34801561072e57600080fd5b5061034e600435602435611bbf565b34801561074957600080fd5b50610316611d03565b34801561075e57600080fd5b5061034e611d13565b34801561077357600080fd5b50610365600435611d71565b34801561078b57600080fd5b50610365600435611d95565b3480156107a357600080fd5b50610396600435611db0565b3480156107bb57600080fd5b506102cd600160a060020a0360043516611eda565b3480156107dc57600080fd5b50610365611ef5565b3480156107f157600080fd5b5061034e600160a060020a0360043516611f04565b34801561081257600080fd5b5061034e611fbd565b34801561082757600080fd5b5061083c600160a060020a0360043516612049565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610878578181015183820152602001610860565b505050509050019250505060405180910390f35b61034e60043561211b565b3480156108a357600080fd5b506103966121da565b3480156108b857600080fd5b506102cd600435602435612211565b3480156108d357600080fd5b5061034e600435602435612717565b3480156108ee57600080fd5b506108fa6004356127a4565b6040805163ffffffff9092168252519081900360200190f35b34801561091f57600080fd5b506103656004356127d1565b34801561093757600080fd5b5061034e600160a060020a03600435166024356127ec565b34801561095b57600080fd5b506102cd600435602435612884565b34801561097657600080fd5b50610365612e4b565b34801561098b57600080fd5b50610365612e5a565b3480156109a057600080fd5b506102cd612e69565b3480156109b557600080fd5b5061034e600435612e6f565b3480156109cd57600080fd5b5061034e600435612f02565b3480156109e557600080fd5b5061034e600160a060020a0360043516612f56565b348015610a0657600080fd5b506102cd600160a060020a036004351661300f565b348015610a2757600080fd5b506102cd600160a060020a0360043516613021565b348015610a4857600080fd5b50610a54600435613033565b6040805198895267ffffffffffffffff97881660208a0152959096168786015263ffffffff938416606088015291909216608086015260a085019190915261ffff90811660c08501529190911660e083015251908190036101000190f35b348015610abe57600080fd5b5061034e6004356024356130ba565b348015610ad957600080fd5b506103656131b0565b348015610aee57600080fd5b506103656131bf565b348015610b0357600080fd5b506103656131ce565b600b6020526000908152604090205481565b604080517f737570706f727473496e74657266616365286279746573342900000000000000815290519081900360190190206000907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1983811691161480610dab5750604080517f746f6b656e4d657461646174612875696e7432353629000000000000000000008152815190819003601690810182207f746f6b656e734f664f776e657228616464726573732900000000000000000000835283519283900390910182207f7472616e7366657246726f6d28616464726573732c616464726573732c75696e83527f7432353629000000000000000000000000000000000000000000000000000000602084015283519283900360250183207f7472616e7366657228616464726573732c75696e743235362900000000000000845284519384900360190184207f617070726f766528616464726573732c75696e74323536290000000000000000855285519485900360180185207f6f776e65724f662875696e743235362900000000000000000000000000000000865286519586900360100186207f62616c616e63654f662861646472657373290000000000000000000000000000875287519687900360120187207f746f74616c537570706c792829000000000000000000000000000000000000008852885197889003600d0188207f73796d626f6c2829000000000000000000000000000000000000000000000000895289519889900360080189207f6e616d65282900000000000000000000000000000000000000000000000000008a529951988990036006019098207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff198c811691909a189098181818181818181891909116145b90505b919050565b600354600090819033600160a060020a0390811691161480610de3575060015433600160a060020a039081169116145b80610dfc575060025433600160a060020a039081169116145b1515610e0757600080fd5b6007805486908110610e1557fe5b60009182526020909120600490910201600381015490925062010000900461ffff1615610e4157600080fd5b610e7a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437506131dd945050505050565b60029092019190915550505050565b600254600160a060020a031681565b60408051808201909152600b81527f5245504f5020574f524c44000000000000000000000000000000000000000000602082015281565b600354600090819033600160a060020a0390811691161480610eff575060015433600160a060020a039081169116145b80610f18575060025433600160a060020a039081169116145b1515610f2357600080fd5b60035460a060020a900460ff1615610f3a57600080fd5b610f43836131dd565b915060016007610100604051908101604052808781526020014267ffffffffffffffff168152602001600167ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff16815260200185600019168152602001600061ffff168152602001600061ffff16815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816002019060001916905560c08201518160030160006101000a81548161ffff021916908361ffff16021790555060e08201518160030160026101000a81548161ffff021916908361ffff16021790555050500390507f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad53382600080886040518086600160a060020a0316600160a060020a031681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a16000938452600b60209081526040808620839055918552600881528185208054600160a060020a03191633600160a060020a0316908117909155855260099052909220805460010190555050565b60035460a060020a900460ff16156111c057600080fd5b6111ca3382613201565b15156111d557600080fd5b6000818152600a60209081526040918290208054600160a060020a031916600160a060020a0386811691821790925583518581529351909333909216927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35050565b6000821161124b57600080fd5b600f5461126190600160a060020a0316836111a9565b600f54604080517f7c37605c0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052600160a060020a03338116604483015291519190921691637c37605c91606480830192600092919082900301818387803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810186905280820185905290517f2acb6fff53b285dad2e80f11ca04ecc39506a3f0da4962f82a57bf06cf9c0c1c9350908190036060019150a15050565b600154600160a060020a031681565b600190565b600160a060020a0330163190565b60075490565b60015460009033600160a060020a0390811691161461138257600080fd5b81905080600160a060020a03166373a699ad6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b505050506040513d60208110156113ed57600080fd5b505115156113fa57600080fd5b600f8054600160a060020a031916600160a060020a039290921691909117905550565b60008060008060008060008060006114336134d5565b600780548c90811061144157fe5b90600052602060002090600402016101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154600019166000191681526020016003820160009054906101000a900461ffff1661ffff1661ffff1681526020016003820160029054906101000a900461ffff1661ffff1661ffff1681525050905042816040015167ffffffffffffffff161115995089816000015182602001518360400151846060015185608001518660a001518760c001518860e00151995099509950995099509950995099509950509193959799909294969850565b60035460a060020a900460ff16156115de57600080fd5b6115e88382613201565b15156115f357600080fd5b6115fd3382613221565b151561160857600080fd5b61161182613241565b151561161c57600080fd5b611626828261324f565b60408051600160a060020a0380861682528416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b600e54600160a060020a031690565b60015460009033600160a060020a039081169116146116a257600080fd5b81905080600160a060020a03166354c15b826040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156116e357600080fd5b505af11580156116f7573d6000803e3d6000fd5b505050506040513d602081101561170d57600080fd5b5051151561171a57600080fd5b60108054600160a060020a031916600160a060020a039290921691909117905550565b60015433600160a060020a0390811691161461175857600080fd5b600160a060020a038116151561176d57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146117aa57600080fd5b600160a060020a03811615156117bf57600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b60025433600160a060020a039081169116146117fc57600080fd5b600160a060020a03301631811061181257600080fd5b600254604051600160a060020a039091169082156108fc029083906000818181858888f1935050505015801561184c573d6000803e3d6000fd5b5050565b600e54600090600160a060020a031661186883611d71565b600160a060020a031614156118fb57600e546040805160e060020a63e05c5a83028152600481018590529051600160a060020a039092169163e05c5a83916024808201926020929091908290030181600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b505050506040513d60208110156118f257600080fd5b50519050610dae565b600f54600160a060020a031661191083611d71565b600160a060020a0316141561197057600f546040805160e060020a63e05c5a83028152600481018590529051600160a060020a039092169163e05c5a83916024808201926020929091908290030181600087803b1580156118c857600080fd5b600d54600160a060020a031661198583611d71565b600160a060020a031614156119a65750600154600160a060020a0316610dae565b6119af82611d71565b9050610dae565b600454600160a060020a031681565b6000806119d1856132b5565b15156119dc57600080fd5b60078054869081106119ea57fe5b60009182526020822060049190910201600381015490935062010000900461ffff1611611a1657600080fd5b611a4f84848080601f016020809104026020016040519081016040528093929190818152602001838380828437506131dd945050505050565b6002830181905560408051600160a060020a03331681526020810188905280820183905290519192507f12816a0444091c736dc43fb9055af6aae4dced18627ba52aa7708eecff824005919081900360600190a15050505050565b60015433600160a060020a03908116911614611ac557600080fd5b60035460a060020a900460ff161515611add57600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b600e54600160a060020a031681565b60015433600160a060020a03908116911614611b2757600080fd5b600160a060020a0381161515611b3c57600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b600f54600160a060020a031681565b60015433600160a060020a03908116911614611b8857600080fd5b600160a060020a0381161515611b9d57600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b6000600783815481101515611bd057fe5b90600052602060002090600402019050428160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151515611c1157600080fd5b600e54611c2790600160a060020a0316846111a9565b600e54604080517f2e3cbb3b000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018790526044820186905291519190921691632e3cbb3b91606480830192600092919082900301818387803b158015611c9c57600080fd5b505af1158015611cb0573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810187905280820186905290517fbaba636376a020113de783bc39a253b720f825712c73bca7bc823142ea391d8b9350908190036060019150a1505050565b60035460a060020a900460ff1681565b600160a060020a033316600081815260208190526040808220805490839055905190929183156108fc02918491818181858888f193505050501515611d6e57600160a060020a03331660009081526020819052604090208190555b50565b600081815260086020526040902054600160a060020a0316801515610dae57600080fd5b600860205260009081526040902054600160a060020a031681565b600454606090600160a060020a03161515611dca57600080fd5b60008210158015611ddd57506007548211155b1515611de857600080fd5b60048054604080517f2f7b367700000000000000000000000000000000000000000000000000000000815292830185905251600160a060020a0390911691632f7b367791602480830192600092919082900301818387803b158015611e4c57600080fd5b505af1158015611e60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611e8957600080fd5b810190808051640100000000811115611ea157600080fd5b82016020810184811115611eb457600080fd5b8151640100000000811182820187101715611ece57600080fd5b50909695505050505050565b600160a060020a031660009081526009602052604090205490565b600f54600160a060020a031690565b60015460009033600160a060020a03908116911614611f2257600080fd5b81905080600160a060020a0316633eebc5896040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b505050506040513d6020811015611f8d57600080fd5b50511515611f9a57600080fd5b600e8054600160a060020a031916600160a060020a039290921691909117905550565b60035433600160a060020a0390811691161480611fe8575060015433600160a060020a039081169116145b80612001575060025433600160a060020a039081169116145b151561200c57600080fd5b60035460a060020a900460ff161561202357600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b606060006060600080600061205d87611eda565b945084151561207c576040805160008152602081019091529550612111565b846040519080825280602002602001820160405280156120a6578160200160208202803883390190505b5093506120b161135e565b925060009150600190505b82811161210d57600081815260086020526040902054600160a060020a0388811691161415612105578084838151811015156120f457fe5b602090810290910101526001909101905b6001016120bc565b8395505b5050505050919050565b6000612126826132b5565b151561213157600080fd5b600c5434101561214057600080fd5b600780548390811061214e57fe5b6000918252602091829020600160049092020190810180546fffffffffffffffff0000000000000000191668010000000000000000179055600c5460408051868152600160a060020a0333169481019490945283810191909152519092507f9d8c702c4edf3197c01314ac15165f0bd401460586b7bb489d4adeafd1ce48cd9181900360600190a15050565b60408051808201909152600381527f504f500000000000000000000000000000000000000000000000000000000000602082015281565b6000806000806000806000600360149054906101000a900460ff1615151561223857600080fd5b6000891161224557600080fd5b6000881161225257600080fd5b61225b896133f7565b151561226657600080fd5b61226f886133f7565b151561227a57600080fd5b600780548a90811061228857fe5b906000526020600020906004020195506007888154811015156122a757fe5b600091825260209091206004909102018054875491965014156122c957600080fd5b6001860154426801000000000000000090910467ffffffffffffffff1611156122f157600080fd5b6001850154426801000000000000000090910467ffffffffffffffff16111561231957600080fd5b6003808701549086015461ffff6201000092839004811696509190041684101561234f57600385015462010000900461ffff1693505b836001019250600d8361ffff16111561236757600d92505b60105486548654604080517f8d8b1b880000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915251600160a060020a0390921691638d8b1b88916044808201926020929091908290030181600087803b1580156123da57600080fd5b505af11580156123ee573d6000803e3d6000fd5b505050506040513d602081101561240457600080fd5b505191506124118661346e565b61241a8561346e565b60016007610100604051908101604052808581526020014267ffffffffffffffff168152602001600167ffffffffffffffff1681526020018c63ffffffff1681526020018b63ffffffff16815260200160006001026000191681526020018661ffff1681526020018760010161ffff16815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816002019060001916905560c08201518160030160006101000a81548161ffff021916908361ffff16021790555060e08201518160030160026101000a81548161ffff021916908361ffff1602179055505050039050336008600083815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506009600033600160a060020a0316600160a060020a03168152602001908152602001600020546001016009600033600160a060020a0316600160a060020a03168152602001908152602001600020819055507f3f6242f41be9e68b16f202159c05c0763a0092812f68b90f1fd4db6fc21276b733828b8b6040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a160408051600160a060020a0333168152602081018390528082018b9052606081018a90526080810184905290517f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad59181900360a00190a198975050505050505050565b60035460009033600160a060020a0390811691161480612745575060015433600160a060020a039081169116145b8061275e575060025433600160a060020a039081169116145b151561276957600080fd5b6127733384613201565b151561277e57600080fd5b600780548490811061278c57fe5b60009182526020909120600490910201919091555050565b600581600e81106127b157fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b600a60205260009081526040902054600160a060020a031681565b60035460a060020a900460ff161561280357600080fd5b61280d3382613201565b151561281857600080fd5b61282182613241565b151561282c57600080fd5b612836828261324f565b60408051600160a060020a0333811682528416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a15050565b60008061288f6134d5565b60035460009081908190819060a060020a900460ff16156128af57600080fd5b600089116128bc57600080fd5b6128c5896133f7565b15156128d057600080fd5b600780548a9081106128de57fe5b906000526020600020906004020195506007888154811015156128fd57fe5b6000918252602091829020604080516101008101825260049093029091018054808452600182015467ffffffffffffffff808216968601969096526801000000000000000081049095169284019290925263ffffffff70010000000000000000000000000000000085048116606085015260a060020a9094049093166080830152600283015460a083015260039092015461ffff80821660c0840152620100009091041660e0820152875490965014156129b657600080fd5b6001860154426801000000000000000090910467ffffffffffffffff1611156129de57600080fd5b600386015460e086015161ffff620100009092048216955016841015612a06578460e0015193505b836001019250600d8361ffff161115612a1e57600d92505b600f54604080517f61b9c6a3000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018c9052915191909216916361b9c6a391604480830192600092919082900301818387803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b505060105488548851604080517f8d8b1b880000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915251600160a060020a039092169350638d8b1b8892506044808201926020929091908290030181600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b505050506040513d6020811015612b4157600080fd5b50519150612b4e8661346e565b60016007610100604051908101604052808581526020014267ffffffffffffffff168152602001600167ffffffffffffffff1681526020018c63ffffffff1681526020018b63ffffffff16815260200160006001026000191681526020018661ffff1681526020018760010161ffff16815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816002019060001916905560c08201518160030160006101000a81548161ffff021916908361ffff16021790555060e08201518160030160026101000a81548161ffff021916908361ffff1602179055505050039050336008600083815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506009600033600160a060020a0316600160a060020a03168152602001908152602001600020546001016009600033600160a060020a0316600160a060020a03168152602001908152602001600020819055507f730e62690575eb5131bd693bc715b6d16db550a3e496a9635c158817e644c37f33828b8b6040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a160408051600160a060020a0333168152602081018390528082018b9052606081018a90526080810184905290517f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad59181900360a00190a198975050505050505050565b600d54600160a060020a031681565b600354600160a060020a031681565b600c5481565b600080612e7b83611d71565b9150339050612e8981613241565b1515612e9457600080fd5b612e9e8184613221565b1515612ea957600080fd5b612eb3818461324f565b60408051600160a060020a0380851682528316602082015280820185905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b60035433600160a060020a0390811691161480612f2d575060015433600160a060020a039081169116145b80612f46575060025433600160a060020a039081169116145b1515612f5157600080fd5b600c55565b60015460009033600160a060020a03908116911614612f7457600080fd5b81905080600160a060020a03166309c38bc86040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612fb557600080fd5b505af1158015612fc9573d6000803e3d6000fd5b505050506040513d6020811015612fdf57600080fd5b50511515612fec57600080fd5b600d8054600160a060020a031916600160a060020a039290921691909117905550565b60096020526000908152604090205481565b60006020819052908152604090205481565b600780548290811061304157fe5b6000918252602090912060049091020180546001820154600283015460039093015491935067ffffffffffffffff808216936801000000000000000083049091169263ffffffff700100000000000000000000000000000000840481169360a060020a900416919061ffff808216916201000090041688565b60035433600160a060020a03908116911614806130e5575060015433600160a060020a039081169116145b806130fe575060025433600160a060020a039081169116145b151561310957600080fd5b600d5461311f90600160a060020a0316836111a9565b600d54604080517f54279bdd0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052600160a060020a033381166044830152915191909216916354279bdd91606480830192600092919082900301818387803b15801561319457600080fd5b505af11580156131a8573d6000803e3d6000fd5b505050505050565b600d54600160a060020a031690565b601054600160a060020a031690565b601054600160a060020a031681565b8051600090829015156131f357600091506131fb565b602083015191505b50919050565b600090815260086020526040902054600160a060020a0390811691161490565b6000908152600a6020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b60008181526008602090815260408083208054600160a060020a03908116855260098085528386208054600019019055958552600a84528285208054600160a060020a031990811690915582541696169586179055938252919091522080546001019055565b600033600160a060020a03166132ca83611d71565b600160a060020a031614806133635750600f546040805160e060020a63e05c5a83028152600481018590529051600160a060020a0333811693169163e05c5a839160248083019260209291908290030181600087803b15801561332c57600080fd5b505af1158015613340573d6000803e3d6000fd5b505050506040513d602081101561335657600080fd5b5051600160a060020a0316145b80610dab5750600e546040805160e060020a63e05c5a83028152600481018590529051600160a060020a0333811693169163e05c5a839160248083019260209291908290030181600087803b1580156133bb57600080fd5b505af11580156133cf573d6000803e3d6000fd5b505050506040513d60208110156133e557600080fd5b5051600160a060020a03161492915050565b600033600160a060020a031661340c83611d71565b600160a060020a03161480610dab5750600f546040805160e060020a63e05c5a83028152600481018590529051600160a060020a0333811693169163e05c5a839160248083019260209291908290030181600087803b1580156133bb57600080fd5b600381015460059061ffff16600e811061348457fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1642018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152905600a165627a7a723058203e4e0de87e725e99863b20fd137393b3a06ac774415c60ee3f2bfd778c13857e0029
Deployed Bytecode
0x6080604052600436106102b05763ffffffff60e060020a60003504166301b0c6e081146102b557806301ffc9a7146102df5780630479fcd01461032a5780630519ce791461035057806306fdde03146103815780630762c3171461040b578063095ea7b31461046957806309b70ad01461048d5780630a0f8168146104a85780631051db34146104bd57806312065fe0146104d257806318160ddd146104e757806319b466fa146104fc5780631d862a811461051d57806323b872dd14610596578063242db433146105c057806324e7a38a146105d557806327d7874c146105f65780632ba73c15146106175780632e1a7d4d1461063857806332be9502146106505780633520982114610668578063386e0d751461067d5780633f4ba83a146106a157806341ed2c12146106b65780634d74d3b4146106cb5780634ddad616146106ec5780634e0a3379146107015780635422cf34146107225780635c975abb1461073d5780636103d70b146107525780636352211e14610767578063672498541461077f5780636914db601461079757806370a08231146107af5780637d236928146107d0578063822f005a146107e55780638456cb59146108065780638462151c1461081b5780638a6508ce1461088c57806395d89b4114610897578063966588d4146108ac578063983a7f47146108c75780639d6fac6f146108e25780639eeab9c714610913578063a9059cbb1461092b578063aa056d2a1461094f578063b0192f9a1461096a578063b047fb501461097f578063b07741fd14610994578063b2e6ceeb146109a9578063c0f4f41e146109c1578063cd7dc52d146109d9578063cec21acb146109fa578063e2982c2114610a1b578063eb28a51514610a3c578063ee7e203914610ab2578063ef98dea314610acd578063f129c5d714610ae2578063f2b47d5214610af7575b600080fd5b3480156102c157600080fd5b506102cd600435610b0c565b60408051918252519081900360200190f35b3480156102eb57600080fd5b506103167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516610b1e565b604080519115158252519081900360200190f35b34801561033657600080fd5b5061034e600480359060248035908101910135610db3565b005b34801561035c57600080fd5b50610365610e89565b60408051600160a060020a039092168252519081900360200190f35b34801561038d57600080fd5b50610396610e98565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d05781810151838201526020016103b8565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261034e958335953695604494919390910191908190840183828082843750949750610ecf9650505050505050565b34801561047557600080fd5b5061034e600160a060020a03600435166024356111a9565b34801561049957600080fd5b5061034e60043560243561123e565b3480156104b457600080fd5b5061036561133c565b3480156104c957600080fd5b5061031661134b565b3480156104de57600080fd5b506102cd611350565b3480156104f357600080fd5b506102cd61135e565b34801561050857600080fd5b5061034e600160a060020a0360043516611364565b34801561052957600080fd5b5061053560043561141d565b604080519915158a5260208a019890985267ffffffffffffffff9687168989015294909516606088015263ffffffff9283166080880152911660a086015260c085015261ffff91821660e08501521661010083015251908190036101200190f35b3480156105a257600080fd5b5061034e600160a060020a03600435811690602435166044356115c7565b3480156105cc57600080fd5b50610365611675565b3480156105e157600080fd5b5061034e600160a060020a0360043516611684565b34801561060257600080fd5b5061034e600160a060020a036004351661173d565b34801561062357600080fd5b5061034e600160a060020a036004351661178f565b34801561064457600080fd5b5061034e6004356117e1565b34801561065c57600080fd5b50610365600435611850565b34801561067457600080fd5b506103656119b6565b34801561068957600080fd5b5061034e6004803590602480359081019101356119c5565b3480156106ad57600080fd5b5061034e611aaa565b3480156106c257600080fd5b50610365611afd565b3480156106d757600080fd5b5061034e600160a060020a0360043516611b0c565b3480156106f857600080fd5b50610365611b5e565b34801561070d57600080fd5b5061034e600160a060020a0360043516611b6d565b34801561072e57600080fd5b5061034e600435602435611bbf565b34801561074957600080fd5b50610316611d03565b34801561075e57600080fd5b5061034e611d13565b34801561077357600080fd5b50610365600435611d71565b34801561078b57600080fd5b50610365600435611d95565b3480156107a357600080fd5b50610396600435611db0565b3480156107bb57600080fd5b506102cd600160a060020a0360043516611eda565b3480156107dc57600080fd5b50610365611ef5565b3480156107f157600080fd5b5061034e600160a060020a0360043516611f04565b34801561081257600080fd5b5061034e611fbd565b34801561082757600080fd5b5061083c600160a060020a0360043516612049565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610878578181015183820152602001610860565b505050509050019250505060405180910390f35b61034e60043561211b565b3480156108a357600080fd5b506103966121da565b3480156108b857600080fd5b506102cd600435602435612211565b3480156108d357600080fd5b5061034e600435602435612717565b3480156108ee57600080fd5b506108fa6004356127a4565b6040805163ffffffff9092168252519081900360200190f35b34801561091f57600080fd5b506103656004356127d1565b34801561093757600080fd5b5061034e600160a060020a03600435166024356127ec565b34801561095b57600080fd5b506102cd600435602435612884565b34801561097657600080fd5b50610365612e4b565b34801561098b57600080fd5b50610365612e5a565b3480156109a057600080fd5b506102cd612e69565b3480156109b557600080fd5b5061034e600435612e6f565b3480156109cd57600080fd5b5061034e600435612f02565b3480156109e557600080fd5b5061034e600160a060020a0360043516612f56565b348015610a0657600080fd5b506102cd600160a060020a036004351661300f565b348015610a2757600080fd5b506102cd600160a060020a0360043516613021565b348015610a4857600080fd5b50610a54600435613033565b6040805198895267ffffffffffffffff97881660208a0152959096168786015263ffffffff938416606088015291909216608086015260a085019190915261ffff90811660c08501529190911660e083015251908190036101000190f35b348015610abe57600080fd5b5061034e6004356024356130ba565b348015610ad957600080fd5b506103656131b0565b348015610aee57600080fd5b506103656131bf565b348015610b0357600080fd5b506103656131ce565b600b6020526000908152604090205481565b604080517f737570706f727473496e74657266616365286279746573342900000000000000815290519081900360190190206000907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1983811691161480610dab5750604080517f746f6b656e4d657461646174612875696e7432353629000000000000000000008152815190819003601690810182207f746f6b656e734f664f776e657228616464726573732900000000000000000000835283519283900390910182207f7472616e7366657246726f6d28616464726573732c616464726573732c75696e83527f7432353629000000000000000000000000000000000000000000000000000000602084015283519283900360250183207f7472616e7366657228616464726573732c75696e743235362900000000000000845284519384900360190184207f617070726f766528616464726573732c75696e74323536290000000000000000855285519485900360180185207f6f776e65724f662875696e743235362900000000000000000000000000000000865286519586900360100186207f62616c616e63654f662861646472657373290000000000000000000000000000875287519687900360120187207f746f74616c537570706c792829000000000000000000000000000000000000008852885197889003600d0188207f73796d626f6c2829000000000000000000000000000000000000000000000000895289519889900360080189207f6e616d65282900000000000000000000000000000000000000000000000000008a529951988990036006019098207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff198c811691909a189098181818181818181891909116145b90505b919050565b600354600090819033600160a060020a0390811691161480610de3575060015433600160a060020a039081169116145b80610dfc575060025433600160a060020a039081169116145b1515610e0757600080fd5b6007805486908110610e1557fe5b60009182526020909120600490910201600381015490925062010000900461ffff1615610e4157600080fd5b610e7a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437506131dd945050505050565b60029092019190915550505050565b600254600160a060020a031681565b60408051808201909152600b81527f5245504f5020574f524c44000000000000000000000000000000000000000000602082015281565b600354600090819033600160a060020a0390811691161480610eff575060015433600160a060020a039081169116145b80610f18575060025433600160a060020a039081169116145b1515610f2357600080fd5b60035460a060020a900460ff1615610f3a57600080fd5b610f43836131dd565b915060016007610100604051908101604052808781526020014267ffffffffffffffff168152602001600167ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff16815260200185600019168152602001600061ffff168152602001600061ffff16815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816002019060001916905560c08201518160030160006101000a81548161ffff021916908361ffff16021790555060e08201518160030160026101000a81548161ffff021916908361ffff16021790555050500390507f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad53382600080886040518086600160a060020a0316600160a060020a031681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a16000938452600b60209081526040808620839055918552600881528185208054600160a060020a03191633600160a060020a0316908117909155855260099052909220805460010190555050565b60035460a060020a900460ff16156111c057600080fd5b6111ca3382613201565b15156111d557600080fd5b6000818152600a60209081526040918290208054600160a060020a031916600160a060020a0386811691821790925583518581529351909333909216927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35050565b6000821161124b57600080fd5b600f5461126190600160a060020a0316836111a9565b600f54604080517f7c37605c0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052600160a060020a03338116604483015291519190921691637c37605c91606480830192600092919082900301818387803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810186905280820185905290517f2acb6fff53b285dad2e80f11ca04ecc39506a3f0da4962f82a57bf06cf9c0c1c9350908190036060019150a15050565b600154600160a060020a031681565b600190565b600160a060020a0330163190565b60075490565b60015460009033600160a060020a0390811691161461138257600080fd5b81905080600160a060020a03166373a699ad6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b505050506040513d60208110156113ed57600080fd5b505115156113fa57600080fd5b600f8054600160a060020a031916600160a060020a039290921691909117905550565b60008060008060008060008060006114336134d5565b600780548c90811061144157fe5b90600052602060002090600402016101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154600019166000191681526020016003820160009054906101000a900461ffff1661ffff1661ffff1681526020016003820160029054906101000a900461ffff1661ffff1661ffff1681525050905042816040015167ffffffffffffffff161115995089816000015182602001518360400151846060015185608001518660a001518760c001518860e00151995099509950995099509950995099509950509193959799909294969850565b60035460a060020a900460ff16156115de57600080fd5b6115e88382613201565b15156115f357600080fd5b6115fd3382613221565b151561160857600080fd5b61161182613241565b151561161c57600080fd5b611626828261324f565b60408051600160a060020a0380861682528416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b600e54600160a060020a031690565b60015460009033600160a060020a039081169116146116a257600080fd5b81905080600160a060020a03166354c15b826040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156116e357600080fd5b505af11580156116f7573d6000803e3d6000fd5b505050506040513d602081101561170d57600080fd5b5051151561171a57600080fd5b60108054600160a060020a031916600160a060020a039290921691909117905550565b60015433600160a060020a0390811691161461175857600080fd5b600160a060020a038116151561176d57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146117aa57600080fd5b600160a060020a03811615156117bf57600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b60025433600160a060020a039081169116146117fc57600080fd5b600160a060020a03301631811061181257600080fd5b600254604051600160a060020a039091169082156108fc029083906000818181858888f1935050505015801561184c573d6000803e3d6000fd5b5050565b600e54600090600160a060020a031661186883611d71565b600160a060020a031614156118fb57600e546040805160e060020a63e05c5a83028152600481018590529051600160a060020a039092169163e05c5a83916024808201926020929091908290030181600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b505050506040513d60208110156118f257600080fd5b50519050610dae565b600f54600160a060020a031661191083611d71565b600160a060020a0316141561197057600f546040805160e060020a63e05c5a83028152600481018590529051600160a060020a039092169163e05c5a83916024808201926020929091908290030181600087803b1580156118c857600080fd5b600d54600160a060020a031661198583611d71565b600160a060020a031614156119a65750600154600160a060020a0316610dae565b6119af82611d71565b9050610dae565b600454600160a060020a031681565b6000806119d1856132b5565b15156119dc57600080fd5b60078054869081106119ea57fe5b60009182526020822060049190910201600381015490935062010000900461ffff1611611a1657600080fd5b611a4f84848080601f016020809104026020016040519081016040528093929190818152602001838380828437506131dd945050505050565b6002830181905560408051600160a060020a03331681526020810188905280820183905290519192507f12816a0444091c736dc43fb9055af6aae4dced18627ba52aa7708eecff824005919081900360600190a15050505050565b60015433600160a060020a03908116911614611ac557600080fd5b60035460a060020a900460ff161515611add57600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b600e54600160a060020a031681565b60015433600160a060020a03908116911614611b2757600080fd5b600160a060020a0381161515611b3c57600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b600f54600160a060020a031681565b60015433600160a060020a03908116911614611b8857600080fd5b600160a060020a0381161515611b9d57600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b6000600783815481101515611bd057fe5b90600052602060002090600402019050428160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611151515611c1157600080fd5b600e54611c2790600160a060020a0316846111a9565b600e54604080517f2e3cbb3b000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018790526044820186905291519190921691632e3cbb3b91606480830192600092919082900301818387803b158015611c9c57600080fd5b505af1158015611cb0573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810187905280820186905290517fbaba636376a020113de783bc39a253b720f825712c73bca7bc823142ea391d8b9350908190036060019150a1505050565b60035460a060020a900460ff1681565b600160a060020a033316600081815260208190526040808220805490839055905190929183156108fc02918491818181858888f193505050501515611d6e57600160a060020a03331660009081526020819052604090208190555b50565b600081815260086020526040902054600160a060020a0316801515610dae57600080fd5b600860205260009081526040902054600160a060020a031681565b600454606090600160a060020a03161515611dca57600080fd5b60008210158015611ddd57506007548211155b1515611de857600080fd5b60048054604080517f2f7b367700000000000000000000000000000000000000000000000000000000815292830185905251600160a060020a0390911691632f7b367791602480830192600092919082900301818387803b158015611e4c57600080fd5b505af1158015611e60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611e8957600080fd5b810190808051640100000000811115611ea157600080fd5b82016020810184811115611eb457600080fd5b8151640100000000811182820187101715611ece57600080fd5b50909695505050505050565b600160a060020a031660009081526009602052604090205490565b600f54600160a060020a031690565b60015460009033600160a060020a03908116911614611f2257600080fd5b81905080600160a060020a0316633eebc5896040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b505050506040513d6020811015611f8d57600080fd5b50511515611f9a57600080fd5b600e8054600160a060020a031916600160a060020a039290921691909117905550565b60035433600160a060020a0390811691161480611fe8575060015433600160a060020a039081169116145b80612001575060025433600160a060020a039081169116145b151561200c57600080fd5b60035460a060020a900460ff161561202357600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b606060006060600080600061205d87611eda565b945084151561207c576040805160008152602081019091529550612111565b846040519080825280602002602001820160405280156120a6578160200160208202803883390190505b5093506120b161135e565b925060009150600190505b82811161210d57600081815260086020526040902054600160a060020a0388811691161415612105578084838151811015156120f457fe5b602090810290910101526001909101905b6001016120bc565b8395505b5050505050919050565b6000612126826132b5565b151561213157600080fd5b600c5434101561214057600080fd5b600780548390811061214e57fe5b6000918252602091829020600160049092020190810180546fffffffffffffffff0000000000000000191668010000000000000000179055600c5460408051868152600160a060020a0333169481019490945283810191909152519092507f9d8c702c4edf3197c01314ac15165f0bd401460586b7bb489d4adeafd1ce48cd9181900360600190a15050565b60408051808201909152600381527f504f500000000000000000000000000000000000000000000000000000000000602082015281565b6000806000806000806000600360149054906101000a900460ff1615151561223857600080fd5b6000891161224557600080fd5b6000881161225257600080fd5b61225b896133f7565b151561226657600080fd5b61226f886133f7565b151561227a57600080fd5b600780548a90811061228857fe5b906000526020600020906004020195506007888154811015156122a757fe5b600091825260209091206004909102018054875491965014156122c957600080fd5b6001860154426801000000000000000090910467ffffffffffffffff1611156122f157600080fd5b6001850154426801000000000000000090910467ffffffffffffffff16111561231957600080fd5b6003808701549086015461ffff6201000092839004811696509190041684101561234f57600385015462010000900461ffff1693505b836001019250600d8361ffff16111561236757600d92505b60105486548654604080517f8d8b1b880000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915251600160a060020a0390921691638d8b1b88916044808201926020929091908290030181600087803b1580156123da57600080fd5b505af11580156123ee573d6000803e3d6000fd5b505050506040513d602081101561240457600080fd5b505191506124118661346e565b61241a8561346e565b60016007610100604051908101604052808581526020014267ffffffffffffffff168152602001600167ffffffffffffffff1681526020018c63ffffffff1681526020018b63ffffffff16815260200160006001026000191681526020018661ffff1681526020018760010161ffff16815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816002019060001916905560c08201518160030160006101000a81548161ffff021916908361ffff16021790555060e08201518160030160026101000a81548161ffff021916908361ffff1602179055505050039050336008600083815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506009600033600160a060020a0316600160a060020a03168152602001908152602001600020546001016009600033600160a060020a0316600160a060020a03168152602001908152602001600020819055507f3f6242f41be9e68b16f202159c05c0763a0092812f68b90f1fd4db6fc21276b733828b8b6040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a160408051600160a060020a0333168152602081018390528082018b9052606081018a90526080810184905290517f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad59181900360a00190a198975050505050505050565b60035460009033600160a060020a0390811691161480612745575060015433600160a060020a039081169116145b8061275e575060025433600160a060020a039081169116145b151561276957600080fd5b6127733384613201565b151561277e57600080fd5b600780548490811061278c57fe5b60009182526020909120600490910201919091555050565b600581600e81106127b157fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b600a60205260009081526040902054600160a060020a031681565b60035460a060020a900460ff161561280357600080fd5b61280d3382613201565b151561281857600080fd5b61282182613241565b151561282c57600080fd5b612836828261324f565b60408051600160a060020a0333811682528416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a15050565b60008061288f6134d5565b60035460009081908190819060a060020a900460ff16156128af57600080fd5b600089116128bc57600080fd5b6128c5896133f7565b15156128d057600080fd5b600780548a9081106128de57fe5b906000526020600020906004020195506007888154811015156128fd57fe5b6000918252602091829020604080516101008101825260049093029091018054808452600182015467ffffffffffffffff808216968601969096526801000000000000000081049095169284019290925263ffffffff70010000000000000000000000000000000085048116606085015260a060020a9094049093166080830152600283015460a083015260039092015461ffff80821660c0840152620100009091041660e0820152875490965014156129b657600080fd5b6001860154426801000000000000000090910467ffffffffffffffff1611156129de57600080fd5b600386015460e086015161ffff620100009092048216955016841015612a06578460e0015193505b836001019250600d8361ffff161115612a1e57600d92505b600f54604080517f61b9c6a3000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018c9052915191909216916361b9c6a391604480830192600092919082900301818387803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b505060105488548851604080517f8d8b1b880000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915251600160a060020a039092169350638d8b1b8892506044808201926020929091908290030181600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b505050506040513d6020811015612b4157600080fd5b50519150612b4e8661346e565b60016007610100604051908101604052808581526020014267ffffffffffffffff168152602001600167ffffffffffffffff1681526020018c63ffffffff1681526020018b63ffffffff16815260200160006001026000191681526020018661ffff1681526020018760010161ffff16815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a0820151816002019060001916905560c08201518160030160006101000a81548161ffff021916908361ffff16021790555060e08201518160030160026101000a81548161ffff021916908361ffff1602179055505050039050336008600083815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506009600033600160a060020a0316600160a060020a03168152602001908152602001600020546001016009600033600160a060020a0316600160a060020a03168152602001908152602001600020819055507f730e62690575eb5131bd693bc715b6d16db550a3e496a9635c158817e644c37f33828b8b6040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a160408051600160a060020a0333168152602081018390528082018b9052606081018a90526080810184905290517f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad59181900360a00190a198975050505050505050565b600d54600160a060020a031681565b600354600160a060020a031681565b600c5481565b600080612e7b83611d71565b9150339050612e8981613241565b1515612e9457600080fd5b612e9e8184613221565b1515612ea957600080fd5b612eb3818461324f565b60408051600160a060020a0380851682528316602082015280820185905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b60035433600160a060020a0390811691161480612f2d575060015433600160a060020a039081169116145b80612f46575060025433600160a060020a039081169116145b1515612f5157600080fd5b600c55565b60015460009033600160a060020a03908116911614612f7457600080fd5b81905080600160a060020a03166309c38bc86040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612fb557600080fd5b505af1158015612fc9573d6000803e3d6000fd5b505050506040513d6020811015612fdf57600080fd5b50511515612fec57600080fd5b600d8054600160a060020a031916600160a060020a039290921691909117905550565b60096020526000908152604090205481565b60006020819052908152604090205481565b600780548290811061304157fe5b6000918252602090912060049091020180546001820154600283015460039093015491935067ffffffffffffffff808216936801000000000000000083049091169263ffffffff700100000000000000000000000000000000840481169360a060020a900416919061ffff808216916201000090041688565b60035433600160a060020a03908116911614806130e5575060015433600160a060020a039081169116145b806130fe575060025433600160a060020a039081169116145b151561310957600080fd5b600d5461311f90600160a060020a0316836111a9565b600d54604080517f54279bdd0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052600160a060020a033381166044830152915191909216916354279bdd91606480830192600092919082900301818387803b15801561319457600080fd5b505af11580156131a8573d6000803e3d6000fd5b505050505050565b600d54600160a060020a031690565b601054600160a060020a031690565b601054600160a060020a031681565b8051600090829015156131f357600091506131fb565b602083015191505b50919050565b600090815260086020526040902054600160a060020a0390811691161490565b6000908152600a6020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b60008181526008602090815260408083208054600160a060020a03908116855260098085528386208054600019019055958552600a84528285208054600160a060020a031990811690915582541696169586179055938252919091522080546001019055565b600033600160a060020a03166132ca83611d71565b600160a060020a031614806133635750600f546040805160e060020a63e05c5a83028152600481018590529051600160a060020a0333811693169163e05c5a839160248083019260209291908290030181600087803b15801561332c57600080fd5b505af1158015613340573d6000803e3d6000fd5b505050506040513d602081101561335657600080fd5b5051600160a060020a0316145b80610dab5750600e546040805160e060020a63e05c5a83028152600481018590529051600160a060020a0333811693169163e05c5a839160248083019260209291908290030181600087803b1580156133bb57600080fd5b505af11580156133cf573d6000803e3d6000fd5b505050506040513d60208110156133e557600080fd5b5051600160a060020a03161492915050565b600033600160a060020a031661340c83611d71565b600160a060020a03161480610dab5750600f546040805160e060020a63e05c5a83028152600481018590529051600160a060020a0333811693169163e05c5a839160248083019260209291908290030181600087803b1580156133bb57600080fd5b600381015460059061ffff16600e811061348457fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1642018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152905600a165627a7a723058203e4e0de87e725e99863b20fd137393b3a06ac774415c60ee3f2bfd778c13857e0029
Swarm Source
bzzr://3e4e0de87e725e99863b20fd137393b3a06ac774415c60ee3f2bfd778c13857e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.