Contract 0xF7a6E15dfD5cdD9ef12711Bd757a9b6021ABf643

 

TxHash Block Age From To Value [TxFee]
0x0bb51393043a380b8b68bcd79683692d7d0efe822fac21f60b0e774760e507c074014321 day 2 hrs ago0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d799 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000140181
0x1115f8023ab17c22033f50cf4bc929815f0b09303d2b65f82b222a7bde04471474014171 day 2 hrs ago0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d799 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000142808
0x2c4a1c112f0564f120a8eeb1434492dc6cb76a4c5f04acd59898bfdec03dfe3a73986891 day 13 hrs ago0x0ad9fb61a07bac25625382b63693644497f1b204 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.00092582
0x3c2f745684810d44bebb5f52418062578a64a72f8a5fc358144806beb9b76cdc73938632 days 7 hrs ago0x5cf548d8602cff76627a161863b6868b64979501 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430.008 Ether0.000164218
0x773fedb920d5cc6cfc5183173dc20422cfa924a16794a3c47009ae993517c23673938142 days 7 hrs ago0x5cf548d8602cff76627a161863b6868b64979501 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430.008 Ether0.0001698
0xa585cccd81cc7f1a298412370ede7099f749220dc19d38e209b6248d2df2073c73932662 days 9 hrs ago0x749eda001db9351250652abb79d8c30f915159c9 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.00025089722
0xc3385ce69a7eb9ecab9eead7c2d8928b63219158d9086087519651c9677b84ff73932502 days 9 hrs ago0x749eda001db9351250652abb79d8c30f915159c9 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000125164
0x21db3e798f4108c29b66eac44f70a41b33aecd92107449caff76935a9241f00173932112 days 9 hrs ago0x749eda001db9351250652abb79d8c30f915159c9 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000187746
0x49e1cdd4f2e5098a465af6d3922c54945d6a79f3dee584356207f63be437684373931912 days 9 hrs ago0x749eda001db9351250652abb79d8c30f915159c9 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000231455
0x9ef2d2e8495064a67be3454b85ce3357eefe2b8bd3210edde8f3b140c19a4b1373831283 days 23 hrs ago0x1b8e15229f052b42c1bdff4a7d131fa600447972 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.0001821521
0xdf94294dffb35e6d57b6e6e06f05645c7e89ad58bb3f5edbe13c0e2dd6caa54f73780864 days 18 hrs ago0x205ee1373fed0b38da12a3f4d1cbab5694c8783a IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430.008 Ether0.000257589
0xb64e946cd2a0cf11db4a397ac6869c338bba7ea7ce54a82493413047db18fb0b73779944 days 18 hrs ago0x205ee1373fed0b38da12a3f4d1cbab5694c8783a IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000420351
0x3bb06a59230a0c45605d5542737ff425227de673800c3ed55de3421b43021c3e73748595 days 6 hrs ago0xb66987c0a979faa73655384677880f11e8d474dd IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000108764
0x42ff3264807ea45a375883d4878726a9d6ee3100ed2d627e9b461579223f89c773741685 days 8 hrs ago0x48376251b60217e60c3cd4d73c58f5f2edda1161 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.00006396768
0x67a7727974aa9d123fa78eed3e9ea91ba0b808d612330b449a409939d94a4bf473740615 days 9 hrs ago0x749eda001db9351250652abb79d8c30f915159c9 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000231455
0xaf59c933d5f5eae2b05b97a1849b998c3cc366864028b1796d7a47b4bab78ce473732725 days 12 hrs ago0x1ec81b4a63d368f667fc107c93c9e2974dc222ca IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000108636
0xc78afe58376d06974da178950b35a09f3cdd7f47af9c23860861e414d7a91e7673730625 days 12 hrs ago0xb0ff0f641498cf0069d72d3b4ddcd8fc0e3d0d97 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000108764
0xa5ae52d07543b5cf4c782ec6901f859c6a8b52716269a2ad943005538bc36c3c73682836 days 6 hrs ago0x48376251b60217e60c3cd4d73c58f5f2edda1161 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000064031808
0x0dcce305148bf19f4405b7fc805ac62f37e98a126a3d625fc04b699d0f7423ae73675596 days 9 hrs ago0x27a6dbe18ee83b1ecf397002a1bacde7a26c006d IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000325908
0x0d00c0d9af327a3d74f75cb56cae33203086d9095e1580a3b40e76588b4a3de773657016 days 16 hrs ago0x0698ce0aba84e0f1ceb5c0b4e41e23753169b923 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000108764
0x0b027e1ba2c1e58e84a50eb8103b9cbacf7e38545b8aca1f47e9110d89976e2773570878 days 33 mins ago0xa92360b4e3895dce3978f603ee76ac1c400717c4 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000231455
0xdb8dd534a4421e833b4791b135cf429bfd5d92663a6724841a00c64f89d919cf73557718 days 5 hrs ago0xa92360b4e3895dce3978f603ee76ac1c400717c4 IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000156455
0xda526b6037adf2a72837e6e7b831e480983a7f20407b20353e704e2c9fa4aa3e73552808 days 7 hrs ago0x00b53914813af759c2b508801a98a5e763e5cbca IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000138681
0xe64a83d313d389535a9a1bced0a0f1d53cb146943312bf60c0a6a2e7dea3e17873529358 days 15 hrs ago0xb7ac92b4c5f1a5a197c5026ae14cfefb9b3dcdff IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000250328
0xe9be7047302ec8d718978841e9cbe77f3b663c900a36cc3b4db9871522ac1a9d73529148 days 16 hrs ago0xb7ac92b4c5f1a5a197c5026ae14cfefb9b3dcdff IN  0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000092582
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x416a046d9f4d88340059525f9fd4090649eb82c5ed47a3ed3e1586a333fe4e2a73938882 days 7 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x13824a87ee2d08c927ed78156a4cec6c7ab72f4db43536a18bbeba8eb299146d73938262 days 7 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x20219a9decdedba8b25786a2eb27dd284feab1ebf4fc78168e2dd25ef4e07f9a73527148 days 16 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xeff837d0108e86a9f2fdbce38483afbe9368fe33f21af9929dfcfa903055381173519798 days 19 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x6ddedd1aefce65bba9484b5970a0d8190de181e97c26d5747f6e9dab534aab6273511808 days 22 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x1bd611c08e0b4be812d626e7f305f9b2b3d769e5adc7f71ea3f3d554adcd222b73502689 days 1 hr ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x9af6e0da839da79a98e5344c945fc97e164c54671183598791314cc9eb9cecb8731567814 days 11 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x60fdfb53792047b2d4a11e87e568e4375f3d9cbd00a4f75740cfd9a72f07669c730812115 days 15 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x5f16619debeebe1945151c6467dd3e5443add87a0573fec2c47791af5204a81e730729315 days 18 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x1675d8e147a2d39be5198f2107c3999416bbbf09d2b227f4df0b4ee33beb0982727284721 days 19 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xc868e75e00fd5533f8b9c7cb333750a0c5633be680469e72603fee4bed11420e727248821 days 21 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xdbccdc7df1bca22bd961a9a41eeb69af6c9a67b941a01112c9d436615f97c3ec727246721 days 21 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x0f9d7def7733b6d810002fb6b23fea9586faa6319ce69f8dce18fd968d326222726480123 days 17 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x741901f7f2a68561172059020fd7f966c1d595f375f6bc38628cec550682cfe0726111024 days 13 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x3efd36566e08e26f1654ed7236337601545a11a73b9dad500f127532e80abe8a725935124 days 23 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x559fd007253f2dd364a3cfa7858706cce189662c29d435b7726671dfb295ad94725915125 days 53 mins ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x3b0ae48092896b4f23b18a6fe4a4e9f597be4db550e75282bc5935145ed95d81725861025 days 3 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xe9809429a7195a536b066f0b3426644c024772876df9b0954c4ee2d55d6e2f5e725490226 days 20 mins ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x0a8a975eb6a20a2701211b6e4d1f08f8269532db6e9fc954fa63917c051c87da724229228 days 23 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x79159f62341e28453e292f288e026edded987e311e81033c1b956de1ed4521c9723746630 days 2 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xececc7274fe8a620c94c8b4371d980d5d11d1cc4f0f1aa096e29b2578bfc5150723615530 days 10 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xe2e8784e9714df4fe967b5fa680411cbba8c41ba27e8f893b9400dc596ceea42722276133 days 15 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x8a72e9ee6c6548714ff44193e7115fd53af5a5ab920267c7364365dddd5e67ab714715249 days 19 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x507d8e9039a8395f88bf59836b3c0a7c779c49169ebb031eefd1ced08f19e8cf714713249 days 19 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xcdb41c6a2ca93d930efe64176075ffa8237fefd7e485a819a005e9bb183e7de3714712549 days 19 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
BotCore

Compiler Version
v0.4.20-nightly.2017.12.20+commit.efc198d5

Optimization Enabled:
No

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.11;


contract Ownable {
    address public owner;

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}


contract ERC721 {
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}

contract GeneScienceInterface {
    function isGeneScience() public pure returns (bool);
    function mixGenes(uint256 genes1, uint256 genes2, uint256 targetBlock) public returns (uint256);
}

contract BotAccessControl {
    event ContractUpgrade(address newContract);
    address public ceoAddress;
    address public cfoAddress;
    address public cooAddress;
    bool public paused = false;

    modifier onlyCEO() {
        require(msg.sender == ceoAddress);
        _;
    }

    modifier onlyCFO() {
        require(msg.sender == cfoAddress);
        _;
    }

    modifier onlyCOO() {
        require(msg.sender == cooAddress);
        _;
    }

    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress ||
            msg.sender == ceoAddress ||
            msg.sender == cfoAddress
        );
        _;
    }

    function setCEO(address _newCEO) external onlyCEO {
        require(_newCEO != address(0));

        ceoAddress = _newCEO;
    }

    function setCFO(address _newCFO) external onlyCEO {
        require(_newCFO != address(0));

        cfoAddress = _newCFO;
    }

    function setCOO(address _newCOO) external onlyCEO {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCEO whenPaused {
        paused = false;
    }
}


contract BotBase is BotAccessControl {
    event Birth(
      address owner,
      uint256 botId,
      uint256 matronId,
      uint256 sireId,
      uint256 genes,
      uint256 birthTime
    );

    event Transfer(address from, address to, uint256 tokenId);

    struct Bot {
        uint256 genes;
        uint64 birthTime;
        uint64 cooldownEndBlock;
        uint32 matronId;
        uint32 sireId;
        uint32 siringWithId;
        uint16 cooldownIndex;
        uint16 generation;
    }

    uint32[14] public cooldowns = [
        uint32(1 minutes),
        uint32(2 minutes),
        uint32(5 minutes),
        uint32(10 minutes),
        uint32(30 minutes),
        uint32(1 hours),
        uint32(2 hours),
        uint32(4 hours),
        uint32(8 hours),
        uint32(16 hours),
        uint32(1 days),
        uint32(2 days),
        uint32(4 days),
        uint32(7 days)
    ];

    uint256 public secondsPerBlock = 15;

    Bot[] bots;

    mapping (uint256 => address) public botIndexToOwner;
    mapping (address => uint256) ownershipTokenCount;
    mapping (uint256 => address) public botIndexToApproved;
    mapping (uint256 => address) public sireAllowedToAddress;
    uint32 public destroyedBots;
    SaleClockAuction public saleAuction;
    SiringClockAuction public siringAuction;

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        if (_to == address(0)) {
            delete botIndexToOwner[_tokenId];
        } else {
            ownershipTokenCount[_to]++;
            botIndexToOwner[_tokenId] = _to;
        }
        if (_from != address(0)) {
            ownershipTokenCount[_from]--;
            delete sireAllowedToAddress[_tokenId];
            delete botIndexToApproved[_tokenId];
        }
        Transfer(_from, _to, _tokenId);
    }

    function _createBot(
        uint256 _matronId,
        uint256 _sireId,
        uint256 _generation,
        uint256 _genes,
        address _owner
    )
        internal
        returns (uint)
    {
        require(_matronId == uint256(uint32(_matronId)));
        require(_sireId == uint256(uint32(_sireId)));
        require(_generation == uint256(uint16(_generation)));

        uint16 cooldownIndex = uint16(_generation / 2);
        if (cooldownIndex > 13) {
            cooldownIndex = 13;
        }

        Bot memory _bot = Bot({
            genes: _genes,
            birthTime: uint64(now),
            cooldownEndBlock: 0,
            matronId: uint32(_matronId),
            sireId: uint32(_sireId),
            siringWithId: 0,
            cooldownIndex: cooldownIndex,
            generation: uint16(_generation)
        });
        uint256 newBotId = bots.push(_bot) - 1;

        require(newBotId == uint256(uint32(newBotId)));

        Birth(
            _owner,
            newBotId,
            uint256(_bot.matronId),
            uint256(_bot.sireId),
            _bot.genes,
            uint256(_bot.birthTime)
       );

        _transfer(0, _owner, newBotId);

        return newBotId;
    }

    function _destroyBot(uint256 _botId) internal {
        require(_botId > 0);
        address from = botIndexToOwner[_botId];
        require(from != address(0));
        destroyedBots++;
        _transfer(from, 0, _botId);
    }

    function setSecondsPerBlock(uint256 secs) external onlyCLevel {
        require(secs < cooldowns[0]);
        secondsPerBlock = secs;
    }
}


contract BotExtension is BotBase {
    event Lock(uint256 botId, uint16 mask);
    mapping (address => bool) extensions;
    mapping (uint256 => uint16) locks;
    uint16 constant LOCK_BREEDING = 1;
    uint16 constant LOCK_TRANSFER = 2;
    uint16 constant LOCK_ALL = LOCK_BREEDING | LOCK_TRANSFER;

    function addExtension(address _contract) external onlyCEO {
        extensions[_contract] = true;
    }

    function removeExtension(address _contract) external onlyCEO {
        delete extensions[_contract];
    }

    modifier onlyExtension() {
        require(extensions[msg.sender] == true);
        _;
    }

    function extCreateBot(
        uint256 _matronId,
        uint256 _sireId,
        uint256 _generation,
        uint256 _genes,
        address _owner
    )
        public
        onlyExtension
        returns (uint)
    {
        return _createBot(_matronId, _sireId, _generation, _genes, _owner);
    }

    function extDestroyBot(uint256 _botId)
        public
        onlyExtension
    {
        require(locks[_botId] == 0);

        _destroyBot(_botId);
    }

    function extLockBot(uint256 _botId, uint16 _mask)
        public
        onlyExtension
    {
        _lockBot(_botId, _mask);
    }

    function _lockBot(uint256 _botId, uint16 _mask)
        internal
    {
        require(_mask > 0);

        uint16 mask = locks[_botId];
        require(mask & _mask == 0);

        if (_mask & LOCK_BREEDING > 0) {
            Bot storage bot = bots[_botId];
            require(bot.siringWithId == 0);
        }

        if (_mask & LOCK_TRANSFER > 0) {
            address owner = botIndexToOwner[_botId];
            require(owner != address(saleAuction));
            require(owner != address(siringAuction));
        }

        mask |= _mask;

        locks[_botId] = mask;

        Lock(_botId, mask);
    }

    function extUnlockBot(uint256 _botId, uint16 _mask)
        public
        onlyExtension
        returns (uint16)
    {
        _unlockBot(_botId, _mask);
    }

    function _unlockBot(uint256 _botId, uint16 _mask)
        internal
    {
        require(_mask > 0);

        uint16 mask = locks[_botId];
        require(mask & _mask == _mask);
        mask ^= _mask;

        locks[_botId] = mask;

        Lock(_botId, mask);
    }

    function extGetLock(uint256 _botId)
        public
        view
        onlyExtension
        returns (uint16)
    {
        return locks[_botId];
    }
}


contract BotOwnership is BotExtension, ERC721 {
    string public constant name = "CryptoBots";
    string public constant symbol = "CBT";

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return botIndexToOwner[_tokenId] == _claimant;
    }

    function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return botIndexToApproved[_tokenId] == _claimant;
    }

    function _approve(uint256 _tokenId, address _approved) internal {
        botIndexToApproved[_tokenId] = _approved;
    }

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

    function transfer(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_to != address(saleAuction));
        require(_to != address(siringAuction));
        require(_owns(msg.sender, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _transfer(msg.sender, _to, _tokenId);
    }

    function approve(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _approve(_tokenId, _to);
        Approval(msg.sender, _to, _tokenId);
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public view returns (uint) {
        return bots.length - destroyedBots;
    }

    function ownerOf(uint256 _tokenId)
        external
        view
        returns (address owner)
    {
        owner = botIndexToOwner[_tokenId];
        require(owner != address(0));
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) {
        uint256 tokenCount = balanceOf(_owner);

        if (tokenCount == 0) {
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 totalBots = bots.length - 1;
            uint256 resultIndex = 0;
            uint256 botId;
            for (botId = 0; botId <= totalBots; botId++) {
                if (botIndexToOwner[botId] == _owner) {
                    result[resultIndex] = botId;
                    resultIndex++;
                }
            }

            return result;
        }
    }
}


contract BotBreeding is BotOwnership {
    event Pregnant(address owner, uint256 matronId, uint256 sireId, uint256 cooldownEndBlock);
    uint256 public autoBirthFee = 2 finney;
    uint256 public pregnantBots;
    GeneScienceInterface public geneScience;

    function setGeneScienceAddress(address _address) external onlyCEO {
        GeneScienceInterface candidateContract = GeneScienceInterface(_address);
        require(candidateContract.isGeneScience());
        geneScience = candidateContract;
    }

    function _isReadyToBreed(uint256 _botId, Bot _bot) internal view returns (bool) {
        return
            (_bot.siringWithId == 0) &&
            (_bot.cooldownEndBlock <= uint64(block.number)) &&
            (locks[_botId] & LOCK_BREEDING == 0);
    }

    function _isSiringPermitted(uint256 _sireId, uint256 _matronId) internal view returns (bool) {
        address matronOwner = botIndexToOwner[_matronId];
        address sireOwner = botIndexToOwner[_sireId];
        return (matronOwner == sireOwner || sireAllowedToAddress[_sireId] == matronOwner);
    }

    function _triggerCooldown(Bot storage _bot) internal {
        _bot.cooldownEndBlock = uint64((cooldowns[_bot.cooldownIndex]/secondsPerBlock) + block.number);
        if (_bot.cooldownIndex < 13) {
            _bot.cooldownIndex += 1;
        }
    }

    function approveSiring(address _addr, uint256 _sireId)
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _sireId));
        sireAllowedToAddress[_sireId] = _addr;
    }

    function setAutoBirthFee(uint256 val) external onlyCOO {
        autoBirthFee = val;
    }

    function _isReadyToGiveBirth(Bot _matron) private view returns (bool) {
        return (_matron.siringWithId != 0) && (_matron.cooldownEndBlock <= uint64(block.number));
    }

    function isReadyToBreed(uint256 _botId)
        public
        view
        returns (bool)
    {
        Bot storage bot = bots[_botId];
        return _botId > 0 && _isReadyToBreed(_botId, bot);
    }

    function isPregnant(uint256 _botId)
        public
        view
        returns (bool)
    {
        return _botId > 0 && bots[_botId].siringWithId != 0;
    }

    function _isValidMatingPair(
        Bot storage _matron,
        uint256 _matronId,
        Bot storage _sire,
        uint256 _sireId
    )
        private
        view
        returns(bool)
    {
        if (_matronId == _sireId) {
            return false;
        }
        if (_matron.matronId == _sireId || _matron.sireId == _sireId) {
            return false;
        }
        if (_sire.matronId == _matronId || _sire.sireId == _matronId) {
            return false;
        }
        if (_sire.matronId == 0 || _matron.matronId == 0) {
            return true;
        }
        if (_sire.matronId == _matron.matronId || _sire.matronId == _matron.sireId) {
            return false;
        }
        if (_sire.sireId == _matron.matronId || _sire.sireId == _matron.sireId) {
            return false;
        }
        return true;
    }

    function _canBreedWithViaAuction(uint256 _matronId, uint256 _sireId)
        internal
        view
        returns (bool)
    {
        Bot storage matron = bots[_matronId];
        Bot storage sire = bots[_sireId];
        return _isValidMatingPair(matron, _matronId, sire, _sireId);
    }

    function canBreedWith(uint256 _matronId, uint256 _sireId)
        external
        view
        returns(bool)
    {
        require(_matronId > 0);
        require(_sireId > 0);
        Bot storage matron = bots[_matronId];
        Bot storage sire = bots[_sireId];
        return _isValidMatingPair(matron, _matronId, sire, _sireId) &&
            _isSiringPermitted(_sireId, _matronId);
    }

    function _breedWith(uint256 _matronId, uint256 _sireId) internal {
        Bot storage sire = bots[_sireId];
        Bot storage matron = bots[_matronId];
        matron.siringWithId = uint32(_sireId);
        _triggerCooldown(sire);
        _triggerCooldown(matron);
        delete sireAllowedToAddress[_matronId];
        delete sireAllowedToAddress[_sireId];
        pregnantBots++;
        Pregnant(botIndexToOwner[_matronId], _matronId, _sireId, matron.cooldownEndBlock);
    }

    function breedWithAuto(uint256 _matronId, uint256 _sireId)
        external
        payable
        whenNotPaused
    {
        require(msg.value >= autoBirthFee);
        require(_owns(msg.sender, _matronId));
        require(_isSiringPermitted(_sireId, _matronId));
        Bot storage matron = bots[_matronId];
        require(_isReadyToBreed(_matronId, matron));
        Bot storage sire = bots[_sireId];
        require(_isReadyToBreed(_sireId, sire));
        require(_isValidMatingPair(
            matron,
            _matronId,
            sire,
            _sireId
        ));
        _breedWith(_matronId, _sireId);
    }

    function giveBirth(uint256 _matronId)
        external
        whenNotPaused
        returns(uint256)
    {
        Bot storage matron = bots[_matronId];
        require(matron.birthTime != 0);
        require(_isReadyToGiveBirth(matron));
        uint256 sireId = matron.siringWithId;
        Bot storage sire = bots[sireId];
        uint16 parentGen = matron.generation;
        if (sire.generation > matron.generation) {
            parentGen = sire.generation;
        }
        uint256 childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1);
        address owner = botIndexToOwner[_matronId];
        uint256 botId = _createBot(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);
        delete matron.siringWithId;
        pregnantBots--;
        msg.sender.send(autoBirthFee);
        return botId;
    }
}


contract ClockAuctionBase {
    struct Auction {
        address seller;
        uint128 startingPrice;
        uint128 endingPrice;
        uint64 duration;
        uint64 startedAt;
    }
    ERC721 public nonFungibleContract;
    uint256 public ownerCut;
    mapping (uint256 => Auction) tokenIdToAuction;
    event AuctionCreated(
      address seller,
      uint256 tokenId,
      uint256 startingPrice,
      uint256 endingPrice,
      uint256 creationTime,
      uint256 duration
    );
    event AuctionSuccessful(uint256 tokenId, uint256 totalPrice, address seller, address winner, uint256 time);
    event AuctionCancelled(uint256 tokenId, address seller, uint256 time);

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return (nonFungibleContract.ownerOf(_tokenId) == _claimant);
    }

    function _escrow(address _owner, uint256 _tokenId) internal {
        nonFungibleContract.transferFrom(_owner, this, _tokenId);
    }

    function _transfer(address _receiver, uint256 _tokenId) internal {
        nonFungibleContract.transfer(_receiver, _tokenId);
    }

    function _addAuction(uint256 _tokenId, Auction _auction) internal {
        require(_auction.duration >= 1 minutes);
        tokenIdToAuction[_tokenId] = _auction;
        AuctionCreated(
            _auction.seller,
            uint256(_tokenId),
            uint256(_auction.startingPrice),
            uint256(_auction.endingPrice),
            uint256(_auction.startedAt),
            uint256(_auction.duration)
        );
    }

    function _cancelAuction(uint256 _tokenId, address _seller) internal {
        _removeAuction(_tokenId);
        _transfer(_seller, _tokenId);
        AuctionCancelled(_tokenId, _seller, uint256(now));
    }

    function _bid(uint256 _tokenId, uint256 _bidAmount)
        internal
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        uint256 price = _currentPrice(auction);
        require(_bidAmount >= price);
        address seller = auction.seller;
        _removeAuction(_tokenId);
        if (price > 0) {
            uint256 auctioneerCut = _computeCut(price);
            uint256 sellerProceeds = price - auctioneerCut;
            seller.transfer(sellerProceeds);
        }
        uint256 bidExcess = _bidAmount - price;
        msg.sender.transfer(bidExcess);
        AuctionSuccessful(_tokenId, price, seller, msg.sender, uint256(now));
        return price;
    }

    function _removeAuction(uint256 _tokenId) internal {
        delete tokenIdToAuction[_tokenId];
    }

    function _isOnAuction(Auction storage _auction) internal view returns (bool) {
        return (_auction.startedAt > 0);
    }

    function _currentPrice(Auction storage _auction)
        internal
        view
        returns (uint256)
    {
        uint256 secondsPassed = 0;
        if (now > _auction.startedAt) {
            secondsPassed = now - _auction.startedAt;
        }
        return _computeCurrentPrice(
            _auction.startingPrice,
            _auction.endingPrice,
            _auction.duration,
            secondsPassed
        );
    }

    function _computeCurrentPrice(
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        uint256 _secondsPassed
    )
        internal
        pure
        returns (uint256)
    {
        if (_secondsPassed >= _duration) {
            return _endingPrice;
        } else {
            int256 totalPriceChange = int256(_endingPrice) - int256(_startingPrice);
            int256 currentPriceChange = totalPriceChange * int256(_secondsPassed) / int256(_duration);
            int256 currentPrice = int256(_startingPrice) + currentPriceChange;
            return uint256(currentPrice);
        }
    }

    function _computeCut(uint256 _price) internal view returns (uint256) {
        return _price * ownerCut / 10000;
    }
}


contract Pausable is Ownable {
    event Pause();
    event Unpause();
    bool public paused = false;

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() public onlyOwner whenNotPaused returns (bool) {
        paused = true;
        Pause();
        return true;
    }

    function unpause() public onlyOwner whenPaused returns (bool) {
        paused = false;
        Unpause();
        return true;
    }
}


contract ClockAuction is Pausable, ClockAuctionBase {
    function ClockAuction(address _nftAddress, uint256 _cut) public {
        require(_cut <= 10000);
        ownerCut = _cut;

        ERC721 candidateContract = ERC721(_nftAddress);
        nonFungibleContract = candidateContract;
    }

    function withdrawBalance() external {
        address nftAddress = address(nonFungibleContract);
        require(
            msg.sender == owner ||
            msg.sender == nftAddress
        );
        bool res = nftAddress.send(this.balance);
    }

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
        whenNotPaused
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(_owns(msg.sender, _tokenId));
        _escrow(msg.sender, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
        whenNotPaused
    {
        _bid(_tokenId, msg.value);
        _transfer(msg.sender, _tokenId);
    }

    function cancelAuction(uint256 _tokenId)
        external
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        address seller = auction.seller;
        require(msg.sender == seller);
        _cancelAuction(_tokenId, seller);
    }

    function cancelAuctionWhenPaused(uint256 _tokenId)
        external
        whenPaused
        onlyOwner
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        _cancelAuction(_tokenId, auction.seller);
    }

    function getAuction(uint256 _tokenId)
        external
        view
        returns
    (
        address seller,
        uint256 startingPrice,
        uint256 endingPrice,
        uint256 duration,
        uint256 startedAt
    )
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return (
            auction.seller,
            auction.startingPrice,
            auction.endingPrice,
            auction.duration,
            auction.startedAt
        );
    }

    function getCurrentPrice(uint256 _tokenId)
        external
        view
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return _currentPrice(auction);
    }

}


contract SiringClockAuction is ClockAuction {
    bool public isSiringClockAuction = true;

    function SiringClockAuction(address _nftAddr, uint256 _cut) public
        ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
    {
        require(msg.sender == address(nonFungibleContract));
        address seller = tokenIdToAuction[_tokenId].seller;
        _bid(_tokenId, msg.value);
        _transfer(seller, _tokenId);
    }

}


contract SaleClockAuction is ClockAuction {
    bool public isSaleClockAuction = true;
    uint256 public gen0SaleCount;
    uint256[5] public lastGen0SalePrices;

    function SaleClockAuction(address _nftAddr, uint256 _cut) public
        ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
    {
        address seller = tokenIdToAuction[_tokenId].seller;
        uint256 price = _bid(_tokenId, msg.value);
        _transfer(msg.sender, _tokenId);
        if (seller == address(nonFungibleContract)) {
            lastGen0SalePrices[gen0SaleCount % 5] = price;
            gen0SaleCount++;
        }
    }

    function averageGen0SalePrice() external view returns (uint256) {
        uint256 sum = 0;
        for (uint256 i = 0; i < 5; i++) {
            sum += lastGen0SalePrices[i];
        }
        return sum / 5;
    }

}


contract BotAuction is BotBreeding {
    function setSaleAuctionAddress(address _address) external onlyCEO {
        SaleClockAuction candidateContract = SaleClockAuction(_address);
        require(candidateContract.isSaleClockAuction());
        saleAuction = candidateContract;
    }

    function setSiringAuctionAddress(address _address) external onlyCEO {
        SiringClockAuction candidateContract = SiringClockAuction(_address);
        require(candidateContract.isSiringClockAuction());
        siringAuction = candidateContract;
    }

    function createSaleAuction(
        uint256 _botId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _botId));
        require(!isPregnant(_botId));
        _approve(_botId, saleAuction);
        saleAuction.createAuction(
            _botId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    function createSiringAuction(
        uint256 _botId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _botId));
        require(isReadyToBreed(_botId));
        _approve(_botId, siringAuction);
        siringAuction.createAuction(
            _botId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    function bidOnSiringAuction(
        uint256 _sireId,
        uint256 _matronId
    )
        external
        payable
        whenNotPaused
    {
        require(_owns(msg.sender, _matronId));
        require(isReadyToBreed(_matronId));
        require(_canBreedWithViaAuction(_matronId, _sireId));
        uint256 currentPrice = siringAuction.getCurrentPrice(_sireId);
        require(msg.value >= currentPrice + autoBirthFee);
        siringAuction.bid.value(msg.value - autoBirthFee)(_sireId);
        _breedWith(uint32(_matronId), uint32(_sireId));
    }

    function withdrawAuctionBalances() external onlyCLevel {
        saleAuction.withdrawBalance();
        siringAuction.withdrawBalance();
    }
}


contract BotMinting is BotAuction {
    uint256 public constant PROMO_CREATION_LIMIT = 5000;
    uint256 public constant GEN0_CREATION_LIMIT = 45000;
    uint256 public constant GEN0_STARTING_PRICE = 10 finney;
    uint256 public constant GEN0_AUCTION_DURATION = 1 days;
    uint256 public promoCreatedCount;
    uint256 public gen0CreatedCount;

    function createPromoBot(uint256 _genes, address _owner) external onlyCOO {
        address botOwner = _owner;
        if (botOwner == address(0)) {
            botOwner = cooAddress;
        }
        require(promoCreatedCount < PROMO_CREATION_LIMIT);

        promoCreatedCount++;
        _createBot(0, 0, 0, _genes, botOwner);
    }

    function createGen0Auction(uint256 _genes) external onlyCOO {
        require(gen0CreatedCount < GEN0_CREATION_LIMIT);

        uint256 botId = _createBot(0, 0, 0, _genes, address(this));
        _approve(botId, saleAuction);

        saleAuction.createAuction(
            botId,
            _computeNextGen0Price(),
            0,
            GEN0_AUCTION_DURATION,
            address(this)
        );

        gen0CreatedCount++;
    }

    function _computeNextGen0Price() internal view returns (uint256) {
        uint256 avePrice = saleAuction.averageGen0SalePrice();
        require(avePrice == uint256(uint128(avePrice)));
        uint256 nextPrice = avePrice + (avePrice / 2);
        if (nextPrice < GEN0_STARTING_PRICE) {
            nextPrice = GEN0_STARTING_PRICE;
        }
        return nextPrice;
    }
}


contract BotCore is BotMinting {
    address public newContractAddress;

    function BotCore() public {
        paused = true;
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
        _createBot(0, 0, 0, uint256(-1), msg.sender);
    }

    function setNewAddress(address _v2Address) external onlyCEO whenPaused {
        newContractAddress = _v2Address;
        ContractUpgrade(_v2Address);
    }

    function() external payable {
        require(
            msg.sender == address(saleAuction) ||
            msg.sender == address(siringAuction)
        );
    }

    function getBot(uint256 _id)
        external
        view
        returns (
        bool isGestating,
        bool isReady,
        uint256 cooldownIndex,
        uint256 nextActionAt,
        uint256 siringWithId,
        uint256 birthTime,
        uint256 matronId,
        uint256 sireId,
        uint256 generation,
        uint256 genes
    )
    {
        require(botIndexToOwner[_id] != address(0));
        Bot storage bot = bots[_id];
        isGestating = (bot.siringWithId != 0);
        isReady = (bot.cooldownEndBlock <= block.number);
        cooldownIndex = uint256(bot.cooldownIndex);
        nextActionAt = uint256(bot.cooldownEndBlock);
        siringWithId = uint256(bot.siringWithId);
        birthTime = uint256(bot.birthTime);
        matronId = uint256(bot.matronId);
        sireId = uint256(bot.sireId);
        generation = uint256(bot.generation);
        genes = bot.genes;
    }

    function unpause() public onlyCEO whenPaused {
        require(saleAuction != address(0));
        require(siringAuction != address(0));
        require(geneScience != address(0));
        require(newContractAddress == address(0));
        super.unpause();
    }

    function withdrawBalance() external onlyCFO {
        uint256 balance = this.balance;
        uint256 subtractFees = (pregnantBots + 1) * autoBirthFee;
        if (balance > subtractFees) {
            cfoAddress.send(balance - subtractFees);
        }
    }

    function destroyBot(uint256 _botId) external onlyCEO {
        require(locks[_botId] == 0);
        _destroyBot(_botId);
    }
}

Contract ABI

[{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"promoCreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"}],"name":"destroyBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_STARTING_PRICE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSiringAuctionAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"addExtension","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_botId","type":"uint256"}],"name":"isPregnant","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_AUCTION_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"siringAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"removeExtension","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGeneScienceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"botIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_mask","type":"uint16"}],"name":"extUnlockBot","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createSaleAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"sireAllowedToAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"_sireId","type":"uint256"}],"name":"canBreedWith","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createSiringAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"val","type":"uint256"}],"name":"setAutoBirthFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_sireId","type":"uint256"}],"name":"approveSiring","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pregnantBots","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"secs","type":"uint256"}],"name":"setSecondsPerBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getBot","outputs":[{"name":"isGestating","type":"bool"},{"name":"isReady","type":"bool"},{"name":"cooldownIndex","type":"uint256"},{"name":"nextActionAt","type":"uint256"},{"name":"siringWithId","type":"uint256"},{"name":"birthTime","type":"uint256"},{"name":"matronId","type":"uint256"},{"name":"sireId","type":"uint256"},{"name":"generation","type":"uint256"},{"name":"genes","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"destroyedBots","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_CREATION_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSaleAuctionAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_v2Address","type":"address"}],"name":"setNewAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"}],"name":"giveBirth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_botId","type":"uint256"}],"name":"extGetLock","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAuctionBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cooldowns","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"botIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"autoBirthFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_mask","type":"uint16"}],"name":"extLockBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"uint256"},{"name":"_owner","type":"address"}],"name":"createPromoBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"uint256"}],"name":"createGen0Auction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"_sireId","type":"uint256"},{"name":"_generation","type":"uint256"},{"name":"_genes","type":"uint256"},{"name":"_owner","type":"address"}],"name":"extCreateBot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_botId","type":"uint256"}],"name":"isReadyToBreed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PROMO_CREATION_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"}],"name":"extDestroyBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sireId","type":"uint256"},{"name":"_matronId","type":"uint256"}],"name":"bidOnSiringAuction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"gen0CreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"geneScience","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"_sireId","type":"uint256"}],"name":"breedWithAuto","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"matronId","type":"uint256"},{"indexed":false,"name":"sireId","type":"uint256"},{"indexed":false,"name":"cooldownEndBlock","type":"uint256"}],"name":"Pregnant","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"botId","type":"uint256"},{"indexed":false,"name":"mask","type":"uint16"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"botId","type":"uint256"},{"indexed":false,"name":"matronId","type":"uint256"},{"indexed":false,"name":"sireId","type":"uint256"},{"indexed":false,"name":"genes","type":"uint256"},{"indexed":false,"name":"birthTime","type":"uint256"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"}]

Contract Creation Code

60606040526000600260146101000a81548160ff0219169083151502179055506101c060405190810160405280603c63ffffffff1663ffffffff168152602001607863ffffffff1663ffffffff16815260200161012c63ffffffff1663ffffffff16815260200161025863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff168152602001610e1063ffffffff1663ffffffff168152602001611c2063ffffffff1663ffffffff16815260200161384063ffffffff1663ffffffff16815260200161708063ffffffff1663ffffffff16815260200161e10063ffffffff1663ffffffff1681526020016201518063ffffffff1663ffffffff1681526020016202a30063ffffffff1663ffffffff1681526020016205460063ffffffff1663ffffffff16815260200162093a8063ffffffff1663ffffffff16815250600390600e6200015692919062000830565b50600f60055566071afd498d0000600f5534156200017357600080fd5b6001600260146101000a81548160ff021916908315150217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200025460008060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff336200025b6401000000000262004cd1176401000000009004565b5062000a88565b60008062000268620008da565b60008863ffffffff16891415156200027f57600080fd5b8763ffffffff16881415156200029457600080fd5b8661ffff1687141515620002a757600080fd5b600287811515620002b457fe5b049250600d8361ffff161115620002ca57600d92505b610100604051908101604052808781526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018a63ffffffff1681526020018963ffffffff168152602001600063ffffffff1681526020018461ffff1681526020018861ffff1681525091506001600680548060010182816200034f91906200094e565b916000526020600020906002020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff1681141515620004a257600080fd5b7fa2950fd8c03e7518275ee57e05ca76c671969b5445b12b1aeea4b0b30195e5df8582846060015163ffffffff16856080015163ffffffff168660000151876020015167ffffffffffffffff16604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a16200057560008683620005846401000000000262004563176401000000009004565b80935050505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005f6576007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905562000698565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415156200078c57600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600a600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b82600e600701600890048101928215620008c75791602002820160005b838211156200089357835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200084d565b8015620008c55782816101000a81549063ffffffff021916905560040160208160030104928301926001030262000893565b505b509050620008d6919062000983565b5090565b6101006040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff1681525090565b8154818355818115116200097e576002028160020283600052602060002091820191016200097d9190620009b9565b5b505050565b620009b691905b80821115620009b257600081816101000a81549063ffffffff0219169055506001016200098a565b5090565b90565b62000a8591905b8082111562000a81576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff021916905550600201620009c0565b5090565b90565b6158228062000a986000396000f3006060604052600436106102f6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630519ce79146103ac57806305e455461461040157806306fdde031461042a578063095ea7b3146104b857806309f6d5b4146104fa5780630a0f81681461051d5780630e583df01461057257806314001f4c1461059b578063170ff3e1146105d457806318160ddd1461060d5780631940a9361461063657806319c2f2011461067157806321717ebf1461069a57806321ee102b146106ef57806323b872dd1461072857806324e7a38a1461078957806327ab9f20146107c257806327d7874c146108255780632ba73c151461085e5780633c4b07de146108975780633d7d3f5a146108e35780633f4ba83a1461092157806346116e6f1461093657806346d22c70146109995780634ad8c938146109dd5780634b85fd5514610a1b5780634dfff04f14610a3e5780634e0a337914610a805780634e4081ef14610ab95780635663896e14610ae25780635c975abb14610b055780635f70d9ac14610b325780635fd8c71014610bb057806361b6683c14610bc55780636352211e14610bfa578063680eba2714610c5d5780636af04a5714610c865780636fbde40d14610cdb57806370a0823114610d145780637158798814610d615780637a7d493714610d9a5780638456cb5914610dc35780638462151c14610dd857806388c2a0bf14610e665780638a653c9314610e9d57806391876e5714610edc57806395d89b4114610ef15780639d6fac6f14610f7f578063a8f8884d14610fc2578063a9059cbb14611025578063b047fb5014611067578063b0c35c05146110bc578063bf4a5485146110e5578063bf86e01314611115578063c3bea9af14611157578063d1b12b4e1461117a578063d3e6f49f146111eb578063defb958414611226578063e6cbe3511461124f578063e9b58225146112a4578063ed60ade6146112c7578063f1ca9410146112e8578063f2b47d5214611311578063f7d8c88314611366575b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039f5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156103aa57600080fd5b005b34156103b757600080fd5b6103bf611387565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561040c57600080fd5b6104146113ad565b6040518082815260200191505060405180910390f35b341561043557600080fd5b61043d6113b3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047d578082015181840152602081019050610462565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c357600080fd5b6104f8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506113ec565b005b341561050557600080fd5b61051b6004808035906020019091905050611501565b005b341561052857600080fd5b61053061159c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561057d57600080fd5b6105856115c1565b6040518082815260200191505060405180910390f35b34156105a657600080fd5b6105d2600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115cc565b005b34156105df57600080fd5b61060b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611703565b005b341561061857600080fd5b6106206117b9565b6040518082815260200191505060405180910390f35b341561064157600080fd5b61065760048080359060200190919050506117e0565b604051808215151515815260200191505060405180910390f35b341561067c57600080fd5b61068461182f565b6040518082815260200191505060405180910390f35b34156106a557600080fd5b6106ad611836565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106fa57600080fd5b610726600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061185c565b005b341561073357600080fd5b610787600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611909565b005b341561079457600080fd5b6107c0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a0d565b005b34156107cd57600080fd5b6107e36004808035906020019091905050611b44565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083057600080fd5b61085c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b77565b005b341561086957600080fd5b610895600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c51565b005b34156108a257600080fd5b6108c5600480803590602001909190803561ffff16906020019091905050611d2c565b604051808261ffff1661ffff16815260200191505060405180910390f35b34156108ee57600080fd5b61091f6004808035906020019091908035906020019091908035906020019091908035906020019091905050611d9d565b005b341561092c57600080fd5b610934611f05565b005b341561094157600080fd5b61095760048080359060200190919050506120fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109a457600080fd5b6109c3600480803590602001909190803590602001909190505061212f565b604051808215151515815260200191505060405180910390f35b34156109e857600080fd5b610a1960048080359060200190919080359060200190919080359060200190919080359060200190919050506121b7565b005b3415610a2657600080fd5b610a3c600480803590602001909190505061231e565b005b3415610a4957600080fd5b610a7e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612384565b005b3415610a8b57600080fd5b610ab7600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061240b565b005b3415610ac457600080fd5b610acc6124e6565b6040518082815260200191505060405180910390f35b3415610aed57600080fd5b610b0360048080359060200190919050506124ec565b005b3415610b1057600080fd5b610b18612640565b604051808215151515815260200191505060405180910390f35b3415610b3d57600080fd5b610b536004808035906020019091905050612653565b604051808b1515151581526020018a1515151581526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b3415610bbb57600080fd5b610bc3612822565b005b3415610bd057600080fd5b610bd861290e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610c0557600080fd5b610c1b6004808035906020019091905050612924565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c6857600080fd5b610c7061299d565b6040518082815260200191505060405180910390f35b3415610c9157600080fd5b610c996129a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610ce657600080fd5b610d12600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506129c9565b005b3415610d1f57600080fd5b610d4b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b00565b6040518082815260200191505060405180910390f35b3415610d6c57600080fd5b610d98600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b49565b005b3415610da557600080fd5b610dad612c66565b6040518082815260200191505060405180910390f35b3415610dce57600080fd5b610dd6612c6c565b005b3415610de357600080fd5b610e0f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612db0565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e52578082015181840152602081019050610e37565b505050509050019250505060405180910390f35b3415610e7157600080fd5b610e876004808035906020019091905050612ee8565b6040518082815260200191505060405180910390f35b3415610ea857600080fd5b610ebe6004808035906020019091905050613307565b604051808261ffff1661ffff16815260200191505060405180910390f35b3415610ee757600080fd5b610eef613391565b005b3415610efc57600080fd5b610f046135d0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f44578082015181840152602081019050610f29565b50505050905090810190601f168015610f715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610f8a57600080fd5b610fa06004808035906020019091905050613609565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610fcd57600080fd5b610fe36004808035906020019091905050613638565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561103057600080fd5b611065600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061366b565b005b341561107257600080fd5b61107a613813565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156110c757600080fd5b6110cf613839565b6040518082815260200191505060405180910390f35b34156110f057600080fd5b611113600480803590602001909190803561ffff1690602001909190505061383f565b005b341561112057600080fd5b611155600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506138ac565b005b341561116257600080fd5b61117860048080359060200190919050506139a1565b005b341561118557600080fd5b6111d5600480803590602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613b5f565b6040518082815260200191505060405180910390f35b34156111f657600080fd5b61120c6004808035906020019091905050613bd8565b604051808215151515815260200191505060405180910390f35b341561123157600080fd5b611239613d45565b6040518082815260200191505060405180910390f35b341561125a57600080fd5b611262613d4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156112af57600080fd5b6112c56004808035906020019091905050613d71565b005b6112e66004808035906020019091908035906020019091905050613e10565b005b34156112f357600080fd5b6112fb613ff9565b6040518082815260200191505060405180910390f35b341561131c57600080fd5b611324613fff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6113856004808035906020019091908035906020019091905050614025565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6040805190810160405280600a81526020017f43727970746f426f74730000000000000000000000000000000000000000000081525081565b600260149054906101000a900460ff1615151561140857600080fd5b6114123382614368565b151561141d57600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff1614151561145457600080fd5b61145e81836143d4565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561155c57600080fd5b6000600e600083815260200190815260200160002060009054906101000a900461ffff1661ffff1614151561159057600080fd5b6115998161442a565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b662386f26fc1000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561162957600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166376190f8f6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561169857600080fd5b6102c65a03f115156116a957600080fd5b5050506040518051905015156116be57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175e57600080fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900463ffffffff1663ffffffff1660068054905003905090565b60008082118015611828575060006006838154811015156117fd57fe5b906000526020600020906002020160010160189054906101000a900463ffffffff1663ffffffff1614155b9050919050565b6201518081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118b757600080fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b600260149054906101000a900460ff1615151561192557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561196157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561199c57600080fd5b6119a633826144f7565b15156119b157600080fd5b6119bb8382614368565b15156119c657600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff161415156119fd57600080fd5b611a08838383614563565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a6a57600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166354c15b826000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611ad957600080fd5b6102c65a03f11515611aea57600080fd5b505050604051805190501515611aff57600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611bd257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611c0e57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cac57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ce857600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611d8d57600080fd5b611d97838361480c565b92915050565b600260149054906101000a900460ff16151515611db957600080fd5b611dc33385614368565b1515611dce57600080fd5b611dd7846117e0565b151515611de357600080fd5b611e0f84600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515611eeb57600080fd5b6102c65a03f11515611efc57600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6057600080fd5b600260149054906101000a900460ff161515611f7b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611fd957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561203757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561209557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156120f257600080fd5b6120fa6148db565b565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000808511151561214257600080fd5b60008411151561215157600080fd5b60068581548110151561216057fe5b9060005260206000209060020201915060068481548110151561217f57fe5b9060005260206000209060020201905061219b8286838761496e565b80156121ad57506121ac8486614b83565b5b9250505092915050565b600260149054906101000a900460ff161515156121d357600080fd5b6121dd3385614368565b15156121e857600080fd5b6121f184613bd8565b15156121fc57600080fd5b61222884600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b151561230457600080fd5b6102c65a03f1151561231557600080fd5b50505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561237a57600080fd5b80600f8190555050565b600260149054906101000a900460ff161515156123a057600080fd5b6123aa3382614368565b15156123b557600080fd5b81600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561246657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156124a257600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061259457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806125ec5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156125f757600080fd5b60036000600e8110151561260757fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168110151561263657600080fd5b8060058190555050565b600260149054906101000a900460ff1681565b60008060008060008060008060008060008073ffffffffffffffffffffffffffffffffffffffff16600760008e815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156126d257600080fd5b60068c8154811015156126e157fe5b9060005260206000209060020201905060008160010160189054906101000a900463ffffffff1663ffffffff1614159a50438160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff161115995080600101601c9054906101000a900461ffff1661ffff1698508060010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1697508060010160189054906101000a900463ffffffff1663ffffffff1696508060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1695508060010160109054906101000a900463ffffffff1663ffffffff1694508060010160149054906101000a900463ffffffff1663ffffffff16935080600101601e9054906101000a900461ffff1661ffff16925080600001549150509193959799509193959799565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561288157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff16319150600f546001601054010290508082111561290a57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284039081150290604051600060405180830381858888f19350505050505b5050565b600b60009054906101000a900463ffffffff1681565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561299857600080fd5b919050565b61afc881565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a2657600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166385b861886000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612a9557600080fd5b6102c65a03f11515612aa657600080fd5b505050604051805190501515612abb57600080fd5b80600b60046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ba457600080fd5b600260149054906101000a900460ff161515612bbf57600080fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60055481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612d1457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612d6c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612d7757600080fd5b600260149054906101000a900460ff16151515612d9357600080fd5b6001600260146101000a81548160ff021916908315150217905550565b612db8615670565b6000612dc2615670565b6000806000612dd087612b00565b94506000851415612e02576000604051805910612dea5750595b90808252806020026020018201604052509550612ede565b84604051805910612e105750595b90808252806020026020018201604052509350600160068054905003925060009150600090505b8281111515612eda578673ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ecd57808483815181101515612eb657fe5b906020019060200201818152505081806001019250505b8080600101915050612e37565b8395505b5050505050919050565b600080600080600080600080600260149054906101000a900460ff16151515612f1057600080fd5b600689815481101515612f1f57fe5b9060005260206000209060020201965060008760010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614151515612f6157600080fd5b613097876101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050614c96565b15156130a257600080fd5b8660010160189054906101000a900463ffffffff1663ffffffff1695506006868154811015156130ce57fe5b9060005260206000209060020201945086600101601e9054906101000a900461ffff16935086600101601e9054906101000a900461ffff1661ffff1685600101601e9054906101000a900461ffff1661ffff16111561313d5784600101601e9054906101000a900461ffff1693505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d9f5aed8860000154876000015460018b60010160089054906101000a900467ffffffffffffffff16036000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018267ffffffffffffffff1681526020019350505050602060405180830381600087803b151561321357600080fd5b6102c65a03f1151561322457600080fd5b505050604051805190509250600760008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150613294898860010160189054906101000a900463ffffffff1663ffffffff166001870161ffff168686614cd1565b90508660010160186101000a81549063ffffffff0219169055601060008154809291906001900391905055503373ffffffffffffffffffffffffffffffffffffffff166108fc600f549081150290604051600060405180830381858888f193505050505080975050505050505050919050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561336857600080fd5b600e600083815260200190815260200160002060009054906101000a900461ffff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061343957506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806134915750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561349c57600080fd5b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b151561352157600080fd5b6102c65a03f1151561353257600080fd5b505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156135ba57600080fd5b6102c65a03f115156135cb57600080fd5b505050565b6040805190810160405280600381526020017f434254000000000000000000000000000000000000000000000000000000000081525081565b600381600e8110151561361857fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1615151561368757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156136c357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156136fe57600080fd5b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561375b57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156137b857600080fd5b6137c23382614368565b15156137cd57600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff1614151561380457600080fd5b61380f338383614563565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561389e57600080fd5b6138a88282614fda565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561390a57600080fd5b819050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561396857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b61138860125410151561397a57600080fd5b60126000815480929190600101919050555061399b60008060008685614cd1565b50505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139ff57600080fd5b61afc8601354101515613a1157600080fd5b613a2060008060008530614cd1565b9050613a4e81600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a82613a95615205565b600062015180306040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515613b3557600080fd5b6102c65a03f11515613b4657600080fd5b5050506013600081548092919060010191905055505050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515613bc057600080fd5b613bcd8686868686614cd1565b905095945050505050565b600080600683815481101515613bea57fe5b90600052602060002090600202019050600083118015613d3d5750613d3c83826101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b5b915050919050565b61138881565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515613dd057600080fd5b6000600e600083815260200190815260200160002060009054906101000a900461ffff1661ffff16141515613e0457600080fd5b613e0d8161442a565b50565b6000600260149054906101000a900460ff16151515613e2e57600080fd5b613e383383614368565b1515613e4357600080fd5b613e4c82613bd8565b1515613e5757600080fd5b613e618284615377565b1515613e6c57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c55d0f56846000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515613f0557600080fd5b6102c65a03f11515613f1657600080fd5b505050604051805190509050600f5481013410151515613f3557600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663454a2ab3600f543403856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506000604051808303818588803b1515613fc957600080fd5b6125ee5a03f11515613fda57600080fd5b50505050613ff48263ffffffff168463ffffffff166153d0565b505050565b60135481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260149054906101000a900460ff1615151561404457600080fd5b600f54341015151561405557600080fd5b61405f3385614368565b151561406a57600080fd5b6140748385614b83565b151561407f57600080fd5b60068481548110151561408e57fe5b906000526020600020906002020191506141d584836101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b15156141e057600080fd5b6006838154811015156141ef57fe5b9060005260206000209060020201905061433683826101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b151561434157600080fd5b61434d8285838661496e565b151561435857600080fd5b61436284846153d0565b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b806009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000808211151561443a57600080fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156144ac57600080fd5b600b600081819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506144f381600084614563565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156145d3576007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055614675565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151561476857600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600a600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b6000808261ffff1611151561482057600080fd5b600e600084815260200190815260200160002060009054906101000a900461ffff1690508161ffff1682821661ffff1614151561485c57600080fd5b818118905080600e600085815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507f96b828b49c6eb235f60dde08b68959e6baef50b35a662b6db3cade02872d32308382604051808381526020018261ffff1661ffff1681526020019250505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561493657600080fd5b600260149054906101000a900460ff16151561495157600080fd5b6000600260146101000a81548160ff021916908315150217905550565b6000818414156149815760009050614b7b565b818560010160109054906101000a900463ffffffff1663ffffffff1614806149c25750818560010160149054906101000a900463ffffffff1663ffffffff16145b156149d05760009050614b7b565b838360010160109054906101000a900463ffffffff1663ffffffff161480614a115750838360010160149054906101000a900463ffffffff1663ffffffff16145b15614a1f5760009050614b7b565b60008360010160109054906101000a900463ffffffff1663ffffffff161480614a62575060008560010160109054906101000a900463ffffffff1663ffffffff16145b15614a705760019050614b7b565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff161480614ae557508460010160149054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff16145b15614af35760009050614b7b565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff161480614b6857508460010160149054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff16145b15614b765760009050614b7b565b600190505b949350505050565b60008060006007600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480614c8c57508173ffffffffffffffffffffffffffffffffffffffff16600a600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9250505092915050565b6000808260a0015163ffffffff1614158015614cca57504367ffffffffffffffff16826040015167ffffffffffffffff1611155b9050919050565b600080614cdc615684565b60008863ffffffff1689141515614cf257600080fd5b8763ffffffff1688141515614d0657600080fd5b8661ffff1687141515614d1857600080fd5b600287811515614d2457fe5b049250600d8361ffff161115614d3957600d92505b610100604051908101604052808781526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018a63ffffffff1681526020018963ffffffff168152602001600063ffffffff1681526020018461ffff1681526020018861ffff168152509150600160068054806001018281614dbc91906156f8565b916000526020600020906002020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff1681141515614f0e57600080fd5b7fa2950fd8c03e7518275ee57e05ca76c671969b5445b12b1aeea4b0b30195e5df8582846060015163ffffffff16856080015163ffffffff168660000151876020015167ffffffffffffffff16604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a1614fcb60008683614563565b80935050505095945050505050565b6000806000808461ffff16111515614ff157600080fd5b600e600086815260200190815260200160002060009054906101000a900461ffff169250600084841661ffff1614151561502a57600080fd5b60006001851661ffff1611156150835760068581548110151561504957fe5b9060005260206000209060020201915060008260010160189054906101000a900463ffffffff1663ffffffff1614151561508257600080fd5b5b60006002851661ffff161115615184576007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561512657600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561518357600080fd5b5b838317925082600e600087815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507f96b828b49c6eb235f60dde08b68959e6baef50b35a662b6db3cade02872d32308584604051808381526020018261ffff1661ffff1681526020019250505060405180910390a15050505050565b6000806000600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac9d94c6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561529857600080fd5b6102c65a03f115156152a957600080fd5b505050604051805190509150816fffffffffffffffffffffffffffffffff16821415156152d557600080fd5b6002828115156152e157fe5b0482019050662386f26fc1000081101561530057662386f26fc1000090505b809250505090565b6000808260a0015163ffffffff1614801561533b57504367ffffffffffffffff16826040015167ffffffffffffffff1611155b801561536f575060006001600e600086815260200190815260200160002060009054906101000a900461ffff161661ffff16145b905092915050565b600080600060068581548110151561538b57fe5b906000526020600020906002020191506006848154811015156153aa57fe5b906000526020600020906002020190506153c68286838761496e565b9250505092915050565b6000806006838154811015156153e257fe5b9060005260206000209060020201915060068481548110151561540157fe5b90600052602060002090600202019050828160010160186101000a81548163ffffffff021916908363ffffffff16021790555061543d8261559a565b6154468161559a565b600a600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556010600081548092919060010191905055507f241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b806007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685858460010160089054906101000a900467ffffffffffffffff16604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018267ffffffffffffffff16815260200194505050505060405180910390a150505050565b43600554600383600101601c9054906101000a900461ffff1661ffff16600e811015156155c357fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168115156155ee57fe5b04018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600d81600101601c9054906101000a900461ffff1661ffff16101561566d57600181600101601c8282829054906101000a900461ffff160192506101000a81548161ffff021916908361ffff1602179055505b50565b602060405190810160405280600081525090565b6101006040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff1681525090565b81548183558181151161572557600202816002028360005260206000209182019101615724919061572a565b5b505050565b6157f391905b808211156157ef576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff021916905550600201615730565b5090565b905600a165627a7a7230582018d63b4358ce375a48b0e3d10e02cef819212a7f1d5bf68fc9b6278dc6643eec0029

Swarm Source

bzzr://18d63b4358ce375a48b0e3d10e02cef819212a7f1d5bf68fc9b6278dc6643eec
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.