Sponsored:   Color Platform: Decentralized App Store - Special Airdrop For Everyone (~17 Sep), Register NOW!
Contract Overview
Balance: 0.18396709560807706 Ether
Ether Value: $43.01 (@ $233.78/ETH)
Transactions: 1691 txns
 Latest 25 txns From a total of 1691 Transactions

TxHash Age From To Value [TxFee]
0x005681a27dacea060c8fbb551d4b9c6d0047d23faaab2ec57dae772dad6fc72554 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x8e453b4dd65b8c64312f47e4f318876e9d947914d2720317f82ef192e00f763c54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x7aadb18dc57157ca3f8fdf275bb3d4203ee4d6de61f5890193e40efa98f0c7ed54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x5758c28891fdca8eca5fea797e5ae8ba71bcca3b865a203c4ac3eaf3c9868ad054 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x0c027feff78c011056d26f82760961e685b6cc88b0b736dddee0f49d51cb90f354 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x97f8c95e58d27f99f0be8f115f7fa88f58a0a039cc0537a2ccff5c34f9df8e7a54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x4a8acd063268eea076edc9dbb399d69d5a0702cd62b037d05e411d916f27d87254 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xea5a7b791daa1ac02de9ce96049c4ce9dcb24b334fa2fc6576d05c4b90628e2a54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x32d8a1cc9526d1af7e54887355b77f4e91f1676fd77eadef31b1d7974dd0421e54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x96708600e2b9c434b3ea587f949761ec18be07946c08eecda09d2dc1e08bf90554 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x5910bf21d216a55ecf2bed87da56c3ef705269634f986d8740db059814e6dc2854 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x139e7b088a1bc1530a022080e0f43871cd575ffbfeaccde6e3742f69acdb1c7d54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x6276da049cbc080b58f28125c527c29b77c813ebd667f25f69a559e9c6c824bb54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xbe9d749659b8f2124573dac09d23f18556b6fa96c3d4dc9776febc42d1b7d05f54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x2e36ae63d20b3d985f3f4899b668ce5f1a1cded5dfb20999eb47716209e5db3554 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xc7ecdbc64a7d15752f3139eaf8460730c0cb05e59be301cd5632049528bbd27a54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x0a04825b5ec553e5b7415ed968a7b34a9a922e45a0ba40398b7bc535327f13c054 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xca728d390357e84dde2ea9ad8a478cc74367100a650c235ca3d118b24df3106454 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x9ce89d12846c3706e7c4c413174bbe518867784908c7a6d765f793ad6767581d54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xc34c55310d3c85615857e67e12e383c0505ab409e95933d9bee361a463ba798a54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xde3b98b6f97bbfd56c50d6e69cf14a24af7c5987d265d2a3996b6c8feb3294da54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xc015e30dd9290c5b41c48392447393ff8079d9900e753da27e3d1edd72b94f4254 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0xed2d0e0400e65db13b90f14ba570f00359ec97fb4301236b52c46b4de2c711d054 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x6bb2be7cc3250db7d6efea5a40215b12dd5655b406bd85388cf1f2d00991a47e54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000172747
0x545cf3ed425ab52370c7abe3f1d3e274dd6cff5ed87c80b9b49e0c9859b811ce54 days 20 hrs ago0xe1889493e4c8210808b0280e2ed72122329ca358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000187747
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 6 Internal Transactions

ParentTxHash Block Age From To Value
0xebbe13b078be5b4a76190a0c33ff12f0e84176c647d1a00612df9f4a0c40a5e05639645128 days 11 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.793889999297211878 Ether
0x4b79e8ca99557fd5d52e73205b08040549de7cefc859924cdb7fdf92535f66cf5639077128 days 13 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.5 Ether
0xa93f83c42147b122f1b1b52d40ca95239ca4e717a11173567d9a7c1b5b8eef665636028129 days 2 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b3.2 Ether
0xa9b058fdff8ec014ddc45274c0443bb7c917ef7cfbf50adc3b5f01595087577b5615083132 days 19 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.5 Ether
0x4e088a6f0becf2e267e9452f51e2694765a937cc25c7f7e95a77dd6de14aace65599547135 days 12 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.15418 Ether
0xd7d8a3e99900b1747cc26403439ad4d559f15c913bb8643b5e6a087ac940d9205596606136 days 43 mins ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.0805 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: VirtualRealEstate
Compiler Text: v0.4.23+commit.124ca40d
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.2;

// Make setPrivate payout any pending payouts

// ERC20 Token Interface
contract Token {
    uint256 public totalSupply;
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// ERC20 Token Implementation
contract StandardToken is Token {
    function transfer(address _to, uint256 _value) public returns (bool success) {
      if (balances[msg.sender] >= _value && _value > 0) {
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
      } else {
        return false;
      }
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
      if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
        balances[_to] += _value;
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
      } else {
        return false;
      }
    }

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

    function approve(address _spender, uint256 _value) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
}

/*
    PXLProperty is the ERC20 Cryptocurrency & Cryptocollectable
    * It is a StandardToken ERC20 token and inherits all of that
    * It has the Property structure and holds the Properties
    * It governs the regulators (moderators, admins, root, Property DApps and PixelProperty)
    * It has getters and setts for all data storage
    * It selectively allows access to PXL and Properties based on caller access
    
    Moderation is handled inside PXLProperty, not by external DApps. It's up to other apps to respect the flags, however
*/
contract PXLProperty is StandardToken {
    /* Access Level Constants */
    uint8 constant LEVEL_1_MODERATOR = 1;    // 1: Level 1 Moderator - nsfw-flagging power
    uint8 constant LEVEL_2_MODERATOR = 2;    // 2: Level 2 Moderator - ban power + [1]
    uint8 constant LEVEL_1_ADMIN = 3;        // 3: Level 1 Admin - Can manage moderator levels + [1,2]
    uint8 constant LEVEL_2_ADMIN = 4;        // 4: Level 2 Admin - Can manage admin level 1 levels + [1-3]
    uint8 constant LEVEL_1_ROOT = 5;         // 5: Level 1 Root - Can set property DApps level [1-4]
    uint8 constant LEVEL_2_ROOT = 6;         // 6: Level 2 Root - Can set pixelPropertyContract level [1-5]
    uint8 constant LEVEL_3_ROOT = 7;         // 7: Level 3 Root - Can demote/remove root, transfer root, [1-6]
    uint8 constant LEVEL_PROPERTY_DAPPS = 8; // 8: Property DApps - Power over manipulating Property data
    uint8 constant LEVEL_PIXEL_PROPERTY = 9; // 9: PixelProperty - Power over PXL generation & Property ownership
    /* Flags Constants */
    uint8 constant FLAG_NSFW = 1;
    uint8 constant FLAG_BAN = 2;
    
    /* Accesser Addresses & Levels */
    address pixelPropertyContract; // Only contract that has control over PXL creation and Property ownership
    mapping (address => uint8) public regulators; // Mapping of users/contracts to their control levels
    
    // Mapping of PropertyID to Property
    mapping (uint16 => Property) public properties;
    // Property Owner's website
    mapping (address => uint256[2]) public ownerWebsite;
    // Property Owner's hover text
    mapping (address => uint256[2]) public ownerHoverText;
    
    /* ### Ownable Property Structure ### */
    struct Property {
        uint8 flag;
        bool isInPrivateMode; //Whether in private mode for owner-only use or free-use mode to be shared
        address owner; //Who owns the Property. If its zero (0), then no owner and known as a "system-Property"
        address lastUpdater; //Who last changed the color of the Property
        uint256[5] colors; //10x10 rgb pixel colors per property. colors[0] is the top row, colors[9] is the bottom row
        uint256 salePrice; //PXL price the owner has the Property on sale for. If zero, then its not for sale.
        uint256 lastUpdate; //Timestamp of when it had its color last updated
        uint256 becomePublic; //Timestamp on when to become public
        uint256 earnUntil; //Timestamp on when Property token generation will stop
    }
    
    /* ### Regulation Access Modifiers ### */
    modifier regulatorAccess(uint8 accessLevel) {
        require(accessLevel <= LEVEL_3_ROOT); // Only request moderator, admin or root levels forr regulatorAccess
        require(regulators[msg.sender] >= accessLevel); // Users must meet requirement
        if (accessLevel >= LEVEL_1_ADMIN) { //
            require(regulators[msg.sender] <= LEVEL_3_ROOT); //DApps can't do Admin/Root stuff, but can set nsfw/ban flags
        }
        _;
    }
    
    modifier propertyDAppAccess() {
        require(regulators[msg.sender] == LEVEL_PROPERTY_DAPPS || regulators[msg.sender] == LEVEL_PIXEL_PROPERTY );
        _;
    }
    
    modifier pixelPropertyAccess() {
        require(regulators[msg.sender] == LEVEL_PIXEL_PROPERTY);
        _;
    }
    
    /* ### Constructor ### */
    function PXLProperty() public {
        regulators[msg.sender] = LEVEL_3_ROOT; // Creator set to Level 3 Root
    }
    
    /* ### Moderator, Admin & Root Functions ### */
    // Moderator Flags
    function setPropertyFlag(uint16 propertyID, uint8 flag) public regulatorAccess(flag == FLAG_NSFW ? LEVEL_1_MODERATOR : LEVEL_2_MODERATOR) {
        properties[propertyID].flag = flag;
        if (flag == FLAG_BAN) {
            require(properties[propertyID].isInPrivateMode); //Can't ban an owner's property if a public user caused the NSFW content
            properties[propertyID].colors = [0, 0, 0, 0, 0];
        }
    }
    
    // Setting moderator/admin/root access
    function setRegulatorAccessLevel(address user, uint8 accessLevel) public regulatorAccess(LEVEL_1_ADMIN) {
        if (msg.sender != user) {
            require(regulators[msg.sender] > regulators[user]); // You have to be a higher rank than the user you are changing
        }
        require(regulators[msg.sender] > accessLevel); // You have to be a higher rank than the role you are setting
        regulators[user] = accessLevel;
    }
    
    function setPixelPropertyContract(address newPixelPropertyContract) public regulatorAccess(LEVEL_2_ROOT) {
        require(newPixelPropertyContract != 0);
        if (pixelPropertyContract != 0) {
            regulators[pixelPropertyContract] = 0; //If we already have a pixelPropertyContract, revoke its ownership
        }
        
        pixelPropertyContract = newPixelPropertyContract;
        regulators[newPixelPropertyContract] = LEVEL_PIXEL_PROPERTY;
    }
    
    function setPropertyDAppContract(address propertyDAppContract, bool giveAccess) public regulatorAccess(LEVEL_1_ROOT) {
        require(propertyDAppContract != 0);
        regulators[propertyDAppContract] = giveAccess ? LEVEL_PROPERTY_DAPPS : 0;
    }
    
    /* ### PropertyDapp Functions ### */
    function setPropertyColors(uint16 propertyID, uint256[5] colors) public propertyDAppAccess() {
        for(uint256 i = 0; i < 5; i++) {
            if (properties[propertyID].colors[i] != colors[i]) {
                properties[propertyID].colors[i] = colors[i];
            }
        }
    }
    
    function setPropertyRowColor(uint16 propertyID, uint8 row, uint256 rowColor) public propertyDAppAccess() {
        if (properties[propertyID].colors[row] != rowColor) {
            properties[propertyID].colors[row] = rowColor;
        }
    }
    
    function setOwnerHoverText(address textOwner, uint256[2] hoverText) public propertyDAppAccess() {
        require (textOwner != 0);
        ownerHoverText[textOwner] = hoverText;
    }
    
    function setOwnerLink(address websiteOwner, uint256[2] website) public propertyDAppAccess() {
        require (websiteOwner != 0);
        ownerWebsite[websiteOwner] = website;
    }
    
    /* ### PixelProperty Property Functions ### */
    function setPropertyPrivateMode(uint16 propertyID, bool isInPrivateMode) public pixelPropertyAccess() {
        if (properties[propertyID].isInPrivateMode != isInPrivateMode) {
            properties[propertyID].isInPrivateMode = isInPrivateMode;
        }
    }
    
    function setPropertyOwner(uint16 propertyID, address propertyOwner) public pixelPropertyAccess() {
        if (properties[propertyID].owner != propertyOwner) {
            properties[propertyID].owner = propertyOwner;
        }
    }
    
    function setPropertyLastUpdater(uint16 propertyID, address lastUpdater) public pixelPropertyAccess() {
        if (properties[propertyID].lastUpdater != lastUpdater) {
            properties[propertyID].lastUpdater = lastUpdater;
        }
    }
    
    function setPropertySalePrice(uint16 propertyID, uint256 salePrice) public pixelPropertyAccess() {
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
    }
    
    function setPropertyLastUpdate(uint16 propertyID, uint256 lastUpdate) public pixelPropertyAccess() {
        properties[propertyID].lastUpdate = lastUpdate;
    }
    
    function setPropertyBecomePublic(uint16 propertyID, uint256 becomePublic) public pixelPropertyAccess() {
        properties[propertyID].becomePublic = becomePublic;
    }
    
    function setPropertyEarnUntil(uint16 propertyID, uint256 earnUntil) public pixelPropertyAccess() {
        properties[propertyID].earnUntil = earnUntil;
    }
    
    function setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(uint16 propertyID, bool privateMode, uint256 earnUntil, uint256 lastUpdate, uint256 becomePublic) public pixelPropertyAccess() {
        if (properties[propertyID].isInPrivateMode != privateMode) {
            properties[propertyID].isInPrivateMode = privateMode;
        }
        properties[propertyID].earnUntil = earnUntil;
        properties[propertyID].lastUpdate = lastUpdate;
        properties[propertyID].becomePublic = becomePublic;
    }
    
    function setPropertyLastUpdaterLastUpdate(uint16 propertyID, address lastUpdater, uint256 lastUpdate) public pixelPropertyAccess() {
        if (properties[propertyID].lastUpdater != lastUpdater) {
            properties[propertyID].lastUpdater = lastUpdater;
        }
        properties[propertyID].lastUpdate = lastUpdate;
    }
    
    function setPropertyBecomePublicEarnUntil(uint16 propertyID, uint256 becomePublic, uint256 earnUntil) public pixelPropertyAccess() {
        properties[propertyID].becomePublic = becomePublic;
        properties[propertyID].earnUntil = earnUntil;
    }
    
    function setPropertyOwnerSalePricePrivateModeFlag(uint16 propertyID, address owner, uint256 salePrice, bool privateMode, uint8 flag) public pixelPropertyAccess() {
        if (properties[propertyID].owner != owner) {
            properties[propertyID].owner = owner;
        }
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
        if (properties[propertyID].isInPrivateMode != privateMode) {
            properties[propertyID].isInPrivateMode = privateMode;
        }
        if (properties[propertyID].flag != flag) {
            properties[propertyID].flag = flag;
        }
    }
    
    function setPropertyOwnerSalePrice(uint16 propertyID, address owner, uint256 salePrice) public pixelPropertyAccess() {
        if (properties[propertyID].owner != owner) {
            properties[propertyID].owner = owner;
        }
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
    }
    
    /* ### PixelProperty PXL Functions ### */
    function rewardPXL(address rewardedUser, uint256 amount) public pixelPropertyAccess() {
        require(rewardedUser != 0);
        balances[rewardedUser] += amount;
        totalSupply += amount;
    }
    
    function burnPXL(address burningUser, uint256 amount) public pixelPropertyAccess() {
        require(burningUser != 0);
        require(balances[burningUser] >= amount);
        balances[burningUser] -= amount;
        totalSupply -= amount;
    }
    
    function burnPXLRewardPXL(address burner, uint256 toBurn, address rewarder, uint256 toReward) public pixelPropertyAccess() {
        require(balances[burner] >= toBurn);
        if (toBurn > 0) {
            balances[burner] -= toBurn;
            totalSupply -= toBurn;
        }
        if (rewarder != 0) {
            balances[rewarder] += toReward;
            totalSupply += toReward;
        }
    } 
    
    function burnPXLRewardPXLx2(address burner, uint256 toBurn, address rewarder1, uint256 toReward1, address rewarder2, uint256 toReward2) public pixelPropertyAccess() {
        require(balances[burner] >= toBurn);
        if (toBurn > 0) {
            balances[burner] -= toBurn;
            totalSupply -= toBurn;
        }
        if (rewarder1 != 0) {
            balances[rewarder1] += toReward1;
            totalSupply += toReward1;
        }
        if (rewarder2 != 0) {
            balances[rewarder2] += toReward2;
            totalSupply += toReward2;
        }
    } 
    
    /* ### All Getters/Views ### */
    function getOwnerHoverText(address user) public view returns(uint256[2]) {
        return ownerHoverText[user];
    }
    
    function getOwnerLink(address user) public view returns(uint256[2]) {
        return ownerWebsite[user];
    }
    
    function getPropertyFlag(uint16 propertyID) public view returns(uint8) {
        return properties[propertyID].flag;
    }
    
    function getPropertyPrivateMode(uint16 propertyID) public view returns(bool) {
        return properties[propertyID].isInPrivateMode;
    }
    
    function getPropertyOwner(uint16 propertyID) public view returns(address) {
        return properties[propertyID].owner;
    }
    
    function getPropertyLastUpdater(uint16 propertyID) public view returns(address) {
        return properties[propertyID].lastUpdater;
    }
    
    function getPropertyColors(uint16 propertyID) public view returns(uint256[5]) {
        return properties[propertyID].colors;
    }

    function getPropertyColorsOfRow(uint16 propertyID, uint8 rowIndex) public view returns(uint256) {
        require(rowIndex <= 9);
        return properties[propertyID].colors[rowIndex];
    }
    
    function getPropertySalePrice(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].salePrice;
    }
    
    function getPropertyLastUpdate(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].lastUpdate;
    }
    
    function getPropertyBecomePublic(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].becomePublic;
    }
    
    function getPropertyEarnUntil(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].earnUntil;
    }
    
    function getRegulatorLevel(address user) public view returns(uint8) {
        return regulators[user];
    }
    
    // Gets the (owners address, Ethereum sale price, PXL sale price, last update timestamp, whether its in private mode or not, when it becomes public timestamp, flag) for a Property
    function getPropertyData(uint16 propertyID, uint256 systemSalePriceETH, uint256 systemSalePricePXL) public view returns(address, uint256, uint256, uint256, bool, uint256, uint8) {
        Property memory property = properties[propertyID];
        bool isInPrivateMode = property.isInPrivateMode;
        //If it's in private, but it has expired and should be public, set our bool to be public
        if (isInPrivateMode && property.becomePublic <= now) { 
            isInPrivateMode = false;
        }
        if (properties[propertyID].owner == 0) {
            return (0, systemSalePriceETH, systemSalePricePXL, property.lastUpdate, isInPrivateMode, property.becomePublic, property.flag);
        } else {
            return (property.owner, 0, property.salePrice, property.lastUpdate, isInPrivateMode, property.becomePublic, property.flag);
        }
    }
    
    function getPropertyPrivateModeBecomePublic(uint16 propertyID) public view returns (bool, uint256) {
        return (properties[propertyID].isInPrivateMode, properties[propertyID].becomePublic);
    }
    
    function getPropertyLastUpdaterBecomePublic(uint16 propertyID) public view returns (address, uint256) {
        return (properties[propertyID].lastUpdater, properties[propertyID].becomePublic);
    }
    
    function getPropertyOwnerSalePrice(uint16 propertyID) public view returns (address, uint256) {
        return (properties[propertyID].owner, properties[propertyID].salePrice);
    }
    
    function getPropertyPrivateModeLastUpdateEarnUntil(uint16 propertyID) public view returns (bool, uint256, uint256) {
        return (properties[propertyID].isInPrivateMode, properties[propertyID].lastUpdate, properties[propertyID].earnUntil);
    }
}

// PixelProperty
contract VirtualRealEstate {
    /* ### Variables ### */
    // Contract owner
    address owner;
    PXLProperty pxlProperty;
    
    bool initialPropertiesReserved;
    
    mapping (uint16 => bool) hasBeenSet;
    
    // The amount in % for which a user is paid
    uint8 constant USER_BUY_CUT_PERCENT = 98;
    // Maximum amount of generated PXL a property can give away per minute
    uint8 constant PROPERTY_GENERATES_PER_MINUTE = 1;
    // The point in time when the initial grace period is over, and users get the default values based on coins burned
    uint256 GRACE_PERIOD_END_TIMESTAMP;
    // The amount of time required for a Property to generate tokens for payouts
    uint256 constant PROPERTY_GENERATION_PAYOUT_INTERVAL = (1 minutes); //Generation amount
    
    uint256 ownerEth = 0; // Amount of ETH the contract owner is entitled to withdraw (only Root account can do withdraws)
    
    // The current system prices of ETH and PXL, for which unsold Properties are listed for sale at
    uint256 systemSalePriceETH;
    uint256 systemSalePricePXL;
    uint8 systemPixelIncreasePercent;
    uint8 systemPriceIncreaseStep;
    uint16 systemETHStepTally;
    uint16 systemPXLStepTally;
    uint16 systemETHStepCount;
    uint16 systemPXLStepCount;

    /* ### Events ### */
    event PropertyColorUpdate(uint16 indexed property, uint256[5] colors, uint256 lastUpdate, address indexed lastUpdaterPayee, uint256 becomePublic, uint256 indexed rewardedCoins);
    event PropertyBought(uint16 indexed property, address indexed newOwner, uint256 ethAmount, uint256 PXLAmount, uint256 timestamp, address indexed oldOwner);
    event SetUserHoverText(address indexed user, uint256[2] newHoverText);
    event SetUserSetLink(address indexed user, uint256[2] newLink);
    event PropertySetForSale(uint16 indexed property, uint256 forSalePrice);
    event DelistProperty(uint16 indexed property);
    event SetPropertyPublic(uint16 indexed property);
    event SetPropertyPrivate(uint16 indexed property, uint32 numMinutesPrivate, address indexed rewardedUser, uint256 indexed rewardedCoins);
    event Bid(uint16 indexed property, uint256 bid, uint256 timestamp);
    
    /* ### MODIFIERS ### */

    // Only the contract owner can call these methods
    modifier ownerOnly() {
        require(owner == msg.sender);
        _;
    }
    
    // Can only be called on Properties referecing a valid PropertyID
    modifier validPropertyID(uint16 propertyID) {
        if (propertyID < 10000) {
            _;
        }
    }
    
    /* ### PUBLICALLY INVOKABLE FUNCTIONS ### */
    
    /* CONSTRUCTOR */
    function VirtualRealEstate() public {
        owner = msg.sender; // Default the owner to be whichever Ethereum account created the contract
        systemSalePricePXL = 1000; //Initial PXL system price
        systemSalePriceETH = 19500000000000000; //Initial ETH system price
        systemPriceIncreaseStep = 10;
        systemPixelIncreasePercent = 5;
        systemETHStepTally = 0;
        systemPXLStepTally = 0;
        systemETHStepCount = 1;
        systemPXLStepCount = 1;
        initialPropertiesReserved = false;
    }
    
    function setPXLPropertyContract(address pxlPropertyContract) public ownerOnly() {
        pxlProperty = PXLProperty(pxlPropertyContract);
        if (!initialPropertiesReserved) {
            uint16 xReserved = 45;
            uint16 yReserved = 0;
            for(uint16 x = 0; x < 10; ++x) {
                uint16 propertyID = (yReserved) * 100 + (xReserved + x);
                _transferProperty(propertyID, owner, 0, 0, 0, 0);
            }
            initialPropertiesReserved = true;
            GRACE_PERIOD_END_TIMESTAMP = now + 3 days; // Extends the three 
        }
    }

    function getSaleInformation() public view ownerOnly() returns(uint8, uint8, uint16, uint16, uint16, uint16) {
        return (systemPixelIncreasePercent, systemPriceIncreaseStep, systemETHStepTally, systemPXLStepTally, systemETHStepCount, systemPXLStepCount);
    }
    
    /* USER FUNCTIONS */
    
    // Property owners can change their hoverText for when a user mouses over their Properties
    function setHoverText(uint256[2] text) public {
        pxlProperty.setOwnerHoverText(msg.sender, text);
        SetUserHoverText(msg.sender, text);
    }
    
    // Property owners can change the clickable link for when a user clicks on their Properties
    function setLink(uint256[2] website) public {
        pxlProperty.setOwnerLink(msg.sender, website);
        SetUserSetLink(msg.sender, website);
    }
    
    // If a Property is private which has expired, make it public
    function tryForcePublic(uint16 propertyID) public validPropertyID(propertyID) { 
        var (isInPrivateMode, becomePublic) = pxlProperty.getPropertyPrivateModeBecomePublic(propertyID);
        if (isInPrivateMode && becomePublic < now) {
            pxlProperty.setPropertyPrivateMode(propertyID, false);
        }
    }
    
    // Update the 10x10 image data for a Property, triggering potential payouts if it succeeds
    function setColors(uint16 propertyID, uint256[5] newColors, uint256 PXLToSpend) public validPropertyID(propertyID) returns(bool) {
        uint256 projectedPayout = getProjectedPayout(propertyID);
        if (_tryTriggerPayout(propertyID, PXLToSpend)) {
            pxlProperty.setPropertyColors(propertyID, newColors);
            var (lastUpdater, becomePublic) = pxlProperty.getPropertyLastUpdaterBecomePublic(propertyID);
            PropertyColorUpdate(propertyID, newColors, now, lastUpdater, becomePublic, projectedPayout);
            // The first user to set a Properties color ever is awarded extra PXL due to eating the extra GAS cost of creating the uint256[5]
            if (!hasBeenSet[propertyID]) {
                pxlProperty.rewardPXL(msg.sender, 25);
                hasBeenSet[propertyID] = true;
            }
            return true;
        }
        return false;
    }

    //Wrapper to call setColors 4 times in one call. Reduces overhead, however still duplicate work everywhere to ensure
    function setColorsX4(uint16[4] propertyIDs, uint256[20] newColors, uint256 PXLToSpendEach) public returns(bool[4]) {
        bool[4] results;
        for(uint256 i = 0; i < 4; i++) {
            require(propertyIDs[i] < 10000);
            results[i] = setColors(propertyIDs[i], [newColors[i * 5], newColors[i * 5 + 1], newColors[i * 5 + 2], newColors[i * 5 + 3], newColors[i * 5 + 4]], PXLToSpendEach);
        }
        return results;
    }

    //Wrapper to call setColors 8 times in one call. Reduces overhead, however still duplicate work everywhere to ensure
    function setColorsX8(uint16[8] propertyIDs, uint256[40] newColors, uint256 PXLToSpendEach) public returns(bool[8]) {
        bool[8] results;
        for(uint256 i = 0; i < 8; i++) {
            require(propertyIDs[i] < 10000);
            results[i] = setColors(propertyIDs[i], [newColors[i * 5], newColors[i * 5 + 1], newColors[i * 5 + 2], newColors[i * 5 + 3], newColors[i * 5 + 4]], PXLToSpendEach);
        }
        return results;
    }
    
    // Update a row of image data for a Property, triggering potential payouts if it succeeds
    function setRowColors(uint16 propertyID, uint8 row, uint256 newColorData, uint256 PXLToSpend) public validPropertyID(propertyID) returns(bool) {
        require(row < 10);
        uint256 projectedPayout = getProjectedPayout(propertyID);
        if (_tryTriggerPayout(propertyID, PXLToSpend)) {
            pxlProperty.setPropertyRowColor(propertyID, row, newColorData);
            var (lastUpdater, becomePublic) = pxlProperty.getPropertyLastUpdaterBecomePublic(propertyID);
            PropertyColorUpdate(propertyID, pxlProperty.getPropertyColors(propertyID), now, lastUpdater, becomePublic, projectedPayout);
            return true;
        }
        return false;
    }
    // Property owners can toggle their Properties between private mode and free-use mode
    function setPropertyMode(uint16 propertyID, bool setPrivateMode, uint32 numMinutesPrivate) public validPropertyID(propertyID) {
        var (propertyFlag, propertyIsInPrivateMode, propertyOwner, propertyLastUpdater, propertySalePrice, propertyLastUpdate, propertyBecomePublic, propertyEarnUntil) = pxlProperty.properties(propertyID);
        
        require(msg.sender == propertyOwner);
        uint256 whenToBecomePublic = 0;
        uint256 rewardedAmount = 0;
        
        if (setPrivateMode) {
            //If inprivate, we can extend the duration, otherwise if becomePublic > now it means a free-use user locked it
            require(propertyIsInPrivateMode || propertyBecomePublic <= now || propertyLastUpdater == msg.sender ); 
            require(numMinutesPrivate > 0);
            require(pxlProperty.balanceOf(msg.sender) >= numMinutesPrivate);
            // Determines when the Property becomes public, one payout interval per coin burned
            whenToBecomePublic = (now < propertyBecomePublic ? propertyBecomePublic : now) + PROPERTY_GENERATION_PAYOUT_INTERVAL * numMinutesPrivate;

            rewardedAmount = getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
            if (rewardedAmount > 0 && propertyLastUpdater != 0) {
                pxlProperty.burnPXLRewardPXLx2(msg.sender, numMinutesPrivate, propertyLastUpdater, rewardedAmount, msg.sender, rewardedAmount);
            } else {
                pxlProperty.burnPXL(msg.sender, numMinutesPrivate);
            }

        } else {
            // If its in private mode and still has time left, reimburse them for N-1 minutes tokens back
            if (propertyIsInPrivateMode && propertyBecomePublic > now) {
                pxlProperty.rewardPXL(msg.sender, ((propertyBecomePublic - now) / PROPERTY_GENERATION_PAYOUT_INTERVAL) - 1);
            }
        }
        
        pxlProperty.setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(propertyID, setPrivateMode, 0, 0, whenToBecomePublic);
        
        if (setPrivateMode) {
            SetPropertyPrivate(propertyID, numMinutesPrivate, propertyLastUpdater, rewardedAmount);
        } else {
            SetPropertyPublic(propertyID);
        }
    }
    // Transfer Property ownership between accounts. This has no cost, no cut and does not change flag status
    function transferProperty(uint16 propertyID, address newOwner) public validPropertyID(propertyID) returns(bool) {
        require(pxlProperty.getPropertyOwner(propertyID) == msg.sender);
        _transferProperty(propertyID, newOwner, 0, 0, pxlProperty.getPropertyFlag(propertyID), msg.sender);
        return true;
    }
    // Purchase a unowned system-Property in a combination of PXL and ETH
    function buyProperty(uint16 propertyID, uint256 pxlValue) public validPropertyID(propertyID) payable returns(bool) {
        //Must be the first purchase, otherwise do it with PXL from another user
        require(pxlProperty.getPropertyOwner(propertyID) == 0);
        // Must be able to afford the given PXL
        require(pxlProperty.balanceOf(msg.sender) >= pxlValue);
        require(pxlValue != 0);
        
        // Protect against underflow
        require(pxlValue <= systemSalePricePXL);
        uint256 pxlLeft = systemSalePricePXL - pxlValue;
        uint256 ethLeft = systemSalePriceETH / systemSalePricePXL * pxlLeft;
        
        // Must have spent enough ETH to cover the ETH left after PXL price was subtracted
        require(msg.value >= ethLeft);
        
        pxlProperty.burnPXLRewardPXL(msg.sender, pxlValue, owner, pxlValue);
        
        systemPXLStepTally += uint16(100 * pxlValue / systemSalePricePXL);
        if (systemPXLStepTally >= 1000) {
             systemPXLStepCount++;
            systemSalePricePXL += systemSalePricePXL * 9 / systemPXLStepCount / 10;
            systemPXLStepTally -= 1000;
        }
        
        ownerEth += msg.value;

        systemETHStepTally += uint16(100 * pxlLeft / systemSalePricePXL);
        if (systemETHStepTally >= 1000) {
            systemETHStepCount++;
            systemSalePriceETH += systemSalePriceETH * 9 / systemETHStepCount / 10;
            systemETHStepTally -= 1000;
        }

        _transferProperty(propertyID, msg.sender, msg.value, pxlValue, 0, 0);
        
        return true;
    }
    // Purchase a listed user-owner Property in PXL
    function buyPropertyInPXL(uint16 propertyID, uint256 PXLValue) public validPropertyID(propertyID) {
        // If Property is system-owned
        var (propertyOwner, propertySalePrice) = pxlProperty.getPropertyOwnerSalePrice(propertyID);
        address originalOwner = propertyOwner;
        if (propertyOwner == 0) {
            // Turn it into a user-owned at system price with contract owner as owner
            pxlProperty.setPropertyOwnerSalePrice(propertyID, owner, systemSalePricePXL);
            propertyOwner = owner;
            propertySalePrice = systemSalePricePXL;
            // Increase system PXL price
            systemPXLStepTally += 100;
            if (systemPXLStepTally >= 1000) {
                systemPXLStepCount++;
                systemSalePricePXL += systemSalePricePXL * 9 / systemPXLStepCount / 10;
                systemPXLStepTally -= 1000;
            }
        }
        require(propertySalePrice <= PXLValue);
        uint256 amountTransfered = propertySalePrice * USER_BUY_CUT_PERCENT / 100;
        pxlProperty.burnPXLRewardPXLx2(msg.sender, propertySalePrice, propertyOwner, amountTransfered, owner, (propertySalePrice - amountTransfered));        
        _transferProperty(propertyID, msg.sender, 0, propertySalePrice, 0, originalOwner);
    }

    // Purchase a system-Property in pure ETH
    function buyPropertyInETH(uint16 propertyID) public validPropertyID(propertyID) payable returns(bool) {
        require(pxlProperty.getPropertyOwner(propertyID) == 0);
        require(msg.value >= systemSalePriceETH);
        
        ownerEth += msg.value;
        systemETHStepTally += 100;
        if (systemETHStepTally >= 1000) {
            systemETHStepCount++;
            systemSalePriceETH += systemSalePriceETH * 9 / systemETHStepCount / 10;
            systemETHStepTally -= 1000;
        }
        _transferProperty(propertyID, msg.sender, msg.value, 0, 0, 0);
        return true;
    }
    
    // Property owner lists their Property for sale at their preferred price
    function listForSale(uint16 propertyID, uint256 price) public validPropertyID(propertyID) returns(bool) {
        require(price != 0);
        require(msg.sender == pxlProperty.getPropertyOwner(propertyID));
        pxlProperty.setPropertySalePrice(propertyID, price);
        PropertySetForSale(propertyID, price);
        return true;
    }
    
    // Property owner delists their Property from being for sale
    function delist(uint16 propertyID) public validPropertyID(propertyID) returns(bool) {
        require(msg.sender == pxlProperty.getPropertyOwner(propertyID));
        pxlProperty.setPropertySalePrice(propertyID, 0);
        DelistProperty(propertyID);
        return true;
    }

    // Make a public bid and notify a Property owner of your bid. Burn 1 coin
    function makeBid(uint16 propertyID, uint256 bidAmount) public validPropertyID(propertyID) {
        require(bidAmount > 0);
        require(pxlProperty.balanceOf(msg.sender) >= 1 + bidAmount);
        Bid(propertyID, bidAmount, now);
        pxlProperty.burnPXL(msg.sender, 1);
    }
    
    /* CONTRACT OWNER FUNCTIONS */
    
    // Contract owner can withdraw up to ownerEth amount
    function withdraw(uint256 amount) public ownerOnly() {
        if (amount <= ownerEth) {
            owner.transfer(amount);
            ownerEth -= amount;
        }
    }
    
    // Contract owner can withdraw ownerEth amount
    function withdrawAll() public ownerOnly() {
        owner.transfer(ownerEth);
        ownerEth = 0;
    }
    
    // Contract owner can change who is the contract owner
    function changeOwners(address newOwner) public ownerOnly() {
        owner = newOwner;
    }
    
    /* ## PRIVATE FUNCTIONS ## */
    
    // Function which wraps payouts for setColors
    function _tryTriggerPayout(uint16 propertyID, uint256 pxlToSpend) private returns(bool) {
        var (propertyFlag, propertyIsInPrivateMode, propertyOwner, propertyLastUpdater, propertySalePrice, propertyLastUpdate, propertyBecomePublic, propertyEarnUntil) = pxlProperty.properties(propertyID);
        //If the Property is in private mode and expired, make it public
        if (propertyIsInPrivateMode && propertyBecomePublic <= now) {
            pxlProperty.setPropertyPrivateMode(propertyID, false);
            propertyIsInPrivateMode = false;
        }
        //If its in private mode, only the owner can interact with it
        if (propertyIsInPrivateMode) {
            require(msg.sender == propertyOwner);
            require(propertyFlag != 2);
        //If if its in free-use mode
        } else if (propertyBecomePublic <= now || propertyLastUpdater == msg.sender) {
            uint256 pxlSpent = pxlToSpend + 1; //All pxlSpent math uses N+1, so built in for convenience
            if (isInGracePeriod() && pxlToSpend < 2) { //If first 3 days and we spent <2 coins, treat it as if we spent 2
                pxlSpent = 3; //We're treating it like 2, but it's N+1 in the math using this
            }
            
            uint256 projectedAmount = getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
            pxlProperty.burnPXLRewardPXLx2(msg.sender, pxlToSpend, propertyLastUpdater, projectedAmount, propertyOwner, projectedAmount);
            
            //BecomePublic = (N+1)/2 minutes of user-private mode
            //EarnUntil = (N+1)*5 coins earned max/minutes we can earn from
            pxlProperty.setPropertyBecomePublicEarnUntil(propertyID, now + (pxlSpent * PROPERTY_GENERATION_PAYOUT_INTERVAL / 2), now + (pxlSpent * 5 * PROPERTY_GENERATION_PAYOUT_INTERVAL));
        } else {
            return false;
        }
        pxlProperty.setPropertyLastUpdaterLastUpdate(propertyID, msg.sender, now);
        return true;
    }
    // Transfer ownership of a Property and reset their info
    function _transferProperty(uint16 propertyID, address newOwner, uint256 ethAmount, uint256 PXLAmount, uint8 flag, address oldOwner) private {
        require(newOwner != 0);
        pxlProperty.setPropertyOwnerSalePricePrivateModeFlag(propertyID, newOwner, 0, false, flag);
        PropertyBought(propertyID, newOwner, ethAmount, PXLAmount, now, oldOwner);
    }
    
    // Gets the (owners address, Ethereum sale price, PXL sale price, last update timestamp, whether its in private mode or not, when it becomes public timestamp, flag) for a Property
    function getPropertyData(uint16 propertyID) public validPropertyID(propertyID) view returns(address, uint256, uint256, uint256, bool, uint256, uint32) {
        return pxlProperty.getPropertyData(propertyID, systemSalePriceETH, systemSalePricePXL);
    }
    
    // Gets the system ETH and PXL prices
    function getSystemSalePrices() public view returns(uint256, uint256) {
        return (systemSalePriceETH, systemSalePricePXL);
    }
    
    // Gets the sale prices of any Property in ETH and PXL
    function getForSalePrices(uint16 propertyID) public validPropertyID(propertyID) view returns(uint256, uint256) {
        if (pxlProperty.getPropertyOwner(propertyID) == 0) {
            return getSystemSalePrices();
        } else {
            return (0, pxlProperty.getPropertySalePrice(propertyID));
        }
    }
    
    // Gets the projected sale price for a property should it be triggered at this very moment
    function getProjectedPayout(uint16 propertyID) public view returns(uint256) {
        var (propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil) = pxlProperty.getPropertyPrivateModeLastUpdateEarnUntil(propertyID);
        return getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
    }
    
    function getProjectedPayout(bool propertyIsInPrivateMode, uint256 propertyLastUpdate, uint256 propertyEarnUntil) public view returns(uint256) {
        if (!propertyIsInPrivateMode && propertyLastUpdate != 0) {
            uint256 earnedUntil = (now < propertyEarnUntil) ? now : propertyEarnUntil;
            uint256 minutesSinceLastColourChange = (earnedUntil - propertyLastUpdate) / PROPERTY_GENERATION_PAYOUT_INTERVAL;
            return minutesSinceLastColourChange * PROPERTY_GENERATES_PER_MINUTE;
            //return (((now < propertyEarnUntil) ? now : propertyEarnUntil - propertyLastUpdate) / PROPERTY_GENERATION_PAYOUT_INTERVAL) * PROPERTY_GENERATES_PER_MINUTE; //Gave too high number wtf?
        }
        return 0;
    }
    
    // Gets whether the contract is still in the intial grace period where we give extra features to color setters
    function isInGracePeriod() public view returns(bool) {
        return now <= GRACE_PERIOD_END_TIMESTAMP;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getPropertyData","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"buyPropertyInETH","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"row","type":"uint8"},{"name":"newColorData","type":"uint256"},{"name":"PXLToSpend","type":"uint256"}],"name":"setRowColors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getProjectedPayout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"newOwner","type":"address"}],"name":"transferProperty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"tryForcePublic","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"PXLValue","type":"uint256"}],"name":"buyPropertyInPXL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"newColors","type":"uint256[5]"},{"name":"PXLToSpend","type":"uint256"}],"name":"setColors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyIDs","type":"uint16[8]"},{"name":"newColors","type":"uint256[40]"},{"name":"PXLToSpendEach","type":"uint256"}],"name":"setColorsX8","outputs":[{"name":"","type":"bool[8]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pxlPropertyContract","type":"address"}],"name":"setPXLPropertyContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyIsInPrivateMode","type":"bool"},{"name":"propertyLastUpdate","type":"uint256"},{"name":"propertyEarnUntil","type":"uint256"}],"name":"getProjectedPayout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyIDs","type":"uint16[4]"},{"name":"newColors","type":"uint256[20]"},{"name":"PXLToSpendEach","type":"uint256"}],"name":"setColorsX4","outputs":[{"name":"","type":"bool[4]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"setPrivateMode","type":"bool"},{"name":"numMinutesPrivate","type":"uint32"}],"name":"setPropertyMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSystemSalePrices","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"text","type":"uint256[2]"}],"name":"setHoverText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"bidAmount","type":"uint256"}],"name":"makeBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"price","type":"uint256"}],"name":"listForSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getForSalePrices","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"delist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isInGracePeriod","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"website","type":"uint256[2]"}],"name":"setLink","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"pxlValue","type":"uint256"}],"name":"buyProperty","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getSaleInformation","outputs":[{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"colors","type":"uint256[5]"},{"indexed":false,"name":"lastUpdate","type":"uint256"},{"indexed":true,"name":"lastUpdaterPayee","type":"address"},{"indexed":false,"name":"becomePublic","type":"uint256"},{"indexed":true,"name":"rewardedCoins","type":"uint256"}],"name":"PropertyColorUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":true,"name":"newOwner","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"},{"indexed":false,"name":"PXLAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"oldOwner","type":"address"}],"name":"PropertyBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"newHoverText","type":"uint256[2]"}],"name":"SetUserHoverText","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"newLink","type":"uint256[2]"}],"name":"SetUserSetLink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"forSalePrice","type":"uint256"}],"name":"PropertySetForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"}],"name":"DelistProperty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"}],"name":"SetPropertyPublic","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"numMinutesPrivate","type":"uint32"},{"indexed":true,"name":"rewardedUser","type":"address"},{"indexed":true,"name":"rewardedCoins","type":"uint256"}],"name":"SetPropertyPrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"bid","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Bid","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6080604052600060045534801561001557600080fd5b5060008054600160a060020a03191633600160a060020a03161781556103e8600655664547258d1ec00060059081556007805468010000000000000000660100000000000061ff0019909216610a001760ff191690931767ffffffffffff0000191617604060020a61ffff0219169190911790556001805460a060020a60ff02191690556131f49081906100a990396000f30060806040526004361061013a5763ffffffff60e060020a60003504166309ddc583811461013f5780630ad50c02146101a55780631286d9e8146101c85780631bb2921b146101f05780631db939681461021e5780631e7769de146102465780632e1a7d4d1461026457806332a428821461027c57806335b11b721461029b57806351846028146102e75780636b1ac9001461038e578063728516c2146103af578063853828b6146103cf5780639cfda697146103e4578063a72aa16314610464578063ab4c44871461048e578063acd9930b146104bc578063ae813029146104fc578063b047f2451461051b578063b4f6aa561461053a578063ba08651814610556578063cf27d01614610572578063d56a455514610587578063d7963f94146105c7578063e829945a146105e8578063f1ab36b4146105fa575b600080fd5b34801561014b57600080fd5b5061015b61ffff6004351661064e565b60408051600160a060020a03909816885260208801969096528686019490945260608601929092521515608085015260a084015263ffffffff1660c0830152519081900360e00190f35b6101b461ffff60043516610755565b604080519115158252519081900360200190f35b3480156101d457600080fd5b506101b461ffff6004351660ff602435166044356064356108e9565b3480156101fc57600080fd5b5061020c61ffff60043516610b87565b60408051918252519081900360200190f35b34801561022a57600080fd5b506101b461ffff60043516600160a060020a0360243516610c4a565b34801561025257600080fd5b5061026261ffff60043516610da3565b005b34801561027057600080fd5b50610262600435610ef3565b34801561028857600080fd5b5061026261ffff60043516602435610f5e565b3480156102a757600080fd5b506040805160a08082019092526101b4916004803561ffff1692369260c49190602490600590839083908082843750939650509235935061126f92505050565b3480156102f357600080fd5b506040805161010081810190925261035591369160049161010491908390600890839083908082843750506040805161050081810190925294979695818101959450925060289150839083908082843750939650509235935061154092505050565b604051808261010080838360005b8381101561037b578181015183820152602001610363565b5050505090500191505060405180910390f35b34801561039a57600080fd5b50610262600160a060020a03600435166116bc565b3480156103bb57600080fd5b5061020c60043515156024356044356117bc565b3480156103db57600080fd5b50610262611800565b3480156103f057600080fd5b5060408051608081810190925261044f9136916004916084919083908190839082908082843750506040805161028081810190925294979695818101959450925060149150839083908082843750939650509235935061185e92505050565b60405181518152808260808083836020610363565b34801561047057600080fd5b5061026261ffff60043516602435151563ffffffff604435166119ae565b34801561049a57600080fd5b506104a3611f89565b6040805192835260208301919091528051918290030190f35b3480156104c857600080fd5b50604080518082018252610262913691600491604491908390600290839083908082843750939650611f9395505050505050565b34801561050857600080fd5b5061026261ffff600435166024356120a9565b34801561052757600080fd5b506101b461ffff60043516602435612230565b34801561054657600080fd5b506104a361ffff600435166123b1565b34801561056257600080fd5b506101b461ffff60043516612504565b34801561057e57600080fd5b506101b461266c565b34801561059357600080fd5b5060408051808201825261026291369160049160449190839060029083908390808284375093965061267595505050505050565b3480156105d357600080fd5b50610262600160a060020a0360043516612767565b6101b461ffff600435166024356127b1565b34801561060657600080fd5b5061060f612ba2565b6040805160ff978816815295909616602086015261ffff938416858701529183166060850152821660808401521660a082015290519081900360c00190f35b6000806000806000806000876127108161ffff16101561074957600154600554600654604080517fb7b1e3cc00000000000000000000000000000000000000000000000000000000815261ffff8e1660048201526024810193909352604483019190915251600160a060020a039092169163b7b1e3cc9160648082019260e0929091908290030181600087803b1580156106e757600080fd5b505af11580156106fb573d6000803e3d6000fd5b505050506040513d60e081101561071157600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949d50929b509099509750955090935060ff1691505b50919395979092949650565b6000816127108161ffff1610156108e3576001546040805160e060020a632ccaa3e902815261ffff861660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b1580156107ba57600080fd5b505af11580156107ce573d6000803e3d6000fd5b505050506040513d60208110156107e457600080fd5b5051600160a060020a0316156107f957600080fd5b60055434101561080857600080fd5b60048054340190556007805461ffff6201000080830482166064018216810263ffff00001990931692909217928390556103e891909204909116106108ce576007805467ffff00000000000019811666010000000000009182900461ffff908116600101811683029190911792839055600554600a9392909204169060090281151561089057fe5b0481151561089a57fe5b600580549290910490910190556007805463ffff0000198116620100009182900461ffff9081166103e71901169091021790555b6108de8333346000806000612c17565b600191505b50919050565b600080600080876127108161ffff161015610b7b57600a60ff89161061090e57600080fd5b61091789610b87565b93506109238987612d27565b15610b7657600154604080517f3953ca8b00000000000000000000000000000000000000000000000000000000815261ffff8c16600482015260ff8b166024820152604481018a90529051600160a060020a0390921691633953ca8b9160648082019260009290919082900301818387803b1580156109a157600080fd5b505af11580156109b5573d6000803e3d6000fd5b5050600154604080517f63a6568f00000000000000000000000000000000000000000000000000000000815261ffff8e1660048201528151600160a060020a0390931694506363a6568f9350602480820193918290030181600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b505050506040513d6040811015610a4857600080fd5b508051602090910151600154604080517fe86994ea00000000000000000000000000000000000000000000000000000000815261ffff8e166004820181905291519497509295508793600160a060020a038089169492937fdf630a0a8e935495f00b4eb29dc220bc326d500d01e41767674b995bc1833b519391169163e86994ea9160248082019260a0929091908290030181600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060a0811015610b2557600080fd5b5060405142908890808460a080838360005b83811015610b4f578181015183820152602001610b37565b5050505091909101938452505060208201526040805191829003019150a460019450610b7b565b600094505b50505050949350505050565b600154604080517f1f12da0600000000000000000000000000000000000000000000000000000000815261ffff841660048201529051600092839283928392600160a060020a031691631f12da0691602480830192606092919082900301818787803b158015610bf657600080fd5b505af1158015610c0a573d6000803e3d6000fd5b505050506040513d6060811015610c2057600080fd5b50805160208201516040909201519094509092509050610c418383836117bc565b95945050505050565b6000826127108161ffff161015610d9c576001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a03338116931691632ccaa3e99160248083019260209291908290030181600087803b158015610cb057600080fd5b505af1158015610cc4573d6000803e3d6000fd5b505050506040513d6020811015610cda57600080fd5b5051600160a060020a031614610cef57600080fd5b600154604080517f98864aaf00000000000000000000000000000000000000000000000000000000815261ffff871660048201529051610d9792879287926000928392600160a060020a03909116916398864aaf9160248082019260209290919082900301818787803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050506040513d6020811015610d8f57600080fd5b505133612c17565b600191505b5092915050565b600080826127108161ffff161015610eed57600154604080517fab383a6b00000000000000000000000000000000000000000000000000000000815261ffff871660048201528151600160a060020a039093169263ab383a6b926024808401939192918290030181600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b505050506040513d6040811015610e4657600080fd5b5080516020909101519093509150828015610e6057504282105b15610eed57600154604080517f4b1ec20c00000000000000000000000000000000000000000000000000000000815261ffff871660048201526000602482018190529151600160a060020a0390931692634b1ec20c9260448084019391929182900301818387803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b505050505b50505050565b60005433600160a060020a03908116911614610f0e57600080fd5b6004548111610f5b5760008054604051600160a060020a039091169183156108fc02918491818181858888f19350505050158015610f50573d6000803e3d6000fd5b506004805482900390555b50565b600080600080856127108161ffff16101561126657600154604080517fcf09e82000000000000000000000000000000000000000000000000000000000815261ffff8a1660048201528151600160a060020a039093169263cf09e820926024808401939192918290030181600087803b158015610fda57600080fd5b505af1158015610fee573d6000803e3d6000fd5b505050506040513d604081101561100457600080fd5b5080516020909101519095509350849250600160a060020a038316151561119a5760015460008054600654604080517f45ede90000000000000000000000000000000000000000000000000000000000815261ffff8d166004820152600160a060020a03938416602482015260448101929092525191909316926345ede90092606480830193919282900301818387803b1580156110a157600080fd5b505af11580156110b5573d6000803e3d6000fd5b50506000546006546007805461ffff64010000000080830482166064018216810265ffff00000000199093169290921792839055600160a060020a039094169a509198506103e891900490911610915061119a9050576007805469ffff0000000000000000198116680100000000000000009182900461ffff908116600101811683029190911792839055600654600a9392909204169060090281151561115857fe5b0481151561116257fe5b600680549290910490910190556007805465ffff000000001981166401000000009182900461ffff9081166103e71901169091021790555b858411156111a757600080fd5b60015460008054604080517f121c2b35000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018a90528a81166044830152606460628b028190049083018190529381166084830152838a0360a4830152915192965093169263121c2b359260c480830193919282900301818387803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b505050506112668733600087600088612c17565b50505050505050565b600080600080866127108161ffff1610156115355761128d88610b87565b93506112998887612d27565b15611530576001546040517feb39bc9000000000000000000000000000000000000000000000000000000000815261ffff8a1660048201908152600160a060020a039092169163eb39bc90918b918b916024018260a080838360005b8381101561130d5781810151838201526020016112f5565b5050505090500192505050600060405180830381600087803b15801561133257600080fd5b505af1158015611346573d6000803e3d6000fd5b5050600154604080517f63a6568f00000000000000000000000000000000000000000000000000000000815261ffff8d1660048201528151600160a060020a0390931694506363a6568f9350602480820193918290030181600087803b1580156113af57600080fd5b505af11580156113c3573d6000803e3d6000fd5b505050506040513d60408110156113d957600080fd5b50805160209091015160405191945092508490600160a060020a0385169061ffff8b16907fdf630a0a8e935495f00b4eb29dc220bc326d500d01e41767674b995bc1833b51908b9042908890808460a080838360005b8381101561144757818101518382015260200161142f565b5050505091909101938452505060208201526040805191829003019150a461ffff881660009081526002602052604090205460ff16151561152757600154604080517f26728b14000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015260196024830152915191909216916326728b1491604480830192600092919082900301818387803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b50505061ffff89166000908152600260205260409020805460ff19166001179055505b60019450611535565b600094505b505050509392505050565b611548613189565b6000805b60088110156116635761271086826008811061156457fe5b602002015161ffff161061157757600080fd5b61162b86826008811061158657fe5b60200201516040805160a08101909152808860058602602881106115a657fe5b6020020151815260200188856005026001016028811015156115c457fe5b6020020151815260200188856005026002016028811015156115e257fe5b60200201518152602001888560050260030160288110151561160057fe5b60200201518152602001888560050260040160288110151561161e57fe5b602002015190528661126f565b82826008811061163757fe5b602081049091018054921515601f9092166101000a91820260ff9092021990921617905560010161154c565b60408051610100810191829052908390600890826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161167b579050505050505092505b50509392505050565b6000805481908190819033600160a060020a039081169116146116de57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038716179081905574010000000000000000000000000000000000000000900460ff1615156117b557602d935060009250600091505b600a8261ffff16101561177657506000805460648402858401019161176b918391600160a060020a0390911690808080612c17565b816001019150611736565b6001805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556203f48042016003555b5050505050565b6000806000851580156117ce57508415155b156117f4578342106117e057836117e2565b425b9150603c8583030492508290506116b3565b50600095945050505050565b60005433600160a060020a0390811691161461181b57600080fd5b60008054600454604051600160a060020a039092169281156108fc029290818181858888f19350505050158015611856573d6000803e3d6000fd5b506000600455565b6118666131a9565b6000805b60048110156119745761271086826004811061188257fe5b602002015161ffff161061189557600080fd5b61193c8682600481106118a457fe5b60200201516040805160a08101909152808860058602601481106118c457fe5b6020020151815260200188856005026001016014811015156118e257fe5b60200201518152602001888560050260020160148110151561190057fe5b60200201518152602001888560050260030160148110151561191e57fe5b60200201518152602001888560050260040160148110151561161e57fe5b82826004811061194857fe5b602081049091018054921515601f9092166101000a91820260ff9092021990921617905560010161186a565b604080516080810191829052835460ff16151581529083906004908260016020860180841161167b5750949b9a5050505050505050505050565b6000806000806000806000806000808c6127108161ffff161015611f7957600160009054906101000a9004600160a060020a0316600160a060020a03166369a4c4e78f6040518263ffffffff1660e060020a028152600401808261ffff1661ffff16815260200191505061010060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050506040513d610100811015611a5e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509a509a509a509a509a509a509a509a5088600160a060020a031633600160a060020a0316141515611ae557600080fd5b60009250600091508c15611da8578980611aff5750428511155b80611b1b575033600160a060020a031688600160a060020a0316145b1515611b2657600080fd5b600063ffffffff8d1611611b3957600080fd5b8b63ffffffff16600160009054906101000a9004600160a060020a0316600160a060020a03166370a08231336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b50511015611be757600080fd5b8b63ffffffff16603c02854210611bfe5742611c00565b855b019250611c0e8a87866117bc565b9150600082118015611c285750600160a060020a03881615155b15611d0c57600160009054906101000a9004600160a060020a0316600160a060020a031663121c2b35338e8b8633886040518763ffffffff1660e060020a0281526004018087600160a060020a0316600160a060020a031681526020018663ffffffff16815260200185600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a031681526020018281526020019650505050505050600060405180830381600087803b158015611cef57600080fd5b505af1158015611d03573d6000803e3d6000fd5b50505050611da3565b600160009054906101000a9004600160a060020a0316600160a060020a031663f6f8ca07338e6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a031681526020018263ffffffff16815260200192505050600060405180830381600087803b158015611d8a57600080fd5b505af1158015611d9e573d6000803e3d6000fd5b505050505b611e48565b898015611db457504285115b15611e4857600154604080517f26728b14000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152603c428a0304600019016024830152915191909216916326728b1491604480830192600092919082900301818387803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b505050505b600160009054906101000a9004600160a060020a0316600160a060020a031663886b148d8f8f600080886040518663ffffffff1660e060020a028152600401808661ffff1661ffff1681526020018515151515815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b158015611ed357600080fd5b505af1158015611ee7573d6000803e3d6000fd5b505050508c15611f49578188600160a060020a03168f61ffff167fa21d884986f2c87cfb81054448f66071c9363735665db28d236c882a5c0917968f604051808263ffffffff1663ffffffff16815260200191505060405180910390a4611f79565b60405161ffff8f16907f3f7bf071636ed8429b752f79e5cd881beb27062a4d0092050a0fc633850d387d90600090a25b5050505050505050505050505050565b6005546006549091565b600154604080517f606bc9a500000000000000000000000000000000000000000000000000000000815233600160a060020a038181166004840190815294169363606bc9a59391928692602490910190839080838360005b83811015612003578181015183820152602001611feb565b5050505090500192505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b5050505033600160a060020a03167fb05ccb51f2408b99be7026712c574396fced9c3e0480bf7b8f8874d8c830b7cc826040518082600260200280838360005b8381101561209457818101518382015260200161207c565b5050505090500191505060405180910390a250565b816127108161ffff16101561222b57600082116120c557600080fd5b60018054604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015291519386019391909216916370a082319160248083019260209291908290030181600087803b15801561213257600080fd5b505af1158015612146573d6000803e3d6000fd5b505050506040513d602081101561215c57600080fd5b5051101561216957600080fd5b60408051838152426020820152815161ffff8616927f606e2d57e3221093069398002086bf333ae29b8033fc68ddf70c7a4516b530f8928290030190a260018054604080517ff6f8ca07000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015260248201949094529051929091169163f6f8ca079160448082019260009290919082900301818387803b15801561221757600080fd5b505af1158015611266573d6000803e3d6000fd5b505050565b6000826127108161ffff161015610d9c5782151561224d57600080fd5b6001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b1580156122a157600080fd5b505af11580156122b5573d6000803e3d6000fd5b505050506040513d60208110156122cb57600080fd5b505133600160a060020a039081169116146122e557600080fd5b600154604080517f6d87b65c00000000000000000000000000000000000000000000000000000000815261ffff87166004820152602481018690529051600160a060020a0390921691636d87b65c9160448082019260009290919082900301818387803b15801561235557600080fd5b505af1158015612369573d6000803e3d6000fd5b505060408051868152905161ffff881693507ffbf70f26ac04d08c24acb352205513f53182e26fe61c050a6dd445a584cd145192509081900360200190a25060019392505050565b600080826127108161ffff1610156124fe576001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561241757600080fd5b505af115801561242b573d6000803e3d6000fd5b505050506040513d602081101561244157600080fd5b5051600160a060020a031615156124635761245a611f89565b925092506124fe565b600154604080517f1bbc795200000000000000000000000000000000000000000000000000000000815261ffff871660048201529051600092600160a060020a031691631bbc795291602480830192602092919082900301818787803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b505050506040513d60208110156124f657600080fd5b505190935091505b50915091565b6000816127108161ffff1610156108e3576001546040805160e060020a632ccaa3e902815261ffff861660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050506040513d602081101561259357600080fd5b505133600160a060020a039081169116146125ad57600080fd5b600154604080517f6d87b65c00000000000000000000000000000000000000000000000000000000815261ffff861660048201526000602482018190529151600160a060020a0390931692636d87b65c9260448084019391929182900301818387803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505060405161ffff861692507f01a14d3ac14361bc1087c805becdb2946b166a265e22798f7011f3a9e8b5fc6c9150600090a250600192915050565b60035442111590565b600154604080517f6fcdcb3e00000000000000000000000000000000000000000000000000000000815233600160a060020a0381811660048401908152941693636fcdcb3e9391928692602490910190839080838360005b838110156126e55781810151838201526020016126cd565b5050505090500192505050600060405180830381600087803b15801561270a57600080fd5b505af115801561271e573d6000803e3d6000fd5b5050604080518451815233600160a060020a031693507f4d267d545ed24f4a32ae8dafe3dd6b7015cf92b46e36306b74986fc9288964a79250849181908390808383602061207c565b60005433600160a060020a0390811691161461278257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000806000846127108161ffff161015612b99576001546040805160e060020a632ccaa3e902815261ffff891660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561281957600080fd5b505af115801561282d573d6000803e3d6000fd5b505050506040513d602081101561284357600080fd5b5051600160a060020a03161561285857600080fd5b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0333811660048301529151889392909216916370a08231916024808201926020929091908290030181600087803b1580156128c357600080fd5b505af11580156128d7573d6000803e3d6000fd5b505050506040513d60208110156128ed57600080fd5b505110156128fa57600080fd5b84151561290657600080fd5b60065485111561291557600080fd5b846006540392508260065460055481151561292c57fe5b040291503482111561293d57600080fd5b60015460008054604080517f2a396734000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018b90529283166044820152606481018a905290519190931692632a39673492608480830193919282900301818387803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b50505050600654856064028115156129e357fe5b6007805461ffff640100000000808304821695909404949094018416830265ffff000000001990911617908190556103e891900490911610612aae576007805469ffff0000000000000000198116680100000000000000009182900461ffff908116600101811683029190911792839055600654600a93929092041690600902811515612a6c57fe5b04811515612a7657fe5b600680549290910490910190556007805465ffff000000001981166401000000009182900461ffff9081166103e71901169091021790555b600480543401905560065460648402811515612ac657fe5b6007805461ffff62010000808304821695909404949094018416830263ffff00001990911617908190556103e891900490911610612b85576007805467ffff00000000000019811666010000000000009182900461ffff908116600101811683029190911792839055600554600a93929092041690600902811515612b4757fe5b04811515612b5157fe5b600580549290910490910190556007805463ffff0000198116620100009182900461ffff9081166103e71901169091021790555b612b9486333488600080612c17565b600193505b50505092915050565b600080548190819081908190819033600160a060020a03908116911614612bc857600080fd5b505060075460ff8082169550610100820416935061ffff620100008204811693506401000000008204811692506601000000000000820481169168010000000000000000900416909192939495565b600160a060020a0385161515612c2c57600080fd5b600154604080517fb9e58ab000000000000000000000000000000000000000000000000000000000815261ffff89166004820152600160a060020a0388811660248301526000604483018190526064830181905260ff87166084840152925193169263b9e58ab09260a48084019391929182900301818387803b158015612cb257600080fd5b505af1158015612cc6573d6000803e3d6000fd5b5050604080518781526020810187905242818301529051600160a060020a0380861694508916925061ffff8a16917f75d46023a8160c0896514b1afdbbaf5d7b2175bb0ef87ee9c94df9e7455f9627919081900360600190a4505050505050565b6000806000806000806000806000806000600160009054906101000a9004600160a060020a0316600160a060020a03166369a4c4e78e6040518263ffffffff1660e060020a028152600401808261ffff1661ffff16815260200191505061010060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b505050506040513d610100811015612dca57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505099509950995099509950995099509950888015612e3e5750428411155b15612ed357600160009054906101000a9004600160a060020a0316600160a060020a0316634b1ec20c8e60006040518363ffffffff1660e060020a028152600401808361ffff1661ffff1681526020018215151515815260200192505050600060405180830381600087803b158015612eb657600080fd5b505af1158015612eca573d6000803e3d6000fd5b50505050600098505b8815612f0f5787600160a060020a031633600160a060020a0316141515612ef957600080fd5b600260ff8b161415612f0a57600080fd5b6130d4565b4284111580612f2f575033600160a060020a031687600160a060020a0316145b156130cb578b6001019150612f4261266c565b8015612f4e575060028c105b15612f5857600391505b612f638986856117bc565b9050600160009054906101000a9004600160a060020a0316600160a060020a031663121c2b35338e8a858d876040518763ffffffff1660e060020a0281526004018087600160a060020a0316600160a060020a0316815260200186815260200185600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a031681526020018281526020019650505050505050600060405180830381600087803b15801561302157600080fd5b505af1158015613035573d6000803e3d6000fd5b5050600154600160a060020a0316915063c575200d90508e6002603c8602044201603c866005020242016040518463ffffffff1660e060020a028152600401808461ffff1661ffff1681526020018381526020018281526020019350505050600060405180830381600087803b1580156130ae57600080fd5b505af11580156130c2573d6000803e3d6000fd5b505050506130d4565b60009a50613179565b600160009054906101000a9004600160a060020a0316600160a060020a03166315f590338e33426040518463ffffffff1660e060020a028152600401808461ffff1661ffff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b5050505060019a505b5050505050505050505092915050565b610100604051908101604052806008906020820280388339509192915050565b60806040519081016040528060049060208202803883395091929150505600a165627a7a7230582051780a0fec2be618ff8d179637064c67aeb511d23c4110dad02503ce7673387c0029

   Swarm Source:
bzzr://51780a0fec2be618ff8d179637064c67aeb511d23c4110dad02503ce7673387c

 

View All
Block Age transaction Difficulty 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.