ETH Price: $3,679.32 (-5.25%)

Contract

0x741733CA54E0F052a092bdC95bA9897C2D56e04B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Upgrade Contract52033212018-03-05 22:42:222479 days ago1520289742IN
0x741733CA...C2D56e04B
0 ETH0.0003181110
Purchase51980972018-03-05 1:28:042480 days ago1520213284IN
0x741733CA...C2D56e04B
0.0016 ETH0.000180188
Purchase51980562018-03-05 1:19:372480 days ago1520212777IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000090094
Purchase51980552018-03-05 1:19:312480 days ago1520212771IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000090094
Purchase51980532018-03-05 1:18:432480 days ago1520212723IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000090094
Purchase51980512018-03-05 1:18:232480 days ago1520212703IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000090094
Purchase51980512018-03-05 1:18:232480 days ago1520212703IN
0x741733CA...C2D56e04B
0.10995116 ETH0.0013513860
Purchase51980502018-03-05 1:17:572480 days ago1520212677IN
0x741733CA...C2D56e04B
0.10995116 ETH0.0013513860
Purchase51980452018-03-05 1:17:312480 days ago1520212651IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000045042
Purchase51980442018-03-05 1:17:132480 days ago1520212633IN
0x741733CA...C2D56e04B
0.10995116 ETH0.0011261550
Purchase51980442018-03-05 1:17:132480 days ago1520212633IN
0x741733CA...C2D56e04B
0.10995116 ETH0.0011261550
Purchase51980422018-03-05 1:16:572480 days ago1520212617IN
0x741733CA...C2D56e04B
0.10995116 ETH0.0002702712
Purchase51980422018-03-05 1:16:572480 days ago1520212617IN
0x741733CA...C2D56e04B
0.1 ETH0.0004504620
Purchase51980402018-03-05 1:16:052480 days ago1520212565IN
0x741733CA...C2D56e04B
0.10995116 ETH0.0002477511
Purchase51980402018-03-05 1:16:052480 days ago1520212565IN
0x741733CA...C2D56e04B
0.3 ETH0.0009234441
Purchase51980402018-03-05 1:16:052480 days ago1520212565IN
0x741733CA...C2D56e04B
0.5 ETH0.0009459642
Purchase51980402018-03-05 1:16:052480 days ago1520212565IN
0x741733CA...C2D56e04B
0.5 ETH0.0009459642
Purchase51980402018-03-05 1:16:052480 days ago1520212565IN
0x741733CA...C2D56e04B
0.5 ETH0.0011486751
Purchase51980362018-03-05 1:15:482480 days ago1520212548IN
0x741733CA...C2D56e04B
0.10995116 ETH0.0009009240
Purchase51980352018-03-05 1:15:352480 days ago1520212535IN
0x741733CA...C2D56e04B
0.004096 ETH0.000024771.1
Purchase51980352018-03-05 1:15:352480 days ago1520212535IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000045042
On Maintenance51980322018-03-05 1:15:142480 days ago1520212514IN
0x741733CA...C2D56e04B
0 ETH0.002742100
Purchase51980312018-03-05 1:15:062480 days ago1520212506IN
0x741733CA...C2D56e04B
0.00256 ETH0.000034731.1
Purchase51980242018-03-05 1:13:262480 days ago1520212406IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000063142
Purchase51980212018-03-05 1:12:482480 days ago1520212368IN
0x741733CA...C2D56e04B
0.10995116 ETH0.000063142
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
52033212018-03-05 22:42:222479 days ago1520289742
0x741733CA...C2D56e04B
0.46898072 ETH
51980312018-03-05 1:15:062480 days ago1520212506
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.00256 ETH
51980242018-03-05 1:13:262480 days ago1520212406
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980212018-03-05 1:12:482480 days ago1520212368
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980202018-03-05 1:12:452480 days ago1520212365
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.0016 ETH
51980172018-03-05 1:11:232480 days ago1520212283
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.04294967 ETH
51980152018-03-05 1:10:242480 days ago1520212224
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.0065536 ETH
51980152018-03-05 1:10:242480 days ago1520212224
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980132018-03-05 1:10:052480 days ago1520212205
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980132018-03-05 1:10:052480 days ago1520212205
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.004096 ETH
51980112018-03-05 1:09:052480 days ago1520212145
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980112018-03-05 1:09:052480 days ago1520212145
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980112018-03-05 1:09:052480 days ago1520212145
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980082018-03-05 1:08:282480 days ago1520212108
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980082018-03-05 1:08:282480 days ago1520212108
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
51980082018-03-05 1:08:282480 days ago1520212108
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.02684354 ETH
51980082018-03-05 1:08:282480 days ago1520212108
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
1.55 ETH
51980082018-03-05 1:08:282480 days ago1520212108
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
1.67 ETH
51980072018-03-05 1:08:152480 days ago1520212095
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
1.55 ETH
51980072018-03-05 1:08:152480 days ago1520212095
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
1.55 ETH
51980072018-03-05 1:08:152480 days ago1520212095
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
1.55 ETH
51980072018-03-05 1:08:152480 days ago1520212095
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.01048576 ETH
51980062018-03-05 1:08:032480 days ago1520212083
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
1.3 ETH
51980062018-03-05 1:08:032480 days ago1520212083
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
1.3 ETH
51980062018-03-05 1:08:032480 days ago1520212083
0x741733CA...C2D56e04B
0x741733CA...C2D56e04B
0.10995116 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherIslands

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-04
*/

pragma solidity ^0.4.19;

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


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


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

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

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

}

/**
 * @title ERC721 interface
 * @dev see https://github.com/ethereum/eips/issues/721
 */
contract ERC721 {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function transfer(address _to, uint256 _tokenId) public;
  function approve(address _to, uint256 _tokenId) public;
  function takeOwnership(uint256 _tokenId) public;
}

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

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev 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 EtherIslands is Ownable, ERC721 {
    using SafeMath for uint256;

    /*** EVENTS ***/
    event NewIsland(uint256 tokenId, bytes32 name, address owner);
    event IslandSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, bytes32 name);
    event Transfer(address from, address to, uint256 tokenId);
    event DividendsPaid(address to, uint256 amount, bytes32 divType);
    event ShipsBought(uint256 tokenId, address owner);
    event IslandAttacked(uint256 attackerId, uint256 targetId, uint256 treasuryStolen);
    event TreasuryWithdrawn(uint256 tokenId);

    /*** STRUCTS ***/
    struct Island {
        bytes32 name;
        address owner;
        uint256 price;
        uint256 treasury;
        uint256 treasury_next_withdrawal_block;
        uint256 previous_price;
        uint256 attack_ships_count;
        uint256 defense_ships_count;
        uint256 transactions_count;
        address approve_transfer_to;
        address[2] previous_owners;
    }

    struct IslandBattleStats {
        uint256 attacks_won;
        uint256 attacks_lost;
        uint256 defenses_won;
        uint256 defenses_lost;
        uint256 treasury_stolen;
        uint256 treasury_lost;
        uint256 attack_cooldown;
        uint256 defense_cooldown;
    }

    /*** CONSTANTS ***/
    string public constant NAME = "EtherIslands";
    string public constant SYMBOL = "EIS";

    bool public maintenance = true;
    uint256 islands_count;

    uint256 shipPrice = 0.01 ether;
    uint256 withdrawalBlocksCooldown = 720;
    uint256 battle_cooldown = 40;
    address m_address = 0x9BB3364Baa5dbfcaa61ee0A79a9cA17359Fc7bBf;

    mapping(address => uint256) private ownerCount;
    mapping(uint256 => Island) private islands;
    mapping(uint256 => IslandBattleStats) private islandBattleStats;

    /*** DEFAULT METHODS ***/
    function symbol() public pure returns (string) {return SYMBOL;}

    function name() public pure returns (string) {return NAME;}

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

    function EtherIslands() public {
    }

    /** PUBLIC METHODS **/
    function createIsland(bytes32 _name, uint256 _price, address _owner, uint256 _attack_ships_count, uint256 _defense_ships_count) public onlyOwner {
        require(msg.sender != address(0));
        _create_island(_name, _owner, _price, 0, _attack_ships_count, _defense_ships_count);
    }

    function importIsland(bytes32 _name, address[3] _owners, uint256[7] _island_data, uint256[8] _island_battle_stats) public onlyOwner {
        require(msg.sender != address(0));
        _import_island(_name, _owners, _island_data, _island_battle_stats);
    }

    function attackIsland(uint256 _attacker_id, uint256 _target_id) public payable {
        require(maintenance == false);
        Island storage attackerIsland = islands[_attacker_id];
        IslandBattleStats storage attackerIslandBattleStats = islandBattleStats[_attacker_id];

        Island storage defenderIsland = islands[_target_id];
        IslandBattleStats storage defenderIslandBattleStats = islandBattleStats[_target_id];

        require(attackerIsland.owner == msg.sender);
        require(attackerIsland.owner != defenderIsland.owner);
        require(msg.sender != address(0));
        require(msg.value == 0);
        require(block.number >= attackerIslandBattleStats.attack_cooldown);
        require(block.number >= defenderIslandBattleStats.defense_cooldown);
        require(attackerIsland.attack_ships_count > 0); // attacker must have at least 1 attack ship
        require(attackerIsland.attack_ships_count > defenderIsland.defense_ships_count);

        uint256 goods_stolen = SafeMath.mul(SafeMath.div(defenderIsland.treasury, 100), 25);

        defenderIsland.treasury = SafeMath.sub(defenderIsland.treasury, goods_stolen);

        attackerIslandBattleStats.attacks_won++;
        attackerIslandBattleStats.treasury_stolen = SafeMath.add(attackerIslandBattleStats.treasury_stolen, goods_stolen);

        defenderIslandBattleStats.defenses_lost++;
        defenderIslandBattleStats.treasury_lost = SafeMath.add(defenderIslandBattleStats.treasury_lost, goods_stolen);

        uint256 cooldown_block = block.number + battle_cooldown;
        attackerIslandBattleStats.attack_cooldown = cooldown_block;
        defenderIslandBattleStats.defense_cooldown = cooldown_block;

        uint256 goods_to_treasury = SafeMath.mul(SafeMath.div(goods_stolen, 100), 75);

        attackerIsland.treasury = SafeMath.add(attackerIsland.treasury, goods_to_treasury);

        // 2% of attacker army and 10% of defender army is destroyed
        attackerIsland.attack_ships_count = SafeMath.sub(attackerIsland.attack_ships_count, SafeMath.mul(SafeMath.div(attackerIsland.attack_ships_count, 100), 2));
        defenderIsland.defense_ships_count = SafeMath.sub(defenderIsland.defense_ships_count, SafeMath.mul(SafeMath.div(defenderIsland.defense_ships_count, 100), 10));

        // Dividends
        uint256 goods_for_current_owner = SafeMath.mul(SafeMath.div(goods_stolen, 100), 15);
        uint256 goods_for_previous_owner_1 = SafeMath.mul(SafeMath.div(goods_stolen, 100), 6);
        uint256 goods_for_previous_owner_2 = SafeMath.mul(SafeMath.div(goods_stolen, 100), 3);
        uint256 goods_for_dev = SafeMath.mul(SafeMath.div(goods_stolen, 100), 1);

        attackerIsland.owner.transfer(goods_for_current_owner);
        attackerIsland.previous_owners[0].transfer(goods_for_previous_owner_1);
        attackerIsland.previous_owners[1].transfer(goods_for_previous_owner_2);

        //Split dev fee
        m_address.transfer(SafeMath.mul(SafeMath.div(goods_for_dev, 100), 20));
        owner.transfer(SafeMath.mul(SafeMath.div(goods_for_dev, 100), 80));

        IslandAttacked(_attacker_id, _target_id, goods_stolen);
    }

    function buyShips(uint256 _island_id, uint256 _ships_to_buy, bool _is_attack_ships) public payable {
        require(maintenance == false);
        Island storage island = islands[_island_id];

        uint256 totalPrice = SafeMath.mul(_ships_to_buy, shipPrice);
        require(island.owner == msg.sender);
        require(msg.sender != address(0));
        require(msg.value >= totalPrice);

        if (_is_attack_ships) {
            island.attack_ships_count = SafeMath.add(island.attack_ships_count, _ships_to_buy);
        } else {
            island.defense_ships_count = SafeMath.add(island.defense_ships_count, _ships_to_buy);
        }

        // Dividends
        uint256 treasury_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 80);
        uint256 dev_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 17);
        uint256 previous_owner_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 2);
        uint256 previous_owner2_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 1);

        island.previous_owners[0].transfer(previous_owner_div);
        //divs for 1st previous owner
        island.previous_owners[1].transfer(previous_owner2_div);
        //divs for 2nd previous owner
        island.treasury = SafeMath.add(treasury_div, island.treasury);
        // divs for treasury

        //Split dev fee
        uint256 m_fee = SafeMath.mul(SafeMath.div(dev_div, 100), 20);
        uint256 d_fee = SafeMath.mul(SafeMath.div(dev_div, 100), 80);
        m_address.transfer(m_fee);
        owner.transfer(d_fee);

        DividendsPaid(island.previous_owners[0], previous_owner_div, "buyShipPreviousOwner");
        DividendsPaid(island.previous_owners[1], previous_owner2_div, "buyShipPreviousOwner2");

        ShipsBought(_island_id, island.owner);
    }

    function withdrawTreasury(uint256 _island_id) public payable {
        require(maintenance == false);
        Island storage island = islands[_island_id];

        require(island.owner == msg.sender);
        require(msg.sender != address(0));
        require(island.treasury > 0);
        require(block.number >= island.treasury_next_withdrawal_block);

        uint256 treasury_to_withdraw = SafeMath.mul(SafeMath.div(island.treasury, 100), 10);
        uint256 treasury_for_previous_owner_1 = SafeMath.mul(SafeMath.div(treasury_to_withdraw, 100), 2);
        uint256 treasury_for_previous_owner_2 = SafeMath.mul(SafeMath.div(treasury_to_withdraw, 100), 1);
        uint256 treasury_for_previous_owners = SafeMath.add(treasury_for_previous_owner_2, treasury_for_previous_owner_1);
        uint256 treasury_for_current_owner = SafeMath.sub(treasury_to_withdraw, treasury_for_previous_owners);

        island.owner.transfer(treasury_for_current_owner);
        island.previous_owners[0].transfer(treasury_for_previous_owner_1);
        island.previous_owners[1].transfer(treasury_for_previous_owner_2);

        island.treasury = SafeMath.sub(island.treasury, treasury_to_withdraw);
        island.treasury_next_withdrawal_block = block.number + withdrawalBlocksCooldown;
        //setting cooldown for next withdrawal

        DividendsPaid(island.previous_owners[0], treasury_for_previous_owner_1, "withdrawalPreviousOwner");
        DividendsPaid(island.previous_owners[1], treasury_for_previous_owner_2, "withdrawalPreviousOwner2");
        DividendsPaid(island.owner, treasury_for_current_owner, "withdrawalOwner");

        TreasuryWithdrawn(_island_id);
    }

    function purchase(uint256 _island_id) public payable {
        require(maintenance == false);
        Island storage island = islands[_island_id];

        require(island.owner != msg.sender);
        require(msg.sender != address(0));
        require(msg.value >= island.price);

        uint256 excess = SafeMath.sub(msg.value, island.price);
        if (island.previous_price > 0) {
            uint256 owners_cut = SafeMath.mul(SafeMath.div(island.price, 160), 130);
            uint256 treasury_cut = SafeMath.mul(SafeMath.div(island.price, 160), 18);
            uint256 dev_fee = SafeMath.mul(SafeMath.div(island.price, 160), 7);
            uint256 previous_owner_fee = SafeMath.mul(SafeMath.div(island.price, 160), 3);
            uint256 previous_owner_fee2 = SafeMath.mul(SafeMath.div(island.price, 160), 2);

            if (island.owner != address(this)) {
                island.owner.transfer(owners_cut);
                //divs for current island owner
            }

            island.previous_owners[0].transfer(previous_owner_fee);
            //divs for 1st previous owner
            island.previous_owners[1].transfer(previous_owner_fee2);
            //divs for 2nd previous owner
            island.treasury = SafeMath.add(treasury_cut, island.treasury);
            // divs for treasury

            //Split dev fee
            uint256 m_fee = SafeMath.mul(SafeMath.div(dev_fee, 100), 20);
            uint256 d_fee = SafeMath.mul(SafeMath.div(dev_fee, 100), 80);
            m_address.transfer(m_fee);
            owner.transfer(d_fee);

            DividendsPaid(island.previous_owners[0], previous_owner_fee, "previousOwner");
            DividendsPaid(island.previous_owners[1], previous_owner_fee2, "previousOwner2");
            DividendsPaid(island.owner, owners_cut, "owner");
            DividendsPaid(owner, dev_fee, "dev");
        } else {
            island.owner.transfer(msg.value);
        }

        island.previous_price = island.price;
        island.treasury_next_withdrawal_block = block.number + withdrawalBlocksCooldown;
        address _old_owner = island.owner;

        island.price = SafeMath.mul(SafeMath.div(island.price, 100), 160);

        //Change owners
        island.previous_owners[1] = island.previous_owners[0];
        island.previous_owners[0] = island.owner;
        island.owner = msg.sender;
        island.transactions_count++;

        ownerCount[_old_owner] -= 1;
        ownerCount[island.owner] += 1;

        islandBattleStats[_island_id].attack_cooldown = battle_cooldown; // immunity for 10 mins
        islandBattleStats[_island_id].defense_cooldown = battle_cooldown; // immunity for 10 mins

        Transfer(_old_owner, island.owner, _island_id);
        IslandSold(_island_id, island.previous_price, island.price, _old_owner, island.owner, island.name);

        msg.sender.transfer(excess);
        //returning excess
    }

    function onMaintenance() public onlyOwner {
        require(msg.sender != address(0));
        maintenance = true;
    }

    function offMaintenance() public onlyOwner {
        require(msg.sender != address(0));
        maintenance = false;
    }

    function totalSupply() public view returns (uint256 total) {
        return islands_count;
    }

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return ownerCount[_owner];
    }

    function priceOf(uint256 _island_id) public view returns (uint256 price) {
        return islands[_island_id].price;
    }

    function getIslandBattleStats(uint256 _island_id) public view returns (
        uint256 id,
        uint256 attacks_won,
        uint256 attacks_lost,
        uint256 defenses_won,
        uint256 defenses_lost,
        uint256 treasury_stolen,
        uint256 treasury_lost,
        uint256 attack_cooldown,
        uint256 defense_cooldown
    ) {
        id = _island_id;
        attacks_won = islandBattleStats[_island_id].attacks_won;
        attacks_lost = islandBattleStats[_island_id].attacks_lost;
        defenses_won = islandBattleStats[_island_id].defenses_won;
        defenses_lost = islandBattleStats[_island_id].defenses_lost;
        treasury_stolen = islandBattleStats[_island_id].treasury_stolen;
        treasury_lost = islandBattleStats[_island_id].treasury_lost;
        attack_cooldown = islandBattleStats[_island_id].attack_cooldown;
        defense_cooldown = islandBattleStats[_island_id].defense_cooldown;
    }

    function getIsland(uint256 _island_id) public view returns (
        uint256 id,
        bytes32 island_name,
        address owner,
        uint256 price,
        uint256 treasury,
        uint256 treasury_next_withdrawal_block,
        uint256 previous_price,
        uint256 attack_ships_count,
        uint256 defense_ships_count,
        uint256 transactions_count
    ) {
        id = _island_id;
        island_name = islands[_island_id].name;
        owner = islands[_island_id].owner;
        price = islands[_island_id].price;
        treasury = islands[_island_id].treasury;
        treasury_next_withdrawal_block = islands[_island_id].treasury_next_withdrawal_block;
        previous_price = islands[_island_id].previous_price;
        attack_ships_count = islands[_island_id].attack_ships_count;
        defense_ships_count = islands[_island_id].defense_ships_count;
        transactions_count = islands[_island_id].transactions_count;
    }

    function getIslandPreviousOwners(uint256 _island_id) public view returns (
        address[2] previous_owners
    ) {
        previous_owners = islands[_island_id].previous_owners;
    }

    function getIslands() public view returns (uint256[], address[], uint256[], uint256[], uint256[], uint256[], uint256[]) {
        uint256[] memory ids = new uint256[](islands_count);
        address[] memory owners = new address[](islands_count);
        uint256[] memory prices = new uint256[](islands_count);
        uint256[] memory treasuries = new uint256[](islands_count);
        uint256[] memory attack_ships_counts = new uint256[](islands_count);
        uint256[] memory defense_ships_counts = new uint256[](islands_count);
        uint256[] memory transactions_count = new uint256[](islands_count);
        for (uint256 _id = 0; _id < islands_count; _id++) {
            ids[_id] = _id;
            owners[_id] = islands[_id].owner;
            prices[_id] = islands[_id].price;
            treasuries[_id] = islands[_id].treasury;
            attack_ships_counts[_id] = islands[_id].attack_ships_count;
            defense_ships_counts[_id] = islands[_id].defense_ships_count;
            transactions_count[_id] = islands[_id].transactions_count;
        }
        return (ids, owners, prices, treasuries, attack_ships_counts, defense_ships_counts, transactions_count);
    }

    /** PRIVATE METHODS **/
    function _create_island(bytes32 _name, address _owner, uint256 _price, uint256 _previous_price, uint256 _attack_ships_count, uint256 _defense_ships_count) private {
        islands[islands_count] = Island({
            name : _name,
            owner : _owner,
            price : _price,
            treasury : 0,
            treasury_next_withdrawal_block : 0,
            previous_price : _previous_price,
            attack_ships_count : _attack_ships_count,
            defense_ships_count : _defense_ships_count,
            transactions_count : 0,
            approve_transfer_to : address(0),
            previous_owners : [_owner, _owner]
            });

        islandBattleStats[islands_count] = IslandBattleStats({
            attacks_won : 0,
            attacks_lost : 0,
            defenses_won : 0,
            defenses_lost : 0,
            treasury_stolen : 0,
            treasury_lost : 0,
            attack_cooldown : 0,
            defense_cooldown : 0
            });

        NewIsland(islands_count, _name, _owner);
        Transfer(address(this), _owner, islands_count);
        islands_count++;
    }

    function _import_island(bytes32 _name, address[3] _owners, uint256[7] _island_data, uint256[8] _island_battle_stats) private {
        islands[islands_count] = Island({
            name : _name,
            owner : _owners[0],
            price : _island_data[0],
            treasury : _island_data[1],
            treasury_next_withdrawal_block : _island_data[2],
            previous_price : _island_data[3],
            attack_ships_count : _island_data[4],
            defense_ships_count : _island_data[5],
            transactions_count : _island_data[6],
            approve_transfer_to : address(0),
            previous_owners : [_owners[1], _owners[2]]
            });

        islandBattleStats[islands_count] = IslandBattleStats({
            attacks_won : _island_battle_stats[0],
            attacks_lost : _island_battle_stats[1],
            defenses_won : _island_battle_stats[2],
            defenses_lost : _island_battle_stats[3],
            treasury_stolen : _island_battle_stats[4],
            treasury_lost : _island_battle_stats[5],
            attack_cooldown : _island_battle_stats[6],
            defense_cooldown : _island_battle_stats[7]
            });

        NewIsland(islands_count, _name, _owners[0]);
        Transfer(address(this), _owners[0], islands_count);
        islands_count++;
    }

    function _transfer(address _from, address _to, uint256 _island_id) private {
        islands[_island_id].owner = _to;
        islands[_island_id].approve_transfer_to = address(0);
        ownerCount[_from] -= 1;
        ownerCount[_to] += 1;
        Transfer(_from, _to, _island_id);
    }

    /*** ERC-721 compliance. ***/
    function approve(address _to, uint256 _island_id) public {
        require(msg.sender == islands[_island_id].owner);
        islands[_island_id].approve_transfer_to = _to;
        Approval(msg.sender, _to, _island_id);
    }

    function ownerOf(uint256 _island_id) public view returns (address owner){
        owner = islands[_island_id].owner;
        require(owner != address(0));
    }

    function takeOwnership(uint256 _island_id) public {
        address oldOwner = islands[_island_id].owner;
        require(msg.sender != address(0));
        require(islands[_island_id].approve_transfer_to == msg.sender);
        _transfer(oldOwner, msg.sender, _island_id);
    }

    function transfer(address _to, uint256 _island_id) public {
        require(msg.sender != address(0));
        require(msg.sender == islands[_island_id].owner);
        _transfer(msg.sender, _to, _island_id);
    }

    function transferFrom(address _from, address _to, uint256 _island_id) public {
        require(_from == islands[_island_id].owner);
        require(islands[_island_id].approve_transfer_to == _to);
        require(_to != address(0));
        _transfer(_from, _to, _island_id);
    }

    function upgradeContract(address _newContract) public onlyOwner {
        _newContract.transfer(this.balance);
    }

    function AddEth () public payable {}
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_island_id","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_owners","type":"address[3]"},{"name":"_island_data","type":"uint256[7]"},{"name":"_island_battle_stats","type":"uint256[8]"}],"name":"importIsland","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":"_island_id","type":"uint256"}],"name":"withdrawTreasury","outputs":[],"payable":true,"stateMutability":"payable","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":"_island_id","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"AddEth","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_island_id","type":"uint256"},{"name":"_ships_to_buy","type":"uint256"},{"name":"_is_attack_ships","type":"bool"}],"name":"buyShips","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maintenance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"getIsland","outputs":[{"name":"id","type":"uint256"},{"name":"island_name","type":"bytes32"},{"name":"owner","type":"address"},{"name":"price","type":"uint256"},{"name":"treasury","type":"uint256"},{"name":"treasury_next_withdrawal_block","type":"uint256"},{"name":"previous_price","type":"uint256"},{"name":"attack_ships_count","type":"uint256"},{"name":"defense_ships_count","type":"uint256"},{"name":"transactions_count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_attacker_id","type":"uint256"},{"name":"_target_id","type":"uint256"}],"name":"attackIsland","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"onMaintenance","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"_island_id","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_attack_ships_count","type":"uint256"},{"name":"_defense_ships_count","type":"uint256"}],"name":"createIsland","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"priceOf","outputs":[{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"offMaintenance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"getIslandBattleStats","outputs":[{"name":"id","type":"uint256"},{"name":"attacks_won","type":"uint256"},{"name":"attacks_lost","type":"uint256"},{"name":"defenses_won","type":"uint256"},{"name":"defenses_lost","type":"uint256"},{"name":"treasury_stolen","type":"uint256"},{"name":"treasury_lost","type":"uint256"},{"name":"attack_cooldown","type":"uint256"},{"name":"defense_cooldown","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIslands","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"address[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"getIslandPreviousOwners","outputs":[{"name":"previous_owners","type":"address[2]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newContract","type":"address"}],"name":"upgradeContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewIsland","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":"bytes32"}],"name":"IslandSold","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":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"divType","type":"bytes32"}],"name":"DividendsPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"owner","type":"address"}],"name":"ShipsBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"attackerId","type":"uint256"},{"indexed":false,"name":"targetId","type":"uint256"},{"indexed":false,"name":"treasuryStolen","type":"uint256"}],"name":"IslandAttacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"TreasuryWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526000805460a060020a60ff02191674010000000000000000000000000000000000000000179055662386f26fc100006002556102d0600355602860045560058054600160a060020a031916739bb3364baa5dbfcaa61ee0a79a9ca17359fc7bbf179055341561007257600080fd5b60008054600160a060020a033316600160a060020a0319909116179055612a318061009e6000396000f30060606040526004361061017f5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610184578063095ea7b31461020e5780630d28f8d1146102325780631051db34146102c157806311f1fc99146102e857806318160ddd146102f357806323b872dd14610318578063472b64921461034057806361b98cb3146103485780636352211e1461035b5780636c376cc51461038d57806370a08231146103a05780638da5cb5b146103bf578063913158f7146103d257806394b663861461044c578063952868b51461045a57806395d89b411461046d578063a3f4df7e14610480578063a9059cbb14610493578063b2e6ceeb146104b5578063b5dd20e9146104cb578063b9186d7d146104f6578063d5ea36f91461050c578063dc3134ae1461051f578063deb081df14610582578063e6e0556214610787578063eb2c0223146107d5578063efef39a1146107f4578063f2fde38b146107ff578063f76f8d781461081e575b600080fd5b341561018f57600080fd5b610197610831565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101d35780820151838201526020016101bb565b50505050905090810190601f1680156102005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021957600080fd5b610230600160a060020a0360043516602435610873565b005b341561023d57600080fd5b6102306004803590608460246003606060405190810160405291908282606080828437820191505050505091908060e001906007806020026040519081016040529190828260e0808284378201915050505050919080610100019060088060200260405190810160405291908282610100808284375093955061090a945050505050565b34156102cc57600080fd5b6102d461094c565b604051901515815260200160405180910390f35b610230600435610951565b34156102fe57600080fd5b610306610c73565b60405190815260200160405180910390f35b341561032357600080fd5b610230600160a060020a0360043581169060243516604435610c79565b610230610cf0565b6102306004356024356044351515610cf2565b341561036657600080fd5b610371600435611039565b604051600160a060020a03909116815260200160405180910390f35b341561039857600080fd5b6102d4611065565b34156103ab57600080fd5b610306600160a060020a0360043516611075565b34156103ca57600080fd5b610371611090565b34156103dd57600080fd5b6103e860043561109f565b604051998a5260208a0198909852600160a060020a039096166040808a01919091526060890195909552608088019390935260a087019190915260c086015260e0850152610100840191909152610120830191909152610140909101905180910390f35b6102306004356024356110f6565b341561046557600080fd5b6102306114f0565b341561047857600080fd5b610197611546565b341561048b57600080fd5b610197611587565b341561049e57600080fd5b610230600160a060020a03600435166024356115be565b34156104c057600080fd5b61023060043561160c565b34156104d657600080fd5b610230600435602435600160a060020a036044351660643560843561166c565b341561050157600080fd5b6103066004356116b2565b341561051757600080fd5b6102306116c7565b341561052a57600080fd5b610535600435611717565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c085015260e0840152610100830191909152610120909101905180910390f35b341561058d57600080fd5b61059561175e565b604051808060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b838110156105ed5780820151838201526020016105d5565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b8381101561062c578082015183820152602001610614565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b8381101561066b578082015183820152602001610653565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b838110156106aa578082015183820152602001610692565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b838110156106e95780820151838201526020016106d1565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b83811015610728578082015183820152602001610710565b50505050905001888103825289818151815260200191508051906020019060200280838360005b8381101561076757808201518382015260200161074f565b505050509050019e50505050505050505050505050505060405180910390f35b341561079257600080fd5b61079d600435611a22565b6040518082604080838360005b838110156107c25780820151838201526020016107aa565b5050505090500191505060405180910390f35b34156107e057600080fd5b610230600160a060020a0360043516611a7f565b610230600435611ada565b341561080a57600080fd5b610230600160a060020a03600435166121d5565b341561082957600080fd5b610197612263565b61083961290e565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015290505b90565b60008181526007602052604090206001015433600160a060020a0390811691161461089d57600080fd5b600081815260076020526040908190206009018054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b60005433600160a060020a0390811691161461092557600080fd5b33600160a060020a0316151561093a57600080fd5b6109468484848461229a565b50505050565b600190565b600080548190819081908190819060a060020a900460ff161561097357600080fd5b6000878152600760205260409020600181015490965033600160a060020a039081169116146109a157600080fd5b33600160a060020a031615156109b657600080fd5b6003860154600090116109c857600080fd5b60048601544310156109d957600080fd5b6109f26109eb87600301546064612563565b600a61257f565b9450610a09610a02866064612563565b600261257f565b9350610a20610a19866064612563565b600161257f565b9250610a2c83856125b1565b9150610a3885836125c0565b6001870154909150600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610a7057600080fd5b600a860154600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515610aa557600080fd5b600b860154600160a060020a03166108fc84150284604051600060405180830381858888f193505050501515610ada57600080fd5b610ae88660030154866125c0565b6003878101919091555443016004870155600a8601546000805160206129e683398151915290600160a060020a031685604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65720000000000000000006040808301919091526060909101905180910390a1600b8601546000805160206129e683398151915290600160a060020a031684604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65723200000000000000006040808301919091526060909101905180910390a160018601546000805160206129e683398151915290600160a060020a031682604051600160a060020a03909216825260208201527f7769746864726177616c4f776e657200000000000000000000000000000000006040808301919091526060909101905180910390a17fdcfb70a6f0f5eab41644ac0cde62fe5f51ce0bb0a53b88ea72c4b2b78ad887bc8760405190815260200160405180910390a150505050505050565b60015490565b600081815260076020526040902060010154600160a060020a03848116911614610ca257600080fd5b600081815260076020526040902060090154600160a060020a03838116911614610ccb57600080fd5b600160a060020a0382161515610ce057600080fd5b610ceb8383836125d2565b505050565b565b60008054819081908190819081908190819060a060020a900460ff1615610d1857600080fd5b60008b8152600760205260409020600254909850610d37908b9061257f565b600189015490975033600160a060020a03908116911614610d5757600080fd5b33600160a060020a03161515610d6c57600080fd5b3487901015610d7a57600080fd5b8815610d9857610d8e88600601548b6125b1565b6006890155610dac565b610da688600701548b6125b1565b60078901555b610dc1610dba886064612563565b605061257f565b9550610dd8610dd1886064612563565b601161257f565b9450610de8610a02886064612563565b9350610df8610a19886064612563565b600a890154909350600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515610e3057600080fd5b600b880154600160a060020a03166108fc84150284604051600060405180830381858888f193505050501515610e6557600080fd5b610e738689600301546125b1565b6003890155610e8d610e86866064612563565b601461257f565b9150610e9d610dba866064612563565b600554909150600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515610ed357600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610f0657600080fd5b600a8801546000805160206129e683398151915290600160a060020a031685604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65720000000000000000000000006040808301919091526060909101905180910390a1600b8801546000805160206129e683398151915290600160a060020a031684604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65723200000000000000000000006040808301919091526060909101905180910390a160018801547ff93b010291992b1f39b774e39ebd25679d89423a837516acc89864839e693579908c90600160a060020a0316604051918252600160a060020a031660208201526040908101905180910390a15050505050505050505050565b600081815260076020526040902060010154600160a060020a031680151561106057600080fd5b919050565b60005460a060020a900460ff1681565b600160a060020a031660009081526006602052604090205490565b600054600160a060020a031681565b600081815260076020819052604090912080546001820154600283015460038401546004850154600586015460068701549787015460089097015498999598600160a060020a039095169793969295919490939291565b60008060008060008060008060008060008060149054906101000a900460ff1615156000151514151561112857600080fd5b600760008e81526020019081526020016000209a50600860008e81526020019081526020016000209950600760008d81526020019081526020016000209850600860008d8152602001908152602001600020975033600160a060020a03168b60010160009054906101000a9004600160a060020a0316600160a060020a03161415156111b357600080fd5b6001808a0154908c0154600160a060020a03908116911614156111d557600080fd5b33600160a060020a031615156111ea57600080fd5b34156111f557600080fd5b60068a015443101561120657600080fd5b600788015443101561121757600080fd5b60068b01546000901161122957600080fd5b600789015460068c01541161123d57600080fd5b61125661124f8a600301546064612563565b601961257f565b96506112668960030154886125c0565b60038a015589546001018a5560048a015461128190886125b1565b60048b0155600388018054600101905560058801546112a090886125b1565b6005890155600454430160068b018190556007890181905595506112cf6112c8886064612563565b604b61257f565b94506112df8b60030154866125b1565b60038c015560068b0154611300906112fb610a02826064612563565b6125c0565b60068c0155600789015461131c906112fb6109eb826064612563565b60078a015561133661132f886064612563565b600f61257f565b935061134d611346886064612563565b600661257f565b925061136461135d886064612563565b600361257f565b9150611374610a19886064612563565b60018c0154909150600160a060020a031684156108fc0285604051600060405180830381858888f1935050505015156113ac57600080fd5b600a8b0154600160a060020a03166108fc84150284604051600060405180830381858888f1935050505015156113e157600080fd5b600b8b0154600160a060020a03166108fc83150283604051600060405180830381858888f19350505050151561141657600080fd5b600554600160a060020a03166108fc611433610e86846064612563565b9081150290604051600060405180830381858888f19350505050151561145857600080fd5b600054600160a060020a03166108fc611475610dba846064612563565b9081150290604051600060405180830381858888f19350505050151561149a57600080fd5b7fbfdc5cbaee78217e7eda2a48bd822c621bbee874c4148603f419f857bc506d3c8d8d8960405180848152602001838152602001828152602001935050505060405180910390a150505050505050505050505050565b60005433600160a060020a0390811691161461150b57600080fd5b33600160a060020a0316151561152057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a179055565b61154e61290e565b60408051908101604052600381527f45495300000000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015281565b33600160a060020a031615156115d357600080fd5b60008181526007602052604090206001015433600160a060020a039081169116146115fd57600080fd5b6116083383836125d2565b5050565b600081815260076020526040902060010154600160a060020a03908116903316151561163757600080fd5b60008281526007602052604090206009015433600160a060020a0390811691161461166157600080fd5b6116088133846125d2565b60005433600160a060020a0390811691161461168757600080fd5b33600160a060020a0316151561169c57600080fd5b6116ab85848660008686612679565b5050505050565b60009081526007602052604090206002015490565b60005433600160a060020a039081169116146116e257600080fd5b33600160a060020a031615156116f757600080fd5b6000805474ff000000000000000000000000000000000000000019169055565b600081815260086020526040902080546001820154600283015460038401546004850154600586015460068701546007909701549798959794969395929491939092909190565b61176661290e565b61176e61290e565b61177661290e565b61177e61290e565b61178661290e565b61178e61290e565b61179661290e565b61179e61290e565b6117a661290e565b6117ae61290e565b6117b661290e565b6117be61290e565b6117c661290e565b6117ce61290e565b60006001546040518059106117e05750595b908082528060200260200182016040525097506001546040518059106118035750595b908082528060200260200182016040525096506001546040518059106118265750595b908082528060200260200182016040525095506001546040518059106118495750595b9080825280602002602001820160405250945060015460405180591061186c5750595b9080825280602002602001820160405250935060015460405180591061188f5750595b908082528060200260200182016040525092506001546040518059106118b25750595b90808252806020026020018201604052509150600090505b600154811015611a0b57808882815181106118e157fe5b6020908102909101810191909152600082815260079091526040902060010154600160a060020a031687828151811061191657fe5b600160a060020a03909216602092830290910182015260008281526007909152604090206002015486828151811061194a57fe5b602090810290910181019190915260008281526007909152604090206003015485828151811061197657fe5b60209081029091018101919091526000828152600790915260409020600601548482815181106119a257fe5b602090810290910181019190915260008281526007918290526040902001548382815181106119cd57fe5b60209081029091018101919091526000828152600790915260409020600801548282815181106119f957fe5b602090810290910101526001016118ca565b50959d949c50929a50909850965094509092509050565b611a2a612920565b60008281526007602052604090819020600a019060029080519081016040529190828260026020028201915b8154600160a060020a03168152600190910190602001808311611a565750505050509050919050565b60005433600160a060020a03908116911614611a9a57600080fd5b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611ad757600080fd5b50565b6000805481908190819081908190819081908190819060a060020a900460ff1615611b0457600080fd5b60008b81526007602052604090206001810154909a5033600160a060020a0390811691161415611b3357600080fd5b33600160a060020a03161515611b4857600080fd5b60028a0154341015611b5957600080fd5b611b67348b600201546125c0565b985060008a600501541115611eec57611b8f611b888b6002015460a0612563565b608261257f565b9750611baa611ba38b6002015460a0612563565b601261257f565b9650611bc5611bbe8b6002015460a0612563565b600761257f565b9550611bd961135d8b6002015460a0612563565b9450611bed610a028b6002015460a0612563565b60018b015490945030600160a060020a03908116911614611c3d5760018a0154600160a060020a031688156108fc0289604051600060405180830381858888f193505050501515611c3d57600080fd5b600a8a0154600160a060020a03166108fc86150286604051600060405180830381858888f193505050501515611c7257600080fd5b600b8a0154600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515611ca757600080fd5b611cb5878b600301546125b1565b60038b0155611cc8610e86876064612563565b9250611cd8610dba876064612563565b600554909250600160a060020a031683156108fc0284604051600060405180830381858888f193505050501515611d0e57600080fd5b600054600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515611d4157600080fd5b600a8a01546000805160206129e683398151915290600160a060020a031686604051600160a060020a03909216825260208201527f70726576696f75734f776e6572000000000000000000000000000000000000006040808301919091526060909101905180910390a1600b8a01546000805160206129e683398151915290600160a060020a031685604051600160a060020a03909216825260208201527f70726576696f75734f776e6572320000000000000000000000000000000000006040808301919091526060909101905180910390a160018a01546000805160206129e683398151915290600160a060020a031689604051600160a060020a03909216825260208201527f6f776e65720000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a16000546000805160206129e683398151915290600160a060020a031687604051600160a060020a03909216825260208201527f64657600000000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a1611f22565b60018a0154600160a060020a03163480156108fc0290604051600060405180830381858888f193505050501515611f2257600080fd5b50600289015460058a01819055600354430160048b015560018a0154600160a060020a031690611f5e90611f57906064612563565b60a061257f565b60028b0155600a8a0160000154600160a060020a0316600a8b016001018054600160a060020a031916600160a060020a0392831617905560018b015416600a8b0160000160006101000a815481600160a060020a030219169083600160a060020a03160217905550338a60010160006101000a815481600160a060020a030219169083600160a060020a03160217905550896008016000815480929190600101919050555060016006600083600160a060020a0316600160a060020a03168152602001908152602001600020600082825403925050819055506001600660008c60010160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200190815260200160002060008282540192505081905550600454600860008d815260200190815260200160002060060181905550600454600860008d8152602001908152602001600020600701819055506000805160206129c6833981519152818b60010160009054906101000a9004600160a060020a03168d604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a160058a015460028b015460018c01548c547fdcab0704e5b2c212cba558657bf325bc1b823c2a4e89c77e93926533ec56b5f9938f93909290918691600160a060020a0316906040519586526020860194909452604080860193909352600160a060020a03918216606086015216608084015260a083019190915260c0909101905180910390a1600160a060020a03331689156108fc028a604051600060405180830381858888f1935050505015156121c857600080fd5b5050505050505050505050565b60005433600160a060020a039081169116146121f057600080fd5b600160a060020a038116151561220557600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b60408051908101604052600381527f4549530000000000000000000000000000000000000000000000000000000000602082015281565b610160604051908101604052848152602081018451600160a060020a03168152602001835181526020018360016020020151815260200160408401518152602001606084015181526020016080840151815260200160a0840151815260200160c084015181526020016000600160a060020a0316815260200160408051908101604052806020870151600160a060020a031681526020016040870151600160a060020a0316905290526001546000908152600760205260409020815181556020820151600182018054600160a060020a031916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151600982018054600160a060020a031916600160a060020a039290921691909117905561014082015161240490600a8301906002612947565b5090505061010060405190810160405280825181526020018260016020020151815260200160408301518152602001606083015181526020016080830151815260200160a0830151815260200160c0830151815260200160e083015190526001546000908152600860205260409020815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015160079190910155506001547f6dbe83e0361d1759b05d67925ee5ed7d3c73361da16f0abb8aaebf121c7fd345908585516040519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a16000805160206129c6833981519152308451600154604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505060018054810190555050565b600080828481151561257157fe5b0490508091505b5092915050565b6000808315156125925760009150612578565b508282028284828115156125a257fe5b04146125aa57fe5b9392505050565b6000828201838110156125aa57fe5b6000828211156125cc57fe5b50900390565b600081815260076020908152604080832060018082018054600160a060020a03808a16600160a060020a03199283168117909355600990940180549091169055918816855260069093528184208054600019019055835291829020805490910190556000805160206129c68339815191529084908490849051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b610160604051908101604052808760001916815260200186600160a060020a031681526020018581526020016000815260200160008152602001848152602001838152602001828152602001600081526020016000600160a060020a03168152602001604080519081016040908152600160a060020a038916808352602080840191909152919092526001546000908152600790915220815181556020820151600182018054600160a060020a031916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151600982018054600160a060020a031916600160a060020a03929092169190911790556101408201516127c090600a8301906002612947565b5090505061010060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600860006001548152602001908152602001600020600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050507f6dbe83e0361d1759b05d67925ee5ed7d3c73361da16f0abb8aaebf121c7fd34560015487876040519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a16000805160206129c68339815191523086600154604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050600180548101905550505050565b60206040519081016040526000815290565b604080519081016040526002815b60008152600019909101906020018161292e5790505090565b8260028101928215612991579160200282015b828111156129915782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019061295a565b5061299d9291506129a1565b5090565b61087091905b8082111561299d578054600160a060020a03191681556001016129a75600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef643236658eb2709c16f0857e1a7a4fffee3c798264461cc3462be70c4fa9d8cda165627a7a72305820a049f3e60d6ea93c6b6878526c271cfa60341a08046a434a365a274e320244bc0029

Deployed Bytecode

0x60606040526004361061017f5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610184578063095ea7b31461020e5780630d28f8d1146102325780631051db34146102c157806311f1fc99146102e857806318160ddd146102f357806323b872dd14610318578063472b64921461034057806361b98cb3146103485780636352211e1461035b5780636c376cc51461038d57806370a08231146103a05780638da5cb5b146103bf578063913158f7146103d257806394b663861461044c578063952868b51461045a57806395d89b411461046d578063a3f4df7e14610480578063a9059cbb14610493578063b2e6ceeb146104b5578063b5dd20e9146104cb578063b9186d7d146104f6578063d5ea36f91461050c578063dc3134ae1461051f578063deb081df14610582578063e6e0556214610787578063eb2c0223146107d5578063efef39a1146107f4578063f2fde38b146107ff578063f76f8d781461081e575b600080fd5b341561018f57600080fd5b610197610831565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101d35780820151838201526020016101bb565b50505050905090810190601f1680156102005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021957600080fd5b610230600160a060020a0360043516602435610873565b005b341561023d57600080fd5b6102306004803590608460246003606060405190810160405291908282606080828437820191505050505091908060e001906007806020026040519081016040529190828260e0808284378201915050505050919080610100019060088060200260405190810160405291908282610100808284375093955061090a945050505050565b34156102cc57600080fd5b6102d461094c565b604051901515815260200160405180910390f35b610230600435610951565b34156102fe57600080fd5b610306610c73565b60405190815260200160405180910390f35b341561032357600080fd5b610230600160a060020a0360043581169060243516604435610c79565b610230610cf0565b6102306004356024356044351515610cf2565b341561036657600080fd5b610371600435611039565b604051600160a060020a03909116815260200160405180910390f35b341561039857600080fd5b6102d4611065565b34156103ab57600080fd5b610306600160a060020a0360043516611075565b34156103ca57600080fd5b610371611090565b34156103dd57600080fd5b6103e860043561109f565b604051998a5260208a0198909852600160a060020a039096166040808a01919091526060890195909552608088019390935260a087019190915260c086015260e0850152610100840191909152610120830191909152610140909101905180910390f35b6102306004356024356110f6565b341561046557600080fd5b6102306114f0565b341561047857600080fd5b610197611546565b341561048b57600080fd5b610197611587565b341561049e57600080fd5b610230600160a060020a03600435166024356115be565b34156104c057600080fd5b61023060043561160c565b34156104d657600080fd5b610230600435602435600160a060020a036044351660643560843561166c565b341561050157600080fd5b6103066004356116b2565b341561051757600080fd5b6102306116c7565b341561052a57600080fd5b610535600435611717565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c085015260e0840152610100830191909152610120909101905180910390f35b341561058d57600080fd5b61059561175e565b604051808060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b838110156105ed5780820151838201526020016105d5565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b8381101561062c578082015183820152602001610614565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b8381101561066b578082015183820152602001610653565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b838110156106aa578082015183820152602001610692565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b838110156106e95780820151838201526020016106d1565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b83811015610728578082015183820152602001610710565b50505050905001888103825289818151815260200191508051906020019060200280838360005b8381101561076757808201518382015260200161074f565b505050509050019e50505050505050505050505050505060405180910390f35b341561079257600080fd5b61079d600435611a22565b6040518082604080838360005b838110156107c25780820151838201526020016107aa565b5050505090500191505060405180910390f35b34156107e057600080fd5b610230600160a060020a0360043516611a7f565b610230600435611ada565b341561080a57600080fd5b610230600160a060020a03600435166121d5565b341561082957600080fd5b610197612263565b61083961290e565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015290505b90565b60008181526007602052604090206001015433600160a060020a0390811691161461089d57600080fd5b600081815260076020526040908190206009018054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b60005433600160a060020a0390811691161461092557600080fd5b33600160a060020a0316151561093a57600080fd5b6109468484848461229a565b50505050565b600190565b600080548190819081908190819060a060020a900460ff161561097357600080fd5b6000878152600760205260409020600181015490965033600160a060020a039081169116146109a157600080fd5b33600160a060020a031615156109b657600080fd5b6003860154600090116109c857600080fd5b60048601544310156109d957600080fd5b6109f26109eb87600301546064612563565b600a61257f565b9450610a09610a02866064612563565b600261257f565b9350610a20610a19866064612563565b600161257f565b9250610a2c83856125b1565b9150610a3885836125c0565b6001870154909150600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610a7057600080fd5b600a860154600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515610aa557600080fd5b600b860154600160a060020a03166108fc84150284604051600060405180830381858888f193505050501515610ada57600080fd5b610ae88660030154866125c0565b6003878101919091555443016004870155600a8601546000805160206129e683398151915290600160a060020a031685604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65720000000000000000006040808301919091526060909101905180910390a1600b8601546000805160206129e683398151915290600160a060020a031684604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65723200000000000000006040808301919091526060909101905180910390a160018601546000805160206129e683398151915290600160a060020a031682604051600160a060020a03909216825260208201527f7769746864726177616c4f776e657200000000000000000000000000000000006040808301919091526060909101905180910390a17fdcfb70a6f0f5eab41644ac0cde62fe5f51ce0bb0a53b88ea72c4b2b78ad887bc8760405190815260200160405180910390a150505050505050565b60015490565b600081815260076020526040902060010154600160a060020a03848116911614610ca257600080fd5b600081815260076020526040902060090154600160a060020a03838116911614610ccb57600080fd5b600160a060020a0382161515610ce057600080fd5b610ceb8383836125d2565b505050565b565b60008054819081908190819081908190819060a060020a900460ff1615610d1857600080fd5b60008b8152600760205260409020600254909850610d37908b9061257f565b600189015490975033600160a060020a03908116911614610d5757600080fd5b33600160a060020a03161515610d6c57600080fd5b3487901015610d7a57600080fd5b8815610d9857610d8e88600601548b6125b1565b6006890155610dac565b610da688600701548b6125b1565b60078901555b610dc1610dba886064612563565b605061257f565b9550610dd8610dd1886064612563565b601161257f565b9450610de8610a02886064612563565b9350610df8610a19886064612563565b600a890154909350600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515610e3057600080fd5b600b880154600160a060020a03166108fc84150284604051600060405180830381858888f193505050501515610e6557600080fd5b610e738689600301546125b1565b6003890155610e8d610e86866064612563565b601461257f565b9150610e9d610dba866064612563565b600554909150600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515610ed357600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610f0657600080fd5b600a8801546000805160206129e683398151915290600160a060020a031685604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65720000000000000000000000006040808301919091526060909101905180910390a1600b8801546000805160206129e683398151915290600160a060020a031684604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65723200000000000000000000006040808301919091526060909101905180910390a160018801547ff93b010291992b1f39b774e39ebd25679d89423a837516acc89864839e693579908c90600160a060020a0316604051918252600160a060020a031660208201526040908101905180910390a15050505050505050505050565b600081815260076020526040902060010154600160a060020a031680151561106057600080fd5b919050565b60005460a060020a900460ff1681565b600160a060020a031660009081526006602052604090205490565b600054600160a060020a031681565b600081815260076020819052604090912080546001820154600283015460038401546004850154600586015460068701549787015460089097015498999598600160a060020a039095169793969295919490939291565b60008060008060008060008060008060008060149054906101000a900460ff1615156000151514151561112857600080fd5b600760008e81526020019081526020016000209a50600860008e81526020019081526020016000209950600760008d81526020019081526020016000209850600860008d8152602001908152602001600020975033600160a060020a03168b60010160009054906101000a9004600160a060020a0316600160a060020a03161415156111b357600080fd5b6001808a0154908c0154600160a060020a03908116911614156111d557600080fd5b33600160a060020a031615156111ea57600080fd5b34156111f557600080fd5b60068a015443101561120657600080fd5b600788015443101561121757600080fd5b60068b01546000901161122957600080fd5b600789015460068c01541161123d57600080fd5b61125661124f8a600301546064612563565b601961257f565b96506112668960030154886125c0565b60038a015589546001018a5560048a015461128190886125b1565b60048b0155600388018054600101905560058801546112a090886125b1565b6005890155600454430160068b018190556007890181905595506112cf6112c8886064612563565b604b61257f565b94506112df8b60030154866125b1565b60038c015560068b0154611300906112fb610a02826064612563565b6125c0565b60068c0155600789015461131c906112fb6109eb826064612563565b60078a015561133661132f886064612563565b600f61257f565b935061134d611346886064612563565b600661257f565b925061136461135d886064612563565b600361257f565b9150611374610a19886064612563565b60018c0154909150600160a060020a031684156108fc0285604051600060405180830381858888f1935050505015156113ac57600080fd5b600a8b0154600160a060020a03166108fc84150284604051600060405180830381858888f1935050505015156113e157600080fd5b600b8b0154600160a060020a03166108fc83150283604051600060405180830381858888f19350505050151561141657600080fd5b600554600160a060020a03166108fc611433610e86846064612563565b9081150290604051600060405180830381858888f19350505050151561145857600080fd5b600054600160a060020a03166108fc611475610dba846064612563565b9081150290604051600060405180830381858888f19350505050151561149a57600080fd5b7fbfdc5cbaee78217e7eda2a48bd822c621bbee874c4148603f419f857bc506d3c8d8d8960405180848152602001838152602001828152602001935050505060405180910390a150505050505050505050505050565b60005433600160a060020a0390811691161461150b57600080fd5b33600160a060020a0316151561152057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a179055565b61154e61290e565b60408051908101604052600381527f45495300000000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015281565b33600160a060020a031615156115d357600080fd5b60008181526007602052604090206001015433600160a060020a039081169116146115fd57600080fd5b6116083383836125d2565b5050565b600081815260076020526040902060010154600160a060020a03908116903316151561163757600080fd5b60008281526007602052604090206009015433600160a060020a0390811691161461166157600080fd5b6116088133846125d2565b60005433600160a060020a0390811691161461168757600080fd5b33600160a060020a0316151561169c57600080fd5b6116ab85848660008686612679565b5050505050565b60009081526007602052604090206002015490565b60005433600160a060020a039081169116146116e257600080fd5b33600160a060020a031615156116f757600080fd5b6000805474ff000000000000000000000000000000000000000019169055565b600081815260086020526040902080546001820154600283015460038401546004850154600586015460068701546007909701549798959794969395929491939092909190565b61176661290e565b61176e61290e565b61177661290e565b61177e61290e565b61178661290e565b61178e61290e565b61179661290e565b61179e61290e565b6117a661290e565b6117ae61290e565b6117b661290e565b6117be61290e565b6117c661290e565b6117ce61290e565b60006001546040518059106117e05750595b908082528060200260200182016040525097506001546040518059106118035750595b908082528060200260200182016040525096506001546040518059106118265750595b908082528060200260200182016040525095506001546040518059106118495750595b9080825280602002602001820160405250945060015460405180591061186c5750595b9080825280602002602001820160405250935060015460405180591061188f5750595b908082528060200260200182016040525092506001546040518059106118b25750595b90808252806020026020018201604052509150600090505b600154811015611a0b57808882815181106118e157fe5b6020908102909101810191909152600082815260079091526040902060010154600160a060020a031687828151811061191657fe5b600160a060020a03909216602092830290910182015260008281526007909152604090206002015486828151811061194a57fe5b602090810290910181019190915260008281526007909152604090206003015485828151811061197657fe5b60209081029091018101919091526000828152600790915260409020600601548482815181106119a257fe5b602090810290910181019190915260008281526007918290526040902001548382815181106119cd57fe5b60209081029091018101919091526000828152600790915260409020600801548282815181106119f957fe5b602090810290910101526001016118ca565b50959d949c50929a50909850965094509092509050565b611a2a612920565b60008281526007602052604090819020600a019060029080519081016040529190828260026020028201915b8154600160a060020a03168152600190910190602001808311611a565750505050509050919050565b60005433600160a060020a03908116911614611a9a57600080fd5b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611ad757600080fd5b50565b6000805481908190819081908190819081908190819060a060020a900460ff1615611b0457600080fd5b60008b81526007602052604090206001810154909a5033600160a060020a0390811691161415611b3357600080fd5b33600160a060020a03161515611b4857600080fd5b60028a0154341015611b5957600080fd5b611b67348b600201546125c0565b985060008a600501541115611eec57611b8f611b888b6002015460a0612563565b608261257f565b9750611baa611ba38b6002015460a0612563565b601261257f565b9650611bc5611bbe8b6002015460a0612563565b600761257f565b9550611bd961135d8b6002015460a0612563565b9450611bed610a028b6002015460a0612563565b60018b015490945030600160a060020a03908116911614611c3d5760018a0154600160a060020a031688156108fc0289604051600060405180830381858888f193505050501515611c3d57600080fd5b600a8a0154600160a060020a03166108fc86150286604051600060405180830381858888f193505050501515611c7257600080fd5b600b8a0154600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515611ca757600080fd5b611cb5878b600301546125b1565b60038b0155611cc8610e86876064612563565b9250611cd8610dba876064612563565b600554909250600160a060020a031683156108fc0284604051600060405180830381858888f193505050501515611d0e57600080fd5b600054600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515611d4157600080fd5b600a8a01546000805160206129e683398151915290600160a060020a031686604051600160a060020a03909216825260208201527f70726576696f75734f776e6572000000000000000000000000000000000000006040808301919091526060909101905180910390a1600b8a01546000805160206129e683398151915290600160a060020a031685604051600160a060020a03909216825260208201527f70726576696f75734f776e6572320000000000000000000000000000000000006040808301919091526060909101905180910390a160018a01546000805160206129e683398151915290600160a060020a031689604051600160a060020a03909216825260208201527f6f776e65720000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a16000546000805160206129e683398151915290600160a060020a031687604051600160a060020a03909216825260208201527f64657600000000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a1611f22565b60018a0154600160a060020a03163480156108fc0290604051600060405180830381858888f193505050501515611f2257600080fd5b50600289015460058a01819055600354430160048b015560018a0154600160a060020a031690611f5e90611f57906064612563565b60a061257f565b60028b0155600a8a0160000154600160a060020a0316600a8b016001018054600160a060020a031916600160a060020a0392831617905560018b015416600a8b0160000160006101000a815481600160a060020a030219169083600160a060020a03160217905550338a60010160006101000a815481600160a060020a030219169083600160a060020a03160217905550896008016000815480929190600101919050555060016006600083600160a060020a0316600160a060020a03168152602001908152602001600020600082825403925050819055506001600660008c60010160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200190815260200160002060008282540192505081905550600454600860008d815260200190815260200160002060060181905550600454600860008d8152602001908152602001600020600701819055506000805160206129c6833981519152818b60010160009054906101000a9004600160a060020a03168d604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a160058a015460028b015460018c01548c547fdcab0704e5b2c212cba558657bf325bc1b823c2a4e89c77e93926533ec56b5f9938f93909290918691600160a060020a0316906040519586526020860194909452604080860193909352600160a060020a03918216606086015216608084015260a083019190915260c0909101905180910390a1600160a060020a03331689156108fc028a604051600060405180830381858888f1935050505015156121c857600080fd5b5050505050505050505050565b60005433600160a060020a039081169116146121f057600080fd5b600160a060020a038116151561220557600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b60408051908101604052600381527f4549530000000000000000000000000000000000000000000000000000000000602082015281565b610160604051908101604052848152602081018451600160a060020a03168152602001835181526020018360016020020151815260200160408401518152602001606084015181526020016080840151815260200160a0840151815260200160c084015181526020016000600160a060020a0316815260200160408051908101604052806020870151600160a060020a031681526020016040870151600160a060020a0316905290526001546000908152600760205260409020815181556020820151600182018054600160a060020a031916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151600982018054600160a060020a031916600160a060020a039290921691909117905561014082015161240490600a8301906002612947565b5090505061010060405190810160405280825181526020018260016020020151815260200160408301518152602001606083015181526020016080830151815260200160a0830151815260200160c0830151815260200160e083015190526001546000908152600860205260409020815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015160079190910155506001547f6dbe83e0361d1759b05d67925ee5ed7d3c73361da16f0abb8aaebf121c7fd345908585516040519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a16000805160206129c6833981519152308451600154604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505060018054810190555050565b600080828481151561257157fe5b0490508091505b5092915050565b6000808315156125925760009150612578565b508282028284828115156125a257fe5b04146125aa57fe5b9392505050565b6000828201838110156125aa57fe5b6000828211156125cc57fe5b50900390565b600081815260076020908152604080832060018082018054600160a060020a03808a16600160a060020a03199283168117909355600990940180549091169055918816855260069093528184208054600019019055835291829020805490910190556000805160206129c68339815191529084908490849051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b610160604051908101604052808760001916815260200186600160a060020a031681526020018581526020016000815260200160008152602001848152602001838152602001828152602001600081526020016000600160a060020a03168152602001604080519081016040908152600160a060020a038916808352602080840191909152919092526001546000908152600790915220815181556020820151600182018054600160a060020a031916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151600982018054600160a060020a031916600160a060020a03929092169190911790556101408201516127c090600a8301906002612947565b5090505061010060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600860006001548152602001908152602001600020600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050507f6dbe83e0361d1759b05d67925ee5ed7d3c73361da16f0abb8aaebf121c7fd34560015487876040519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a16000805160206129c68339815191523086600154604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050600180548101905550505050565b60206040519081016040526000815290565b604080519081016040526002815b60008152600019909101906020018161292e5790505090565b8260028101928215612991579160200282015b828111156129915782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019061295a565b5061299d9291506129a1565b5090565b61087091905b8082111561299d578054600160a060020a03191681556001016129a75600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef643236658eb2709c16f0857e1a7a4fffee3c798264461cc3462be70c4fa9d8cda165627a7a72305820a049f3e60d6ea93c6b6878526c271cfa60341a08046a434a365a274e320244bc0029

Swarm Source

bzzr://a049f3e60d6ea93c6b6878526c271cfa60341a08046a434a365a274e320244bc

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.