Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 35 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x35d415bf0e6bbf8e10eba814e10325c46a2cf009at txn 0xd2c940886ae71e4de0fdc11fddf2644d17c56a3c03217d307d324f192e2cd8c9
 Latest 25 transactions from a total of 35 transactions

TxHash Age From To Value [TxFee]
0x6babf99be628e5ec8420b84da604f21415e3c696bc5aee59047bd517f99ad4e022 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000259449
0xd981cbe0b5d3672ebf6537cc0b51cd9a08848ae136aa83bd939fa464575125dd22 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000259449
0x4df83d5684e36226d6199cce421bed921531e7425f69f8e9cef4a76d6d4a4e6522 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000432415
0xb14a11b081540b9106c54dee8b26f25b66dbd1ec2ea9c70eba1cc49db64bae2c22 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000432415
0x87588913aefb04b37693ebcb2f71e05dcf3f51f31598440fb34697f5ff94fb5022 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000259449
0xebe18d659cf8d579a5dbe35b64d47404c349cfa93d71ee0ab2d997fcf487b34122 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000259449
0x84f3fadff7ec08e036f6a931ab26621e9733ba06706764de3725b0fd68f806af22 days 16 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000259449
0xee62f12df9954dcd57c66c0f82ae9221553eb8bcaa53f6a50c6671280940ecd622 days 16 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000259449
0x31eed1bc5dc1710a4b3cce140fd618b98314c1992f7e2df327bc14b552f8c38f22 days 16 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000518898
0xebe2ce123228190281af3e8ed94a84fffbb0fc48f4932998f2fa61d8ef6dfe4423 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.0003891735
0xb619d7300175426dcf06d63c5327259d343b0d1c1c006a7e67cac07dd889be6723 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000605381
0x8388c682300b7ddfeadcf80d454dcaf4f5dfa1965798836d7610d363ccd28f1823 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000605381
0x1ee092cef540f5d8ebcd6d5ae162ce0132eee14180224af8ac2e55bfb0914b8f23 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000605157
0x3dbd0415bfc024d0275e94b4e2a95a83b974546e575fe571643a934d77d00e0c23 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000605157
0xce6af5ebb4f09b7e1e95c5ac117db661c06f28de452dea81856178da8152a9b723 days 15 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000604933
0xbcb858bc03c8273b892f59afd0f9c8d263703f4ba29dd82eb80239566a2346d223 days 20 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000432255
0xfb149361d0b887e25a04df7c2a1e03d6f46e6c2fac6cf0b6a1383eb0336928cf27 days 23 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000386903937
0x420ba275fea409baeef671f80ab2435963447860b3b507f0702eaca7d01610d228 days 14 mins ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000584421
0x6a62e5bb2b7a846ec8337b2114eea8b65103b26659d4fc63b52a735c516321e828 days 22 hrs ago0xbace399cc2cea1ea6542ca09a0df55d70ee06e7e  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000113076
0x402a268d3ec60670e2c920b09e257798301ab5daa17901dae4c6707d4f6e660629 days 9 hrs ago0xfe6cbe317e96b5014e02467820fbe6522d894aef  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000084807
0xd7accfd042394cd4e47228913dfba4e403832760e1dd44acb9c59766db0aa86529 days 11 hrs ago0x1a0835c8d0fea2f321c39ce4ca4d22f63345d7ed  IN   0x744a31ede5422355d9c2bd8c44c710404336ca848 Ether0.0002197822
0x88cb17b1720cfd5c725283e206259c7b7ccf2ed7d1b7c6c5dabe4fe3816448b941 days 2 hrs ago0x533a99a1292c7ddb74621bf288f50fa34d42c79e  IN   0x744a31ede5422355d9c2bd8c44c710404336ca848 Ether0.000277203
0x62f25f619b68df56b2abc8de1403856a088e4a5b3f6479aa94505f7ce77f9e1542 days 21 hrs ago0x533a99a1292c7ddb74621bf288f50fa34d42c79e  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.000208269
0x0a950c8934581115306f9da1d2737de989e99548bb5cdf347d9ded9dcf3b999546 days 18 hrs ago0x35d415bf0e6bbf8e10eba814e10325c46a2cf009  IN   0x744a31ede5422355d9c2bd8c44c710404336ca848.5 Ether0.0007088466
0x1213fba1800fc90c8f072abafc69d766ecc09797ef9b3be08d9b3695910adeaa46 days 23 hrs ago0x533a99a1292c7ddb74621bf288f50fa34d42c79e  IN   0x744a31ede5422355d9c2bd8c44c710404336ca840 Ether0.002026755
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 5 Internal Transactions

ParentTxHash Block Age From To Value
0xd7accfd042394cd4e47228913dfba4e403832760e1dd44acb9c59766db0aa865692773029 days 11 hrs ago0x744a31ede5422355d9c2bd8c44c710404336ca840x35d415bf0e6bbf8e10eba814e10325c46a2cf0098 Ether
0x88cb17b1720cfd5c725283e206259c7b7ccf2ed7d1b7c6c5dabe4fe3816448b9685822441 days 2 hrs ago0x744a31ede5422355d9c2bd8c44c710404336ca840x35d415bf0e6bbf8e10eba814e10325c46a2cf0098 Ether
0x0a950c8934581115306f9da1d2737de989e99548bb5cdf347d9ded9dcf3b9995682397746 days 18 hrs ago0x744a31ede5422355d9c2bd8c44c710404336ca840x533a99a1292c7ddb74621bf288f50fa34d42c79e8.5 Ether
0xc9a29edce2cf7774bbcfd834e46a63d465ff11136facd35b69de62d753bbe5f6681838747 days 16 hrs ago0x744a31ede5422355d9c2bd8c44c710404336ca840x35d415bf0e6bbf8e10eba814e10325c46a2cf0098 Ether
0xa8a8cd6bdc0ee58f84843d916776dfd100d9ffe95a7785799d10fd014d837ea5681830347 days 16 hrs ago0x744a31ede5422355d9c2bd8c44c710404336ca840x35d415bf0e6bbf8e10eba814e10325c46a2cf0098 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: NFTsCrowdsale
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;


/**
 * @title -NFTs crowdsale
 * NFTsCrowdsale provides a marketplace for NFTs
 *
 *  ██████╗ ██████╗   ██████╗  ██╗    ██╗ ██████╗  ███████╗  █████╗  ██╗      ███████╗ ██╗
 * ██╔════╝ ██╔══██╗ ██╔═══██╗ ██║    ██║ ██╔══██╗ ██╔════╝ ██╔══██╗ ██║      ██╔════╝ ██║
 * ██║      ██████╔╝ ██║   ██║ ██║ █╗ ██║ ██║  ██║ ███████╗ ███████║ ██║      █████╗   ██║
 * ██║      ██╔══██╗ ██║   ██║ ██║███╗██║ ██║  ██║ ╚════██║ ██╔══██║ ██║      ██╔══╝   ╚═╝
 * ╚██████╗ ██║  ██║ ╚██████╔╝ ╚███╔███╔╝ ██████╔╝ ███████║ ██║  ██║ ███████╗ ███████╗ ██╗
 *  ╚═════╝ ╚═╝  ╚═╝  ╚═════╝   ╚══╝╚══╝  ╚═════╝  ╚══════╝ ╚═╝  ╚═╝ ╚══════╝ ╚══════╝ ╚═╝
 *
 * ---
 * POWERED BY
 * ╦   ╔═╗ ╦═╗ ╔╦╗ ╦   ╔═╗ ╔═╗ ╔═╗      ╔╦╗ ╔═╗ ╔═╗ ╔╦╗
 * ║   ║ ║ ╠╦╝  ║║ ║   ║╣  ╚═╗ ╚═╗       ║  ║╣  ╠═╣ ║║║
 * ╩═╝ ╚═╝ ╩╚═ ═╩╝ ╩═╝ ╚═╝ ╚═╝ ╚═╝       ╩  ╚═╝ ╩ ╩ ╩ ╩
 * game at https://lordless.io
 * code at https://github.com/lordlessio
 */

// File: node_modules/zeppelin-solidity/contracts/access/rbac/Roles.sol

/**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 * See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage _role, address _addr)
    internal
    view
  {
    require(has(_role, _addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage _role, address _addr)
    internal
    view
    returns (bool)
  {
    return _role.bearer[_addr];
  }
}

// File: node_modules/zeppelin-solidity/contracts/access/rbac/RBAC.sol

/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 * Supports unlimited numbers of roles and addresses.
 * See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 * for you to write your own implementation of this interface using Enums or similar.
 */
contract RBAC {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address indexed operator, string role);
  event RoleRemoved(address indexed operator, string role);

  /**
   * @dev reverts if addr does not have role
   * @param _operator address
   * @param _role the name of the role
   * // reverts
   */
  function checkRole(address _operator, string _role)
    public
    view
  {
    roles[_role].check(_operator);
  }

  /**
   * @dev determine if addr has role
   * @param _operator address
   * @param _role the name of the role
   * @return bool
   */
  function hasRole(address _operator, string _role)
    public
    view
    returns (bool)
  {
    return roles[_role].has(_operator);
  }

  /**
   * @dev add a role to an address
   * @param _operator address
   * @param _role the name of the role
   */
  function addRole(address _operator, string _role)
    internal
  {
    roles[_role].add(_operator);
    emit RoleAdded(_operator, _role);
  }

  /**
   * @dev remove a role from an address
   * @param _operator address
   * @param _role the name of the role
   */
  function removeRole(address _operator, string _role)
    internal
  {
    roles[_role].remove(_operator);
    emit RoleRemoved(_operator, _role);
  }

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param _role the name of the role
   * // reverts
   */
  modifier onlyRole(string _role)
  {
    checkRole(msg.sender, _role);
    _;
  }

  /**
   * @dev modifier to scope access to a set of roles (uses msg.sender as addr)
   * @param _roles the names of the roles to scope access to
   * // reverts
   *
   * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
   *  see: https://github.com/ethereum/solidity/issues/2467
   */
  // modifier onlyRoles(string[] _roles) {
  //     bool hasAnyRole = false;
  //     for (uint8 i = 0; i < _roles.length; i++) {
  //         if (hasRole(msg.sender, _roles[i])) {
  //             hasAnyRole = true;
  //             break;
  //         }
  //     }

  //     require(hasAnyRole);

  //     _;
  // }
}

// File: node_modules/zeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @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 OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() 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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @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 {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: node_modules/zeppelin-solidity/contracts/ownership/Superuser.sol

/**
 * @title Superuser
 * @dev The Superuser contract defines a single superuser who can transfer the ownership
 * of a contract to a new address, even if he is not the owner.
 * A superuser can transfer his role to a new address.
 */
contract Superuser is Ownable, RBAC {
  string public constant ROLE_SUPERUSER = "superuser";

  constructor () public {
    addRole(msg.sender, ROLE_SUPERUSER);
  }

  /**
   * @dev Throws if called by any account that's not a superuser.
   */
  modifier onlySuperuser() {
    checkRole(msg.sender, ROLE_SUPERUSER);
    _;
  }

  modifier onlyOwnerOrSuperuser() {
    require(msg.sender == owner || isSuperuser(msg.sender));
    _;
  }

  /**
   * @dev getter to determine if address has superuser role
   */
  function isSuperuser(address _addr)
    public
    view
    returns (bool)
  {
    return hasRole(_addr, ROLE_SUPERUSER);
  }

  /**
   * @dev Allows the current superuser to transfer his role to a newSuperuser.
   * @param _newSuperuser The address to transfer ownership to.
   */
  function transferSuperuser(address _newSuperuser) public onlySuperuser {
    require(_newSuperuser != address(0));
    removeRole(msg.sender, ROLE_SUPERUSER);
    addRole(_newSuperuser, ROLE_SUPERUSER);
  }

  /**
   * @dev Allows the current superuser or owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwnerOrSuperuser {
    _transferOwnership(_newOwner);
  }
}

// File: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address _who) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address _owner, address _spender)
    public view returns (uint256);

  function transferFrom(address _from, address _to, uint256 _value)
    public returns (bool);

  function approve(address _spender, uint256 _value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: node_modules/zeppelin-solidity/contracts/introspection/ERC165.sol

/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface ERC165 {

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceId The interface identifier, as specified in ERC-165
   * @dev Interface identification is specified in ERC-165. This function
   * uses less than 30,000 gas.
   */
  function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

// File: node_modules/zeppelin-solidity/contracts/token/ERC721/ERC721Basic.sol

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Basic is ERC165 {

  bytes4 internal constant InterfaceId_ERC721 = 0x80ac58cd;
  /*
   * 0x80ac58cd ===
   *   bytes4(keccak256('balanceOf(address)')) ^
   *   bytes4(keccak256('ownerOf(uint256)')) ^
   *   bytes4(keccak256('approve(address,uint256)')) ^
   *   bytes4(keccak256('getApproved(uint256)')) ^
   *   bytes4(keccak256('setApprovalForAll(address,bool)')) ^
   *   bytes4(keccak256('isApprovedForAll(address,address)')) ^
   *   bytes4(keccak256('transferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
   */

  bytes4 internal constant InterfaceId_ERC721Exists = 0x4f558e79;
  /*
   * 0x4f558e79 ===
   *   bytes4(keccak256('exists(uint256)'))
   */

  bytes4 internal constant InterfaceId_ERC721Enumerable = 0x780e9d63;
  /**
   * 0x780e9d63 ===
   *   bytes4(keccak256('totalSupply()')) ^
   *   bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
   *   bytes4(keccak256('tokenByIndex(uint256)'))
   */

  bytes4 internal constant InterfaceId_ERC721Metadata = 0x5b5e139f;
  /**
   * 0x5b5e139f ===
   *   bytes4(keccak256('name()')) ^
   *   bytes4(keccak256('symbol()')) ^
   *   bytes4(keccak256('tokenURI(uint256)'))
   */

  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 indexed _tokenId
  );
  event Approval(
    address indexed _owner,
    address indexed _approved,
    uint256 indexed _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;
}

// File: node_modules/zeppelin-solidity/contracts/token/ERC721/ERC721.sol

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Enumerable is ERC721Basic {
  function totalSupply() public view returns (uint256);
  function tokenOfOwnerByIndex(
    address _owner,
    uint256 _index
  )
    public
    view
    returns (uint256 _tokenId);

  function tokenByIndex(uint256 _index) public view returns (uint256);
}


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Metadata is ERC721Basic {
  function name() external view returns (string _name);
  function symbol() external view returns (string _symbol);
  function tokenURI(uint256 _tokenId) public view returns (string);
}


/**
 * @title ERC-721 Non-Fungible Token Standard, full implementation interface
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata {
}

// File: contracts/lib/SafeMath.sol

/**
 * @title SafeMath
 */
library SafeMath {
  /**
  * @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 a / b;
  }

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) 
      internal 
      pure 
      returns (uint256 c) 
  {
    if (a == 0) {
      return 0;
    }
    c = a * b;
    require(c / a == b, "SafeMath mul failed");
    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) 
  {
    require(b <= a, "SafeMath sub failed");
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b)
      internal
      pure
      returns (uint256 c) 
  {
    c = a + b;
    require(c >= a, "SafeMath add failed");
    return c;
  }
  
  /**
    * @dev gives square root of given x.
    */
  function sqrt(uint256 x)
      internal
      pure
      returns (uint256 y) 
  {
    uint256 z = ((add(x,1)) / 2);
    y = x;
    while (z < y) 
    {
      y = z;
      z = ((add((x / z),z)) / 2);
    }
  }
  
  /**
    * @dev gives square. batchplies x by x
    */
  function sq(uint256 x)
      internal
      pure
      returns (uint256)
  {
    return (mul(x,x));
  }
  
  /**
    * @dev x to the power of y 
    */
  function pwr(uint256 x, uint256 y)
      internal 
      pure 
      returns (uint256)
  {
    if (x==0)
        return (0);
    else if (y==0)
        return (1);
    else 
    {
      uint256 z = x;
      for (uint256 i=1; i < y; i++)
        z = mul(z,x);
      return (z);
    }
  }
}

// File: contracts/crowdsale/INFTsCrowdsale.sol

/**
 * @title -NFTs crowdsale Interface
 */

interface INFTsCrowdsale {

  function getAuction(uint256 tokenId) external view
  returns (
    bytes32,
    address,
    uint256,
    uint256,
    uint256,
    uint256
  );

  function isOnAuction(uint256 tokenId) external view returns (bool);

  function isOnPreAuction(uint256 tokenId) external view returns (bool);

  function newAuction(uint128 price, uint256 tokenId, uint256 startAt, uint256 endAt) external;

  function batchNewAuctions(uint128[] prices, uint256[] tokenIds, uint256[] startAts, uint256[] endAts) external;

  function payByEth (uint256 tokenId) external payable; 

  function payByErc20 (uint256 tokenId) external;

  function cancelAuction (uint256 tokenId) external;

  function batchCancelAuctions (uint256[] tokenIds) external;
  
  /* Events */

  event NewAuction (
    bytes32 id,
    address indexed seller,
    uint256 price,
    uint256 startAt,
    uint256 endAt,
    uint256 indexed tokenId
  );

  event PayByEth (
    bytes32 id,
    address indexed seller,
    address indexed buyer,
    uint256 price,
    uint256 endAt,
    uint256 indexed tokenId
  );

  event PayByErc20 (
    bytes32 id,
    address indexed seller,
    address indexed buyer, 
    uint256 price,
    uint256 endAt,
    uint256 indexed tokenId
  );

  event CancelAuction (
    bytes32 id,
    address indexed seller,
    uint256 indexed tokenId
  );

}

// File: contracts/crowdsale/NFTsCrowdsaleBase.sol

contract NFTsCrowdsaleBase is Superuser, INFTsCrowdsale {

  using SafeMath for uint256;

  ERC20 public erc20Contract;
  ERC721 public erc721Contract;
  // eth(price)/erc20(price)
  uint public eth2erc20;
  // Represents a auction
  struct Auction {
    bytes32 id; // Auction id
    address seller; // Seller
    uint256 price; // eth in wei
    uint256 startAt; //  Auction startAt
    uint256 endAt; //  Auction endAt
    uint256 tokenId; // ERC721 tokenId 
  }

  mapping (uint256 => Auction) tokenIdToAuction;
  
  constructor(address _erc721Address,address _erc20Address, uint _eth2erc20) public {
    erc721Contract = ERC721(_erc721Address);
    erc20Contract = ERC20(_erc20Address);
    eth2erc20 = _eth2erc20;
  }

  function getAuction(uint256 _tokenId) external view
  returns (
    bytes32,
    address,
    uint256,
    uint256,
    uint256,
    uint256
  ){
    Auction storage auction = tokenIdToAuction[_tokenId];
    return (auction.id, auction.seller, auction.price, auction.startAt, auction.endAt, auction.tokenId);
  }

  function isOnAuction(uint256 _tokenId) external view returns (bool) {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 time = block.timestamp;
    return (time < _auction.endAt && time > _auction.startAt);
  }

  function isOnPreAuction(uint256 _tokenId) external view returns (bool) {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    return (block.timestamp < _auction.startAt);
  }

  function _isTokenOwner(address _seller, uint256 _tokenId) internal view returns (bool){
    return (erc721Contract.ownerOf(_tokenId) == _seller);
  }

  function _isOnAuction(uint256 _tokenId) internal view returns (bool) {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 time = block.timestamp;
    return (time < _auction.endAt && time > _auction.startAt);
  }
  function _escrow(address _owner, uint256 _tokenId) internal {
    erc721Contract.transferFrom(_owner, this, _tokenId);
  }

  function _cancelEscrow(address _owner, uint256 _tokenId) internal {
    erc721Contract.transferFrom(this, _owner, _tokenId);
  }

  function _transfer(address _receiver, uint256 _tokenId) internal {
    erc721Contract.safeTransferFrom(this, _receiver, _tokenId);
  }

  function _newAuction(uint256 _price, uint256 _tokenId, uint256 _startAt, uint256 _endAt) internal {
    require(_price == uint256(_price));
    address _seller = msg.sender;

    require(_isTokenOwner(_seller, _tokenId));
    _escrow(_seller, _tokenId);

    bytes32 auctionId = keccak256(
      abi.encodePacked(block.timestamp, _seller, _tokenId, _price)
    );
    
    Auction memory _order = Auction(
      auctionId,
      _seller,
      uint128(_price),
      _startAt,
      _endAt,
      _tokenId
    );

    tokenIdToAuction[_tokenId] = _order;
    emit NewAuction(auctionId, _seller, _price, _startAt, _endAt, _tokenId);
  }

  function _cancelAuction(uint256 _tokenId) internal {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    require(_auction.seller == msg.sender || msg.sender == owner);
    emit CancelAuction(_auction.id, _auction.seller, _tokenId);
    _cancelEscrow(_auction.seller, _tokenId);
    delete tokenIdToAuction[_tokenId];
  }

  function _payByEth(uint256 _tokenId) internal {
    uint256 _ethAmount = msg.value;
    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 price = _auction.price;
    require(_isOnAuction(_auction.tokenId));
    require(_ethAmount >= price);

    uint256 payExcess = _ethAmount.sub(price);

    if (price > 0) {
      _auction.seller.transfer(price);
    }
    address buyer = msg.sender;
    buyer.transfer(payExcess);
    _transfer(buyer, _tokenId);
    emit PayByEth(_auction.id, _auction.seller, msg.sender, _auction.price, _auction.endAt, _auction.tokenId);
    delete tokenIdToAuction[_tokenId];
  }

  function _payByErc20(uint256 _tokenId) internal {

    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 price = uint256(_auction.price);
    uint256 computedErc20Price = price.mul(eth2erc20);
    uint256 balance = erc20Contract.balanceOf(msg.sender);
    require(balance >= computedErc20Price);
    require(_isOnAuction(_auction.tokenId));

    if (price > 0) {
      erc20Contract.transferFrom(msg.sender, _auction.seller, computedErc20Price);
    }
    _transfer(msg.sender, _tokenId);
    emit PayByErc20(_auction.id, _auction.seller, msg.sender, _auction.price, _auction.endAt, _auction.tokenId);
    delete tokenIdToAuction[_tokenId];
  }
  
}

// File: contracts/crowdsale/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  event Pause2();
  event Unpause2();

  bool public paused = false;
  bool public paused2 = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  modifier whenNotPaused2() {
    require(!paused2);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  modifier whenPaused2() {
    require(paused2);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() public onlyOwner whenNotPaused {
    paused = true;
    emit Pause();
  }

  function pause2() public onlyOwner whenNotPaused2 {
    paused2 = true;
    emit Pause2();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() public onlyOwner whenPaused {
    paused = false;
    emit Unpause();
  }

  function unpause2() public onlyOwner whenPaused2 {
    paused2 = false;
    emit Unpause2();
  }
}

// File: contracts/crowdsale/NFTsCrowdsale.sol

contract NFTsCrowdsale is NFTsCrowdsaleBase, Pausable {

  constructor(address erc721Address, address erc20Address, uint eth2erc20) public 
  NFTsCrowdsaleBase(erc721Address, erc20Address, eth2erc20){}

  /**
   * @dev new a Auction
   * @param price price in wei
   * @param tokenId Tavern's tokenid
   * @param endAt auction end time
   */
  function newAuction(uint128 price, uint256 tokenId, uint256 startAt, uint256 endAt) whenNotPaused external {
    uint256 _startAt = startAt;
    if (msg.sender != owner) {
      _startAt = block.timestamp;
    }
    _newAuction(price, tokenId, _startAt, endAt);
  }

  /**
   * @dev batch New Auctions 
   * @param prices Array price in wei
   * @param tokenIds Array Tavern's tokenid
   * @param endAts  Array auction end time
   */
  function batchNewAuctions(uint128[] prices, uint256[] tokenIds, uint256[] startAts, uint256[] endAts) whenNotPaused external {
    uint256 i = 0;
    while (i < tokenIds.length) {
      _newAuction(prices[i], tokenIds[i], startAts[i], endAts[i]);
      i += 1;
    }
  }

  /**
   * @dev pay a auction by eth
   * @param tokenId tavern tokenid
   */
  function payByEth (uint256 tokenId) whenNotPaused external payable {
    _payByEth(tokenId); 
  }

  /**
   * @dev pay a auction by erc20 Token
   * @param tokenId Tavern's tokenid
   */
  function payByErc20 (uint256 tokenId) whenNotPaused2 external {
    _payByErc20(tokenId);
  }

  /**
   * @dev cancel a auction
   * @param tokenId Tavern's tokenid
   */
  function cancelAuction (uint256 tokenId) external {
    _cancelAuction(tokenId);
  }

  /**
   * @dev batch cancel auctions
   * @param tokenIds Array Tavern's tokenid
   */
  function batchCancelAuctions (uint256[] tokenIds) external {
    uint256 i = 0;
    while (i < tokenIds.length) {
      _cancelAuction(tokenIds[i]);
      i += 1;
    }
  }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenIds","type":"uint256[]"}],"name":"batchCancelAuctions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isOnAuction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"payByEth","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newSuperuser","type":"address"}],"name":"transferSuperuser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused2","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isOnPreAuction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getAuction","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"price","type":"uint128"},{"name":"tokenId","type":"uint256"},{"name":"startAt","type":"uint256"},{"name":"endAt","type":"uint256"}],"name":"newAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"cancelAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"eth2erc20","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"erc20Contract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isSuperuser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"payByErc20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"erc721Contract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_SUPERUSER","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"prices","type":"uint128[]"},{"name":"tokenIds","type":"uint256[]"},{"name":"startAts","type":"uint256[]"},{"name":"endAts","type":"uint256[]"}],"name":"batchNewAuctions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"erc721Address","type":"address"},{"name":"erc20Address","type":"address"},{"name":"eth2erc20","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause2","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"startAt","type":"uint256"},{"indexed":false,"name":"endAt","type":"uint256"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"NewAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"endAt","type":"uint256"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"PayByEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"endAt","type":"uint256"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"PayByErc20","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"CancelAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526006805461ffff191690553480156200001c57600080fd5b5060405160608062001b6883398101604081815282516020808501519483015160008054600160a060020a03191633908117909155848601909452600985527f7375706572757365720000000000000000000000000000000000000000000000918501919091529093929091849184918491620000a39190640100000000620000e0810204565b60038054600160a060020a03948516600160a060020a0319918216179091556002805493909416921691909117909155600455506200022b915050565b6200015c826001836040518082805190602001908083835b60208310620001195780518252601f199092019160209182019101620000f8565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050640100000000620002068102620016ce1704565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620001c7578181015183820152602001620001ad565b50505050905090810190601f168015620001f55780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b61192d806200023b6000396000f3006080604052600436106101535763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630988ca8c81146101585780630f5f4c53146101c1578063119ee4ab146101d6578063217fe6c6146101f657806337e246ad146102715780633f4ba83a146102895780634b739b611461029e57806357c393fa146102a95780635c975abb146102ca5780636515c6a9146102df5780636fc4f2c2146102f4578063715018a61461030c57806378bd7935146103215780638456cb59146103745780638aa2c280146103895780638da5cb5b146103bc57806396b5a755146103ed578063a7384c1e14610405578063a8f6c9131461042c578063ac64675614610441578063bceee05e14610456578063c334e87514610477578063d7c97fb41461048f578063ebb4f484146104a4578063eeb415ee1461052e578063f2fde38b14610572575b600080fd5b34801561016457600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101bf958335600160a060020a03169536956044949193909101919081908401838280828437509497506105939650505050505050565b005b3480156101cd57600080fd5b506101bf610601565b3480156101e257600080fd5b506101bf6004803560248101910135610664565b34801561020257600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261025d958335600160a060020a03169536956044949193909101919081908401838280828437509497506106979650505050505050565b604080519115158252519081900360200190f35b34801561027d57600080fd5b5061025d60043561070c565b34801561029557600080fd5b506101bf61073a565b6101bf600435610797565b3480156102b557600080fd5b506101bf600160a060020a03600435166107b3565b3480156102d657600080fd5b5061025d61084f565b3480156102eb57600080fd5b5061025d610858565b34801561030057600080fd5b5061025d600435610866565b34801561031857600080fd5b506101bf61087d565b34801561032d57600080fd5b506103396004356108e9565b60408051968752600160a060020a039095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561038057600080fd5b506101bf61092b565b34801561039557600080fd5b506101bf6fffffffffffffffffffffffffffffffff6004351660243560443560643561098a565b3480156103c857600080fd5b506103d16109da565b60408051600160a060020a039092168252519081900360200190f35b3480156103f957600080fd5b506101bf6004356109e9565b34801561041157600080fd5b5061041a6109f2565b60408051918252519081900360200190f35b34801561043857600080fd5b506103d16109f8565b34801561044d57600080fd5b506101bf610a07565b34801561046257600080fd5b5061025d600160a060020a0360043516610a6d565b34801561048357600080fd5b506101bf600435610a9c565b34801561049b57600080fd5b506103d1610aba565b3480156104b057600080fd5b506104b9610ac9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104f35781810151838201526020016104db565b50505050905090810190601f1680156105205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561053a57600080fd5b506101bf6024600480358281019290820135918135808301929082013591604435808301929082013591606435918201910135610aee565b34801561057e57600080fd5b506101bf600160a060020a0360043516610b9e565b6105fd826001836040518082805190602001908083835b602083106105c95780518252601f1990920191602091820191016105aa565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610bcf565b5050565b600054600160a060020a0316331461061857600080fd5b600654610100900460ff16151561062e57600080fd5b6006805461ff00191690556040517fb767f256808a62843a8fb88da70a3dd3270e6943d4a9bc2c4c6c624ebb8da2bd90600090a1565b60005b818110156106925761068a83838381811061067e57fe5b90506020020135610be4565b600101610667565b505050565b6000610703836001846040518082805190602001908083835b602083106106cf5780518252601f1990920191602091820191016106b0565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610ccc565b90505b92915050565b600081815260056020526040812060048101544290811080156107325750816003015481115b949350505050565b600054600160a060020a0316331461075157600080fd5b60065460ff16151561076257600080fd5b6006805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60065460ff16156107a757600080fd5b6107b081610ceb565b50565b6107e0336040805190810160405280600981526020016000805160206118e2833981519152815250610593565b600160a060020a03811615156107f557600080fd5b610822336040805190810160405280600981526020016000805160206118e2833981519152815250610e72565b6107b0816040805190810160405280600981526020016000805160206118e2833981519152815250610f83565b60065460ff1681565b600654610100900460ff1681565b600090815260056020526040902060030154421090565b600054600160a060020a0316331461089457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60009081526005602081905260409091208054600182015460028301546003840154600485015494909501549295600160a060020a0390921694909390929091565b600054600160a060020a0316331461094257600080fd5b60065460ff161561095257600080fd5b6006805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60065460009060ff161561099d57600080fd5b506000548290600160a060020a031633146109b55750425b6109d3856fffffffffffffffffffffffffffffffff16858385611055565b5050505050565b600054600160a060020a031681565b6107b081610be4565b60045481565b600254600160a060020a031681565b600054600160a060020a03163314610a1e57600080fd5b600654610100900460ff1615610a3357600080fd5b6006805461ff0019166101001790556040517f5c3a51950aca10c6d964d6e14e44bdcde77ecc8c4de666952b61ecb353c8307e90600090a1565b6000610706826040805190810160405280600981526020016000805160206118e2833981519152815250610697565b600654610100900460ff1615610ab157600080fd5b6107b081611261565b600354600160a060020a031681565b60408051808201909152600981526000805160206118e2833981519152602082015281565b60065460009060ff1615610b0157600080fd5b5060005b85811015610b9357610b8b898983818110610b1c57fe5b905060200201356fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168888848181101515610b5557fe5b905060200201358787858181101515610b6a57fe5b905060200201358686868181101515610b7f57fe5b90506020020135611055565b600101610b05565b505050505050505050565b600054600160a060020a0316331480610bbb5750610bbb33610a6d565b1515610bc657600080fd5b6107b0816114b4565b610bd98282610ccc565b15156105fd57600080fd5b60008181526005602052604090206001810154600160a060020a0316331480610c175750600054600160a060020a031633145b1515610c2257600080fd5b6001810154815460408051918252518492600160a060020a0316917fa062cdbfcedce0017d76de7b8c5aec56af6fb386285af7a4bbd4bef10eaed11e919081900360200190a36001810154610c8090600160a060020a031683611531565b506000908152600560208190526040822082815560018101805473ffffffffffffffffffffffffffffffffffffffff191690556002810183905560038101839055600481018390550155565b600160a060020a03166000908152602091909152604090205460ff1690565b600081815260056020819052604082206002810154918101543493919291908190610d159061070c565b1515610d2057600080fd5b82851015610d2d57600080fd5b610d3d858463ffffffff6115c116565b91506000831115610d86576001840154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015610d84573d6000803e3d6000fd5b505b506040513390819083156108fc029084906000818181858888f19350505050158015610db6573d6000803e3d6000fd5b50610dc18187611638565b6005840154600185015485546002870154600488015460408051938452602084019290925282820152513392600160a060020a0316917f76771b5750ddfc82d5fc52885927e7027de47450fa188aaf1ffe9197f879fc40919081900360600190a450505060009283525050600560208190526040822082815560018101805473ffffffffffffffffffffffffffffffffffffffff191690556002810183905560038101839055600481018390550155565b610edc826001836040518082805190602001908083835b60208310610ea85780518252601f199092019160209182019101610e89565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506116ac565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f45578181015183820152602001610f2d565b50505050905090810190601f168015610f725780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b610fed826001836040518082805190602001908083835b60208310610fb95780518252601f199092019160209182019101610f9a565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506116ce565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898260405180806020018281038252838181518152602001915080519060200190808383600083811015610f45578181015183820152602001610f2d565b60008061106061189e565b33925061106d83876116f3565b151561107857600080fd5b611082838761179c565b60408051426020808301919091526c01000000000000000000000000600160a060020a03871602828401526054820189905260748083018b905283518084039091018152609490920192839052815191929182918401908083835b602083106110fc5780518252601f1990920191602091820191016110dd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915060c0604051908101604052808360001916815260200184600160a060020a03168152602001886fffffffffffffffffffffffffffffffff16815260200186815260200185815260200187815250905080600560008881526020019081526020016000206000820151816000019060001916905560208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020155606082015181600301556080820151816004015560a082015181600501559050508583600160a060020a03167fc113f503fabf56efa06fef76c4f99328016f2f1cd7b0950c16ea165fe29c92ce848a898960405180856000191660001916815260200184815260200183815260200182815260200194505050505060405180910390a350505050505050565b6000818152600560205260408120600281015460045491929091819061128e90849063ffffffff61181016565b600254604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051929450600160a060020a03909116916370a08231916024808201926020929091908290030181600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b505050506040513d602081101561132157600080fd5b505190508181101561133257600080fd5b61133f846005015461070c565b151561134a57600080fd5b60008311156113fa576002546001850154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03928316602482015260448101869052905191909216916323b872dd9160648083019260209291908290030181600087803b1580156113cd57600080fd5b505af11580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b50505b6114043386611638565b6005840154600185015485546002870154600488015460408051938452602084019290925282820152513392600160a060020a0316917fd79ce631dd34ddc18646ac1e362c85f6a59697eecb42918e2e6da7c11f919734919081900360600190a4505050600091825250600560208190526040822082815560018101805473ffffffffffffffffffffffffffffffffffffffff191690556002810183905560038101839055600481018390550155565b600160a060020a03811615156114c957600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354604080517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03858116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b1580156115a557600080fd5b505af11580156115b9573d6000803e3d6000fd5b505050505050565b60008282111561163257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600354604080517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03858116602483015260448201859052915191909216916342842e0e91606480830192600092919082900301818387803b1580156115a557600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600354604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018490529051600092600160a060020a0380871693911691636352211e9160248082019260209290919082900301818887803b15801561175f57600080fd5b505af1158015611773573d6000803e3d6000fd5b505050506040513d602081101561178957600080fd5b5051600160a060020a0316149392505050565b600354604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b1580156115a557600080fd5b600082151561182157506000610706565b5081810281838281151561183157fe5b041461070657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b60c060405190810160405280600080191681526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160008152509056007375706572757365720000000000000000000000000000000000000000000000a165627a7a72305820c37113afea96069020c5d0a24dedf6091e9fe1518cb477ca5d54f23b757d5d68002900000000000000000000000015820072729d045ec5232ba3bd060ec5df38e09a0000000000000000000000007ca121b093e2fbd4bb9a894bd5ff487d16f1f83b000000000000000000000000000000000000000000000000000000000000a2c2

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000015820072729d045ec5232ba3bd060ec5df38e09a0000000000000000000000007ca121b093e2fbd4bb9a894bd5ff487d16f1f83b000000000000000000000000000000000000000000000000000000000000a2c2

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000015820072729d045ec5232ba3bd060ec5df38e09a
Arg [1] : 0000000000000000000000007ca121b093e2fbd4bb9a894bd5ff487d16f1f83b
Arg [2] : 000000000000000000000000000000000000000000000000000000000000a2c2


   Swarm Source:
bzzr://c37113afea96069020c5d0a24dedf6091e9fe1518cb477ca5d54f23b757d5d68

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.