ETH Price: $2,333.84 (+0.57%)

Contract

0x4e06E4EF5A1fF9BbbBcE7Ee0F4F0fCC77d7624Cf
 

Overview

ETH Balance

0.0005 ETH

Eth Value

$1.17 (@ $2,333.84/ETH)

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy From Current...55636312018-05-06 1:34:372873 days ago1525570477IN
0x4e06E4EF...77d7624Cf
0.01 ETH0.000248632
Create Wiki Page55634122018-05-06 0:42:562873 days ago1525567376IN
0x4e06E4EF...77d7624Cf
0 ETH0.001152523
Create Wiki Page55633662018-05-06 0:29:442873 days ago1525566584IN
0x4e06E4EF...77d7624Cf
0 ETH0.000884923
Create Wiki Page55633642018-05-06 0:29:142873 days ago1525566554IN
0x4e06E4EF...77d7624Cf
0 ETH0.000887413
Create Wiki Page55633612018-05-06 0:28:322873 days ago1525566512IN
0x4e06E4EF...77d7624Cf
0 ETH0.001019773
Create Wiki Page55633572018-05-06 0:27:102873 days ago1525566430IN
0x4e06E4EF...77d7624Cf
0 ETH0.000883963
Create Wiki Page55633552018-05-06 0:26:452873 days ago1525566405IN
0x4e06E4EF...77d7624Cf
0 ETH0.000888373
Create Wiki Page55633502018-05-06 0:25:562873 days ago1525566356IN
0x4e06E4EF...77d7624Cf
0 ETH0.000888953
Create Wiki Page55633482018-05-06 0:25:232873 days ago1525566323IN
0x4e06E4EF...77d7624Cf
0 ETH0.000817783
Create Wiki Page55633432018-05-06 0:24:422873 days ago1525566282IN
0x4e06E4EF...77d7624Cf
0 ETH0.000819313
Create Wiki Page55633282018-05-06 0:21:382873 days ago1525566098IN
0x4e06E4EF...77d7624Cf
0 ETH0.00081973
Create Wiki Page55633262018-05-06 0:20:362873 days ago1525566036IN
0x4e06E4EF...77d7624Cf
0 ETH0.000952253
Create Wiki Page55632782018-05-06 0:07:022873 days ago1525565222IN
0x4e06E4EF...77d7624Cf
0 ETH0.001481595
Create Wiki Page55632752018-05-06 0:06:202873 days ago1525565180IN
0x4e06E4EF...77d7624Cf
0 ETH0.000950913
Create Wiki Page55632552018-05-06 0:00:212873 days ago1525564821IN
0x4e06E4EF...77d7624Cf
0 ETH0.000633942
Create Wiki Page55626282018-05-05 21:28:362873 days ago1525555716IN
0x4e06E4EF...77d7624Cf
0 ETH0.000579022

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer55636312018-05-06 1:34:372873 days ago1525570477
0x4e06E4EF...77d7624Cf
0.0095 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Wikipediapp

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
No with 0 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-05-06
*/

pragma solidity 0.4.23;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * Utility library of inline functions on addresses
 */

library AddressUtils {

  /**
   * Returns whether there is code in the target address
   * @dev This function will return false if invoked during the constructor of a contract,
   *  as the code is not actually created until after the constructor finishes.
   * @param addr address address to check
   * @return whether there is code in the target address
   */
  function isContract(address addr) internal view returns (bool) {
    uint256 size;
    assembly { size := extcodesize(addr) }
    return size > 0;
  }

}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  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;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  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;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Basic {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function exists(uint256 _tokenId) public view returns (bool _exists);

  function approve(address _to, uint256 _tokenId) public;
  function getApproved(uint256 _tokenId) public view returns (address _operator);

  function setApprovalForAll(address _operator, bool _approved) public;
  function isApprovedForAll(address _owner, address _operator) public view returns (bool);

  function transferFrom(address _from, address _to, uint256 _tokenId) public;
  function safeTransferFrom(address _from, address _to, uint256 _tokenId) public;
  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public;
}

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 *  from ERC721 asset contracts.
 */
contract ERC721Receiver {
  /**
   * @dev Magic value to be returned upon successful reception of an NFT
   *  Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`,
   *  which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`
   */
  bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;

  /**
   * @notice Handle the receipt of an NFT
   * @dev The ERC721 smart contract calls this function on the recipient
   *  after a `safetransfer`. This function MAY throw to revert and reject the
   *  transfer. This function MUST use 50,000 gas or less. Return of other
   *  than the magic value MUST result in the transaction being reverted.
   *  Note: the contract address is always the message sender.
   * @param _from The sending address
   * @param _tokenId The NFT identifier which is being transfered
   * @param _data Additional data with no specified format
   * @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
   */
  function onERC721Received(address _from, uint256 _tokenId, bytes _data) public returns(bytes4);
}

/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721BasicToken is ERC721Basic {
  using SafeMath for uint256;
  using AddressUtils for address;

  // Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
  // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`
  bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;

  // Mapping from token ID to owner
  mapping (uint256 => address) internal tokenOwner;

  // Mapping from token ID to approved address
  mapping (uint256 => address) internal tokenApprovals;

  // Mapping from owner to number of owned token
  mapping (address => uint256) internal ownedTokensCount;

  // Mapping from owner to operator approvals
  mapping (address => mapping (address => bool)) internal operatorApprovals;

  /**
  * @dev Guarantees msg.sender is owner of the given token
  * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender
  */
  modifier onlyOwnerOf(uint256 _tokenId) {
    require(ownerOf(_tokenId) == msg.sender);
    _;
  }

  /**
  * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator
  * @param _tokenId uint256 ID of the token to validate
  */
  modifier canTransfer(uint256 _tokenId) {
    require(isApprovedOrOwner(msg.sender, _tokenId));
    _;
  }

  /**
  * @dev Gets the balance of the specified address
  * @param _owner address to query the balance of
  * @return uint256 representing the amount owned by the passed address
  */
  function balanceOf(address _owner) public view returns (uint256) {
    require(_owner != address(0));
    return ownedTokensCount[_owner];
  }

  /**
  * @dev Gets the owner of the specified token ID
  * @param _tokenId uint256 ID of the token to query the owner of
  * @return owner address currently marked as the owner of the given token ID
  */
  function ownerOf(uint256 _tokenId) public view returns (address) {
    address owner = tokenOwner[_tokenId];
    require(owner != address(0));
    return owner;
  }

  /**
  * @dev Returns whether the specified token exists
  * @param _tokenId uint256 ID of the token to query the existance of
  * @return whether the token exists
  */
  function exists(uint256 _tokenId) public view returns (bool) {
    address owner = tokenOwner[_tokenId];
    return owner != address(0);
  }

  /**
  * @dev Approves another address to transfer the given token ID
  * @dev The zero address indicates there is no approved address.
  * @dev There can only be one approved address per token at a given time.
  * @dev Can only be called by the token owner or an approved operator.
  * @param _to address to be approved for the given token ID
  * @param _tokenId uint256 ID of the token to be approved
  */
  function approve(address _to, uint256 _tokenId) public {
    address owner = ownerOf(_tokenId);
    require(_to != owner);
    require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

    if (getApproved(_tokenId) != address(0) || _to != address(0)) {
      tokenApprovals[_tokenId] = _to;
      Approval(owner, _to, _tokenId);
    }
  }

  /**
   * @dev Gets the approved address for a token ID, or zero if no address set
   * @param _tokenId uint256 ID of the token to query the approval of
   * @return address currently approved for a the given token ID
   */
  function getApproved(uint256 _tokenId) public view returns (address) {
    return tokenApprovals[_tokenId];
  }


  /**
  * @dev Sets or unsets the approval of a given operator
  * @dev An operator is allowed to transfer all tokens of the sender on their behalf
  * @param _to operator address to set the approval
  * @param _approved representing the status of the approval to be set
  */
  function setApprovalForAll(address _to, bool _approved) public {
    require(_to != msg.sender);
    operatorApprovals[msg.sender][_to] = _approved;
    ApprovalForAll(msg.sender, _to, _approved);
  }

  /**
   * @dev Tells whether an operator is approved by a given owner
   * @param _owner owner address which you want to query the approval of
   * @param _operator operator address which you want to query the approval of
   * @return bool whether the given operator is approved by the given owner
   */
  function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
    return operatorApprovals[_owner][_operator];
  }

  /**
  * @dev Transfers the ownership of a given token ID to another address
  * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible
  * @dev Requires the msg sender to be the owner, approved, or operator
  * @param _from current owner of the token
  * @param _to address to receive the ownership of the given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function transferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) {
    require(_from != address(0));
    require(_to != address(0));

    clearApproval(_from, _tokenId);
    removeTokenFrom(_from, _tokenId);
    addTokenTo(_to, _tokenId);

    Transfer(_from, _to, _tokenId);
  }

  /**
  * @dev Safely transfers the ownership of a given token ID to another address
  * @dev If the target address is a contract, it must implement `onERC721Received`,
  *  which is called upon a safe transfer, and return the magic value
  *  `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise,
  *  the transfer is reverted.
  * @dev Requires the msg sender to be the owner, approved, or operator
  * @param _from current owner of the token
  * @param _to address to receive the ownership of the given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function safeTransferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) {
    safeTransferFrom(_from, _to, _tokenId, "");
  }

  /**
  * @dev Safely transfers the ownership of a given token ID to another address
  * @dev If the target address is a contract, it must implement `onERC721Received`,
  *  which is called upon a safe transfer, and return the magic value
  *  `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise,
  *  the transfer is reverted.
  * @dev Requires the msg sender to be the owner, approved, or operator
  * @param _from current owner of the token
  * @param _to address to receive the ownership of the given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  * @param _data bytes data to send along with a safe transfer check
  */
  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public canTransfer(_tokenId) {
    transferFrom(_from, _to, _tokenId);
    require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data));
  }

  /**
   * @dev Returns whether the given spender can transfer a given token ID
   * @param _spender address of the spender to query
   * @param _tokenId uint256 ID of the token to be transferred
   * @return bool whether the msg.sender is approved for the given token ID,
   *  is an operator of the owner, or is the owner of the token
   */
  function isApprovedOrOwner(address _spender, uint256 _tokenId) internal view returns (bool) {
    address owner = ownerOf(_tokenId);
    return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender);
  }

  /**
  * @dev Internal function to mint a new token
  * @dev Reverts if the given token ID already exists
  * @param _to The address that will own the minted token
  * @param _tokenId uint256 ID of the token to be minted by the msg.sender
  */
  function _mint(address _to, uint256 _tokenId) internal {
    require(_to != address(0));
    addTokenTo(_to, _tokenId);
    Transfer(address(0), _to, _tokenId);
  }

  /**
  * @dev Internal function to burn a specific token
  * @dev Reverts if the token does not exist
  * @param _tokenId uint256 ID of the token being burned by the msg.sender
  */
  function _burn(address _owner, uint256 _tokenId) internal {
    clearApproval(_owner, _tokenId);
    removeTokenFrom(_owner, _tokenId);
    Transfer(_owner, address(0), _tokenId);
  }

  /**
  * @dev Internal function to clear current approval of a given token ID
  * @dev Reverts if the given address is not indeed the owner of the token
  * @param _owner owner of the token
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function clearApproval(address _owner, uint256 _tokenId) internal {
    require(ownerOf(_tokenId) == _owner);
    if (tokenApprovals[_tokenId] != address(0)) {
      tokenApprovals[_tokenId] = address(0);
      Approval(_owner, address(0), _tokenId);
    }
  }

  /**
  * @dev Internal function to add a token ID to the list of a given address
  * @param _to address representing the new owner of the given token ID
  * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
  */
  function addTokenTo(address _to, uint256 _tokenId) internal {
    require(tokenOwner[_tokenId] == address(0));
    tokenOwner[_tokenId] = _to;
    ownedTokensCount[_to] = ownedTokensCount[_to].add(1);
  }

  /**
  * @dev Internal function to remove a token ID from the list of a given address
  * @param _from address representing the previous owner of the given token ID
  * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
  */
  function removeTokenFrom(address _from, uint256 _tokenId) internal {
    require(ownerOf(_tokenId) == _from);
    ownedTokensCount[_from] = ownedTokensCount[_from].sub(1);
    tokenOwner[_tokenId] = address(0);
  }

  /**
  * @dev Internal function to invoke `onERC721Received` on a target address
  * @dev The call is not executed if the target address is not a contract
  * @param _from address representing the previous owner of the given token ID
  * @param _to target address that will receive the tokens
  * @param _tokenId uint256 ID of the token to be transferred
  * @param _data bytes optional data to send along with the call
  * @return whether the call correctly returned the expected magic value
  */
  function checkAndCallSafeTransfer(address _from, address _to, uint256 _tokenId, bytes _data) internal returns (bool) {
    if (!_to.isContract()) {
      return true;
    }
    bytes4 retval = ERC721Receiver(_to).onERC721Received(_from, _tokenId, _data);
    return (retval == ERC721_RECEIVED);
  }
}


contract WikiFactory is Ownable, ERC721BasicToken {

  struct WikiPage {
      string title;
      string articleHash; // on roadmap is looking at history of these across blocks and creating a history for owners.
      string imageHash;
      uint price; // price in wei
  }

  WikiPage[] public wikiPages;

  // Mapping from owner to list of owned token IDs
  mapping (address => uint256[]) internal ownedTokens;
  // Mapping from token ID to index of the owner tokens list
  mapping(uint256 => uint256) internal ownedTokensIndex;

  uint costToCreate = 40000000000000000 wei;
  function setCostToCreate(uint _fee) external onlyOwner {
    costToCreate = _fee;
  }
  /* mapping (uint => address) public wikiToOwner;
  mapping (address => uint) ownerWikiCount; */

  function createWikiPage(string _title, string _articleHash, string _imageHash, uint _price) public onlyOwner returns (uint) {
    uint id = wikiPages.push(WikiPage(_title, _articleHash, _imageHash, _price)) - 1;
    /* tokenOwner[id] = msg.sender;
    ownedTokensCount[msg.sender]++; */
    _ownMint(id);
  }

  function paidCreateWikiPage(string _title, string _articleHash, string _imageHash, uint _price) public payable {
    require(msg.value >= costToCreate);
    uint id = wikiPages.push(WikiPage(_title, _articleHash, _imageHash, _price)) - 1;
    /* tokenOwner[id] = msg.sender;
    ownedTokensCount[msg.sender]++; */
    _ownMint(id);
  }

  function _ownMint(uint _id) internal {
    uint256 length = ownedTokens[msg.sender].length;
    ownedTokens[msg.sender].push(_id);
    ownedTokensIndex[_id] = length;
    _mint(msg.sender, _id);
  }

  /* function createMultipleWikiPages(string[] _titles) public onlyOwner returns (uint) {
    for (uint i = 0; i < _titles.length; i++) {
      string storage _title = _titles[i];
      uint id = wikiPages.push(WikiPage(_title, '', 10)) - 1;
      tokenOwner[id] = msg.sender;
      ownedTokensCount[msg.sender]++;
      emit NewWikiPage(id, _title, '', 10);
    }
  } */

  function numberWikiPages() public view returns(uint) {
    return wikiPages.length;
  }

  /**
   * @dev Internal function to add a token ID to the list of a given address
   * @param _to address representing the new owner of the given token ID
   * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
   */
  function wikiAddTokenTo(address _to, uint256 _tokenId) internal {
    addTokenTo(_to, _tokenId);
    uint256 length = ownedTokens[_to].length;
    ownedTokens[_to].push(_tokenId);
    ownedTokensIndex[_tokenId] = length;
  }

  /**
   * @dev Internal function to remove a token ID from the list of a given address
   * @param _from address representing the previous owner of the given token ID
   * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
   */
  function wikiRemoveTokenFrom(address _from, uint256 _tokenId) internal {
    removeTokenFrom(_from, _tokenId);

    uint256 tokenIndex = ownedTokensIndex[_tokenId];
    uint256 lastTokenIndex = ownedTokens[_from].length - 1;
    uint256 lastToken = ownedTokens[_from][lastTokenIndex];

    ownedTokens[_from][tokenIndex] = lastToken;
    ownedTokens[_from][lastTokenIndex] = 0;
    // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
    // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping
    // the lastToken to the first position, and then dropping the element placed in the last position of the list

    ownedTokens[_from].length--;
    ownedTokensIndex[_tokenId] = 0;
    ownedTokensIndex[lastToken] = tokenIndex;
  }

  /**
   * @dev Gets the token ID at a given index of the tokens list of the requested owner
   * @param _owner address owning the tokens list to be accessed
   * @param _index uint256 representing the index to be accessed of the requested tokens list
   * @return uint256 token ID at the given index of the tokens list owned by the requested address
   */
  function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) {
    require(_index < balanceOf(_owner));
    return ownedTokens[_owner][_index];
  }
}

contract ManageWikiPage is WikiFactory {


  event WikiPageChanged(uint id);

  mapping(uint => mapping(address => mapping(address => bool))) public collaborators;

  /**
   * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator
   * @param _tokenId uint256 ID of the token to validate
   */
  modifier canEdit(uint256 _tokenId) {
    require(isCollaboratorOrOwner(msg.sender, _tokenId));
    _;
  }

  function isCollaboratorOrOwner(address _editor, uint256 _tokenId) internal view returns (bool) {
    address owner = ownerOf(_tokenId);
    bool isCollaborator = collaborators[_tokenId][owner][_editor];

    return _editor == owner || isCollaborator;
  }

  // Dont think we actually want them to be able to change the article
  /* function setTitle(uint _wikiId, string _title) public onlyOwnerOf(_wikiId) {
    WikiPage storage wikiToChange = wikiPages[_wikiId];
    wikiToChange.title = _title;
    emit WikiPageChanged(_wikiId, _title, wikiToChange.articleHash, wikiToChange.price);
  } */

  function addCollaborator(uint _tokenId, address collaborator) public onlyOwnerOf(_tokenId) {
    address owner = ownerOf(_tokenId);
    collaborators[_tokenId][owner][collaborator] = true;
  }

  function removeCollaborator(uint _tokenId, address collaborator) public onlyOwnerOf(_tokenId) {
    address owner = ownerOf(_tokenId);
    collaborators[_tokenId][owner][collaborator] = false;
  }

  function setArticleHash(uint _wikiId, string _articleHash) public canEdit(_wikiId) {
    WikiPage storage wikiToChange = wikiPages[_wikiId];
    wikiToChange.articleHash = _articleHash;
    emit WikiPageChanged(_wikiId);
  }

  function setImageHash(uint _wikiId, string _imageHash) public canEdit(_wikiId) {
    WikiPage storage wikiToChange = wikiPages[_wikiId];
    wikiToChange.imageHash = _imageHash;
    emit WikiPageChanged(_wikiId);
  }

  function doublePrice(uint _wikiId) internal {
    WikiPage storage wikiToChange = wikiPages[_wikiId];
    wikiToChange.price = wikiToChange.price * 2;
    emit WikiPageChanged(_wikiId);
  }
}

contract Wikipediapp is ManageWikiPage {
  string public name = "WikiToken";
  string public symbol = "WT";

  function buyFromCurrentOwner(uint _tokenId) public payable {
    require(_tokenId < wikiPages.length);
    require(tokenOwner[_tokenId] != msg.sender);

    WikiPage storage wikiToChange = wikiPages[_tokenId];
    require(msg.value >= wikiToChange.price);

    address previousOwner = tokenOwner[_tokenId];
    if (previousOwner == address(0)) {
      previousOwner = owner; // if for some reason the token is ownerless, avoid sending into 0x0
    }

    wikiRemoveTokenFrom(previousOwner, _tokenId);
    wikiAddTokenTo(msg.sender, _tokenId);

    previousOwner.transfer((wikiToChange.price * 95) / 100);

    doublePrice(_tokenId);
  }

  function getContractBalance() constant returns (uint){
    return this.balance;
  }

  function sendBalance() public onlyOwner {
    owner.transfer(address(this).balance);
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setCostToCreate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_title","type":"string"},{"name":"_articleHash","type":"string"},{"name":"_imageHash","type":"string"},{"name":"_price","type":"uint256"}],"name":"paidCreateWikiPage","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"collaborator","type":"address"}],"name":"removeCollaborator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_title","type":"string"},{"name":"_articleHash","type":"string"},{"name":"_imageHash","type":"string"},{"name":"_price","type":"uint256"}],"name":"createWikiPage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getContractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberWikiPages","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"buyFromCurrentOwner","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_wikiId","type":"uint256"},{"name":"_imageHash","type":"string"}],"name":"setImageHash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"address"}],"name":"collaborators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"wikiPages","outputs":[{"name":"title","type":"string"},{"name":"articleHash","type":"string"},{"name":"imageHash","type":"string"},{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wikiId","type":"uint256"},{"name":"_articleHash","type":"string"}],"name":"setArticleHash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"collaborator","type":"address"}],"name":"addCollaborator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"}],"name":"WikiPageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"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"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052668e1bc9bf0400006008556040805190810160405280600981526020017f57696b69546f6b656e0000000000000000000000000000000000000000000000815250600a90805190602001906200005c929190620000f1565b506040805190810160405280600281526020017f5754000000000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000aa929190620000f1565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001a0565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013457805160ff191683800117855562000165565b8280016001018555821562000165579182015b828111156200016457825182559160200191906001019062000147565b5b50905062000174919062000178565b5090565b6200019d91905b80821115620001995760008160009055506001016200017f565b5090565b90565b61306f80620001b06000396000f30060806040526004361061016a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461016f578063081812fc146101ff578063095ea7b31461026c57806323b872dd146102b95780632de3cddc146103265780632f745c591461035357806333b0f7f7146103b457806342842e0e146104a65780634f558e7914610513578063601b349c146105585780636352211e146105a557806367460c25146106125780636f9fb98a1461072557806370a0823114610750578063738d8d82146107a75780638da5cb5b146107d257806395d89b4114610829578063990cc5c9146108b95780639e3edce9146108d9578063a22cb4651461094c578063b1a2d4d41461099b578063b88d4fde14610a20578063bf90efa114610ad3578063ce2fc87314610c58578063d4bd5a0d14610ccb578063e7422d2914610d18578063e985e9c514610d2f578063f2fde38b14610daa575b600080fd5b34801561017b57600080fd5b50610184610ded565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c45780820151818401526020810190506101a9565b50505050905090810190601f1680156101f15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020b57600080fd5b5061022a60048036038101908080359060200190929190505050610e8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027857600080fd5b506102b7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ec8565b005b3480156102c557600080fd5b50610324600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108e565b005b34801561033257600080fd5b50610351600480360381019080803590602001909291905050506111a5565b005b34801561035f57600080fd5b5061039e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061120a565b6040518082815260200191505060405180910390f35b6104a4600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050611281565b005b3480156104b257600080fd5b50610511600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061135b565b005b34801561051f57600080fd5b5061053e60048036038101908080359060200190929190505050611393565b604051808215151515815260200191505060405180910390f35b34801561056457600080fd5b506105a360048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611405565b005b3480156105b157600080fd5b506105d060048036038101908080359060200190929190505050611501565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061e57600080fd5b5061070f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919050505061157f565b6040518082815260200191505060405180910390f35b34801561073157600080fd5b5061073a6116a6565b6040518082815260200191505060405180910390f35b34801561075c57600080fd5b50610791600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c5565b6040518082815260200191505060405180910390f35b3480156107b357600080fd5b506107bc611749565b6040518082815260200191505060405180910390f35b3480156107de57600080fd5b506107e7611756565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083557600080fd5b5061083e61177b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108d760048036038101908080359060200190929190505050611819565b005b3480156108e557600080fd5b5061094a60048036038101908080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506119db565b005b34801561095857600080fd5b50610999600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a68565b005b3480156109a757600080fd5b50610a0660048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba4565b604051808215151515815260200191505060405180910390f35b348015610a2c57600080fd5b50610ad1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611be0565b005b348015610adf57600080fd5b50610afe60048036038101908080359060200190929190505050611c1f565b60405180806020018060200180602001858152602001848103845288818151815260200191508051906020019080838360005b83811015610b4c578082015181840152602081019050610b31565b50505050905090810190601f168015610b795780820380516001836020036101000a031916815260200191505b50848103835287818151815260200191508051906020019080838360005b83811015610bb2578082015181840152602081019050610b97565b50505050905090810190601f168015610bdf5780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b83811015610c18578082015181840152602081019050610bfd565b50505050905090810190601f168015610c455780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b348015610c6457600080fd5b50610cc960048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611e26565b005b348015610cd757600080fd5b50610d1660048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eb3565b005b348015610d2457600080fd5b50610d2d611faf565b005b348015610d3b57600080fd5b50610d90600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061208b565b604051808215151515815260200191505060405180910390f35b348015610db657600080fd5b50610deb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061211f565b005b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e835780601f10610e5857610100808354040283529160200191610e83565b820191906000526020600020905b815481529060010190602001808311610e6657829003601f168201915b505050505081565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ed382611501565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610f1057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f505750610f4f813361208b565b5b1515610f5b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16610f7c83610e8b565b73ffffffffffffffffffffffffffffffffffffffff16141580610fcc5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561108957826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35b505050565b806110993382612274565b15156110a457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156110e057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561111c57600080fd5b6111268483612309565b6111308483612472565b61113a83836125a1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561120057600080fd5b8060088190555050565b6000611215836116c5565b8210151561122257600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561126e57fe5b9060005260206000200154905092915050565b6000600854341015151561129457600080fd5b6001600560806040519081016040528088815260200187815260200186815260200185815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000019080519060200190611301929190612ef2565b50602082015181600101908051906020019061131e929190612ef2565b50604082015181600201908051906020019061133b929190612ef2565b50606082015181600301555050039050611354816126fb565b5050505050565b806113663382612274565b151561137157600080fd5b61138d8484846020604051908101604052806000815250611be0565b50505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000823373ffffffffffffffffffffffffffffffffffffffff1661142882611501565b73ffffffffffffffffffffffffffffffffffffffff1614151561144a57600080fd5b61145384611501565b915060006009600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561157657600080fd5b80915050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115dd57600080fd5b600160056080604051908101604052808981526020018881526020018781526020018681525090806001815401808255809150509060018203906000526020600020906004020160009091929091909150600082015181600001908051906020019061164a929190612ef2565b506020820151816001019080519060200190611667929190612ef2565b506040820151816002019080519060200190611684929190612ef2565b5060608201518160030155505003905061169d816126fb565b50949350505050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561170257600080fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600580549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b505050505081565b6000806005805490508310151561182f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561189d57600080fd5b6005838154811015156118ac57fe5b90600052602060002090600402019150816003015434101515156118cf57600080fd5b6001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561195f576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b61196981846127d1565b61197333846129d9565b8073ffffffffffffffffffffffffffffffffffffffff166108fc6064605f8560030154028115156119a057fe5b049081150290604051600060405180830381858888f193505050501580156119cc573d6000803e3d6000fd5b506119d683612ab0565b505050565b6000826119e83382612b1c565b15156119f357600080fd5b600584815481101515611a0257fe5b9060005260206000209060040201915082826002019080519060200190611a2a929190612f72565b507f65ebcae8ac3c4d68cdc935d956a07bf13a20381f173715256c5ccf85a334ab54846040518082815260200191505060405180910390a150505050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611aa357600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6009602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b81611beb3382612274565b1515611bf657600080fd5b611c0185858561108e565b611c0d85858585612c0a565b1515611c1857600080fd5b5050505050565b600581815481101515611c2e57fe5b9060005260206000209060040201600091509050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cda5780601f10611caf57610100808354040283529160200191611cda565b820191906000526020600020905b815481529060010190602001808311611cbd57829003601f168201915b505050505090806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d785780601f10611d4d57610100808354040283529160200191611d78565b820191906000526020600020905b815481529060010190602001808311611d5b57829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e165780601f10611deb57610100808354040283529160200191611e16565b820191906000526020600020905b815481529060010190602001808311611df957829003601f168201915b5050505050908060030154905084565b600082611e333382612b1c565b1515611e3e57600080fd5b600584815481101515611e4d57fe5b9060005260206000209060040201915082826001019080519060200190611e75929190612f72565b507f65ebcae8ac3c4d68cdc935d956a07bf13a20381f173715256c5ccf85a334ab54846040518082815260200191505060405180910390a150505050565b6000823373ffffffffffffffffffffffffffffffffffffffff16611ed682611501565b73ffffffffffffffffffffffffffffffffffffffff16141515611ef857600080fd5b611f0184611501565b915060016009600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561200a57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015612088573d6000803e3d6000fd5b50565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561217a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156121b657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061228083611501565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122ef57508373ffffffffffffffffffffffffffffffffffffffff166122d784610e8b565b73ffffffffffffffffffffffffffffffffffffffff16145b8061230057506122ff818561208b565b5b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff1661232982611501565b73ffffffffffffffffffffffffffffffffffffffff1614151561234b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561246e5760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b5050565b8173ffffffffffffffffffffffffffffffffffffffff1661249282611501565b73ffffffffffffffffffffffffffffffffffffffff161415156124b457600080fd5b6125076001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df890919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561260f57600080fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126b46001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150509060018203906000526020600020016000909192909190915055508060076000848152602001908152602001600020819055506127cd3383612e2f565b5050565b60008060006127e08585612472565b600760008581526020019081526020016000205492506001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050039150600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561288a57fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811015156128e457fe5b90600052602060002001819055506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561294057fe5b9060005260206000200181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036129a09190612ff2565b50600060076000868152602001908152602001600020819055508260076000838152602001908152602001600020819055505050505050565b60006129e583836125a1565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050906001820390600052602060002001600090919290919091505550806007600084815260200190815260200160002081905550505050565b6000600582815481101515612ac157fe5b90600052602060002090600402019050600281600301540281600301819055507f65ebcae8ac3c4d68cdc935d956a07bf13a20381f173715256c5ccf85a334ab54826040518082815260200191505060405180910390a15050565b6000806000612b2a84611501565b91506009600085815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612c005750805b9250505092915050565b600080612c2c8573ffffffffffffffffffffffffffffffffffffffff16612edf565b1515612c3b5760019150612def565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cfd578082015181840152602081019050612ce2565b50505050905090810190601f168015612d2a5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015612d4b57600080fd5b505af1158015612d5f573d6000803e3d6000fd5b505050506040513d6020811015612d7557600080fd5b8101908080519060200190929190505050905063f0b9e5ba7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505b50949350505050565b6000828211151515612e0657fe5b818303905092915050565b6000808284019050838110151515612e2557fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e6b57600080fd5b612e7582826125a1565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080823b905060008111915050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f3357805160ff1916838001178555612f61565b82800160010185558215612f61579182015b82811115612f60578251825591602001919060010190612f45565b5b509050612f6e919061301e565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612fb357805160ff1916838001178555612fe1565b82800160010185558215612fe1579182015b82811115612fe0578251825591602001919060010190612fc5565b5b509050612fee919061301e565b5090565b81548183558181111561301957818360005260206000209182019101613018919061301e565b5b505050565b61304091905b8082111561303c576000816000905550600101613024565b5090565b905600a165627a7a723058204929a06c47659529dec012ea1f3ff060d89f059864eeef2d688b78ec510af94b0029

Deployed Bytecode

0x60806040526004361061016a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde031461016f578063081812fc146101ff578063095ea7b31461026c57806323b872dd146102b95780632de3cddc146103265780632f745c591461035357806333b0f7f7146103b457806342842e0e146104a65780634f558e7914610513578063601b349c146105585780636352211e146105a557806367460c25146106125780636f9fb98a1461072557806370a0823114610750578063738d8d82146107a75780638da5cb5b146107d257806395d89b4114610829578063990cc5c9146108b95780639e3edce9146108d9578063a22cb4651461094c578063b1a2d4d41461099b578063b88d4fde14610a20578063bf90efa114610ad3578063ce2fc87314610c58578063d4bd5a0d14610ccb578063e7422d2914610d18578063e985e9c514610d2f578063f2fde38b14610daa575b600080fd5b34801561017b57600080fd5b50610184610ded565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c45780820151818401526020810190506101a9565b50505050905090810190601f1680156101f15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020b57600080fd5b5061022a60048036038101908080359060200190929190505050610e8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027857600080fd5b506102b7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ec8565b005b3480156102c557600080fd5b50610324600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108e565b005b34801561033257600080fd5b50610351600480360381019080803590602001909291905050506111a5565b005b34801561035f57600080fd5b5061039e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061120a565b6040518082815260200191505060405180910390f35b6104a4600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050611281565b005b3480156104b257600080fd5b50610511600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061135b565b005b34801561051f57600080fd5b5061053e60048036038101908080359060200190929190505050611393565b604051808215151515815260200191505060405180910390f35b34801561056457600080fd5b506105a360048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611405565b005b3480156105b157600080fd5b506105d060048036038101908080359060200190929190505050611501565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061e57600080fd5b5061070f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919050505061157f565b6040518082815260200191505060405180910390f35b34801561073157600080fd5b5061073a6116a6565b6040518082815260200191505060405180910390f35b34801561075c57600080fd5b50610791600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c5565b6040518082815260200191505060405180910390f35b3480156107b357600080fd5b506107bc611749565b6040518082815260200191505060405180910390f35b3480156107de57600080fd5b506107e7611756565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083557600080fd5b5061083e61177b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108d760048036038101908080359060200190929190505050611819565b005b3480156108e557600080fd5b5061094a60048036038101908080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506119db565b005b34801561095857600080fd5b50610999600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a68565b005b3480156109a757600080fd5b50610a0660048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba4565b604051808215151515815260200191505060405180910390f35b348015610a2c57600080fd5b50610ad1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611be0565b005b348015610adf57600080fd5b50610afe60048036038101908080359060200190929190505050611c1f565b60405180806020018060200180602001858152602001848103845288818151815260200191508051906020019080838360005b83811015610b4c578082015181840152602081019050610b31565b50505050905090810190601f168015610b795780820380516001836020036101000a031916815260200191505b50848103835287818151815260200191508051906020019080838360005b83811015610bb2578082015181840152602081019050610b97565b50505050905090810190601f168015610bdf5780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360005b83811015610c18578082015181840152602081019050610bfd565b50505050905090810190601f168015610c455780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b348015610c6457600080fd5b50610cc960048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611e26565b005b348015610cd757600080fd5b50610d1660048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eb3565b005b348015610d2457600080fd5b50610d2d611faf565b005b348015610d3b57600080fd5b50610d90600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061208b565b604051808215151515815260200191505060405180910390f35b348015610db657600080fd5b50610deb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061211f565b005b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e835780601f10610e5857610100808354040283529160200191610e83565b820191906000526020600020905b815481529060010190602001808311610e6657829003601f168201915b505050505081565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ed382611501565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610f1057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f505750610f4f813361208b565b5b1515610f5b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16610f7c83610e8b565b73ffffffffffffffffffffffffffffffffffffffff16141580610fcc5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561108957826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35b505050565b806110993382612274565b15156110a457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156110e057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561111c57600080fd5b6111268483612309565b6111308483612472565b61113a83836125a1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561120057600080fd5b8060088190555050565b6000611215836116c5565b8210151561122257600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561126e57fe5b9060005260206000200154905092915050565b6000600854341015151561129457600080fd5b6001600560806040519081016040528088815260200187815260200186815260200185815250908060018154018082558091505090600182039060005260206000209060040201600090919290919091506000820151816000019080519060200190611301929190612ef2565b50602082015181600101908051906020019061131e929190612ef2565b50604082015181600201908051906020019061133b929190612ef2565b50606082015181600301555050039050611354816126fb565b5050505050565b806113663382612274565b151561137157600080fd5b61138d8484846020604051908101604052806000815250611be0565b50505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000823373ffffffffffffffffffffffffffffffffffffffff1661142882611501565b73ffffffffffffffffffffffffffffffffffffffff1614151561144a57600080fd5b61145384611501565b915060006009600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561157657600080fd5b80915050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115dd57600080fd5b600160056080604051908101604052808981526020018881526020018781526020018681525090806001815401808255809150509060018203906000526020600020906004020160009091929091909150600082015181600001908051906020019061164a929190612ef2565b506020820151816001019080519060200190611667929190612ef2565b506040820151816002019080519060200190611684929190612ef2565b5060608201518160030155505003905061169d816126fb565b50949350505050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561170257600080fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600580549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b505050505081565b6000806005805490508310151561182f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166001600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561189d57600080fd5b6005838154811015156118ac57fe5b90600052602060002090600402019150816003015434101515156118cf57600080fd5b6001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561195f576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b61196981846127d1565b61197333846129d9565b8073ffffffffffffffffffffffffffffffffffffffff166108fc6064605f8560030154028115156119a057fe5b049081150290604051600060405180830381858888f193505050501580156119cc573d6000803e3d6000fd5b506119d683612ab0565b505050565b6000826119e83382612b1c565b15156119f357600080fd5b600584815481101515611a0257fe5b9060005260206000209060040201915082826002019080519060200190611a2a929190612f72565b507f65ebcae8ac3c4d68cdc935d956a07bf13a20381f173715256c5ccf85a334ab54846040518082815260200191505060405180910390a150505050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611aa357600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6009602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b81611beb3382612274565b1515611bf657600080fd5b611c0185858561108e565b611c0d85858585612c0a565b1515611c1857600080fd5b5050505050565b600581815481101515611c2e57fe5b9060005260206000209060040201600091509050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cda5780601f10611caf57610100808354040283529160200191611cda565b820191906000526020600020905b815481529060010190602001808311611cbd57829003601f168201915b505050505090806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d785780601f10611d4d57610100808354040283529160200191611d78565b820191906000526020600020905b815481529060010190602001808311611d5b57829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e165780601f10611deb57610100808354040283529160200191611e16565b820191906000526020600020905b815481529060010190602001808311611df957829003601f168201915b5050505050908060030154905084565b600082611e333382612b1c565b1515611e3e57600080fd5b600584815481101515611e4d57fe5b9060005260206000209060040201915082826001019080519060200190611e75929190612f72565b507f65ebcae8ac3c4d68cdc935d956a07bf13a20381f173715256c5ccf85a334ab54846040518082815260200191505060405180910390a150505050565b6000823373ffffffffffffffffffffffffffffffffffffffff16611ed682611501565b73ffffffffffffffffffffffffffffffffffffffff16141515611ef857600080fd5b611f0184611501565b915060016009600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561200a57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015612088573d6000803e3d6000fd5b50565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561217a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156121b657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061228083611501565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122ef57508373ffffffffffffffffffffffffffffffffffffffff166122d784610e8b565b73ffffffffffffffffffffffffffffffffffffffff16145b8061230057506122ff818561208b565b5b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff1661232982611501565b73ffffffffffffffffffffffffffffffffffffffff1614151561234b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561246e5760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b5050565b8173ffffffffffffffffffffffffffffffffffffffff1661249282611501565b73ffffffffffffffffffffffffffffffffffffffff161415156124b457600080fd5b6125076001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df890919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561260f57600080fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126b46001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150509060018203906000526020600020016000909192909190915055508060076000848152602001908152602001600020819055506127cd3383612e2f565b5050565b60008060006127e08585612472565b600760008581526020019081526020016000205492506001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050039150600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561288a57fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811015156128e457fe5b90600052602060002001819055506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561294057fe5b9060005260206000200181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036129a09190612ff2565b50600060076000868152602001908152602001600020819055508260076000838152602001908152602001600020819055505050505050565b60006129e583836125a1565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050906001820390600052602060002001600090919290919091505550806007600084815260200190815260200160002081905550505050565b6000600582815481101515612ac157fe5b90600052602060002090600402019050600281600301540281600301819055507f65ebcae8ac3c4d68cdc935d956a07bf13a20381f173715256c5ccf85a334ab54826040518082815260200191505060405180910390a15050565b6000806000612b2a84611501565b91506009600085815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612c005750805b9250505092915050565b600080612c2c8573ffffffffffffffffffffffffffffffffffffffff16612edf565b1515612c3b5760019150612def565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cfd578082015181840152602081019050612ce2565b50505050905090810190601f168015612d2a5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015612d4b57600080fd5b505af1158015612d5f573d6000803e3d6000fd5b505050506040513d6020811015612d7557600080fd5b8101908080519060200190929190505050905063f0b9e5ba7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505b50949350505050565b6000828211151515612e0657fe5b818303905092915050565b6000808284019050838110151515612e2557fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e6b57600080fd5b612e7582826125a1565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080823b905060008111915050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f3357805160ff1916838001178555612f61565b82800160010185558215612f61579182015b82811115612f60578251825591602001919060010190612f45565b5b509050612f6e919061301e565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612fb357805160ff1916838001178555612fe1565b82800160010185558215612fe1579182015b82811115612fe0578251825591602001919060010190612fc5565b5b509050612fee919061301e565b5090565b81548183558181111561301957818360005260206000209182019101613018919061301e565b5b505050565b61304091905b8082111561303c576000816000905550600101613024565b5090565b905600a165627a7a723058204929a06c47659529dec012ea1f3ff060d89f059864eeef2d688b78ec510af94b0029

Swarm Source

bzzr://4929a06c47659529dec012ea1f3ff060d89f059864eeef2d688b78ec510af94b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.