Sponsored:   LH-CRYPTO - 200 instruments (BTC, EUR, GOLD, OIL, SHARES). Leverage up to 1:500. OPEN ACCOUNT
Contract Overview | EtherRockets
Balance: 0 Ether
Ether Value: $0
Transactions: 1830 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xe8e394c174caad8647955a0c00425e120f13507eat txn 0x4778b5d862d1ff7de6754b1804a415dd0b87fba8ca89dc5e8543619fa3f259b1
Token Balance:
 Latest 25 transactions from a total of 1830 transactions

TxHash Age From To Value [TxFee]
0xc6470a10f94ce7b614c8d2d7a13744c1701abc53c971f342d2b4ff50c976521d55 days 16 hrs ago0x5ae8367ce61d6cefc8df4cd52a401a7faa60ecbe  IN   EtherRockets0.008 Ether0.000676296
0x87fd595569bf0c5870320d20a071fd9c3ccc09cc2abca61553aa006e0a8d3e7868 days 20 hrs ago0xe2b985bc5baf75209ea7a873ecd2cdd7139b0cff  IN   EtherRockets0.008 Ether0.000507222
0x17ff1bda259fcba68759c2aba74dbd6cbc4811a53ce4cc27a233cb9d7dd70c2394 days 9 hrs ago0x2feb0fd1321788e04cfe6c312142e1fcff691fbc  IN   EtherRockets0.006 Ether0.000473649
0x42a6db933f1fcf63c7b8127d467e4797c39de30981842a83967dd7e6b823d6fe94 days 14 hrs ago0x2feb0fd1321788e04cfe6c312142e1fcff691fbc  IN   EtherRockets0.008 Ether0.000676296
0x272711d3bed1c4e6cf2cf8fbfa2640f42161227e02dadfff60f9706cf857f43f103 days 6 hrs ago0xb13c38273e001f0427c26f15b79b57db90606a91  IN   EtherRockets0.008 Ether0.000676296
0x2298cb06b1670548e8f921e72d2188cf02f0fe9e1c713ed614b196cbb82d9c10121 days 22 hrs ago0x76a98975e86317d76841ece6ec62b9ece6f9cd06  IN   EtherRockets0.006 Ether0.000334448
0x3400201397ed93de128095c8d5c7b063efa11812d66d57282de7e314313603b9155 days 18 hrs ago0xe5a6db9e3d04176dd25130f590e68245d7c63900  IN   EtherRockets0.006 Ether0.001230864
0xfca9f1088dd8f6fec682b753c83f2db0690eb5e60d0e59ae8154ccfaaf80040d155 days 18 hrs ago0xe5a6db9e3d04176dd25130f590e68245d7c63900  IN   EtherRockets0.008 Ether0.001521666
0x9b34d919bd966cc4eb07dc8edb8484a05524f03f0a02bb66669beec936aa02bd159 days 11 hrs ago0xc8bd67995ddc52d23af7bcd9f5c5b61d3d17026e  IN   EtherRockets0.006 Ether0.000235884
0x42755e96bb3ab02ae1308e23f2e7440f00c0af9a3f5d52520157a197baeaafda159 days 11 hrs ago0xc8bd67995ddc52d23af7bcd9f5c5b61d3d17026e  IN   EtherRockets0.03 Ether0.000308148
0x820c68eef1c8884d00a89484519b610f5109f7db51e498da20d507c80f71f0f6159 days 11 hrs ago0xc8bd67995ddc52d23af7bcd9f5c5b61d3d17026e  IN   EtherRockets0.006 Ether0.00045648
0x1a0624ebd9e0927e9b27b23e99466ffe636c20e0875d79e18db06c8159499b61159 days 11 hrs ago0xc8bd67995ddc52d23af7bcd9f5c5b61d3d17026e  IN   EtherRockets0.006 Ether0.000264302
0x03bcf5fbf0b48d1049d0a2cb267893e2293206a998f1a4e4a489247edbae67f8159 days 11 hrs ago0xc8bd67995ddc52d23af7bcd9f5c5b61d3d17026e  IN   EtherRockets0.008 Ether0.0001859814
0xac3562ed14c38720b24680c38d1f3d9e01f0a7251cffa69e2972b52cfb209627168 days 7 hrs ago0x787323e341398059b068cd167fc0882186246c7a  IN   EtherRockets0.006 Ether0.001048747
0x2f669105b0f30111a53aae4ad521d3bc2726d522789353ea27d423a135663d92168 days 7 hrs ago0x787323e341398059b068cd167fc0882186246c7a  IN   EtherRockets0.006 Ether0.001226768
0xa6da6647e3e4159fd00cfec976833049527a5f5e9ff1a17f1ddbf3491e1daccd168 days 7 hrs ago0x787323e341398059b068cd167fc0882186246c7a  IN   EtherRockets0.008 Ether0.001352592
0x2f3a0b2dd7840bc85666a4ede0474302ee4df58a9baa2de85578613bd09358b3178 days 12 hrs ago0x7280143ab753962572c497fcab809ecefb2dc3f2  IN   EtherRockets0.006 Ether0.0008857365
0x6bb89ef4cc77fb9e3d944a18e9c5e8329a23cf021a3ffd0f77aa70c6c26710e1178 days 12 hrs ago0x7280143ab753962572c497fcab809ecefb2dc3f2  IN   EtherRockets0.008 Ether0.001352592
0x3ed59eb924bd2b3d9b2430f68c76db9d45dfc4ec4a59a80891dd758ad3747d82181 days 2 hrs ago0xb94ce019f2f26696c28ea30380579d51f24f8002  IN   EtherRockets0 Ether0.000510048
0xd40332741adf24c15f255c2ba1dad2f9f6a71110694651079ee990e581ac7b6a181 days 2 hrs ago0xb94ce019f2f26696c28ea30380579d51f24f8002  IN   EtherRockets0 Ether0.000410576
0x0d393121215e68214532ff22b6fcadd38958ddfdb6cc0a0af993d84668ffc2a0194 days 7 hrs ago0x01a35017c1475e9c4daa88771ee5bc9ee427c28f  IN   EtherRockets0.008 Ether0.000169074
0x7aceffd5d2105ecf75db8d3f643630040d522a2acab5fac1e9b012897460cb88199 days 16 hrs ago0xe8e394c174caad8647955a0c00425e120f13507e  IN   EtherRockets0 Ether0.00045623
0xcea290d1ae1df433d962adbdb229126ece0c30d64b9044f321f63bf57eebad71199 days 16 hrs ago0xe8e394c174caad8647955a0c00425e120f13507e  IN   EtherRockets0 Ether0.00026498
0x47d23a74da714f3ff68e130b9b1789a737683b14ad0a7333860518c812ae4361199 days 16 hrs ago0xe8e394c174caad8647955a0c00425e120f13507e  IN   EtherRockets0 Ether0.00026498
0x65fafb120c4f56d0e272741f71f73734c8ff3b96133b711094e41fe754f37895199 days 16 hrs ago0xe8e394c174caad8647955a0c00425e120f13507e  IN   EtherRockets0 Ether0.00045623
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xc6470a10f94ce7b614c8d2d7a13744c1701abc53c971f342d2b4ff50c976521d638594455 days 16 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x87fd595569bf0c5870320d20a071fd9c3ccc09cc2abca61553aa006e0a8d3e78630640968 days 20 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x17ff1bda259fcba68759c2aba74dbd6cbc4811a53ce4cc27a233cb9d7dd70c23615479394 days 9 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x42a6db933f1fcf63c7b8127d467e4797c39de30981842a83967dd7e6b823d6fe615359894 days 14 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x272711d3bed1c4e6cf2cf8fbfa2640f42161227e02dadfff60f9706cf857f43f6102398103 days 6 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x2298cb06b1670548e8f921e72d2188cf02f0fe9e1c713ed614b196cbb82d9c105992067121 days 22 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x3400201397ed93de128095c8d5c7b063efa11812d66d57282de7e314313603b95793929155 days 18 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0xfca9f1088dd8f6fec682b753c83f2db0690eb5e60d0e59ae8154ccfaaf80040d5793866155 days 18 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x9b34d919bd966cc4eb07dc8edb8484a05524f03f0a02bb66669beec936aa02bd5772703159 days 11 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x42755e96bb3ab02ae1308e23f2e7440f00c0af9a3f5d52520157a197baeaafda5772680159 days 11 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.03 Ether
0x820c68eef1c8884d00a89484519b610f5109f7db51e498da20d507c80f71f0f65772652159 days 11 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x1a0624ebd9e0927e9b27b23e99466ffe636c20e0875d79e18db06c8159499b615772627159 days 11 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x03bcf5fbf0b48d1049d0a2cb267893e2293206a998f1a4e4a489247edbae67f85772606159 days 11 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0xac3562ed14c38720b24680c38d1f3d9e01f0a7251cffa69e2972b52cfb2096275722819168 days 7 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x2f669105b0f30111a53aae4ad521d3bc2726d522789353ea27d423a135663d925722809168 days 7 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0xa6da6647e3e4159fd00cfec976833049527a5f5e9ff1a17f1ddbf3491e1daccd5722795168 days 7 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x2f3a0b2dd7840bc85666a4ede0474302ee4df58a9baa2de85578613bd09358b35665293178 days 12 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x6bb89ef4cc77fb9e3d944a18e9c5e8329a23cf021a3ffd0f77aa70c6c26710e15665172178 days 12 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x0d393121215e68214532ff22b6fcadd38958ddfdb6cc0a0af993d84668ffc2a05575492194 days 7 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0xf797af67662cff50bebb7c77c00c33391d8e7c8deeb1281a4d3d986b8485a4905164742264 days 16 mins ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0xf4bb43cb08033fe58169aa7517d02c5ae093e44fa2390d5a5e90cbf9a62ff1115162245264 days 10 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.006 Ether
0x70f3b60a487fa25fcb4b377d59c20f1fabf037cc6eecccf8e8383fd92d71bf375157429265 days 6 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0xcc34b3a7385f860558a59b88110c264027170eb6411266ff04510050a3ede2d45143091267 days 17 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
0x0f4459b3d377a4bdf7a2d02119abe698f91a1cd4b7e82b4d18b5a5cdde023b495140694268 days 2 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.02 Ether
0xd7a7710e4fa0c6659b467826e5fcf4fb4d456a0dd9a6109cf1b2ce4496e5beb65140556268 days 3 hrs ago0x0ce95ef378059f38c5fa21e6d81a5895c0d9911b0x3f60651303846a417362377910a2a8c5caede0240.008 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Game
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.13;

contract AbstractDatabase
{
    function() public payable;
    function ChangeOwner(address new_owner) public;
    function ChangeOwner2(address new_owner) public;
    function Store(address user, uint256 category, uint256 slot, bytes32 data) public;
    function Load(address user, uint256 category, uint256 index) public view returns (bytes32);
    function TransferFunds(address target, uint256 transfer_amount) public;
}

contract AbstractGameHidden
{
    function CalculateFinalDistance(bytes32 raw0, bytes32 raw1, bytes32 raw2, bytes32 raw3) pure public returns (int64, int64, uint64);
}

library CompetitionScoreTypes
{
    using Serializer for Serializer.DataComponent;

    struct CompetitionScore
    {
        address m_Owner; // 0
        uint64 m_Distance; // 20
        uint32 m_RocketId; // 28
    }

    function SerializeCompetitionScore(CompetitionScore score) internal pure returns (bytes32)
    {
        Serializer.DataComponent memory data;
        data.WriteAddress(0, score.m_Owner);
        data.WriteUint64(20, score.m_Distance);
        data.WriteUint32(28, score.m_RocketId);
        return data.m_Raw;
    }

    function DeserializeCompetitionScore(bytes32 raw) internal pure returns (CompetitionScore)
    {
        CompetitionScore memory score;

        Serializer.DataComponent memory data;
        data.m_Raw = raw;

        score.m_Owner = data.ReadAddress(0);
        score.m_Distance = data.ReadUint64(20);
        score.m_RocketId = data.ReadUint32(28);

        return score;
    }
}

contract Game
{
    using GlobalTypes for GlobalTypes.Global;
    using MarketTypes for MarketTypes.MarketListing;
    using MissionParametersTypes for MissionParametersTypes.MissionParameters;
    using GameCommon for GameCommon.LaunchRocketStackFrame;

    address public m_Owner;
    AbstractDatabase public m_Database;
    AbstractGameHidden public m_GameHidden;
    bool public m_Paused;

    uint256 constant GlobalCategory = 0;
    uint256 constant RocketCategory = 1;
    uint256 constant OwnershipCategory = 2;
    uint256 constant InventoryCategory = 3;
    uint256 constant MarketCategory = 4;
    uint256 constant ProfitFundsCategory = 5;
    uint256 constant CompetitionFundsCategory = 6;
    uint256 constant MissionParametersCategory = 7;
    uint256 constant CompetitionScoresCategory = 8;
    uint256 constant WithdrawalFundsCategory = 9;
    uint256 constant ReferralCategory = 10;
    uint256 constant RocketStockCategory = 11;
    uint256 constant RocketStockInitializedCategory = 12;

    address constant NullAddress = 0;
    uint256 constant MaxCompetitionScores = 10;

    mapping(uint32 => RocketTypes.StockRocket) m_InitialRockets;

    modifier OnlyOwner()
    {
        require(msg.sender == m_Owner);

        _;
    }

    modifier NotWhilePaused()
    {
        require(m_Paused == false);

        _;
    }

    function Game() public
    {
        m_Owner = msg.sender;
        m_Paused = true;
    }

    event BuyStockRocketEvent(address indexed buyer, uint32 stock_id, uint32 rocket_id, address referrer);
    event PlaceRocketForSaleEvent(address indexed seller, uint32 rocket_id, uint80 price);
    event RemoveRocketForSaleEvent(address indexed seller, uint32 rocket_id);
    event BuyRocketForSaleEvent(address indexed buyer, address indexed seller, uint32 rocket_id);
    event LaunchRocketEvent(address indexed launcher, uint32 competition_id, int64 leo_displacement, int64 planet_displacement);
    event StartCompetitionEvent(uint32 competition_id);
    event FinishCompetitionEvent(uint32 competition_id);

    function ChangeOwner(address new_owner) public OnlyOwner()
    {
        m_Owner = new_owner;
    }

    function ChangeDatabase(address db) public OnlyOwner()
    {
        m_Database = AbstractDatabase(db);
    }

    function ChangeGameHidden(address hidden) public OnlyOwner()
    {
        m_GameHidden = AbstractGameHidden(hidden);
    }

    function Unpause() public OnlyOwner()
    {
        m_Paused = false;
    }

    function Pause() public OnlyOwner()
    {
        require(m_Paused == false);

        m_Paused = true;
    }

    function IsPaused() public view returns (bool)
    {
        return m_Paused;
    }

    // 1 write
    function WithdrawProfitFunds(uint256 withdraw_amount, address beneficiary) public NotWhilePaused() OnlyOwner()
    {
        uint256 profit_funds = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0));

        require(withdraw_amount > 0);
        require(withdraw_amount <= profit_funds);
        require(beneficiary != address(0));
        require(beneficiary != address(this));
        require(beneficiary != address(m_Database));

        profit_funds -= withdraw_amount;

        m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(profit_funds));

        m_Database.TransferFunds(beneficiary, withdraw_amount);
    }

    // 1 write
    function WithdrawWinnings(uint256 withdraw_amount) public NotWhilePaused()
    {
        require(withdraw_amount > 0);

        uint256 withdrawal_funds = uint256(m_Database.Load(msg.sender, WithdrawalFundsCategory, 0));
        require(withdraw_amount <= withdrawal_funds);

        withdrawal_funds -= withdraw_amount;

        m_Database.Store(msg.sender, WithdrawalFundsCategory, 0, bytes32(withdrawal_funds));

        m_Database.TransferFunds(msg.sender, withdraw_amount);
    }

    function GetRocket(uint32 rocket_id) view public returns (bool is_valid, uint32 top_speed, uint32 thrust, uint32 weight, uint32 fuel_capacity, uint16 stock_id, uint64 max_distance, bool is_for_sale, address owner)
    {
        RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id));

        is_valid = rocket.m_Version >= 1;
        is_for_sale = rocket.m_IsForSale == 1;
        top_speed = rocket.m_TopSpeed;
        thrust = rocket.m_Thrust;
        weight = rocket.m_Weight;
        fuel_capacity = rocket.m_FuelCapacity;
        stock_id = rocket.m_StockId;
        max_distance = rocket.m_MaxDistance;

        owner = GetRocketOwner(rocket_id);
    }

    function GetWithdrawalFunds(address target) view public NotWhilePaused() returns (uint256 funds)
    {
        funds = uint256(m_Database.Load(target, WithdrawalFundsCategory, 0));
    }

    function GetProfitFunds() view public OnlyOwner() returns (uint256 funds)
    {
        uint256 profit_funds = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0));
        return profit_funds;
    }

    function GetCompetitionFunds(uint32 competition_id) view public returns (uint256 funds)
    {
        return uint256(m_Database.Load(NullAddress, CompetitionFundsCategory, competition_id));
    }

    function GetRocketOwner(uint32 rocket_id) view internal returns (address owner)
    {
        OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id));
        owner = ownership.m_Owner;
    }

    function GetAuction(uint32 rocket_id) view public returns (bool is_for_sale, address owner, uint80 price)
    {
        RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id));
        is_for_sale = rocket.m_IsForSale == 1;

        OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id));
        owner = ownership.m_Owner;

        MarketTypes.MarketListing memory listing = MarketTypes.DeserializeMarketListing(m_Database.Load(NullAddress, MarketCategory, rocket_id));
        price = listing.m_Price;
    }

    function GetInventoryCount(address target) view public returns (uint256)
    {
        require(target != address(0));

        uint256 inventory_count = uint256(m_Database.Load(target, InventoryCategory, 0));

        return inventory_count;
    }

    function GetInventory(address target, uint256 start_index) view public returns (uint32[8] rocket_ids)
    {
        require(target != address(0));

        uint256 inventory_count = GetInventoryCount(target);

        uint256 end = start_index + 8;
        if (end > inventory_count)
            end = inventory_count;

        for (uint256 i = start_index; i < end; i++)
        {
            rocket_ids[i - start_index] = uint32(uint256(m_Database.Load(target, InventoryCategory, i + 1)));
        }
    }

    // 1 write
    function AddRocket(uint32 stock_id, uint64 cost, uint32 min_top_speed, uint32 max_top_speed, uint32 min_thrust, uint32 max_thrust, uint32 min_weight, uint32 max_weight, uint32 min_fuel_capacity, uint32 max_fuel_capacity, uint64 distance, uint32 max_stock) OnlyOwner() public
    {
        m_InitialRockets[stock_id] = RocketTypes.StockRocket({
            m_IsValid: true,
            m_Cost: cost,
            m_MinTopSpeed: min_top_speed,
            m_MaxTopSpeed: max_top_speed,
            m_MinThrust: min_thrust,
            m_MaxThrust: max_thrust,
            m_MinWeight: min_weight,
            m_MaxWeight: max_weight,
            m_MinFuelCapacity: min_fuel_capacity,
            m_MaxFuelCapacity: max_fuel_capacity,
            m_Distance: distance
        });

        min_top_speed = uint32(m_Database.Load(NullAddress, RocketStockInitializedCategory, stock_id));

        if (min_top_speed == 0)
        {
            m_Database.Store(NullAddress, RocketStockCategory, stock_id, bytes32(max_stock));
            m_Database.Store(NullAddress, RocketStockInitializedCategory, stock_id, bytes32(1));
        }
    }

    function GetRocketStock(uint16 stock_id) public view returns (uint32)
    {
        return uint32(m_Database.Load(NullAddress, RocketStockCategory, stock_id));
    }

    // 6 writes
    function BuyStockRocket(uint16 stock_id, address referrer) payable NotWhilePaused() public
    {
        //require(referrer != msg.sender);
        uint32 stock = GetRocketStock(stock_id);

        require(stock > 0);

        GiveRocketInternal(stock_id, msg.sender, true, referrer);

        stock--;

        m_Database.Store(NullAddress, RocketStockCategory, stock_id, bytes32(stock));
    }

    function GiveReferralRocket(uint16 stock_id, address target) public NotWhilePaused() OnlyOwner()
    {
        uint256 already_received = uint256(m_Database.Load(target, ReferralCategory, 0));
        require(already_received == 0);

        already_received = 1;
        m_Database.Store(target, ReferralCategory, 0, bytes32(already_received));

        GiveRocketInternal(stock_id, target, false, address(0));
    }

    function GiveRocketInternal(uint16 stock_id, address target, bool buying, address referrer) internal
    {
        RocketTypes.StockRocket storage stock_rocket = m_InitialRockets[stock_id];

        require(stock_rocket.m_IsValid);
        if (buying)
        {
            require(msg.value == stock_rocket.m_Cost);
        }

        GlobalTypes.Global memory global = GlobalTypes.DeserializeGlobal(m_Database.Load(NullAddress, GlobalCategory, 0));

        uint256 profit_funds = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0));

        global.m_LastRocketId++;
        uint32 next_rocket_id = global.m_LastRocketId;

        uint256 inventory_count = GetInventoryCount(target);
        inventory_count++;

        RocketTypes.Rocket memory rocket;
        rocket.m_Version = 1;
        rocket.m_StockId = stock_id;
        rocket.m_IsForSale = 0;

        bytes32 rand = sha256(block.timestamp, block.coinbase, global.m_LastRocketId);

        // Fix LerpExtra calls in FinishCompetition if anything is added here
        rocket.m_TopSpeed = uint32(Lerp(stock_rocket.m_MinTopSpeed, stock_rocket.m_MaxTopSpeed, rand[0]));
        rocket.m_Thrust = uint32(Lerp(stock_rocket.m_MinThrust, stock_rocket.m_MaxThrust, rand[1]));
        rocket.m_Weight = uint32(Lerp(stock_rocket.m_MinWeight, stock_rocket.m_MaxWeight, rand[2]));
        rocket.m_FuelCapacity = uint32(Lerp(stock_rocket.m_MinFuelCapacity, stock_rocket.m_MaxFuelCapacity, rand[3]));
        rocket.m_MaxDistance = uint64(stock_rocket.m_Distance);
        //

        OwnershipTypes.Ownership memory ownership;
        ownership.m_Owner = target;
        ownership.m_OwnerInventoryIndex = uint32(inventory_count) - 1;

        profit_funds += msg.value;

        m_Database.Store(target, InventoryCategory, inventory_count, bytes32(next_rocket_id));
        m_Database.Store(target, InventoryCategory, 0, bytes32(inventory_count));
        m_Database.Store(NullAddress, RocketCategory, next_rocket_id, RocketTypes.SerializeRocket(rocket));
        m_Database.Store(NullAddress, OwnershipCategory, next_rocket_id, OwnershipTypes.SerializeOwnership(ownership));
        m_Database.Store(NullAddress, GlobalCategory, 0, GlobalTypes.SerializeGlobal(global));
        if (buying)
        {
            m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(profit_funds));

            m_Database.transfer(msg.value);
        }
        BuyStockRocketEvent(target, stock_id, next_rocket_id, referrer);
    }

    // 2 writes
    function PlaceRocketForSale(uint32 rocket_id, uint80 price) NotWhilePaused() public
    {
        RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id));
        require(rocket.m_Version > 0);

        OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id));
        require(ownership.m_Owner == msg.sender);

        require(rocket.m_IsForSale == 0);

        MarketTypes.MarketListing memory listing;
        listing.m_Price = price;

        rocket.m_IsForSale = 1;

        m_Database.Store(NullAddress, RocketCategory, rocket_id, RocketTypes.SerializeRocket(rocket));
        m_Database.Store(NullAddress, MarketCategory, rocket_id, MarketTypes.SerializeMarketListing(listing));

        PlaceRocketForSaleEvent(msg.sender, rocket_id, price);
    }

    // 1 write
    function RemoveRocketForSale(uint32 rocket_id) NotWhilePaused() public
    {
        RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id));
        require(rocket.m_Version > 0);
        require(rocket.m_IsForSale == 1);

        OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id));
        require(ownership.m_Owner == msg.sender);

        rocket.m_IsForSale = 0;

        m_Database.Store(NullAddress, RocketCategory, rocket_id, RocketTypes.SerializeRocket(rocket));

        RemoveRocketForSaleEvent(msg.sender, rocket_id);
    }

    // 9-11 writes
    function BuyRocketForSale(uint32 rocket_id) payable NotWhilePaused() public
    {
        RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id));
        require(rocket.m_Version > 0);

        require(rocket.m_IsForSale == 1);

        OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id));
        require(ownership.m_Owner != msg.sender);

        MarketTypes.MarketListing memory listing = MarketTypes.DeserializeMarketListing(m_Database.Load(NullAddress, MarketCategory, rocket_id));
        require(msg.value == listing.m_Price);

        uint256 seller_inventory_count = uint256(m_Database.Load(ownership.m_Owner, InventoryCategory, 0));
        uint256 buyer_inventory_count = uint256(m_Database.Load(msg.sender, InventoryCategory, 0));

        uint256 profit_funds_or_last_rocket_id;
        uint256 wei_for_profit_funds;
        uint256 buyer_price_or_wei_for_seller = uint256(listing.m_Price);

        address beneficiary = ownership.m_Owner;
        ownership.m_Owner = msg.sender;
        rocket.m_IsForSale = 0;

        listing.m_Price = 0;

        buyer_inventory_count++;
        profit_funds_or_last_rocket_id = uint256(m_Database.Load(beneficiary, InventoryCategory, seller_inventory_count));

        m_Database.Store(beneficiary, InventoryCategory, seller_inventory_count, bytes32(0));

        if (ownership.m_OwnerInventoryIndex + 1 != seller_inventory_count)
        {
            m_Database.Store(beneficiary, InventoryCategory, ownership.m_OwnerInventoryIndex + 1, bytes32(profit_funds_or_last_rocket_id));

            OwnershipTypes.Ownership memory last_rocket_ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, profit_funds_or_last_rocket_id));
            last_rocket_ownership.m_OwnerInventoryIndex = uint32(ownership.m_OwnerInventoryIndex);

            m_Database.Store(NullAddress, OwnershipCategory, profit_funds_or_last_rocket_id, OwnershipTypes.SerializeOwnership(last_rocket_ownership));
        }

        ownership.m_OwnerInventoryIndex = uint32(buyer_inventory_count);
        m_Database.Store(msg.sender, InventoryCategory, buyer_inventory_count, bytes32(rocket_id));

        wei_for_profit_funds = buyer_price_or_wei_for_seller / 20;
        buyer_price_or_wei_for_seller = buyer_price_or_wei_for_seller - wei_for_profit_funds;

        profit_funds_or_last_rocket_id = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0));
        profit_funds_or_last_rocket_id += wei_for_profit_funds;

        seller_inventory_count--;
        m_Database.Store(msg.sender, InventoryCategory, 0, bytes32(buyer_inventory_count));
        m_Database.Store(beneficiary, InventoryCategory, 0, bytes32(seller_inventory_count));

        m_Database.Store(NullAddress, OwnershipCategory, rocket_id, OwnershipTypes.SerializeOwnership(ownership));
        m_Database.Store(NullAddress, RocketCategory, rocket_id, RocketTypes.SerializeRocket(rocket));
        m_Database.Store(NullAddress, MarketCategory, rocket_id, MarketTypes.SerializeMarketListing(listing));
        m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(profit_funds_or_last_rocket_id));

        buyer_price_or_wei_for_seller += uint256(m_Database.Load(beneficiary, WithdrawalFundsCategory, 0)); // Reuse variable
        m_Database.Store(beneficiary, WithdrawalFundsCategory, 0, bytes32(buyer_price_or_wei_for_seller));

        m_Database.transfer(msg.value);
        BuyRocketForSaleEvent(msg.sender, beneficiary, rocket_id);
    }

    // 3 writes + 1-12 writes = 4-15 writes
    function LaunchRocket(uint32 competition_id, uint32 rocket_id, uint32 launch_thrust, uint32 fuel_to_use, uint32 fuel_allocation_for_launch, uint32 stabilizer_setting) payable NotWhilePaused() public
    {
        GameCommon.LaunchRocketStackFrame memory stack;
        stack.m_Rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id));
        stack.m_Mission =  MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id));
        stack.m_Ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id));

        require(stack.m_Mission.m_IsStarted == 1);
        require(stack.m_Rocket.m_Version > 0);
        require(stack.m_Rocket.m_IsForSale == 0);
        require(msg.value == uint256(stack.m_Mission.m_LaunchCost));
        require(stack.m_Ownership.m_Owner == msg.sender);
        require(launch_thrust <= stack.m_Rocket.m_Thrust);

        stack.m_MissionWindSpeed = stack.m_Mission.m_WindSpeed;
        stack.m_MissionLaunchLocation = stack.m_Mission.m_LaunchLocation;
        stack.m_MissionWeatherType = stack.m_Mission.m_WeatherType;
        stack.m_MissionWeatherCoverage = stack.m_Mission.m_WeatherCoverage;
        stack.m_MissionTargetDistance = stack.m_Mission.m_TargetDistance;
        stack.m_DebugExtraDistance = stack.m_Mission.m_DebugExtraDistance;

        stack.m_RocketTopSpeed = stack.m_Rocket.m_TopSpeed;
        stack.m_RocketThrust = stack.m_Rocket.m_Thrust;
        stack.m_RocketMass = stack.m_Rocket.m_Weight;
        stack.m_RocketFuelCapacity = stack.m_Rocket.m_FuelCapacity;
        stack.m_RocketMaxDistance = int64(stack.m_Rocket.m_MaxDistance);

        stack.m_CompetitionId = competition_id;
        stack.m_RocketId = rocket_id;
        stack.m_LaunchThrust = launch_thrust * 100 / stack.m_Rocket.m_Thrust;
        stack.m_FuelToUse = fuel_to_use;
        stack.m_FuelAllocationForLaunch = fuel_allocation_for_launch;
        stack.m_StabilizerSetting = stabilizer_setting;
        stack.m_Launcher = msg.sender;

        LaunchRocketInternal(stack);
    }

    // 3 writes
    function LaunchRocketInternal(GameCommon.LaunchRocketStackFrame memory stack) internal
    {
        stack.SerializeLaunchRocketStackFrame();

        (stack.m_DisplacementFromLowEarthOrbit, stack.m_DisplacementFromPlanet, stack.m_FinalDistance) = m_GameHidden.CalculateFinalDistance(
            stack.m_Raw0,
            stack.m_Raw1,
            stack.m_Raw2,
            stack.m_Raw3
        );

        AddScore(stack);

        stack.m_ProfitFunds = msg.value / 10;
        stack.m_CompetitionFunds = msg.value - stack.m_ProfitFunds;

        stack.m_ProfitFunds += uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0));
        stack.m_CompetitionFunds += uint256(m_Database.Load(NullAddress, CompetitionFundsCategory, stack.m_CompetitionId));

        m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(stack.m_ProfitFunds));
        m_Database.Store(NullAddress, CompetitionFundsCategory, stack.m_CompetitionId, bytes32(stack.m_CompetitionFunds));
        m_Database.Store(NullAddress, MissionParametersCategory, stack.m_CompetitionId, stack.m_Mission.SerializeMissionParameters());

        m_Database.transfer(msg.value);
        LaunchRocketEvent(msg.sender, stack.m_CompetitionId, stack.m_DisplacementFromLowEarthOrbit, stack.m_DisplacementFromPlanet);
    }

    // 0-1 writes
    function AddScore(GameCommon.LaunchRocketStackFrame memory stack) internal
    {
        CompetitionScoreTypes.CompetitionScore memory new_score;
        new_score.m_Owner = stack.m_Launcher;
        new_score.m_Distance = stack.m_FinalDistance;
        new_score.m_RocketId = stack.m_RocketId;

        CompetitionScoreTypes.CompetitionScore memory score;

        for (uint32 i = 0; i < stack.m_Mission.m_ValidCompetitionScores; i++)
        {
            // Check if the new score is better than the score that this user already has (if they are in the top x)
            score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(stack.m_CompetitionId, CompetitionScoresCategory, i));

            if (score.m_Owner == stack.m_Launcher)
            {
                if (stack.m_FinalDistance < score.m_Distance)
                {
                    m_Database.Store(stack.m_CompetitionId, CompetitionScoresCategory, i, CompetitionScoreTypes.SerializeCompetitionScore(new_score));
                }
                return;
            }
        }

        if (stack.m_Mission.m_ValidCompetitionScores < MaxCompetitionScores)
        {
            // Not enough scores, so this one is automatically one of the best
            m_Database.Store(stack.m_CompetitionId, CompetitionScoresCategory, stack.m_Mission.m_ValidCompetitionScores, CompetitionScoreTypes.SerializeCompetitionScore(new_score));

            stack.m_Mission.m_ValidCompetitionScores++;
            return;
        }

        uint64 highest_distance = 0;
        uint32 highest_index = 0xFFFFFFFF;
        for (i = 0; i < stack.m_Mission.m_ValidCompetitionScores; i++)
        {
            score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(stack.m_CompetitionId, CompetitionScoresCategory, i));

            if (score.m_Distance > highest_distance)
            {
                highest_distance = score.m_Distance;
                highest_index = i;
            }
        }

        if (highest_index != 0xFFFFFFFF)
        {
            score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(stack.m_CompetitionId, CompetitionScoresCategory, highest_index));

            // Check if the new score is better than the highest score
            if (stack.m_FinalDistance < score.m_Distance)
            {
                m_Database.Store(stack.m_CompetitionId, CompetitionScoresCategory, highest_index, CompetitionScoreTypes.SerializeCompetitionScore(new_score));
                return;
            }
        }
    }

    function GetCompetitionInfo(uint32 competition_id) view NotWhilePaused() public returns (bool in_progress, uint8 wind_speed, uint8 launch_location, uint8 weather_type, uint8 weather_coverage, uint80 launch_cost, uint32 target_distance)
    {
        MissionParametersTypes.MissionParameters memory parameters = MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id));

        in_progress = parameters.m_IsStarted == 1;
        wind_speed = parameters.m_WindSpeed;
        launch_location = parameters.m_LaunchLocation;
        weather_type = parameters.m_WeatherType;
        weather_coverage = parameters.m_WeatherCoverage;
        launch_cost = parameters.m_LaunchCost;
        target_distance = parameters.m_TargetDistance;
    }

    function SetDebugExtra(uint32 competition_id, uint8 extra) public OnlyOwner()
    {
        MissionParametersTypes.MissionParameters memory parameters = MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id));

        parameters.m_DebugExtraDistance = extra;

        m_Database.Store(NullAddress, MissionParametersCategory, competition_id, parameters.SerializeMissionParameters());
    }

    // 2 writes
    function StartCompetition(uint8 wind_speed, uint8 launch_location, uint8 weather_type, uint8 weather_coverage, uint80 launch_cost, uint32 target_distance) public NotWhilePaused() OnlyOwner()
    {
        GlobalTypes.Global memory global = GlobalTypes.DeserializeGlobal(m_Database.Load(NullAddress, GlobalCategory, 0));

        MissionParametersTypes.MissionParameters memory parameters;
        parameters.m_WindSpeed = wind_speed;
        parameters.m_LaunchLocation = launch_location;
        parameters.m_WeatherType = weather_type;
        parameters.m_WeatherCoverage = weather_coverage;
        parameters.m_LaunchCost = launch_cost;
        parameters.m_TargetDistance = target_distance;
        parameters.m_IsStarted = 1;

        global.m_CompetitionNumber++;

        uint32 competition_id = global.m_CompetitionNumber;

        m_Database.Store(NullAddress, MissionParametersCategory, competition_id, parameters.SerializeMissionParameters());
        m_Database.Store(NullAddress, GlobalCategory, 0, GlobalTypes.SerializeGlobal(global));

        StartCompetitionEvent(competition_id);
    }

    function GetCompetitionResults(uint32 competition_id, bool first_half) public view returns (address[], uint64[])
    {
        CompetitionScoreTypes.CompetitionScore memory score;

        uint256 offset = (first_half == true ? 0 : 5);
        address[] memory winners = new address[](5);
        uint64[] memory distances = new uint64[](5);

        for (uint32 i = 0; i < 5; i++)
        {
            score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(competition_id, CompetitionScoresCategory, offset + i));
            winners[i] = score.m_Owner;
            distances[i] = score.m_Distance;
        }

        return (winners, distances);
    }

    function SortCompetitionScores(uint32 competition_id) public NotWhilePaused() OnlyOwner()
    {
        CompetitionScoreTypes.CompetitionScore[] memory scores;
        MissionParametersTypes.MissionParameters memory parameters;

        (scores, parameters) = MakeAndSortCompetitionScores(competition_id);

        for (uint256 i = 0; i < parameters.m_ValidCompetitionScores; i++)
        {
            m_Database.Store(competition_id, CompetitionScoresCategory, i, CompetitionScoreTypes.SerializeCompetitionScore(scores[i]));
        }
    }

    function MakeAndSortCompetitionScores(uint32 competition_id) internal view returns (CompetitionScoreTypes.CompetitionScore[] memory scores, MissionParametersTypes.MissionParameters memory parameters)
    {
        parameters = MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id));
        scores = new CompetitionScoreTypes.CompetitionScore[](MaxCompetitionScores + 1);

        for (uint256 i = 0; i < parameters.m_ValidCompetitionScores; i++)
        {
            scores[i] = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(competition_id, CompetitionScoresCategory, i));
        }

        BubbleSort(scores, parameters.m_ValidCompetitionScores);
    }

    // 22 writes (full competition)
    function FinishCompetition(uint32 competition_id) public NotWhilePaused() OnlyOwner()
    {
        CompetitionScoreTypes.CompetitionScore[] memory scores;
        MissionParametersTypes.MissionParameters memory parameters;

        (scores, parameters) = MakeAndSortCompetitionScores(competition_id);

        require(parameters.m_IsStarted == 1);

        parameters.m_IsStarted = 0;

        uint256 original_competition_funds = uint256(m_Database.Load(NullAddress, CompetitionFundsCategory, competition_id));
        uint256 competition_funds_remaining = original_competition_funds;

        for (uint256 i = 0; i < parameters.m_ValidCompetitionScores; i++)
        {
            RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, scores[i].m_RocketId));
            RocketTypes.StockRocket storage stock_rocket = m_InitialRockets[rocket.m_StockId];

            // Fix Lerps in BuyStockRocket if anything is added here
            // This will increase even if they change owners, which is fine
            rocket.m_TopSpeed = uint32(LerpExtra(stock_rocket.m_MinTopSpeed, stock_rocket.m_MaxTopSpeed, rocket.m_TopSpeed, bytes1(10 - i)));
            rocket.m_Thrust = uint32(LerpExtra(stock_rocket.m_MinThrust, stock_rocket.m_MaxThrust, rocket.m_Thrust, bytes1(10 - i)));
            rocket.m_Weight = uint32(LerpLess(stock_rocket.m_MinWeight, stock_rocket.m_MaxWeight, rocket.m_Weight, bytes1(10 - i)));
            rocket.m_FuelCapacity = uint32(LerpExtra(stock_rocket.m_MinFuelCapacity, stock_rocket.m_MaxFuelCapacity, rocket.m_FuelCapacity, bytes1(10 - i)));
            //

            m_Database.Store(NullAddress, RocketCategory, scores[i].m_RocketId, RocketTypes.SerializeRocket(rocket));

            uint256 existing_funds = uint256(m_Database.Load(scores[i].m_Owner, WithdrawalFundsCategory, 0));

            uint256 funds_won = original_competition_funds / (2 ** (i + 1));

            if (funds_won > competition_funds_remaining)
                funds_won = competition_funds_remaining;

            existing_funds += funds_won;
            competition_funds_remaining -= funds_won;

            m_Database.Store(scores[i].m_Owner, WithdrawalFundsCategory, 0, bytes32(existing_funds));
        }

        if (competition_funds_remaining > 0)
        {
            scores[MaxCompetitionScores] = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(competition_id, CompetitionScoresCategory, 0));
            existing_funds = uint256(m_Database.Load(scores[MaxCompetitionScores].m_Owner, WithdrawalFundsCategory, 0));
            existing_funds += competition_funds_remaining;
            m_Database.Store(scores[MaxCompetitionScores].m_Owner, WithdrawalFundsCategory, 0, bytes32(existing_funds));
        }

        m_Database.Store(NullAddress, MissionParametersCategory, competition_id, parameters.SerializeMissionParameters());

        FinishCompetitionEvent(competition_id);
    }

    function Lerp(uint256 min, uint256 max, bytes1 percent) internal pure returns(uint256)
    {
        uint256 real_percent = (uint256(percent) % 100);
        return uint256(min + (real_percent * (max - min)) / 100);
    }

    function LerpExtra(uint256 min, uint256 max, uint256 current, bytes1 total_extra_percent) internal pure returns (uint256)
    {
        current += Lerp(min, max, total_extra_percent) - min;
        if (current < min || current > max)
            current = max;
        return current;
    }

    function LerpLess(uint256 min, uint256 max, uint256 current, bytes1 total_less_percent) internal pure returns (uint256)
    {
        current -= Lerp(min, max, total_less_percent) - min;
        if (current < min || current > max)
            current = min;
        return current;
    }

    function BubbleSort(CompetitionScoreTypes.CompetitionScore[] memory scores, uint32 length) internal pure
    {
        uint32 n = length;
        while (true)
        {
            bool swapped = false;
            for (uint32 i = 1; i < n; i++)
            {
                if (scores[i - 1].m_Distance > scores[i].m_Distance)
                {
                    scores[MaxCompetitionScores] = scores[i - 1];
                    scores[i - 1] = scores[i];
                    scores[i] = scores[MaxCompetitionScores];
                    swapped = true;
                }
            }
            n--;
            if (!swapped)
                break;
        }
    }
}

library GameCommon
{
    using Serializer for Serializer.DataComponent;

    struct LaunchRocketStackFrame
    {
        int64 m_RocketTopSpeed; // 0
        int64 m_RocketThrust; // 8
        int64 m_RocketMass; // 16
        int64 m_RocketFuelCapacity; // 24

        int64 m_RocketMaxDistance; // 0
        int64 m_MissionWindSpeed; // 8
        int64 m_MissionLaunchLocation; // 16
        int64 m_MissionWeatherType; // 24

        int64 m_MissionWeatherCoverage; // 0
        int64 m_MissionTargetDistance; // 8
        int64 m_FuelToUse; // 16
        int64 m_FuelAllocationForLaunch; // 24

        int64 m_StabilizerSetting; // 0
        int64 m_DebugExtraDistance; // 8
        int64 m_LaunchThrust; // 16

        RocketTypes.Rocket m_Rocket;
        OwnershipTypes.Ownership m_Ownership;
        MissionParametersTypes.MissionParameters m_Mission;

        bytes32 m_Raw0;
        bytes32 m_Raw1;
        bytes32 m_Raw2;
        bytes32 m_Raw3;

        uint32 m_CompetitionId;
        uint32 m_RocketId;
        int64 m_LowEarthOrbitPosition;
        int64 m_DisplacementFromLowEarthOrbit;
        int64 m_DisplacementFromPlanet;
        address m_Launcher;
        uint256 m_ProfitFunds;
        uint256 m_CompetitionFunds;
        uint64 m_FinalDistance;
    }

    function SerializeLaunchRocketStackFrame(LaunchRocketStackFrame memory stack) internal pure
    {
        SerializeRaw0(stack);
        SerializeRaw1(stack);
        SerializeRaw2(stack);
        SerializeRaw3(stack);
    }

    function DeserializeLaunchRocketStackFrame(LaunchRocketStackFrame memory stack) internal pure
    {
        DeserializeRaw0(stack);
        DeserializeRaw1(stack);
        DeserializeRaw2(stack);
        DeserializeRaw3(stack);
    }

    function SerializeRaw0(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;

        data.WriteUint64(0, uint64(stack.m_RocketTopSpeed));
        data.WriteUint64(8, uint64(stack.m_RocketThrust));
        data.WriteUint64(16, uint64(stack.m_RocketMass));
        data.WriteUint64(24, uint64(stack.m_RocketFuelCapacity));

        stack.m_Raw0 = data.m_Raw;
    }

    function DeserializeRaw0(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;
        data.m_Raw = stack.m_Raw0;

        stack.m_RocketTopSpeed = int64(data.ReadUint64(0));
        stack.m_RocketThrust = int64(data.ReadUint64(8));
        stack.m_RocketMass = int64(data.ReadUint64(16));
        stack.m_RocketFuelCapacity = int64(data.ReadUint64(24));
    }

    function SerializeRaw1(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;

        data.WriteUint64(0, uint64(stack.m_RocketMaxDistance));
        data.WriteUint64(8, uint64(stack.m_MissionWindSpeed));
        data.WriteUint64(16, uint64(stack.m_MissionLaunchLocation));
        data.WriteUint64(24, uint64(stack.m_MissionWeatherType));

        stack.m_Raw1 = data.m_Raw;
    }

    function DeserializeRaw1(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;
        data.m_Raw = stack.m_Raw1;

        stack.m_RocketMaxDistance = int64(data.ReadUint64(0));
        stack.m_MissionWindSpeed = int64(data.ReadUint64(8));
        stack.m_MissionLaunchLocation = int64(data.ReadUint64(16));
        stack.m_MissionWeatherType = int64(data.ReadUint64(24));
    }

    function SerializeRaw2(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;

        data.WriteUint64(0, uint64(stack.m_MissionWeatherCoverage));
        data.WriteUint64(8, uint64(stack.m_MissionTargetDistance));
        data.WriteUint64(16, uint64(stack.m_FuelToUse));
        data.WriteUint64(24, uint64(stack.m_FuelAllocationForLaunch));

        stack.m_Raw2 = data.m_Raw;
    }

    function DeserializeRaw2(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;
        data.m_Raw = stack.m_Raw2;

        stack.m_MissionWeatherCoverage = int64(data.ReadUint64(0));
        stack.m_MissionTargetDistance = int64(data.ReadUint64(8));
        stack.m_FuelToUse = int64(data.ReadUint64(16));
        stack.m_FuelAllocationForLaunch = int64(data.ReadUint64(24));
    }

    function SerializeRaw3(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;

        data.WriteUint64(0, uint64(stack.m_StabilizerSetting));
        data.WriteUint64(8, uint64(stack.m_DebugExtraDistance));
        data.WriteUint64(16, uint64(stack.m_LaunchThrust));

        stack.m_Raw3 = data.m_Raw;
    }

    function DeserializeRaw3(LaunchRocketStackFrame memory stack) internal pure
    {
        Serializer.DataComponent memory data;
        data.m_Raw = stack.m_Raw3;

        stack.m_StabilizerSetting = int64(data.ReadUint64(0));
        stack.m_DebugExtraDistance = int64(data.ReadUint64(8));
        stack.m_LaunchThrust = int64(data.ReadUint64(16));
    }
}

library GlobalTypes
{
    using Serializer for Serializer.DataComponent;

    struct Global
    {
        uint32 m_LastRocketId; // 0
        uint32 m_CompetitionNumber; // 4
        uint8 m_Unused8; // 8
        uint8 m_Unused9; // 9
        uint8 m_Unused10; // 10
        uint8 m_Unused11; // 11
    }

    function SerializeGlobal(Global global) internal pure returns (bytes32)
    {
        Serializer.DataComponent memory data;
        data.WriteUint32(0, global.m_LastRocketId);
        data.WriteUint32(4, global.m_CompetitionNumber);
        data.WriteUint8(8, global.m_Unused8);
        data.WriteUint8(9, global.m_Unused9);
        data.WriteUint8(10, global.m_Unused10);
        data.WriteUint8(11, global.m_Unused11);

        return data.m_Raw;
    }

    function DeserializeGlobal(bytes32 raw) internal pure returns (Global)
    {
        Global memory global;

        Serializer.DataComponent memory data;
        data.m_Raw = raw;

        global.m_LastRocketId = data.ReadUint32(0);
        global.m_CompetitionNumber = data.ReadUint32(4);
        global.m_Unused8 = data.ReadUint8(8);
        global.m_Unused9 = data.ReadUint8(9);
        global.m_Unused10 = data.ReadUint8(10);
        global.m_Unused11 = data.ReadUint8(11);

        return global;
    }
}

library MarketTypes
{
    using Serializer for Serializer.DataComponent;

    struct MarketListing
    {
        uint80 m_Price; // 0
    }

    function SerializeMarketListing(MarketListing listing) internal pure returns (bytes32)
    {
        Serializer.DataComponent memory data;
        data.WriteUint80(0, listing.m_Price);

        return data.m_Raw;
    }

    function DeserializeMarketListing(bytes32 raw) internal pure returns (MarketListing)
    {
        MarketListing memory listing;

        Serializer.DataComponent memory data;
        data.m_Raw = raw;

        listing.m_Price = data.ReadUint80(0);

        return listing;
    }
}

library MissionParametersTypes
{
    using Serializer for Serializer.DataComponent;

    struct MissionParameters
    {
        uint8 m_WindSpeed; // 0
        uint8 m_LaunchLocation; // 1
        uint8 m_WeatherType; // 2
        uint8 m_WeatherCoverage; // 3
        uint80 m_LaunchCost; // 4
        uint8 m_IsStarted; // 14
        uint32 m_TargetDistance; // 15
        uint32 m_ValidCompetitionScores; // 19
        uint8 m_DebugExtraDistance; // 23
    }

    function SerializeMissionParameters(MissionParameters mission) internal pure returns (bytes32)
    {
        Serializer.DataComponent memory data;

        data.WriteUint8(0, mission.m_WindSpeed);
        data.WriteUint8(1, mission.m_LaunchLocation);
        data.WriteUint8(2, mission.m_WeatherType);
        data.WriteUint8(3, mission.m_WeatherCoverage);
        data.WriteUint80(4, mission.m_LaunchCost);
        data.WriteUint8(14, mission.m_IsStarted);
        data.WriteUint32(15, mission.m_TargetDistance);
        data.WriteUint32(19, mission.m_ValidCompetitionScores);
        data.WriteUint8(23, mission.m_DebugExtraDistance);

        return data.m_Raw;
    }

    function DeserializeMissionParameters(bytes32 raw) internal pure returns (MissionParameters)
    {
        MissionParameters memory mission;

        Serializer.DataComponent memory data;
        data.m_Raw = raw;

        mission.m_WindSpeed = data.ReadUint8(0);
        mission.m_LaunchLocation = data.ReadUint8(1);
        mission.m_WeatherType = data.ReadUint8(2);
        mission.m_WeatherCoverage = data.ReadUint8(3);
        mission.m_LaunchCost = data.ReadUint80(4);
        mission.m_IsStarted = data.ReadUint8(14);
        mission.m_TargetDistance = data.ReadUint32(15);
        mission.m_ValidCompetitionScores = data.ReadUint32(19);
        mission.m_DebugExtraDistance = data.ReadUint8(23);

        return mission;
    }
}

library OwnershipTypes
{
    using Serializer for Serializer.DataComponent;

    struct Ownership
    {
        address m_Owner; // 0
        uint32 m_OwnerInventoryIndex; // 20
    }

    function SerializeOwnership(Ownership ownership) internal pure returns (bytes32)
    {
        Serializer.DataComponent memory data;
        data.WriteAddress(0, ownership.m_Owner);
        data.WriteUint32(20, ownership.m_OwnerInventoryIndex);

        return data.m_Raw;
    }

    function DeserializeOwnership(bytes32 raw) internal pure returns (Ownership)
    {
        Ownership memory ownership;

        Serializer.DataComponent memory data;
        data.m_Raw = raw;

        ownership.m_Owner = data.ReadAddress(0);
        ownership.m_OwnerInventoryIndex = data.ReadUint32(20);

        return ownership;
    }
}

library RocketTypes
{
    using Serializer for Serializer.DataComponent;

    struct Rocket
    {
        uint8 m_Version; // 0
        uint8 m_Unused1; // 1
        uint8 m_IsForSale; // 2
        uint8 m_Unused3; // 3

        uint32 m_TopSpeed; // 4
        uint32 m_Thrust; // 8
        uint32 m_Weight; // 12
        uint32 m_FuelCapacity; // 16

        uint16 m_StockId; // 20
        uint16 m_Unused22; // 22
        uint64 m_MaxDistance; // 24
    }

    struct StockRocket
    {
        bool m_IsValid; // 0
        uint64 m_Cost; // 1

        uint32 m_MinTopSpeed; // 5
        uint32 m_MaxTopSpeed; // 9

        uint32 m_MinThrust; // 13
        uint32 m_MaxThrust; // 17

        uint32 m_MinWeight; // 21
        uint32 m_MaxWeight; // 25

        uint32 m_MinFuelCapacity; // 29
        uint32 m_MaxFuelCapacity; // 33

        uint64 m_Distance; // 37
    }

    function SerializeRocket(Rocket rocket) internal pure returns (bytes32)
    {
        Serializer.DataComponent memory data;
        data.WriteUint8(0, rocket.m_Version);
        //data.WriteUint8(1, rocket.m_Unused1);
        data.WriteUint8(2, rocket.m_IsForSale);
        //data.WriteUint8(3, rocket.m_Unused3);
        data.WriteUint32(4, rocket.m_TopSpeed);
        data.WriteUint32(8, rocket.m_Thrust);
        data.WriteUint32(12, rocket.m_Weight);
        data.WriteUint32(16, rocket.m_FuelCapacity);
        data.WriteUint16(20, rocket.m_StockId);
        //data.WriteUint16(22, rocket.m_Unused22);
        data.WriteUint64(24, rocket.m_MaxDistance);

        return data.m_Raw;
    }

    function DeserializeRocket(bytes32 raw) internal pure returns (Rocket)
    {
        Rocket memory rocket;

        Serializer.DataComponent memory data;
        data.m_Raw = raw;

        rocket.m_Version = data.ReadUint8(0);
        //rocket.m_Unused1 = data.ReadUint8(1);
        rocket.m_IsForSale = data.ReadUint8(2);
        //rocket.m_Unused3 = data.ReadUint8(3);
        rocket.m_TopSpeed = data.ReadUint32(4);
        rocket.m_Thrust = data.ReadUint32(8);
        rocket.m_Weight = data.ReadUint32(12);
        rocket.m_FuelCapacity = data.ReadUint32(16);
        rocket.m_StockId = data.ReadUint16(20);
        //rocket.m_Unused22 = data.ReadUint16(22);
        rocket.m_MaxDistance = data.ReadUint64(24);

        return rocket;
    }
}

library Serializer
{
    struct DataComponent
    {
        bytes32 m_Raw;
    }

    function ReadUint8(DataComponent memory self, uint32 offset) internal pure returns (uint8)
    {
        return uint8((self.m_Raw >> (offset * 8)) & 0xFF);
    }

    function WriteUint8(DataComponent memory self, uint32 offset, uint8 value) internal pure
    {
        self.m_Raw |= (bytes32(value) << (offset * 8));
    }

    function ReadUint16(DataComponent memory self, uint32 offset) internal pure returns (uint16)
    {
        return uint16((self.m_Raw >> (offset * 8)) & 0xFFFF);
    }

    function WriteUint16(DataComponent memory self, uint32 offset, uint16 value) internal pure
    {
        self.m_Raw |= (bytes32(value) << (offset * 8));
    }

    function ReadUint32(DataComponent memory self, uint32 offset) internal pure returns (uint32)
    {
        return uint32((self.m_Raw >> (offset * 8)) & 0xFFFFFFFF);
    }

    function WriteUint32(DataComponent memory self, uint32 offset, uint32 value) internal pure
    {
        self.m_Raw |= (bytes32(value) << (offset * 8));
    }

    function ReadUint64(DataComponent memory self, uint32 offset) internal pure returns (uint64)
    {
        return uint64((self.m_Raw >> (offset * 8)) & 0xFFFFFFFFFFFFFFFF);
    }

    function WriteUint64(DataComponent memory self, uint32 offset, uint64 value) internal pure
    {
        self.m_Raw |= (bytes32(value) << (offset * 8));
    }

    function ReadUint80(DataComponent memory self, uint32 offset) internal pure returns (uint80)
    {
        return uint80((self.m_Raw >> (offset * 8)) & 0xFFFFFFFFFFFFFFFFFFFF);
    }

    function WriteUint80(DataComponent memory self, uint32 offset, uint80 value) internal pure
    {
        self.m_Raw |= (bytes32(value) << (offset * 8));
    }

    function ReadAddress(DataComponent memory self, uint32 offset) internal pure returns (address)
    {
        return address((self.m_Raw >> (offset * 8)) & (
            (0xFFFFFFFF << 0)  |
            (0xFFFFFFFF << 32) |
            (0xFFFFFFFF << 64) |
            (0xFFFFFFFF << 96) |
            (0xFFFFFFFF << 128)
        ));
    }

    function WriteAddress(DataComponent memory self, uint32 offset, address value) internal pure
    {
        self.m_Raw |= (bytes32(value) << (offset * 8));
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"withdraw_amount","type":"uint256"},{"name":"beneficiary","type":"address"}],"name":"WithdrawProfitFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"IsPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"},{"name":"rocket_id","type":"uint32"},{"name":"launch_thrust","type":"uint32"},{"name":"fuel_to_use","type":"uint32"},{"name":"fuel_allocation_for_launch","type":"uint32"},{"name":"stabilizer_setting","type":"uint32"}],"name":"LaunchRocket","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"stock_id","type":"uint16"},{"name":"target","type":"address"}],"name":"GiveReferralRocket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"hidden","type":"address"}],"name":"ChangeGameHidden","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"GetWithdrawalFunds","outputs":[{"name":"funds","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"Pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"FinishCompetition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"withdraw_amount","type":"uint256"}],"name":"WithdrawWinnings","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"Unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"},{"name":"extra","type":"uint8"}],"name":"SetDebugExtra","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wind_speed","type":"uint8"},{"name":"launch_location","type":"uint8"},{"name":"weather_type","type":"uint8"},{"name":"weather_coverage","type":"uint8"},{"name":"launch_cost","type":"uint80"},{"name":"target_distance","type":"uint32"}],"name":"StartCompetition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"m_Database","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rocket_id","type":"uint32"},{"name":"price","type":"uint80"}],"name":"PlaceRocketForSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"GetCompetitionInfo","outputs":[{"name":"in_progress","type":"bool"},{"name":"wind_speed","type":"uint8"},{"name":"launch_location","type":"uint8"},{"name":"weather_type","type":"uint8"},{"name":"weather_coverage","type":"uint8"},{"name":"launch_cost","type":"uint80"},{"name":"target_distance","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"BuyRocketForSale","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"m_Paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"stock_id","type":"uint32"},{"name":"cost","type":"uint64"},{"name":"min_top_speed","type":"uint32"},{"name":"max_top_speed","type":"uint32"},{"name":"min_thrust","type":"uint32"},{"name":"max_thrust","type":"uint32"},{"name":"min_weight","type":"uint32"},{"name":"max_weight","type":"uint32"},{"name":"min_fuel_capacity","type":"uint32"},{"name":"max_fuel_capacity","type":"uint32"},{"name":"distance","type":"uint64"},{"name":"max_stock","type":"uint32"}],"name":"AddRocket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"GetCompetitionFunds","outputs":[{"name":"funds","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_GameHidden","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"GetAuction","outputs":[{"name":"is_for_sale","type":"bool"},{"name":"owner","type":"address"},{"name":"price","type":"uint80"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"},{"name":"start_index","type":"uint256"}],"name":"GetInventory","outputs":[{"name":"rocket_ids","type":"uint32[8]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"stock_id","type":"uint16"},{"name":"referrer","type":"address"}],"name":"BuyStockRocket","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"stock_id","type":"uint16"}],"name":"GetRocketStock","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_Owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"GetRocket","outputs":[{"name":"is_valid","type":"bool"},{"name":"top_speed","type":"uint32"},{"name":"thrust","type":"uint32"},{"name":"weight","type":"uint32"},{"name":"fuel_capacity","type":"uint32"},{"name":"stock_id","type":"uint16"},{"name":"max_distance","type":"uint64"},{"name":"is_for_sale","type":"bool"},{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"GetInventoryCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"competition_id","type":"uint32"},{"name":"first_half","type":"bool"}],"name":"GetCompetitionResults","outputs":[{"name":"","type":"address[]"},{"name":"","type":"uint64[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"RemoveRocketForSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"db","type":"address"}],"name":"ChangeDatabase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GetProfitFunds","outputs":[{"name":"funds","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"new_owner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"SortCompetitionScores","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"stock_id","type":"uint32"},{"indexed":false,"name":"rocket_id","type":"uint32"},{"indexed":false,"name":"referrer","type":"address"}],"name":"BuyStockRocketEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"rocket_id","type":"uint32"},{"indexed":false,"name":"price","type":"uint80"}],"name":"PlaceRocketForSaleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"rocket_id","type":"uint32"}],"name":"RemoveRocketForSaleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"rocket_id","type":"uint32"}],"name":"BuyRocketForSaleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"launcher","type":"address"},{"indexed":false,"name":"competition_id","type":"uint32"},{"indexed":false,"name":"leo_displacement","type":"int64"},{"indexed":false,"name":"planet_displacement","type":"int64"}],"name":"LaunchRocketEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"competition_id","type":"uint32"}],"name":"StartCompetitionEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"competition_id","type":"uint32"}],"name":"FinishCompetitionEvent","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556002805460a060020a60ff02191674010000000000000000000000000000000000000000179055615e5e80620000636000396000f3006060604052600436106101875763ffffffff60e060020a6000350416630dccfde4811461018c5780631309a563146101b05780631f15e163146101d7578063258f6b8f146102065780632b8a789b1461022c5780633285f4061461024b5780636985a0221461027c578063734f28381461028f57806374f760e4146102ab5780637805862f146102c15780638c5f6d5a146102d45780638cd41fae146102f657806391bb4816146103395780639875958c1461036857806399c75517146103935780639d44210214610407578063a756588814610418578063ae68c80a1461042b578063bd7095db14610497578063bdaeb0a0146104b3578063c022abbe146104c6578063c55f3b4c1461051c578063c6cc68b914610577578063c959ec5714610592578063ca75d770146105c5578063daf017a9146105d8578063dbcf194a14610665578063e190903514610684578063e20348341461073e578063ebc046491461075a578063ec35576e14610779578063f28532921461078c578063ffef2b00146107ab575b600080fd5b341561019757600080fd5b6101ae600435600160a060020a03602435166107c7565b005b34156101bb57600080fd5b6101c36109dc565b604051901515815260200160405180910390f35b6101ae63ffffffff60043581169060243581169060443581169060643581169060843581169060a435166109ec565b341561021157600080fd5b6101ae61ffff60043516600160a060020a0360243516610e40565b341561023757600080fd5b6101ae600160a060020a0360043516610f94565b341561025657600080fd5b61026a600160a060020a0360043516610fde565b60405190815260200160405180910390f35b341561028757600080fd5b6101ae611081565b341561029a57600080fd5b6101ae63ffffffff600435166110d9565b34156102b657600080fd5b6101ae600435611899565b34156102cc57600080fd5b6101ae611a41565b34156102df57600080fd5b6101ae63ffffffff6004351660ff60243516611a7c565b341561030157600080fd5b6101ae60ff6004358116906024358116906044358116906064351669ffffffffffffffffffff6084351663ffffffff60a43516611b94565b341561034457600080fd5b61034c611e19565b604051600160a060020a03909116815260200160405180910390f35b341561037357600080fd5b6101ae63ffffffff6004351669ffffffffffffffffffff60243516611e28565b341561039e57600080fd5b6103af63ffffffff60043516612110565b604051961515875260ff958616602088015293851660408088019190915292851660608701529316608085015269ffffffffffffffffffff90921660a084015263ffffffff1660c083015260e0909101905180910390f35b6101ae63ffffffff600435166121f1565b341561042357600080fd5b6101c3612de5565b341561043657600080fd5b6101ae63ffffffff60043581169067ffffffffffffffff60243581169160443581169160643582169160843581169160a43582169160c43581169160e435821691610104358116916101243582169161014435909116906101643516612df5565b34156104a257600080fd5b61026a63ffffffff6004351661327b565b34156104be57600080fd5b61034c6132eb565b34156104d157600080fd5b6104e263ffffffff600435166132fa565b6040519215158352600160a060020a03909116602083015269ffffffffffffffffffff166040808301919091526060909101905180910390f35b341561052757600080fd5b61053e600160a060020a0360043516602435613498565b604051808261010080838360005b8381101561056457808201518382015260200161054c565b5050505090500191505060405180910390f35b6101ae61ffff60043516600160a060020a036024351661359a565b341561059d57600080fd5b6105ac61ffff60043516613657565b60405163ffffffff909116815260200160405180910390f35b34156105d057600080fd5b61034c6136c6565b34156105e357600080fd5b6105f463ffffffff600435166136d5565b604051981515895263ffffffff97881660208a01529587166040808a0191909152948716606089015292909516608087015261ffff1660a086015267ffffffffffffffff90931660c085015291151560e0840152600160a060020a0316610100830152610120909101905180910390f35b341561067057600080fd5b61026a600160a060020a03600435166137c0565b341561068f57600080fd5b6106a563ffffffff600435166024351515613862565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e95780820151838201526020016106d1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610728578082015183820152602001610710565b5050505090500194505050505060405180910390f35b341561074957600080fd5b6101ae63ffffffff600435166139dd565b341561076557600080fd5b6101ae600160a060020a0360043516613c11565b341561078457600080fd5b61026a613c5b565b341561079757600080fd5b6101ae600160a060020a0360043516613ce2565b34156107b657600080fd5b6101ae63ffffffff60043516613d2c565b60025460009060a060020a900460ff16156107e157600080fd5b60005433600160a060020a039081169116146107fc57600080fd5b600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561086557600080fd5b6102c65a03f1151561087657600080fd5b50505060405180519150506000831161088e57600080fd5b8083111561089b57600080fd5b600160a060020a03821615156108b057600080fd5b30600160a060020a031682600160a060020a0316141515156108d157600080fd5b600154600160a060020a03838116911614156108ec57600080fd5b6001549083900390600160a060020a0316630647b10660006005818560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561095857600080fd5b6102c65a03f1151561096957600080fd5b5050600154600160a060020a0316905063c95f8b91838560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109c357600080fd5b6102c65a03f115156109d457600080fd5b505050505050565b60025460a060020a900460ff1690565b6109f4615bdc565b60025460a060020a900460ff1615610a0b57600080fd5b60018054610aa191600160a060020a0390911690630bd6c769906000908a826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b6102c65a03f11515610a9257600080fd5b50505060405180519050613e35565b6101e0820152600154610b3990600160a060020a0316630bd6c769600060078b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b6102c65a03f11515610b2a57600080fd5b50505060405180519050613f32565b610220820152600154610bd190600160a060020a0316630bd6c769600060028a826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b6102c65a03f11515610bc257600080fd5b50505060405180519050614042565b61020082015261022081015160a0015160ff166001141515610bf257600080fd5b6000816101e001515160ff1611610c0857600080fd5b806101e001516040015160ff1615610c1f57600080fd5b8061022001516080015169ffffffffffffffffffff1634141515610c4257600080fd5b33600160a060020a031681610200015151600160a060020a031614610c6657600080fd5b806101e0015160a0015163ffffffff168563ffffffff1611151515610c8a57600080fd5b8061022001515160ff16600790810b900b60a08201526102208101516020015160ff16600790810b900b60c08201526102208101516040015160ff16600790810b900b60e08201526102208101516060015160ff16600790810b900b61010082015261022081015160c0015163ffffffff16600790810b900b610120820152610220810151610100015160ff16600790810b900b6101a08201526101e08101516080015163ffffffff16600790810b900b81526101e081015160a0015163ffffffff16600790810b900b60208201526101e081015160c0015163ffffffff16600790810b900b60408201526101e081015160e0015163ffffffff16600790810b900b60608201526101e08101516101400151600790810b900b608082015263ffffffff8088166102c083015286166102e08201526101e081015160a0015163ffffffff168560640263ffffffff16811515610de157fe5b0463ffffffff908116600790810b810b6101c0840152858216810b810b610140840152848216810b810b610160840152908316810b900b61018082015233600160a060020a0316610360820152610e378161409c565b50505050505050565b60025460009060a060020a900460ff1615610e5a57600080fd5b60005433600160a060020a03908116911614610e7557600080fd5b600154600160a060020a0316630bd6c76983600a6000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610ede57600080fd5b6102c65a03f11515610eef57600080fd5b50505060405180519150508015610f0557600080fd5b5060018054600160a060020a0316630647b10683600a60008560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515610f6e57600080fd5b6102c65a03f11515610f7f57600080fd5b505050610f8f83836000806144ff565b505050565b60005433600160a060020a03908116911614610faf57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025460009060a060020a900460ff1615610ff857600080fd5b600154600160a060020a0316630bd6c7698360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561106157600080fd5b6102c65a03f1151561107257600080fd5b50505060405180519392505050565b60005433600160a060020a0390811691161461109c57600080fd5b60025460a060020a900460ff16156110b357600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a179055565b6110e1615ce3565b6110e9615cf5565b60008060006110f6615d41565b6002546000908190819060a060020a900460ff161561111457600080fd5b60005433600160a060020a0390811691161461112f57600080fd5b6111388a614c0b565b909950975060a088015160ff16600114151561115357600080fd5b600060a08901819052600154600160a060020a031690630bd6c7699060068d826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156111ca57600080fd5b6102c65a03f115156111db57600080fd5b5050506040518051975087965060009550505b8760e0015163ffffffff168510156115ef576001805461129091600160a060020a0390911690630bd6c769906000908d8a8151811061122957fe5b906020019060200201516040015160006040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b93506003600085610100015161ffff168152602081019190915260400160002080549093506112fa9063ffffffff690100000000000000000082048116916d0100000000000000000000000000900416608087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff9081166080860152835461135991710100000000000000000000000000000000008204811691750100000000000000000000000000000000000000000090041660a087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff90811660a0860152835460018501546113979260c860020a9092048216911660c087015163ffffffff1688600a0360f860020a02614dbb565b63ffffffff90811660c086015260018401546113df9164010000000082048116916801000000000000000090041660e087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff1660e085015260018054600160a060020a031690630647b106906000908c898151811061140d57fe5b906020019060200201516040015161142489614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561147b57600080fd5b6102c65a03f1151561148c57600080fd5b5050600154600160a060020a03169050630bd6c7698a87815181106114ad57fe5b906020019060200201515160096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561150f57600080fd5b6102c65a03f1151561152057600080fd5b50505060405180519250506001850160020a8781151561153c57fe5b0490508581111561154a5750845b600154958190039591810191600160a060020a0316630647b1068a878151811061157057fe5b9060200190602002015151600960008660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156115d057600080fd5b6102c65a03f115156115e157600080fd5b5050600190950194506111ee565b60008611156117c95760015461167f90600160a060020a0316630bd6c7698c60086000806040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b6102c65a03f1151561167057600080fd5b50505060405180519050614ebb565b89600a8151811061168c57fe5b60209081029091010152600154600160a060020a0316630bd6c7698a600a815181106116b457fe5b906020019060200201515160096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561171657600080fd5b6102c65a03f1151561172757600080fd5b50505060405180516001549088019350600160a060020a03169050630647b1068a600a8151811061175457fe5b9060200190602002015151600960008660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156117b457600080fd5b6102c65a03f115156117c557600080fd5b5050505b600154600160a060020a0316630647b106600060078d6117e88d614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561183f57600080fd5b6102c65a03f1151561185057600080fd5b5050507f621ded8b7024f7261900c87ffcf043a3611e1157cf40f9a3a7949a8c54ce316e8a60405163ffffffff909116815260200160405180910390a150505050505050505050565b60025460009060a060020a900460ff16156118b357600080fd5b600082116118c057600080fd5b600154600160a060020a0316630bd6c7693360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561192957600080fd5b6102c65a03f1151561193a57600080fd5b50505060405180519150508082111561195257600080fd5b6001549082900390600160a060020a0316630647b10633600960008560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156119be57600080fd5b6102c65a03f115156119cf57600080fd5b5050600154600160a060020a0316905063c95f8b91338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611a2957600080fd5b6102c65a03f11515611a3a57600080fd5b5050505050565b60005433600160a060020a03908116911614611a5c57600080fd5b6002805474ff000000000000000000000000000000000000000019169055565b611a84615cf5565b60005433600160a060020a03908116911614611a9f57600080fd5b600154611b1190600160a060020a0316630bd6c7696000600787826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b60ff8316610100820152600154909150600160a060020a0316630647b1066000600786611b3d86614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156109c357600080fd5b611b9c615d9d565b611ba4615cf5565b60025460009060a060020a900460ff1615611bbe57600080fd5b60005433600160a060020a03908116911614611bd957600080fd5b600154611c6590600160a060020a0316630bd6c76960008080806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c4557600080fd5b6102c65a03f11515611c5657600080fd5b50505060405180519050615015565b60ff808b1684528981166020808601919091528982166040860152908816606085015269ffffffffffffffffffff8716608085015263ffffffff861660c0850152600160a08501529093508301805160010163ffffffff1690526020830151600154909150600160a060020a0316630647b1066000600784611ce687614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515611d3d57600080fd5b6102c65a03f11515611d4e57600080fd5b5050600154600160a060020a03169050630647b10660008080611d70886150d0565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515611dc057600080fd5b6102c65a03f11515611dd157600080fd5b5050507fa4039098a3bc54729b2ea56d9b9c10da33618d8b141b7ef6b5c9c6b3bd2fdef88160405163ffffffff909116815260200160405180910390a1505050505050505050565b600154600160a060020a031681565b611e30615d41565b611e38615dd2565b611e40615ce3565b60025460a060020a900460ff1615611e5757600080fd5b60018054611ecd91600160a060020a0390911690630bd6c7699060009089826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b92506000835160ff1611611ee057600080fd5b600154611f5290600160a060020a0316630bd6c7696000600289826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9150600160a060020a0333168251600160a060020a031614611f7357600080fd5b826040015160ff1615611f8557600080fd5b69ffffffffffffffffffff841681526001604084018190528054600160a060020a031690630647b1069060009088611fbc88614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561201357600080fd5b6102c65a03f1151561202457600080fd5b5050600154600160a060020a03169050630647b106600060048861204786615167565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561209e57600080fd5b6102c65a03f115156120af57600080fd5b50505033600160a060020a03167fb4b714502735fdcccb277397b149541771cf47f0fe9ac9ff8cedbede62867549868660405163ffffffff909216825269ffffffffffffffffffff1660208201526040908101905180910390a25050505050565b6000806000806000806000612123615cf5565b60025460a060020a900460ff161561213a57600080fd5b6001546121ac90600160a060020a0316630bd6c769600060078d826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b90508060a0015160ff16600114975080600001519650806020015195508060400151945080606001519350806080015192508060c00151915050919395979092949650565b6121f9615d41565b612201615dd2565b612209615ce3565b60008060008060008061221a615dd2565b60025460a060020a900460ff161561223157600080fd5b600180546122a791600160a060020a0390911690630bd6c769906000908f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b995060008a5160ff16116122ba57600080fd5b896040015160ff1660011415156122d057600080fd5b60015461234290600160a060020a0316630bd6c769600060028f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9850600160a060020a0333168951600160a060020a0316141561236457600080fd5b6001546123f690600160a060020a0316630bd6c769600060048f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156123d657600080fd5b6102c65a03f115156123e757600080fd5b50505060405180519050615186565b9750875169ffffffffffffffffffff163414151561241357600080fd5b600154600160a060020a0316630bd6c7698a5160036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561247d57600080fd5b6102c65a03f1151561248e57600080fd5b5050506040518051600154909850600160a060020a03169050630bd6c7693360036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561250457600080fd5b6102c65a03f1151561251557600080fd5b505050604051805196508890505169ffffffffffffffffffff1692508851600160a060020a033381168b5260006040808e01829052818c52600180549a01999395509290911691630bd6c7699185916003918c91516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156125b957600080fd5b6102c65a03f115156125ca57600080fd5b5050506040518051600154909650600160a060020a03169050630647b1068360038a600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561263e57600080fd5b6102c65a03f1151561264f57600080fd5b50505086896020015160010163ffffffff161415156127f357600154600160a060020a0316630647b10683600360208d01516001018960405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156126dc57600080fd5b6102c65a03f115156126ed57600080fd5b505060015461275d9150600160a060020a0316630bd6c7696000600289826040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610bb157600080fd5b9050886020015163ffffffff166020820152600154600160a060020a0316630647b106600060028861278e866151c7565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156127de57600080fd5b6102c65a03f115156127ef57600080fd5b5050505b85896020019063ffffffff16908163ffffffff1681525050600160009054906101000a9004600160a060020a0316600160a060020a0316630647b106336003898f63ffffffff1660010260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561288d57600080fd5b6102c65a03f1151561289e57600080fd5b50506001546014850495509385900393600160a060020a03169050630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561291657600080fd5b6102c65a03f1151561292757600080fd5b5050506040518051600154600019909901989086019650600160a060020a03169050630647b10633600360008a60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156129a457600080fd5b6102c65a03f115156129b557600080fd5b5050600154600160a060020a03169050630647b10683600360008b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612a2057600080fd5b6102c65a03f11515612a3157600080fd5b5050600154600160a060020a03169050630647b106600060028e612a548e6151c7565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612aab57600080fd5b6102c65a03f11515612abc57600080fd5b505060018054600160a060020a03169150630647b106906000908e612ae08f614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612b3757600080fd5b6102c65a03f11515612b4857600080fd5b5050600154600160a060020a03169050630647b106600060048e612b6b8d615167565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612bc257600080fd5b6102c65a03f11515612bd357600080fd5b5050600154600160a060020a03169050630647b10660006005818960405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612c3e57600080fd5b6102c65a03f11515612c4f57600080fd5b5050600154600160a060020a03169050630bd6c7698360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612cbc57600080fd5b6102c65a03f11515612ccd57600080fd5b5050506040518051600154940193600160a060020a03169050630647b10683600960008760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612d4157600080fd5b6102c65a03f11515612d5257600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f193505050501515612d8a57600080fd5b81600160a060020a031633600160a060020a03167f6f9d73dbd7c6ce8ede881a6e9c8e862e8b77a2128e5a62b1eef167c7e0d2f84c8d60405163ffffffff909116815260200160405180910390a35050505050505050505050565b60025460a060020a900460ff1681565b60005433600160a060020a03908116911614612e1057600080fd5b61016060405190810160409081526001825267ffffffffffffffff808e1660208085019190915263ffffffff808f16848601528d811660608601528c811660808601528b811660a08601528a811660c086015289811660e0860152888116610100860152878116610120860152918616610140850152908f1660009081526003909152208151815460ff19169015151781556020820151815467ffffffffffffffff919091166101000268ffffffffffffffff00199091161781556040820151815463ffffffff919091166901000000000000000000026cffffffff000000000000000000199091161781556060820151815463ffffffff919091166d01000000000000000000000000000270ffffffff00000000000000000000000000199091161781556080820151815463ffffffff91909116710100000000000000000000000000000000000274ffffffff00000000000000000000000000000000001990911617815560a0820151815463ffffffff9190911675010000000000000000000000000000000000000000000278ffffffff0000000000000000000000000000000000000000001990911617815560c0820151815463ffffffff9190911660c860020a027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff90911617815560e082015160018201805463ffffffff191663ffffffff929092169190911790556101008201518160010160046101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160010160086101000a81548163ffffffff021916908363ffffffff1602179055506101408201516001918201805467ffffffffffffffff929092166c010000000000000000000000000273ffffffffffffffff0000000000000000000000001990921691909117905554600160a060020a03169050630bd6c7696000600c8f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561312357600080fd5b6102c65a03f1151561313457600080fd5b50505060405180519a505063ffffffff8a16151561326d57600154600160a060020a0316630647b1066000600b8f63ffffffff861660405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156131c057600080fd5b6102c65a03f115156131d157600080fd5b505050600160009054906101000a9004600160a060020a0316600160a060020a0316630647b1066000600c8f6001800260405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561325857600080fd5b6102c65a03f1151561326957600080fd5b5050505b505050505050505050505050565b600154600090600160a060020a0316630bd6c76982600685826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561106157600080fd5b600254600160a060020a031681565b6000806000613307615d41565b61330f615dd2565b613317615ce3565b6001805461338d91600160a060020a0390911690630bd6c769906000908b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b925082604001516001805460ff9290921614965061341090600160a060020a0316630bd6c769600060028b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9150815160015490955061348990600160a060020a0316630bd6c769600060048b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156123d657600080fd5b90508051959794965050505050565b6134a0615de9565b60008080600160a060020a03861615156134b957600080fd5b6134c2866137c0565b9250846008019150828211156134d6578291505b50835b818110156135915760018054600160a060020a031690630bd6c769908890600390850160006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561355057600080fd5b6102c65a03f1151561356157600080fd5b50505060405180519050848683036008811061357957fe5b63ffffffff90921660209290920201526001016134d9565b50505092915050565b60025460009060a060020a900460ff16156135b457600080fd5b6135bd83613657565b9050600063ffffffff8216116135d257600080fd5b6135df83336001856144ff565b60015460001990910190600160a060020a0316630647b1066000600b8663ffffffff861660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925261ffff1660448301526064820152608401600060405180830381600087803b15156109c357600080fd5b600154600090600160a060020a0316630bd6c76982600b85826040516020015260405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915261ffff166044820152606401602060405180830381600087803b151561106157600080fd5b600054600160a060020a031681565b60008060008060008060008060006136eb615d41565b6001805461376191600160a060020a0390911690630bd6c769906000908f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b90506001815160ff1610159950806040015160ff166001149250806080015198508060a0015197508060c0015196508060e001519550806101000151945080610140015193506137b08b6151fe565b9150509193959799909294969850565b600080600160a060020a03831615156137d857600080fd5b600154600160a060020a0316630bd6c7698460036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561384157600080fd5b6102c65a03f1151561385257600080fd5b5050506040518051949350505050565b61386a615ce3565b613872615ce3565b61387a615e12565b6000613884615ce3565b61388c615ce3565b600060018815151461389f5760056138a2565b60005b60ff16935060056040518059106138b65750595b9080825280602002602001820160405250925060056040518059106138d85750595b90808252806020026020018201604052509150600090505b60058163ffffffff1610156139cf5760015461396e90600160a060020a0316630bd6c7698b600863ffffffff8616890160006040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b94508451838263ffffffff168151811061398457fe5b600160a060020a039092166020928302909101820152850151828263ffffffff16815181106139af57fe5b67ffffffffffffffff9092166020928302909101909101526001016138f0565b509097909650945050505050565b6139e5615d41565b6139ed615dd2565b60025460a060020a900460ff1615613a0457600080fd5b60018054613a7a91600160a060020a0390911690630bd6c7699060009087826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b91506000825160ff1611613a8d57600080fd5b816040015160ff166001141515613aa357600080fd5b600154613b1590600160a060020a0316630bd6c7696000600287826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9050600160a060020a0333168151600160a060020a031614613b3657600080fd5b60006040830181905260018054600160a060020a031691630647b1069186613b5d87614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515613bb457600080fd5b6102c65a03f11515613bc557600080fd5b50505033600160a060020a03167f1fb384cbe837fb1441757fd8f31fa39bd2364252604125b500e1897ae8e555348460405163ffffffff909116815260200160405180910390a2505050565b60005433600160a060020a03908116911614613c2c57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054819033600160a060020a03908116911614613c7957600080fd5b600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561106157600080fd5b60005433600160a060020a03908116911614613cfd57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b613d34615ce3565b613d3c615cf5565b60025460009060a060020a900460ff1615613d5657600080fd5b60005433600160a060020a03908116911614613d7157600080fd5b613d7a84614c0b565b9093509150600090505b8160e0015163ffffffff16811015613e2f57600154600160a060020a0316630647b10685600884613dc9888281518110613dba57fe5b90602001906020020151615285565b60405163ffffffff86811660e060020a028252949094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515613e1357600080fd5b6102c65a03f11515613e2457600080fd5b505050600101613d84565b50505050565b613e3d615d41565b613e45615d41565b613e4d615ce3565b838152613e6181600063ffffffff6152d416565b60ff168252613e7781600263ffffffff6152d416565b60ff166040830152613e9081600463ffffffff6152f416565b63ffffffff9081166080840152613eac9082906008906152f416565b63ffffffff90811660a0840152613ec8908290600c906152f416565b63ffffffff90811660c0840152613ee49082906010906152f416565b63ffffffff90811660e0840152613f0090829060149061531716565b61ffff16610100830152613f1b81601863ffffffff61533816565b67ffffffffffffffff166101408301525092915050565b613f3a615cf5565b613f42615cf5565b613f4a615ce3565b838152613f5e81600063ffffffff6152d416565b60ff168252613f7481600163ffffffff6152d416565b60ff166020830152613f8d81600263ffffffff6152d416565b60ff166040830152613fa681600363ffffffff6152d416565b60ff166060830152613fbf81600463ffffffff61535f16565b69ffffffffffffffffffff166080830152613fe181600e63ffffffff6152d416565b60ff1660a0830152613ffa81600f63ffffffff6152f416565b63ffffffff90811660c08401526140169082906013906152f416565b63ffffffff90811660e08401526140329082906017906152d416565b60ff166101008301525092915050565b61404a615dd2565b614052615dd2565b61405a615ce3565b83815261406e81600063ffffffff61538816565b600160a060020a0316825261408a81601463ffffffff6152f416565b63ffffffff1660208301525092915050565b6140a5816153ae565b600254600160a060020a0316637e638974610240830151836102600151846102800151856102a0015160006040516060015260405160e060020a63ffffffff87160281526004810194909452602484019290925260448301526064820152608401606060405180830381600087803b151561411f57600080fd5b6102c65a03f1151561413057600080fd5b505050604051805190602001805190602001805167ffffffffffffffff166103c085015250600790810b810b61034084015290810b900b610320820152614176816153d5565b600a340461038082019081525134036103a0820152600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156141f457600080fd5b6102c65a03f1151561420557600080fd5b50505060405180519050610380820181815101905250600154600160a060020a0316630bd6c769600060066102c085015160006040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561428f57600080fd5b6102c65a03f115156142a057600080fd5b505050604051805190506103a0820181815101905250600154600160a060020a0316630647b106600060058161038086015160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561432257600080fd5b6102c65a03f1151561433357600080fd5b5050600154600160a060020a03169050630647b106600060066102c0850151856103a0015160405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156143af57600080fd5b6102c65a03f115156143c057600080fd5b5050600154600160a060020a03169050630647b106600060076102c08501516143ed866102200151614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561444457600080fd5b6102c65a03f1151561445557600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f19350505050151561448d57600080fd5b33600160a060020a03167fbc6a49a3bfd3c950d55a640741c984eb090baca50cd8433c70b74bd2617950ab826102c0015183610320015184610340015160405163ffffffff9093168352600791820b820b6020840152810b900b6040808301919091526060909101905180910390a250565b6000614509615d9d565b6000806000614516615d41565b6000614520615dd2565b61ffff8c166000908152600360205260409020805490985060ff16151561454657600080fd5b8915614568578754610100900467ffffffffffffffff16341461456857600080fd5b6001546145d490600160a060020a0316630bd6c76960008080806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c4557600080fd5b600154909750600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561464057600080fd5b6102c65a03f1151561465157600080fd5b50505060405180519650879050805160010163ffffffff169052865194506146788b6137c0565b600180855261ffff8e16610100860152600060408601520193506002424189516000604051602001526040518084815260200183600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018263ffffffff1663ffffffff1660e060020a028152600401935050505060206040518083038160008661646e5a03f1151561470c57600080fd5b505060405180518954909350614754915063ffffffff690100000000000000000082048116916d01000000000000000000000000009004168460005b1a60f860020a026157e5565b63ffffffff908116608085015288546147a1917101000000000000000000000000000000000082048116917501000000000000000000000000000000000000000000900416846001614748565b63ffffffff90811660a0850152885460018a01546147cd9260c860020a90920482169116846002614748565b63ffffffff90811660c0850152600189015461480391640100000000820481169168010000000000000000900416846003614748565b63ffffffff90811660e08501526001898101546c01000000000000000000000000900467ffffffffffffffff16610140860152600160a060020a038d8116845260001987018316602085015290543498909801971690630647b106908d9060039088908a1660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156148b857600080fd5b6102c65a03f115156148c957600080fd5b5050600154600160a060020a03169050630647b1068c600360008860405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561493457600080fd5b6102c65a03f1151561494557600080fd5b505060018054600160a060020a03169150630647b106906000908861496988614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156149c057600080fd5b6102c65a03f115156149d157600080fd5b5050600154600160a060020a03169050630647b10660006002886149f4866151c7565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515614a4b57600080fd5b6102c65a03f11515614a5c57600080fd5b5050600154600160a060020a03169050630647b10660008080614a7e8c6150d0565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515614ace57600080fd5b6102c65a03f11515614adf57600080fd5b5050508915614b9857600154600160a060020a0316630647b10660006005818a60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515614b4f57600080fd5b6102c65a03f11515614b6057600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f193505050501515614b9857600080fd5b8a600160a060020a03167fea0aee148209a01ccf8bff07fa316fc18ab073d469a1c9870818b3e5913ff0e38d878c60405161ffff909316835263ffffffff919091166020830152600160a060020a03166040808301919091526060909101905180910390a2505050505050505050505050565b614c13615ce3565b614c1b615cf5565b600154600090614c8f90600160a060020a0316630bd6c76983600788826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b9150600b604051805910614ca05750595b908082528060200260200182016040528015614cd657816020015b614cc3615e12565b815260200190600190039081614cbb5790505b509250600090505b8160e0015163ffffffff16811015614d7557600154614d5790600160a060020a0316630bd6c7698660088560006040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b838281518110614d6357fe5b60209081029091010152600101614cde565b614d83838360e001516157fc565b50915091565b600084614d978686856157e5565b038301925084831080614da957508383115b15614db2578392505b50909392505050565b600084614dc98686856157e5565b038303925084831080614ddb57508383115b15614db25750929392505050565b6000614df3615ce3565b614e086000845183919063ffffffff61594316565b614e206002846040015183919063ffffffff61594316565b614e386004846080015183919063ffffffff61596216565b614e5060088460a0015183919063ffffffff61596216565b614e68600c8460c0015183919063ffffffff61596216565b614e8060108460e0015183919063ffffffff61596216565b614e99601484610100015183919063ffffffff61598116565b614eb2601884610140015183919063ffffffff6159a116565b80519392505050565b614ec3615e12565b614ecb615e12565b614ed3615ce3565b838152614ee781600063ffffffff61538816565b600160a060020a03168252614f0381601463ffffffff61533816565b67ffffffffffffffff166020830152614f2381601c63ffffffff6152f416565b63ffffffff1660408301525092915050565b6000614f3f615ce3565b614f546000845183919063ffffffff61594316565b614f6c6001846020015183919063ffffffff61594316565b614f846002846040015183919063ffffffff61594316565b614f9c6003846060015183919063ffffffff61594316565b614fb46004846080015183919063ffffffff6159c716565b614fcc600e8460a0015183919063ffffffff61594316565b614fe4600f8460c0015183919063ffffffff61596216565b614ffc60138460e0015183919063ffffffff61596216565b614eb2601784610100015183919063ffffffff61594316565b61501d615d9d565b615025615d9d565b61502d615ce3565b83815261504181600063ffffffff6152f416565b63ffffffff908116835261505a9082906004906152f416565b63ffffffff90811660208401526150769082906008906152d416565b60ff16604083015261508f81600963ffffffff6152d416565b60ff1660608301526150a881600a63ffffffff6152d416565b60ff1660808301526150c181600b63ffffffff6152d416565b60ff1660a08301525092915050565b60006150da615ce3565b6150ef6000845183919063ffffffff61596216565b6151076004846020015183919063ffffffff61596216565b61511f6008846040015183919063ffffffff61594316565b6151376009846060015183919063ffffffff61594316565b61514f600a846080015183919063ffffffff61594316565b614eb2600b8460a0015183919063ffffffff61594316565b6000615171615ce3565b614eb26000845183919063ffffffff6159c716565b61518e615ce3565b615196615ce3565b61519e615ce3565b8381526151b281600063ffffffff61535f16565b69ffffffffffffffffffff1682525092915050565b60006151d1615ce3565b6151e66000845183919063ffffffff6159ef16565b614eb26014846020015183919063ffffffff61596216565b6000615208615dd2565b60015461527a90600160a060020a0316630bd6c7696000600287826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b905080519392505050565b600061528f615ce3565b6152a46000845183919063ffffffff6159ef16565b6152bc6014846020015183919063ffffffff6159a116565b614eb2601c846040015183919063ffffffff61596216565b600063ffffffff6008830216835160029190910a900460ff169392505050565b600063ffffffff6008830216835160029190910a900463ffffffff169392505050565b600063ffffffff6008830216835160029190910a900461ffff169392505050565b600063ffffffff6008830216835160029190910a900467ffffffffffffffff169392505050565b600063ffffffff6008830216835160029190910a900469ffffffffffffffffffff169392505050565b600063ffffffff6008830216835160029190910a9004600160a060020a03169392505050565b6153b781615a14565b6153c081615a88565b6153c981615aff565b6153d281615b7a565b50565b6153dd615e12565b6153e5615e12565b6000806000856103600151600160a060020a031685526103c086015167ffffffffffffffff1660208601526102e086015163ffffffff166040860152600092505b85610220015160e0015163ffffffff168363ffffffff16101561558e576001546154b190600160a060020a0316630bd6c7696102c089015160088760006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b9350856103600151600160a060020a03168451600160a060020a0316141561558357836020015167ffffffffffffffff16866103c0015167ffffffffffffffff16101561557e57600154600160a060020a0316630647b1066102c088015160088661551b8a615285565b60405163ffffffff86811660e060020a02825294851660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561556957600080fd5b6102c65a03f1151561557a57600080fd5b5050505b6109d4565b600190920191615426565b600a86610220015160e0015163ffffffff16101561564f57600154600160a060020a0316630647b1066102c0880151600889610220015160e001516155d28a615285565b60405163ffffffff86811660e060020a02825294851660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561562057600080fd5b6102c65a03f1151561563157600080fd5b50505085610220015160e001805160010163ffffffff1690526109d4565b506000915081905063ffffffff5b85610220015160e0015163ffffffff168363ffffffff161015615720576001546156e890600160a060020a0316630bd6c7696102c089015160088760006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b93508167ffffffffffffffff16846020015167ffffffffffffffff16111561571557836020015191508290505b60019092019161565d565b63ffffffff808216146109d45760015461579b90600160a060020a0316630bd6c7696102c089015160088560006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b9350836020015167ffffffffffffffff16866103c0015167ffffffffffffffff1610156109d457600154600160a060020a0316630647b1066102c088015160088461551b8a615285565b60649183900360f860020a90910482900602040190565b806000805b506000905060015b8263ffffffff168163ffffffff16101561592b57848163ffffffff168151811061582f57fe5b906020019060200201516020015167ffffffffffffffff16856001830363ffffffff168151811061585c57fe5b906020019060200201516020015167ffffffffffffffff16111561592357846001820363ffffffff168151811061588f57fe5b9060200190602002015185600a815181106158a657fe5b602090810290910101528463ffffffff8216815181106158c257fe5b90602001906020020151856001830363ffffffff16815181106158e157fe5b6020908102909101015284600a815181106158f857fe5b90602001906020020151858263ffffffff168151811061591457fe5b60209081029091010152600191505b600101615809565b6000199092019181151561593e57611a3a565b615801565b63ffffffff600883021660020a60ff8216028381815117905250505050565b63ffffffff60088302811660020a908216028381815117905250505050565b63ffffffff600883021660020a61ffff8216028381815117905250505050565b63ffffffff600883021660020a67ffffffffffffffff8216028381815117905250505050565b63ffffffff600883021660020a69ffffffffffffffffffff8216028381815117905250505050565b63ffffffff600883021660020a600160a060020a038216028381815117905250505050565b615a1c615ce3565b615a316000835183919063ffffffff6159a116565b615a496008836020015183919063ffffffff6159a116565b615a616010836040015183919063ffffffff6159a116565b615a796018836060015183919063ffffffff6159a116565b80516102409092019190915250565b615a90615ce3565b615aa86000836080015183919063ffffffff6159a116565b615ac060088360a0015183919063ffffffff6159a116565b615ad860108360c0015183919063ffffffff6159a116565b615af060188360e0015183919063ffffffff6159a116565b80516102609092019190915250565b615b07615ce3565b615b20600083610100015183919063ffffffff6159a116565b615b39600883610120015183919063ffffffff6159a116565b615b52601083610140015183919063ffffffff6159a116565b615b6b601883610160015183919063ffffffff6159a116565b80516102809092019190915250565b615b82615ce3565b615b9b600083610180015183919063ffffffff6159a116565b615bb46008836101a0015183919063ffffffff6159a116565b615bcd6010836101c0015183919063ffffffff6159a116565b80516102a09092019190915250565b6106406040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c08201526101e08101615c62615d41565b8152602001615c6f615dd2565b8152602001615c7c615cf5565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a09091015290565b60206040519081016040526000815290565b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b6101606040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b604080519081016040526000808252602082015290565b6101006040519081016040526008815b600081526000199091019060200181615df95790505090565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a72305820ea854ea4a55143f54b23e92811990e289365f5cf1940197a6d67b24e17a1232a0029

   Swarm Source:
bzzr://ea854ea4a55143f54b23e92811990e289365f5cf1940197a6d67b24e17a1232a

 

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