ETH Price: $2,124.15 (+3.81%)

Contract

0xd030e4b885532144AA3c9c10EFEB283E51a4a3EE
 

Overview

ETH Balance

0.118255476336397489 ETH

Eth Value

$251.19 (@ $2,124.15/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Promo Emo...52909422018-03-20 19:30:012914 days ago1521574201IN
0xd030e4b8...E51a4a3EE
0 ETH0.001576475
Create Promo Emo...52908042018-03-20 19:01:082914 days ago1521572468IN
0xd030e4b8...E51a4a3EE
0 ETH0.001651155
Create Promo Emo...52907862018-03-20 18:56:152914 days ago1521572175IN
0xd030e4b8...E51a4a3EE
0 ETH0.001651475
Purchase51716182018-02-28 13:45:112934 days ago1519825511IN
0xd030e4b8...E51a4a3EE
0 ETH0.000116855
Purchase51436402018-02-23 19:20:192939 days ago1519413619IN
0xd030e4b8...E51a4a3EE
0.07225637 ETH0.000351642
Purchase51423042018-02-23 13:46:562939 days ago1519393616IN
0xd030e4b8...E51a4a3EE
0.07225637 ETH0.000643294
Purchase51334052018-02-22 1:32:012940 days ago1519263121IN
0xd030e4b8...E51a4a3EE
0.00493827 ETH0.000023371
Purchase51333862018-02-22 1:27:382941 days ago1519262858IN
0xd030e4b8...E51a4a3EE
0.07225637 ETH0.000729115
Purchase51333852018-02-22 1:26:392941 days ago1519262799IN
0xd030e4b8...E51a4a3EE
0.05419228 ETH0.000688975
Purchase51333822018-02-22 1:25:242941 days ago1519262724IN
0xd030e4b8...E51a4a3EE
0.07225637 ETH0.000874936
Purchase51333672018-02-22 1:20:452941 days ago1519262445IN
0xd030e4b8...E51a4a3EE
0.001 ETH0.000023371
Purchase51333612018-02-22 1:18:482941 days ago1519262328IN
0xd030e4b8...E51a4a3EE
0.05419228 ETH0.0020135212
Purchase51333582018-02-22 1:18:062941 days ago1519262286IN
0xd030e4b8...E51a4a3EE
0.02438652 ETH0.0036134525
Purchase51333572018-02-22 1:17:252941 days ago1519262245IN
0xd030e4b8...E51a4a3EE
0.01097393 ETH0.000116855
Purchase51333562018-02-22 1:17:132941 days ago1519262233IN
0xd030e4b8...E51a4a3EE
0.01097393 ETH0.000233710
Purchase51333562018-02-22 1:17:132941 days ago1519262233IN
0xd030e4b8...E51a4a3EE
0.01097393 ETH0.0024301820
Purchase51333532018-02-22 1:16:042941 days ago1519262164IN
0xd030e4b8...E51a4a3EE
0.02438652 ETH0.000467420
Purchase51333532018-02-22 1:16:042941 days ago1519262164IN
0xd030e4b8...E51a4a3EE
0.02438652 ETH0.0028907620
Purchase51333512018-02-22 1:15:082941 days ago1519262108IN
0xd030e4b8...E51a4a3EE
0.01097393 ETH0.001212078
Purchase51333492018-02-22 1:14:472941 days ago1519262087IN
0xd030e4b8...E51a4a3EE
0.05419228 ETH0.0015157311
Purchase51333452018-02-22 1:13:462941 days ago1519262026IN
0xd030e4b8...E51a4a3EE
0.00493827 ETH0.000282652.2
Purchase51333452018-02-22 1:13:462941 days ago1519262026IN
0xd030e4b8...E51a4a3EE
0.02438652 ETH0.000163597
Purchase51333442018-02-22 1:13:292941 days ago1519262009IN
0xd030e4b8...E51a4a3EE
0.01097393 ETH0.000046742
Purchase51333442018-02-22 1:13:292941 days ago1519262009IN
0xd030e4b8...E51a4a3EE
0.00493827 ETH0.000315652.2
Purchase51333432018-02-22 1:13:182941 days ago1519261998IN
0xd030e4b8...E51a4a3EE
0.02438652 ETH0.0015544512
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer51436402018-02-23 19:20:192939 days ago1519413619
0xd030e4b8...E51a4a3EE
0.00024386 ETH
Transfer51436402018-02-23 19:20:192939 days ago1519413619
0xd030e4b8...E51a4a3EE
0.00032515 ETH
Transfer51436402018-02-23 19:20:192939 days ago1519413619
0xd030e4b8...E51a4a3EE
0.00048773 ETH
Transfer51436402018-02-23 19:20:192939 days ago1519413619
0xd030e4b8...E51a4a3EE
0.00097546 ETH
Transfer51436402018-02-23 19:20:192939 days ago1519413619
0xd030e4b8...E51a4a3EE
0.00195092 ETH
Transfer51436402018-02-23 19:20:192939 days ago1519413619
0xd030e4b8...E51a4a3EE
0.01219326 ETH
Transfer51436402018-02-23 19:20:192939 days ago1519413619
0xd030e4b8...E51a4a3EE
0.05419228 ETH
Transfer51423042018-02-23 13:46:562939 days ago1519393616
0xd030e4b8...E51a4a3EE
0.00024386 ETH
Transfer51423042018-02-23 13:46:562939 days ago1519393616
0xd030e4b8...E51a4a3EE
0.00032515 ETH
Transfer51423042018-02-23 13:46:562939 days ago1519393616
0xd030e4b8...E51a4a3EE
0.00048773 ETH
Transfer51423042018-02-23 13:46:562939 days ago1519393616
0xd030e4b8...E51a4a3EE
0.00097546 ETH
Transfer51423042018-02-23 13:46:562939 days ago1519393616
0xd030e4b8...E51a4a3EE
0.00195092 ETH
Transfer51423042018-02-23 13:46:562939 days ago1519393616
0xd030e4b8...E51a4a3EE
0.01219326 ETH
Transfer51423042018-02-23 13:46:562939 days ago1519393616
0xd030e4b8...E51a4a3EE
0.05419228 ETH
Transfer51333862018-02-22 1:27:382941 days ago1519262858
0xd030e4b8...E51a4a3EE
0.00024386 ETH
Transfer51333862018-02-22 1:27:382941 days ago1519262858
0xd030e4b8...E51a4a3EE
0.00032515 ETH
Transfer51333862018-02-22 1:27:382941 days ago1519262858
0xd030e4b8...E51a4a3EE
0.00048773 ETH
Transfer51333862018-02-22 1:27:382941 days ago1519262858
0xd030e4b8...E51a4a3EE
0.00097546 ETH
Transfer51333862018-02-22 1:27:382941 days ago1519262858
0xd030e4b8...E51a4a3EE
0.00195092 ETH
Transfer51333862018-02-22 1:27:382941 days ago1519262858
0xd030e4b8...E51a4a3EE
0.01219326 ETH
Transfer51333862018-02-22 1:27:382941 days ago1519262858
0xd030e4b8...E51a4a3EE
0.05419228 ETH
Transfer51333852018-02-22 1:26:392941 days ago1519262799
0xd030e4b8...E51a4a3EE
0.0005365 ETH
Transfer51333852018-02-22 1:26:392941 days ago1519262799
0xd030e4b8...E51a4a3EE
0.00080475 ETH
Transfer51333852018-02-22 1:26:392941 days ago1519262799
0xd030e4b8...E51a4a3EE
0.00160951 ETH
Transfer51333852018-02-22 1:26:392941 days ago1519262799
0xd030e4b8...E51a4a3EE
0.00321902 ETH
View All Internal Transactions
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:
EmojiToken

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No with 200 runs

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

pragma solidity ^0.4.18; // solhint-disable-line



/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
/// @author Dieter Shirley <[email protected]> (https://github.com/dete)
contract ERC721 {
  // Required methods
  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;

  event Transfer(address indexed from, address indexed to, uint256 tokenId);
  event Approval(address indexed owner, address indexed approved, uint256 tokenId);

  // Optional
  // function name() public view returns (string name);
  // function symbol() public view returns (string symbol);
  // function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId);
  // function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl);
}

/// Modified from the CryptoCelebrities contract
contract EmojiToken is ERC721 {

  /*** EVENTS ***/

  /// @dev The Birth event is fired whenever a new emoji comes into existence.
  event Birth(uint256 tokenId, string name, address owner);

  /// @dev The TokenSold event is fired whenever a token is sold.
  event TokenSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, string name);

  /// @dev Transfer event as defined in current draft of ERC721. 
  ///  ownership is assigned, including births.
  event Transfer(address from, address to, uint256 tokenId);

  /*** CONSTANTS ***/

  /// @notice Name and symbol of the non fungible token, as defined in ERC721.
  string public constant NAME = "EmojiBlockchain"; // solhint-disable-line
  string public constant SYMBOL = "EmojiToken"; // solhint-disable-line

  uint256 private startingPrice = 0.001 ether;
  // The limit was 77, and the redeployment was for 65 emoji
  // That's why the limit here is 142
  uint256 private constant PROMO_CREATION_LIMIT = 142;
  uint256 private firstStepLimit =  0.05 ether;
  uint256 private secondStepLimit = 0.55 ether;

  /*** STORAGE ***/

  /// @dev A mapping from emoji IDs to the address that owns them. All emojis have
  ///  some valid owner address.
  mapping (uint256 => address) public emojiIndexToOwner;

  // @dev A mapping from owner address to count of tokens that address owns.
  //  Used internally inside balanceOf() to resolve ownership count.
  mapping (address => uint256) private ownershipTokenCount;

  /// @dev A mapping from EmojiIDs to an address that has been approved to call
  ///  transferFrom(). Each Emoji can only have one approved address for transfer
  ///  at any time. A zero value means no approval is outstanding.
  mapping (uint256 => address) public emojiIndexToApproved;

  // @dev A mapping from EmojiIDs to the price of the token.
  mapping (uint256 => uint256) private emojiIndexToPrice;
  
  /// @dev A mapping from EmojiIDs to the previpus price of the token. Used
  /// to calculate price delta for payouts
  mapping (uint256 => uint256) private emojiIndexToPreviousPrice;

  // MY THING
  // @dev A mapping from emojiId to the custom message the owner set.
  mapping (uint256 => string) private emojiIndexToCustomMessage;

  // @dev A mapping from emojiId to the 7 last owners.
  mapping (uint256 => address[7]) private emojiIndexToPreviousOwners;


  // The addresses of the accounts (or contracts) that can execute actions within each roles.
  address public ceoAddress;
  address public cooAddress;

  uint256 public promoCreatedCount;

  /*** DATATYPES ***/
  struct Emoji {
    string name;
  }

  Emoji[] private emojis;

  /*** ACCESS MODIFIERS ***/
  /// @dev Access modifier for CEO-only functionality
  modifier onlyCEO() {
    require(msg.sender == ceoAddress);
    _;
  }

  /// @dev Access modifier for COO-only functionality
  modifier onlyCOO() {
    require(msg.sender == cooAddress);
    _;
  }

  /// Access modifier for contract owner only functionality
  modifier onlyCLevel() {
    require(
      msg.sender == ceoAddress ||
      msg.sender == cooAddress
    );
    _;
  }

  /*** CONSTRUCTOR ***/
  function EmojiToken() public {
    ceoAddress = msg.sender;
    cooAddress = msg.sender;
  }

  /*** PUBLIC FUNCTIONS ***/
  /// @notice Grant another address the right to transfer token via takeOwnership() and transferFrom().
  /// @param _to The address to be granted transfer approval. Pass address(0) to
  ///  clear all approvals.
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function approve(
    address _to,
    uint256 _tokenId
  ) public {
    // Caller must own token.
    require(_owns(msg.sender, _tokenId));

    emojiIndexToApproved[_tokenId] = _to;

    Approval(msg.sender, _to, _tokenId);
  }

  /// For querying balance of a particular account
  /// @param _owner The address for balance query
  /// @dev Required for ERC-721 compliance.
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return ownershipTokenCount[_owner];
  }

  /// @dev Creates a new promo Emoji with the given name, with given _price and assignes it to an address.
  function createPromoEmoji(address _owner, string _name, uint256 _price) public onlyCOO {
    require(promoCreatedCount < PROMO_CREATION_LIMIT);

    address emojiOwner = _owner;
    if (emojiOwner == address(0)) {
      emojiOwner = cooAddress;
    }

    if (_price <= 0) {
      _price = startingPrice;
    }

    promoCreatedCount++;
    _createEmoji(_name, emojiOwner, _price);
  }

  /// @dev Creates a new Emoji with the given name.
  function createContractEmoji(string _name) public onlyCOO {
    _createEmoji(_name, address(this), startingPrice);
  }

  /// @notice Returns all the relevant information about a specific emoji.
  /// @param _tokenId The tokenId of the emoji of interest.
  function getEmoji(uint256 _tokenId) public view returns (
    string emojiName,
    uint256 sellingPrice,
    address owner,
    string message,
    uint256 previousPrice,
    address[7] previousOwners
  ) {
    Emoji storage emoji = emojis[_tokenId];
    emojiName = emoji.name;
    sellingPrice = emojiIndexToPrice[_tokenId];
    owner = emojiIndexToOwner[_tokenId];
    message = emojiIndexToCustomMessage[_tokenId];
    previousPrice = emojiIndexToPreviousPrice[_tokenId];
    previousOwners = emojiIndexToPreviousOwners[_tokenId];
  }

  function implementsERC721() public pure returns (bool) {
    return true;
  }

  /// @dev Required for ERC-721 compliance.
  function name() public pure returns (string) {
    return NAME;
  }

  /// For querying owner of token
  /// @param _tokenId The tokenID for owner inquiry
  /// @dev Required for ERC-721 compliance.
  function ownerOf(uint256 _tokenId)
    public
    view
    returns (address owner)
  {
    owner = emojiIndexToOwner[_tokenId];
    require(owner != address(0));
  }

  function payout(address _to) public onlyCLevel {
    _payout(_to);
  }

  // Allows owner to add short message to token
  // Limit is based on Twitter's tweet characterlimit
  function addMessage(uint256 _tokenId, string _message) public {
    require(_owns(msg.sender, _tokenId));
    require(bytes(_message).length<281);
    emojiIndexToCustomMessage[_tokenId] = _message;
  }

  // This function was added in order to give the ability
  // to manually set ownership history since this had to be
  // redeployed
  function setOwnershipHistory(uint256 _tokenId, address[7] _previousOwners) public onlyCOO {
    emojiIndexToPreviousOwners[_tokenId] = _previousOwners;
  }

  // This function was added in order to give the ability
  // to manually set the previous price since this had to 
  // be redeployed
  function setPreviousPrice(uint256 _tokenId, uint256 _previousPrice) public onlyCOO {
    emojiIndexToPreviousPrice[_tokenId] = _previousPrice;
  }

  // Allows someone to send ether and obtain the token
  function purchase(uint256 _tokenId) public payable {
    address oldOwner = emojiIndexToOwner[_tokenId];
    address newOwner = msg.sender;
    
    address[7] storage previousOwners = emojiIndexToPreviousOwners[_tokenId];

    uint256 sellingPrice = emojiIndexToPrice[_tokenId];
    uint256 previousPrice = emojiIndexToPreviousPrice[_tokenId];

    // Making sure token owner is not sending to self
    require(oldOwner != newOwner);

    // Safety check to prevent against an unexpected 0x0 default.
    require(_addressNotNull(newOwner));

    // Making sure sent amount is greater than or equal to the sellingPrice
    require(msg.value >= sellingPrice);

    uint256 priceDelta = SafeMath.sub(sellingPrice, previousPrice);
    uint256 payoutTotal = uint256(SafeMath.div(SafeMath.mul(priceDelta, 90), 100));
    uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice);
    // Update previous price
    emojiIndexToPreviousPrice[_tokenId] = sellingPrice; 
    // Update prices
    if (sellingPrice < firstStepLimit) {
      // first stage
      emojiIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 200), 90);
    } else if (sellingPrice < secondStepLimit) {
      // second stage
      emojiIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 120), 90);
    } else {
      // third stage
      emojiIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 115), 90);
    }

    _transfer(oldOwner, newOwner, _tokenId);

    // Pay previous tokenOwner if owner is not contract
    // and if previous price is not 0
    if (oldOwner != address(this) && previousPrice > 0) {
      // old owner gets entire initial payment back
      oldOwner.transfer(previousPrice);
    }
    
    // Next distribute payoutTotal among previous Owners
    // Do not distribute if previous owner is contract.
    // Split is: 75, 12, 6, 3, 2, 1.5, 0.5
    if (previousOwners[0] != address(this) && payoutTotal > 0) {
      previousOwners[0].transfer(uint256(SafeMath.div(SafeMath.mul(payoutTotal, 75), 100)));
    }
    if (previousOwners[1] != address(this) && payoutTotal > 0) {
      previousOwners[1].transfer(uint256(SafeMath.div(SafeMath.mul(payoutTotal, 12), 100)));
    }
    if (previousOwners[2] != address(this) && payoutTotal > 0) {
      previousOwners[2].transfer(uint256(SafeMath.div(SafeMath.mul(payoutTotal, 6), 100)));
    }
    if (previousOwners[3] != address(this) && payoutTotal > 0) {
      previousOwners[3].transfer(uint256(SafeMath.div(SafeMath.mul(payoutTotal, 3), 100)));
    }
    if (previousOwners[4] != address(this) && payoutTotal > 0) {
      previousOwners[4].transfer(uint256(SafeMath.div(SafeMath.mul(payoutTotal, 2), 100)));
    }
    if (previousOwners[5] != address(this) && payoutTotal > 0) {
      // divide by 1000 since percentage is 1.5
      previousOwners[5].transfer(uint256(SafeMath.div(SafeMath.mul(payoutTotal, 15), 1000)));
    }
    if (previousOwners[6] != address(this) && payoutTotal > 0) {
      // divide by 1000 since percentage is 0.5
      previousOwners[6].transfer(uint256(SafeMath.div(SafeMath.mul(payoutTotal, 5), 1000)));
    }
    
    TokenSold(_tokenId, sellingPrice, emojiIndexToPrice[_tokenId], oldOwner, newOwner, emojis[_tokenId].name);

    msg.sender.transfer(purchaseExcess);
  }

  function priceOf(uint256 _tokenId) public view returns (uint256 price) {
    return emojiIndexToPrice[_tokenId];
  }

  /// @dev Assigns a new address to act as the CEO. Only available to the current CEO.
  /// @param _newCEO The address of the new CEO
  function setCEO(address _newCEO) public onlyCEO {
    require(_newCEO != address(0));

    ceoAddress = _newCEO;
  }

  /// @dev Assigns a new address to act as the COO. Only available to the current COO.
  /// @param _newCOO The address of the new COO
  function setCOO(address _newCOO) public onlyCEO {
    require(_newCOO != address(0));
    cooAddress = _newCOO;
  }

  /// @dev Required for ERC-721 compliance.
  function symbol() public pure returns (string) {
    return SYMBOL;
  }

  /// @notice Allow pre-approved user to take ownership of a token
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function takeOwnership(uint256 _tokenId) public {
    address newOwner = msg.sender;
    address oldOwner = emojiIndexToOwner[_tokenId];

    // Safety check to prevent against an unexpected 0x0 default.
    require(_addressNotNull(newOwner));

    // Making sure transfer is approved
    require(_approved(newOwner, _tokenId));

    _transfer(oldOwner, newOwner, _tokenId);
  }

  /// @param _owner The owner whose emoji tokens we are interested in.
  /// @dev This method MUST NEVER be called by smart contract code. First, it's fairly
  ///  expensive (it walks the entire Emojis array looking for emojis belonging to owner),
  ///  but it also returns a dynamic array, which is only supported for web3 calls, and
  ///  not contract-to-contract calls.
  function tokensOfOwner(address _owner) public view returns(uint256[] ownerTokens) {
    uint256 tokenCount = balanceOf(_owner);
    if (tokenCount == 0) {
        // Return an empty array
      return new uint256[](0);
    } else {
      uint256[] memory result = new uint256[](tokenCount);
      uint256 totalEmojis = totalSupply();
      uint256 resultIndex = 0;
      uint256 emojiId;
      for (emojiId = 0; emojiId <= totalEmojis; emojiId++) {
        if (emojiIndexToOwner[emojiId] == _owner) {
          result[resultIndex] = emojiId;
          resultIndex++;
        }
      }
      return result;
    }
  }

  /// For querying totalSupply of token
  /// @dev Required for ERC-721 compliance.
  function totalSupply() public view returns (uint256 total) {
    return emojis.length;
  }

  /// Owner initates the transfer of the token to another account
  /// @param _to The address for the token to be transferred to.
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function transfer(
    address _to,
    uint256 _tokenId
  ) public {
    require(_owns(msg.sender, _tokenId));
    require(_addressNotNull(_to));
    _transfer(msg.sender, _to, _tokenId);
  }

  /// Third-party initiates transfer of token from address _from to address _to
  /// @param _from The address for the token to be transferred from.
  /// @param _to The address for the token to be transferred to.
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  ) public {
    require(_owns(_from, _tokenId));
    require(_approved(_to, _tokenId));
    require(_addressNotNull(_to));
    _transfer(_from, _to, _tokenId);
  }

  /*** PRIVATE FUNCTIONS ***/
  /// Safety check on _to address to prevent against an unexpected 0x0 default.
  function _addressNotNull(address _to) private pure returns (bool) {
    return _to != address(0);
  }

  /// For checking approval of transfer for address _to
  function _approved(address _to, uint256 _tokenId) private view returns (bool) {
    return emojiIndexToApproved[_tokenId] == _to;
  }

  /// For creating Emoji
  function _createEmoji(string _name, address _owner, uint256 _price) private {
    Emoji memory _emoji = Emoji({
      name: _name
    });
    uint256 newEmojiId = emojis.push(_emoji) - 1;

    // It's probably never going to happen, 4 billion tokens are A LOT, but
    // let's just be 100% sure we never let this happen.
    require(newEmojiId == uint256(uint32(newEmojiId)));

    Birth(newEmojiId, _name, _owner);

    emojiIndexToPrice[newEmojiId] = _price;
    emojiIndexToPreviousPrice[newEmojiId] = 0;
    emojiIndexToCustomMessage[newEmojiId] = 'hi';
    emojiIndexToPreviousOwners[newEmojiId] =
        [address(this), address(this), address(this), address(this), address(this), address(this), address(this)];

    // This will assign ownership, and also emit the Transfer event as
    // per ERC721 draft
    _transfer(address(0), _owner, newEmojiId);
  }

  /// Check for token ownership
  function _owns(address claimant, uint256 _tokenId) private view returns (bool) {
    return claimant == emojiIndexToOwner[_tokenId];
  }

  /// For paying out balance on contract
  function _payout(address _to) private {
    if (_to == address(0)) {
      ceoAddress.transfer(this.balance);
    } else {
      _to.transfer(this.balance);
    }
  }

  /// @dev Assigns ownership of a specific Emoji to an address.
  function _transfer(address _from, address _to, uint256 _tokenId) private {
    // Since the number of emojis is capped to 2^32 we can't overflow this
    ownershipTokenCount[_to]++;
    //transfer ownership
    emojiIndexToOwner[_tokenId] = _to;
    // When creating new emojis _from is 0x0, but we can't account that address.
    if (_from != address(0)) {
      ownershipTokenCount[_from]--;
      // clear any previously approved ownership exchange
      delete emojiIndexToApproved[_tokenId];
    }
    // Update the emojiIndexToPreviousOwners
    emojiIndexToPreviousOwners[_tokenId][6]=emojiIndexToPreviousOwners[_tokenId][5];
    emojiIndexToPreviousOwners[_tokenId][5]=emojiIndexToPreviousOwners[_tokenId][4];
    emojiIndexToPreviousOwners[_tokenId][4]=emojiIndexToPreviousOwners[_tokenId][3];
    emojiIndexToPreviousOwners[_tokenId][3]=emojiIndexToPreviousOwners[_tokenId][2];
    emojiIndexToPreviousOwners[_tokenId][2]=emojiIndexToPreviousOwners[_tokenId][1];
    emojiIndexToPreviousOwners[_tokenId][1]=emojiIndexToPreviousOwners[_tokenId][0];
    // the _from address for creation is 0, so instead set it to the contract address
    if (_from != address(0)) {
        emojiIndexToPreviousOwners[_tokenId][0]=_from;
    } else {
        emojiIndexToPreviousOwners[_tokenId][0]=address(this);
    }
    // Emit the transfer event.
    Transfer(_from, _to, _tokenId);
  }
}
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 Substracts 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;
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"promoCreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"payout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_previousOwners","type":"address[7]"}],"name":"setOwnershipHistory","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"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":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_name","type":"string"},{"name":"_price","type":"uint256"}],"name":"createPromoEmoji","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":"_name","type":"string"}],"name":"createContractEmoji","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"emojiIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"emojiIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_previousPrice","type":"uint256"}],"name":"setPreviousPrice","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":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"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":"_tokenId","type":"uint256"},{"name":"_message","type":"string"}],"name":"addMessage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getEmoji","outputs":[{"name":"emojiName","type":"string"},{"name":"sellingPrice","type":"uint256"},{"name":"owner","type":"address"},{"name":"message","type":"string"},{"name":"previousPrice","type":"uint256"},{"name":"previousOwners","type":"address[7]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"owner","type":"address"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"oldPrice","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"},{"indexed":false,"name":"prevOwner","type":"address"},{"indexed":false,"name":"winner","type":"address"},{"indexed":false,"name":"name","type":"string"}],"name":"TokenSold","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"}]

606060405266038d7ea4c6800060005566b1a2bc2ec500006001556707a1fe1602770000600255341561003157600080fd5b33600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061345f806100c26000396000f300606060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e455461461017a57806306fdde03146101a3578063095ea7b3146102315780630a0f8168146102735780630b7e9c44146102c85780631051db3414610301578063166a761d1461032e57806318160ddd1461037d57806323b872dd146103a657806327a8a05b1461040757806327d7874c1461048c5780632ba73c15146104c557806344814802146104fe5780634d8a5a571461055b5780634ea409fa146105be5780636352211e1461062157806370a08231146106845780637638efa7146106d15780638462151c146106fd57806395d89b411461078b578063a3f4df7e14610819578063a9059cbb146108a7578063afa49875146108e9578063b047fb501461094f578063b2e6ceeb146109a4578063b9186d7d146109c7578063be7d97b3146109fe578063efef39a114610b76578063f76f8d7814610b8e575b600080fd5b341561018557600080fd5b61018d610c1c565b6040518082815260200191505060405180910390f35b34156101ae57600080fd5b6101b6610c22565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561023c57600080fd5b610271600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610c65565b005b341561027e57600080fd5b610286610d35565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102d357600080fd5b6102ff600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610d5b565b005b341561030c57600080fd5b610314610e1b565b604051808215151515815260200191505060405180910390f35b341561033957600080fd5b61037b6004808035906020019091908060e001906007806020026040519081016040528092919082600760200280828437820191505050505091905050610e24565b005b341561038857600080fd5b610390610ea7565b6040518082815260200191505060405180910390f35b34156103b157600080fd5b610405600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610eb4565b005b341561041257600080fd5b61048a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050610f02565b005b341561049757600080fd5b6104c3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611002565b005b34156104d057600080fd5b6104fc600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506110de565b005b341561050957600080fd5b610559600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506111ba565b005b341561056657600080fd5b61057c6004808035906020019091905050611226565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105c957600080fd5b6105df6004808035906020019091905050611259565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561062c57600080fd5b610642600480803590602001909190505061128c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561068f57600080fd5b6106bb600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611305565b6040518082815260200191505060405180910390f35b34156106dc57600080fd5b6106fb600480803590602001909190803590602001909190505061134e565b005b341561070857600080fd5b610734600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113c6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561077757808201518184015260208101905061075c565b505050509050019250505060405180910390f35b341561079657600080fd5b61079e6114fd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107de5780820151818401526020810190506107c3565b50505050905090810190601f16801561080b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561082457600080fd5b61082c611540565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561086c578082015181840152602081019050610851565b50505050905090810190601f1680156108995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108b257600080fd5b6108e7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611579565b005b34156108f457600080fd5b61094d600480803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506115b1565b005b341561095a57600080fd5b610962611603565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109af57600080fd5b6109c56004808035906020019091905050611629565b005b34156109d257600080fd5b6109e8600480803590602001909190505061169e565b6040518082815260200191505060405180910390f35b3415610a0957600080fd5b610a1f60048080359060200190919050506116bb565b60405180806020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200185815260200184600760200280838360005b83811015610a90578082015181840152602081019050610a75565b50505050905001838103835289818151815260200191508051906020019080838360005b83811015610acf578082015181840152602081019050610ab4565b50505050905090810190601f168015610afc5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015610b35578082015181840152602081019050610b1a565b50505050905090810190601f168015610b625780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b610b8c6004808035906020019091905050611936565b005b3415610b9957600080fd5b610ba1612400565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610be1578082015181840152602081019050610bc6565b50505050905090810190601f168015610c0e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600c5481565b610c2a613117565b6040805190810160405280600f81526020017f456d6f6a69426c6f636b636861696e0000000000000000000000000000000000815250905090565b610c6f3382612439565b1515610c7a57600080fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e045750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610e0f57600080fd5b610e18816124a5565b50565b60006001905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e8057600080fd5b8060096000848152602001908152602001600020906007610ea292919061312b565b505050565b6000600d80549050905090565b610ebe8382612439565b1515610ec957600080fd5b610ed382826125b3565b1515610ede57600080fd5b610ee78261261f565b1515610ef257600080fd5b610efd838383612658565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f6057600080fd5b608e600c54101515610f7157600080fd5b839050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fcf57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600082111515610fdf5760005491505b600c60008154809291906001019190505550610ffc838284612d2a565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561105e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561109a57600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561113a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561117657600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561121657600080fd5b6112238130600054612d2a565b50565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561130057600080fd5b919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113aa57600080fd5b8060076000848152602001908152602001600020819055505050565b6113ce6131a8565b60006113d86131a8565b60008060006113e687611305565b945060008514156114185760006040518059106114005750595b908082528060200260200182016040525095506114f3565b846040518059106114265750595b90808252806020026020018201604052509350611441610ea7565b925060009150600090505b82811115156114ef578673ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114e2578084838151811015156114cb57fe5b906020019060200201818152505081806001019250505b808060010191505061144c565b8395505b5050505050919050565b611505613117565b6040805190810160405280600a81526020017f456d6f6a69546f6b656e00000000000000000000000000000000000000000000815250905090565b6040805190810160405280600f81526020017f456d6f6a69426c6f636b636861696e000000000000000000000000000000000081525081565b6115833382612439565b151561158e57600080fd5b6115978261261f565b15156115a257600080fd5b6115ad338383612658565b5050565b6115bb3383612439565b15156115c657600080fd5b61011981511015156115d757600080fd5b806008600084815260200190815260200160002090805190602001906115fe9291906131bc565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803391506003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061166e8261261f565b151561167957600080fd5b61168382846125b3565b151561168e57600080fd5b611699818385612658565b505050565b600060066000838152602001908152602001600020549050919050565b6116c3613117565b6000806116ce613117565b60006116d861323c565b6000600d888154811015156116e957fe5b90600052602060002090019050806000018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b50505050509650600660008981526020019081526020016000205495506003600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450600860008981526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118885780601f1061185d57610100808354040283529160200191611888565b820191906000526020600020905b81548152906001019060200180831161186b57829003601f168201915b505050505093506007600089815260200190815260200160002054925060096000898152602001908152602001600020600780602002604051908101604052809291908260078015611925576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118db575b505050505091505091939550919395565b600080600080600080600080600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169750339650600960008a81526020019081526020016000209550600660008a8152602001908152602001600020549450600760008a81526020019081526020016000205493508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141515156119f757600080fd5b611a008761261f565b1515611a0b57600080fd5b843410151515611a1a57600080fd5b611a2485856130a8565b9250611a3b611a3484605a6130c1565b60646130fc565b9150611a4734866130a8565b905084600760008b815260200190815260200160002081905550600154851015611a9c57611a80611a798660c86130c1565b605a6130fc565b600660008b815260200190815260200160002081905550611b05565b600254851015611ad757611abb611ab48660786130c1565b605a6130fc565b600660008b815260200190815260200160002081905550611b04565b611aec611ae58660736130c1565b605a6130fc565b600660008b8152602001908152602001600020819055505b5b611b1088888b612658565b3073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015611b4c5750600084115b15611b92578773ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501515611b9157600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866000600781101515611bb857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611bfe5750600082115b15611c8857856000600781101515611c1257fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c62611c5b85604b6130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611c8757600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866001600781101515611cae57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611cf45750600082115b15611d7e57856001600781101515611d0857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611d58611d5185600c6130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611d7d57600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866002600781101515611da457fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611dea5750600082115b15611e7457856002600781101515611dfe57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611e4e611e478560066130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611e7357600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866003600781101515611e9a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611ee05750600082115b15611f6a57856003600781101515611ef457fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611f44611f3d8560036130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611f6957600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866004600781101515611f9057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611fd65750600082115b1561206057856004600781101515611fea57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61203a6120338560026130c1565b60646130fc565b9081150290604051600060405180830381858888f19350505050151561205f57600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff1686600560078110151561208657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156120cc5750600082115b15612157578560056007811015156120e057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61213161212985600f6130c1565b6103e86130fc565b9081150290604051600060405180830381858888f19350505050151561215657600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff1686600660078110151561217d57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156121c35750600082115b1561224e578560066007811015156121d757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6122286122208560056130c1565b6103e86130fc565b9081150290604051600060405180830381858888f19350505050151561224d57600080fd5b5b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f8986600660008d8152602001908152602001600020548b8b600d8f81548110151561229557fe5b9060005260206000209001600001604051808781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156123a25780601f10612377576101008083540402835291602001916123a2565b820191906000526020600020905b81548152906001019060200180831161238557829003601f168201915b505097505050505050505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156123f557600080fd5b505050505050505050565b6040805190810160405280600a81526020017f456d6f6a69546f6b656e0000000000000000000000000000000000000000000081525081565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255857600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561255357600080fd5b6125b0565b8073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015156125af57600080fd5b5b50565b60008273ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415156127b657600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001900391905055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6009600082815260200190815260200160002060056007811015156127d757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660096000838152602001908152602001600020600660078110151561281a57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060096000828152602001908152602001600020600460078110151561287a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060056007811015156128bd57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060096000828152602001908152602001600020600360078110151561291d57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660096000838152602001908152602001600020600460078110151561296057fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600082815260200190815260200160002060026007811015156129c057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960008381526020019081526020016000206003600781101515612a0357fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008281526020019081526020016000206001600781101515612a6357fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960008381526020019081526020016000206002600781101515612aa657fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008281526020019081526020016000206000600781101515612b0657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960008381526020019081526020016000206001600781101515612b4957fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515612c245782600960008381526020019081526020016000206000600781101515612be057fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612c86565b30600960008381526020019081526020016000206000600781101515612c4657fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b612d3261327a565b60006020604051908101604052808681525091506001600d8054806001018281612d5c9190613294565b916000526020600020900160008590919091506000820151816000019080519060200190612d8b9291906132c0565b5050500390508063ffffffff1681141515612da557600080fd5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef281868660405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612e41578082015181840152602081019050612e26565b50505050905090810190601f168015612e6e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1826006600083815260200190815260200160002081905550600060076000838152602001908152602001600020819055506040805190810160405280600281526020017f6869000000000000000000000000000000000000000000000000000000000000815250600860008381526020019081526020016000209080519060200190612f0a9291906131bc565b5060e0604051908101604052803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506009600083815260200190815260200160002090600761309492919061312b565b506130a160008583612658565b5050505050565b60008282111515156130b657fe5b818303905092915050565b60008060008414156130d657600091506130f5565b82840290508284828115156130e757fe5b041415156130f157fe5b8091505b5092915050565b600080828481151561310a57fe5b0490508091505092915050565b602060405190810160405280600081525090565b8260078101928215613197579160200282015b828111156131965782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061313e565b5b5090506131a49190613340565b5090565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106131fd57805160ff191683800117855561322b565b8280016001018555821561322b579182015b8281111561322a57825182559160200191906001019061320f565b5b5090506132389190613383565b5090565b60e0604051908101604052806007905b600073ffffffffffffffffffffffffffffffffffffffff1681526020019060019003908161324c5790505090565b60206040519081016040528061328e6133a8565b81525090565b8154818355818115116132bb578183600052602060002091820191016132ba91906133bc565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061330157805160ff191683800117855561332f565b8280016001018555821561332f579182015b8281111561332e578251825591602001919060010190613313565b5b50905061333c9190613383565b5090565b61338091905b8082111561337c57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613346565b5090565b90565b6133a591905b808211156133a1576000816000905550600101613389565b5090565b90565b602060405190810160405280600081525090565b6133e891905b808211156133e457600080820160006133db91906133eb565b506001016133c2565b5090565b90565b50805460018160011615610100020316600290046000825580601f106134115750613430565b601f01602090049060005260206000209081019061342f9190613383565b5b505600a165627a7a72305820642c5c7d721f453b818caa4e81168e260d85db2af21bdae130ea6bd889166ce50029

Deployed Bytecode

0x606060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e455461461017a57806306fdde03146101a3578063095ea7b3146102315780630a0f8168146102735780630b7e9c44146102c85780631051db3414610301578063166a761d1461032e57806318160ddd1461037d57806323b872dd146103a657806327a8a05b1461040757806327d7874c1461048c5780632ba73c15146104c557806344814802146104fe5780634d8a5a571461055b5780634ea409fa146105be5780636352211e1461062157806370a08231146106845780637638efa7146106d15780638462151c146106fd57806395d89b411461078b578063a3f4df7e14610819578063a9059cbb146108a7578063afa49875146108e9578063b047fb501461094f578063b2e6ceeb146109a4578063b9186d7d146109c7578063be7d97b3146109fe578063efef39a114610b76578063f76f8d7814610b8e575b600080fd5b341561018557600080fd5b61018d610c1c565b6040518082815260200191505060405180910390f35b34156101ae57600080fd5b6101b6610c22565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561023c57600080fd5b610271600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610c65565b005b341561027e57600080fd5b610286610d35565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102d357600080fd5b6102ff600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610d5b565b005b341561030c57600080fd5b610314610e1b565b604051808215151515815260200191505060405180910390f35b341561033957600080fd5b61037b6004808035906020019091908060e001906007806020026040519081016040528092919082600760200280828437820191505050505091905050610e24565b005b341561038857600080fd5b610390610ea7565b6040518082815260200191505060405180910390f35b34156103b157600080fd5b610405600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610eb4565b005b341561041257600080fd5b61048a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050610f02565b005b341561049757600080fd5b6104c3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611002565b005b34156104d057600080fd5b6104fc600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506110de565b005b341561050957600080fd5b610559600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506111ba565b005b341561056657600080fd5b61057c6004808035906020019091905050611226565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105c957600080fd5b6105df6004808035906020019091905050611259565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561062c57600080fd5b610642600480803590602001909190505061128c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561068f57600080fd5b6106bb600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611305565b6040518082815260200191505060405180910390f35b34156106dc57600080fd5b6106fb600480803590602001909190803590602001909190505061134e565b005b341561070857600080fd5b610734600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113c6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561077757808201518184015260208101905061075c565b505050509050019250505060405180910390f35b341561079657600080fd5b61079e6114fd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107de5780820151818401526020810190506107c3565b50505050905090810190601f16801561080b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561082457600080fd5b61082c611540565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561086c578082015181840152602081019050610851565b50505050905090810190601f1680156108995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108b257600080fd5b6108e7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611579565b005b34156108f457600080fd5b61094d600480803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506115b1565b005b341561095a57600080fd5b610962611603565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109af57600080fd5b6109c56004808035906020019091905050611629565b005b34156109d257600080fd5b6109e8600480803590602001909190505061169e565b6040518082815260200191505060405180910390f35b3415610a0957600080fd5b610a1f60048080359060200190919050506116bb565b60405180806020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200185815260200184600760200280838360005b83811015610a90578082015181840152602081019050610a75565b50505050905001838103835289818151815260200191508051906020019080838360005b83811015610acf578082015181840152602081019050610ab4565b50505050905090810190601f168015610afc5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015610b35578082015181840152602081019050610b1a565b50505050905090810190601f168015610b625780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b610b8c6004808035906020019091905050611936565b005b3415610b9957600080fd5b610ba1612400565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610be1578082015181840152602081019050610bc6565b50505050905090810190601f168015610c0e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600c5481565b610c2a613117565b6040805190810160405280600f81526020017f456d6f6a69426c6f636b636861696e0000000000000000000000000000000000815250905090565b610c6f3382612439565b1515610c7a57600080fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e045750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610e0f57600080fd5b610e18816124a5565b50565b60006001905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e8057600080fd5b8060096000848152602001908152602001600020906007610ea292919061312b565b505050565b6000600d80549050905090565b610ebe8382612439565b1515610ec957600080fd5b610ed382826125b3565b1515610ede57600080fd5b610ee78261261f565b1515610ef257600080fd5b610efd838383612658565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f6057600080fd5b608e600c54101515610f7157600080fd5b839050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fcf57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600082111515610fdf5760005491505b600c60008154809291906001019190505550610ffc838284612d2a565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561105e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561109a57600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561113a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561117657600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561121657600080fd5b6112238130600054612d2a565b50565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561130057600080fd5b919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113aa57600080fd5b8060076000848152602001908152602001600020819055505050565b6113ce6131a8565b60006113d86131a8565b60008060006113e687611305565b945060008514156114185760006040518059106114005750595b908082528060200260200182016040525095506114f3565b846040518059106114265750595b90808252806020026020018201604052509350611441610ea7565b925060009150600090505b82811115156114ef578673ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114e2578084838151811015156114cb57fe5b906020019060200201818152505081806001019250505b808060010191505061144c565b8395505b5050505050919050565b611505613117565b6040805190810160405280600a81526020017f456d6f6a69546f6b656e00000000000000000000000000000000000000000000815250905090565b6040805190810160405280600f81526020017f456d6f6a69426c6f636b636861696e000000000000000000000000000000000081525081565b6115833382612439565b151561158e57600080fd5b6115978261261f565b15156115a257600080fd5b6115ad338383612658565b5050565b6115bb3383612439565b15156115c657600080fd5b61011981511015156115d757600080fd5b806008600084815260200190815260200160002090805190602001906115fe9291906131bc565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803391506003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061166e8261261f565b151561167957600080fd5b61168382846125b3565b151561168e57600080fd5b611699818385612658565b505050565b600060066000838152602001908152602001600020549050919050565b6116c3613117565b6000806116ce613117565b60006116d861323c565b6000600d888154811015156116e957fe5b90600052602060002090019050806000018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b50505050509650600660008981526020019081526020016000205495506003600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450600860008981526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118885780601f1061185d57610100808354040283529160200191611888565b820191906000526020600020905b81548152906001019060200180831161186b57829003601f168201915b505050505093506007600089815260200190815260200160002054925060096000898152602001908152602001600020600780602002604051908101604052809291908260078015611925576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118db575b505050505091505091939550919395565b600080600080600080600080600360008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169750339650600960008a81526020019081526020016000209550600660008a8152602001908152602001600020549450600760008a81526020019081526020016000205493508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141515156119f757600080fd5b611a008761261f565b1515611a0b57600080fd5b843410151515611a1a57600080fd5b611a2485856130a8565b9250611a3b611a3484605a6130c1565b60646130fc565b9150611a4734866130a8565b905084600760008b815260200190815260200160002081905550600154851015611a9c57611a80611a798660c86130c1565b605a6130fc565b600660008b815260200190815260200160002081905550611b05565b600254851015611ad757611abb611ab48660786130c1565b605a6130fc565b600660008b815260200190815260200160002081905550611b04565b611aec611ae58660736130c1565b605a6130fc565b600660008b8152602001908152602001600020819055505b5b611b1088888b612658565b3073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015611b4c5750600084115b15611b92578773ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501515611b9157600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866000600781101515611bb857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611bfe5750600082115b15611c8857856000600781101515611c1257fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c62611c5b85604b6130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611c8757600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866001600781101515611cae57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611cf45750600082115b15611d7e57856001600781101515611d0857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611d58611d5185600c6130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611d7d57600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866002600781101515611da457fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611dea5750600082115b15611e7457856002600781101515611dfe57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611e4e611e478560066130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611e7357600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866003600781101515611e9a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611ee05750600082115b15611f6a57856003600781101515611ef457fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611f44611f3d8560036130c1565b60646130fc565b9081150290604051600060405180830381858888f193505050501515611f6957600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff16866004600781101515611f9057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611fd65750600082115b1561206057856004600781101515611fea57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61203a6120338560026130c1565b60646130fc565b9081150290604051600060405180830381858888f19350505050151561205f57600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff1686600560078110151561208657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156120cc5750600082115b15612157578560056007811015156120e057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61213161212985600f6130c1565b6103e86130fc565b9081150290604051600060405180830381858888f19350505050151561215657600080fd5b5b3073ffffffffffffffffffffffffffffffffffffffff1686600660078110151561217d57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156121c35750600082115b1561224e578560066007811015156121d757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6122286122208560056130c1565b6103e86130fc565b9081150290604051600060405180830381858888f19350505050151561224d57600080fd5b5b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f8986600660008d8152602001908152602001600020548b8b600d8f81548110151561229557fe5b9060005260206000209001600001604051808781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156123a25780601f10612377576101008083540402835291602001916123a2565b820191906000526020600020905b81548152906001019060200180831161238557829003601f168201915b505097505050505050505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156123f557600080fd5b505050505050505050565b6040805190810160405280600a81526020017f456d6f6a69546f6b656e0000000000000000000000000000000000000000000081525081565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255857600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561255357600080fd5b6125b0565b8073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015156125af57600080fd5b5b50565b60008273ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415156127b657600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001900391905055506005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b6009600082815260200190815260200160002060056007811015156127d757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660096000838152602001908152602001600020600660078110151561281a57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060096000828152602001908152602001600020600460078110151561287a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060056007811015156128bd57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060096000828152602001908152602001600020600360078110151561291d57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660096000838152602001908152602001600020600460078110151561296057fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600082815260200190815260200160002060026007811015156129c057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960008381526020019081526020016000206003600781101515612a0357fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008281526020019081526020016000206001600781101515612a6357fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960008381526020019081526020016000206002600781101515612aa657fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008281526020019081526020016000206000600781101515612b0657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960008381526020019081526020016000206001600781101515612b4957fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515612c245782600960008381526020019081526020016000206000600781101515612be057fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612c86565b30600960008381526020019081526020016000206000600781101515612c4657fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b612d3261327a565b60006020604051908101604052808681525091506001600d8054806001018281612d5c9190613294565b916000526020600020900160008590919091506000820151816000019080519060200190612d8b9291906132c0565b5050500390508063ffffffff1681141515612da557600080fd5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef281868660405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612e41578082015181840152602081019050612e26565b50505050905090810190601f168015612e6e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1826006600083815260200190815260200160002081905550600060076000838152602001908152602001600020819055506040805190810160405280600281526020017f6869000000000000000000000000000000000000000000000000000000000000815250600860008381526020019081526020016000209080519060200190612f0a9291906131bc565b5060e0604051908101604052803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506009600083815260200190815260200160002090600761309492919061312b565b506130a160008583612658565b5050505050565b60008282111515156130b657fe5b818303905092915050565b60008060008414156130d657600091506130f5565b82840290508284828115156130e757fe5b041415156130f157fe5b8091505b5092915050565b600080828481151561310a57fe5b0490508091505092915050565b602060405190810160405280600081525090565b8260078101928215613197579160200282015b828111156131965782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061313e565b5b5090506131a49190613340565b5090565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106131fd57805160ff191683800117855561322b565b8280016001018555821561322b579182015b8281111561322a57825182559160200191906001019061320f565b5b5090506132389190613383565b5090565b60e0604051908101604052806007905b600073ffffffffffffffffffffffffffffffffffffffff1681526020019060019003908161324c5790505090565b60206040519081016040528061328e6133a8565b81525090565b8154818355818115116132bb578183600052602060002091820191016132ba91906133bc565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061330157805160ff191683800117855561332f565b8280016001018555821561332f579182015b8281111561332e578251825591602001919060010190613313565b5b50905061333c9190613383565b5090565b61338091905b8082111561337c57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613346565b5090565b90565b6133a591905b808211156133a1576000816000905550600101613389565b5090565b90565b602060405190810160405280600081525090565b6133e891905b808211156133e457600080820160006133db91906133eb565b506001016133c2565b5090565b90565b50805460018160011615610100020316600290046000825580601f106134115750613430565b601f01602090049060005260206000209081019061342f9190613383565b5b505600a165627a7a72305820642c5c7d721f453b818caa4e81168e260d85db2af21bdae130ea6bd889166ce50029

Swarm Source

bzzr://642c5c7d721f453b818caa4e81168e260d85db2af21bdae130ea6bd889166ce5

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.