Contract 0xF7a6E15dfD5cdD9ef12711Bd757a9b6021ABf643 6

 

Contract Overview

CryptoBots: CBT Token
Balance:
0.04 Ether

EtherValue:
$68.23 (@ $1,705.64/ETH)

Token:
 
Txn Hash
Method
Block
From
To
Value
0x6452e63a315a782c318b7d0a9ae18f8d4ed7b86b1e548ed979fa5b6947d638ccApprove152946112022-08-07 10:28:076 hrs ago0x3c417d67b9cc774092bb87221873aee3403f0878 IN  CryptoBots: CBT Token0 Ether0.00018261 5.16521338
0x11b55ccd4eb7ab26183d9b9220f5ae3e4bcfc2ca9575317fd35d53903e52d894Approve152929232022-08-07 4:14:0712 hrs 14 mins agoENS Name gonzy.eth IN  CryptoBots: CBT Token0 Ether0.00021586 6.63083329
0x84b3ab9349e815e1acd4b6b993201a118a670c04c3d6591fb26510fcdbf98684Approve152927432022-08-07 3:30:1712 hrs 58 mins agoENS Name gonzy.eth IN  CryptoBots: CBT Token0 Ether0.00053378 10.17609905
0xa45f228d98f3c6a126d47a33c384002b3ba73591fc70336d5cd2b93c0f80f057Approve152924832022-08-07 2:23:3814 hrs 5 mins agoENS Name joemerengues.eth IN  CryptoBots: CBT Token0 Ether0.00017097 4.8358903
0x30b04ad03808bf1d603f6f4dd05231f63e21cc1440aa4933468c65c4a8018d52Approve152924122022-08-07 2:08:0414 hrs 20 mins ago0xc11b7e24d94d1183f2e187df324ea11a575bd324 IN  CryptoBots: CBT Token0 Ether0.00029521 5.61896815
0x71b010904304f9c78f0c87a891de371fcb41544fd72f70174fd8452ff4fe340eApprove152924072022-08-07 2:06:3214 hrs 22 mins ago0xc11b7e24d94d1183f2e187df324ea11a575bd324 IN  CryptoBots: CBT Token0 Ether0.00016194 4.56973881
0x098db54d5c3df8981024b113d6f0fd14bd74b353d6770ef002830842667c5d72Approve152922242022-08-07 1:24:2215 hrs 4 mins agoENS Name 0xx0xx.eth IN  CryptoBots: CBT Token0 Ether0.000314736
0xa3bc546934e48bad4a7b4409cd0ab50b51bdb41d8b897b6742ffd1ebb4220a49Approve152904352022-08-06 18:51:2221 hrs 37 mins ago0x8eff7283a322603fc1c858d946e02f51a62a63e7 IN  CryptoBots: CBT Token0 Ether0.00038562 7.35153928
0xfeb44c7ea8f184afa99f27558a9cb97850ad6ac32df9e11fdb6fecfd8641ca5cApprove152892422022-08-06 14:21:551 day 2 hrs ago0xfe22ffbf56c620865f8c75aba05369a43ddd612c IN  CryptoBots: CBT Token0 Ether0.00052524 14.85621858
0x22008a427269c3209e5cb58be3a8b5e6809953e6bcf7da63ea492e04329e13e7Approve152881662022-08-06 10:24:431 day 6 hrs ago0x0f7d975a287b361be933b7fae722395b548b70d0 IN  CryptoBots: CBT Token0 Ether0.00021015 4
0xecf617b24e189366b57be8961dad6bb2a39d2c23853c69f7cd683d11e54eceb9Approve152881662022-08-06 10:24:431 day 6 hrs ago0x0f7d975a287b361be933b7fae722395b548b70d0 IN  CryptoBots: CBT Token0 Ether0.00021015 4
0x6fcaa2e21756ecdeefb4d87c9b20d905102a8abeed1b71955e39cfc378a19122Approve152881112022-08-06 10:12:351 day 6 hrs ago0xc63c1ff0c8151b7180222934ec3794372cf97b88 IN  CryptoBots: CBT Token0 Ether0.0002101 4
0x76b0d0ac848b964bd3d40774d36f4262df35819432464d2ef891724456063263Approve152881112022-08-06 10:12:351 day 6 hrs ago0xc63c1ff0c8151b7180222934ec3794372cf97b88 IN  CryptoBots: CBT Token0 Ether0.00021015 4
0x49ba72daed2142a09b792e404d70010cae9b67f6f84d86887d43943de59c9dd4Approve152880962022-08-06 10:09:161 day 6 hrs ago0xc63c1ff0c8151b7180222934ec3794372cf97b88 IN  CryptoBots: CBT Token0 Ether0.00021015 4
0x3c7feebf9826c345a90eb1c6d094b670e215b1023e60b7e5edd951d98ae3047eApprove152876662022-08-06 8:27:591 day 8 hrs ago0x2294a59a57a2ed1c35a6a71da464570659642491 IN  CryptoBots: CBT Token0 Ether0.00036128 6.8875409
0x33fee7a2134c68d42067c3eae7524826cc3ac093082fc4d39b7bc13b37361909Approve152858312022-08-06 1:25:281 day 15 hrs agoENS Name johndr.eth IN  CryptoBots: CBT Token0 Ether0.00069861 13.29713593
0xdc7c07152bfd0004869c7543b0c25f569889db562219c0ab6f331926173519e8Approve152849412022-08-05 22:12:301 day 18 hrs ago0x553ecb82e7f665bb809153bb2210bf9ad1239cf7 IN  CryptoBots: CBT Token0 Ether0.00031995 9.04990908
0x92589bbd502571eb9971a1cd5955e37ff3a529bd0ed698e8c49edf9bbbed0cf6Approve152845372022-08-05 20:43:261 day 19 hrs agoENS Name epat.eth IN  CryptoBots: CBT Token0 Ether0.00060468 17.06261597
0x65fafb5a21778cf4360e90e9953e11fdf1f4db30506a2791305148dbda9fab29Approve152845202022-08-05 20:38:381 day 19 hrs agoENS Name gimballock.eth IN  CryptoBots: CBT Token0 Ether0.00049476 15.19787532
0xb5db0b92f7bacaacb6116bcf6e4b79041e2444e09bd494e1d3c4e1a2f3898283Approve152845142022-08-05 20:36:581 day 19 hrs agoENS Name gimballock.eth IN  CryptoBots: CBT Token0 Ether0.00042896 12.13306332
0x7f70006509fcf2a29fdb5eaf3d42dc3d60704dbf7614fa0e85c23592f3192116Approve152843932022-08-05 20:10:311 day 20 hrs agoENS Name blaxe.eth IN  CryptoBots: CBT Token0 Ether0.00035911 11.03114267
0x7ba53b649eda0fe11a2b91a70fb165aac5926828e1b60a9327b756af0f86ca8dApprove152843842022-08-05 20:09:201 day 20 hrs agoENS Name blaxe.eth IN  CryptoBots: CBT Token0 Ether0.00046856 13.25303099
0x04ff13b017e823753a2f1ccd7168d4494bea7d9f3ec2274c96e216565836eb22Approve152835742022-08-05 17:05:111 day 23 hrs ago0xeebfa711a33103cf813926a34c75834549299c9d IN  CryptoBots: CBT Token0 Ether0.00170954 32.59074437
0x0ffc9ea946e06ec97744461286741b5df877176cebcedd77028f989690354079Approve152835492022-08-05 17:00:001 day 23 hrs agoENS Name rostad.eth IN  CryptoBots: CBT Token0 Ether0.00082406 25.24770995
0x58e71017de364b2f5578196ebeabae56ad8d53c2887d6e99c2dfa76c341c61a3Approve152835402022-08-05 16:57:001 day 23 hrs agoENS Name rostad.eth IN  CryptoBots: CBT Token0 Ether0.00070177 19.80232089
[ Download CSV Export 

OVERVIEW

A blockchain-based game to find out whose bot army is the best.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xbbd9d92255c880d4e4aa7470ba22846e492533161d647f61fedfbb049e17f49a134620042021-10-21 16:10:39290 days 17 mins ago CryptoBots: CBT TokenCryptobots.me: Deployer0.5620323 Ether
0xef7703f33f7edc04b32f3a40a4b5f22e4cb045d0ce7d37e341a7fc101833091e134619832021-10-21 16:06:39290 days 21 mins ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c CryptoBots: CBT Token0.5620323 Ether
0x528812db6bcf6d4712d532db87dfe5f25128afb92d9f63a9bfa834f91bc99e3c133258022021-09-30 7:36:57311 days 8 hrs ago CryptoBots: CBT TokenCryptobots.me: Deployer1.0538118 Ether
0x812b132bfed61b7a92d4ebed99dd905c6d411dca31569bfd313eeb13de0c462d133257842021-09-30 7:32:16311 days 8 hrs ago 0x79a198b2355ca2aef695d8a4987582e093911ebb CryptoBots: CBT Token0.00078 Ether
0x0fd7b0425c585e6e52edfa737702b06ac2292e2112a23c9153926c584ffde83c133257792021-09-30 7:30:58311 days 8 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c CryptoBots: CBT Token1.0530318 Ether
0x40852429165bdffc6ef7921e40fd41f675fc06033bd49ee4adfff628890a3d8a131981252021-09-10 12:57:38331 days 3 hrs ago CryptoBots: CBT TokenCryptobots.me: Deployer0.418527 Ether
0xe37173fb42801ac9a9ce4eae15b3cb26acc2e50ccd3795041031dd6464da531a131981092021-09-10 12:55:11331 days 3 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c CryptoBots: CBT Token0.418527 Ether
0x44a37a85a2ddecf29434595f52b8fbba095788c66d7fbe8adbe246c17535465d124816972021-05-22 3:22:47442 days 13 hrs ago CryptoBots: CBT TokenCryptobots.me: Deployer0.05957786 Ether
0x94d6f3383f0bcd4b25111a8f43fc29aa6e37fd71dc8847649f670424231afec9124816612021-05-22 3:16:09442 days 13 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c CryptoBots: CBT Token0.05925686 Ether
0xbfb76321f5cef5cd3bcea8e8f43373b0b622b7e8361ae3856c28f80da0fc5b8183313382019-08-11 20:12:531091 days 20 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x5c29599b833bce8ae801fe5066d0c62252c8ac6c7642d96145535c56648576cf80129302019-06-23 7:19:051141 days 9 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x8d404d5851ee48c8144438ced472fb51ff7966221f70f2693090a582a7e8ef7078758332019-06-01 20:28:301162 days 20 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xe97684c69b1d6dadbbd77131c36ff2976bb1b4e7c21f18cd8d80ac046a003dd578756692019-06-01 19:54:131162 days 20 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xd81d32ae82993b647e0be0a6bc57ad61b1b523794aed83c74e40d20e9e083f7d78719622019-06-01 5:53:491163 days 10 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x77839ce00d5594eb2478adeec6988ed9f8672ccb5c8f2d3f994a80faa2da780278468662019-05-28 8:07:131167 days 8 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xd25738a5f5157b5df10bb5fc28f9b2c5694b4c27168c1e8190644f89f3e386ad78444542019-05-27 22:48:031167 days 17 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x8d1452da2a33def1b3315980630c65268a67ea814b7297d3e4c46b365c463bc478438872019-05-27 20:42:031167 days 19 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x8887e6c2a9e3f140cc66a7ab163762db9879f0fd35ce6c960f9a92cdefa71cd178355902019-05-26 13:48:091169 days 2 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xb9745ca5a09c5816430fd95b1b63c2c77a50b440ad8bf86380158c62ce8e7b5877459882019-05-12 13:48:311183 days 2 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xfda293537a93e4dc844d29de3038075eab07c6b8b3810d66471c79ca40215b5376784782019-05-02 0:36:381193 days 15 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xfc0eee71819867d63ea6b126f238fcecab9b64ce1d57a88a39ae55274a7055d176781752019-05-01 23:25:231193 days 17 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xf6db23b3df3db775da830cc09ff5acaad427a70a69bf2b0bb6a3de64f0e3217476780512019-05-01 22:56:171193 days 17 hrs ago CryptoBots: CBT Token 0x79a198b2355ca2aef695d8a4987582e093911ebb0.009 Ether
0xeae7f8976a995ed26e214bc6811ddf474bb6e3100faf4fd12ecab8a6e4540daa76779862019-05-01 22:42:341193 days 17 hrs ago CryptoBots: CBT Token 0x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x94866da9365fb652b100490e866e55c4740e28caade04cd558d8d211fa4f14bd76775112019-05-01 20:56:191193 days 19 hrs ago CryptoBots: CBT Token 0x79a198b2355ca2aef695d8a4987582e093911ebb0.01 Ether
0x7e77fccc27071cbeddd5d2a0450285013a0f3646bbe06b21fff7f0759c2c6f7e76775022019-05-01 20:54:321193 days 19 hrs ago CryptoBots: CBT Token 0x79a198b2355ca2aef695d8a4987582e093911ebb0.007 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BotCore

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

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-05
*/

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 Security Audit

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"}]

60606040526000600260146101000a81548160ff0219169083151502179055506101c060405190810160405280603c63ffffffff1663ffffffff168152602001607863ffffffff1663ffffffff16815260200161012c63ffffffff1663ffffffff16815260200161025863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff168152602001610e1063ffffffff1663ffffffff168152602001611c2063ffffffff1663ffffffff16815260200161384063ffffffff1663ffffffff16815260200161708063ffffffff1663ffffffff16815260200161e10063ffffffff1663ffffffff1681526020016201518063ffffffff1663ffffffff1681526020016202a30063ffffffff1663ffffffff1681526020016205460063ffffffff1663ffffffff16815260200162093a8063ffffffff1663ffffffff16815250600390600e6200015692919062000830565b50600f60055566071afd498d0000600f5534156200017357600080fd5b6001600260146101000a81548160ff021916908315150217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200025460008060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff336200025b6401000000000262004cd1176401000000009004565b5062000a88565b60008062000268620008da565b60008863ffffffff16891415156200027f57600080fd5b8763ffffffff16881415156200029457600080fd5b8661ffff1687141515620002a757600080fd5b600287811515620002b457fe5b049250600d8361ffff161115620002ca57600d92505b610100604051908101604052808781526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018a63ffffffff1681526020018963ffffffff168152602001600063ffffffff1681526020018461ffff1681526020018861ffff1681525091506001600680548060010182816200034f91906200094e565b916000526020600020906002020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff1681141515620004a257600080fd5b7fa2950fd8c03e7518275ee57e05ca76c671969b5445b12b1aeea4b0b30195e5df8582846060015163ffffffff16856080015163ffffffff168660000151876020015167ffffffffffffffff16604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a16200057560008683620005846401000000000262004563176401000000009004565b80935050505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005f6576007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905562000698565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415156200078c57600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600a600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b82600e600701600890048101928215620008c75791602002820160005b838211156200089357835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200084d565b8015620008c55782816101000a81549063ffffffff021916905560040160208160030104928301926001030262000893565b505b509050620008d6919062000983565b5090565b6101006040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff1681525090565b8154818355818115116200097e576002028160020283600052602060002091820191016200097d9190620009b9565b5b505050565b620009b691905b80821115620009b257600081816101000a81549063ffffffff0219169055506001016200098a565b5090565b90565b62000a8591905b8082111562000a81576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff021916905550600201620009c0565b5090565b90565b6158228062000a986000396000f3006060604052600436106102f6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630519ce79146103ac57806305e455461461040157806306fdde031461042a578063095ea7b3146104b857806309f6d5b4146104fa5780630a0f81681461051d5780630e583df01461057257806314001f4c1461059b578063170ff3e1146105d457806318160ddd1461060d5780631940a9361461063657806319c2f2011461067157806321717ebf1461069a57806321ee102b146106ef57806323b872dd1461072857806324e7a38a1461078957806327ab9f20146107c257806327d7874c146108255780632ba73c151461085e5780633c4b07de146108975780633d7d3f5a146108e35780633f4ba83a1461092157806346116e6f1461093657806346d22c70146109995780634ad8c938146109dd5780634b85fd5514610a1b5780634dfff04f14610a3e5780634e0a337914610a805780634e4081ef14610ab95780635663896e14610ae25780635c975abb14610b055780635f70d9ac14610b325780635fd8c71014610bb057806361b6683c14610bc55780636352211e14610bfa578063680eba2714610c5d5780636af04a5714610c865780636fbde40d14610cdb57806370a0823114610d145780637158798814610d615780637a7d493714610d9a5780638456cb5914610dc35780638462151c14610dd857806388c2a0bf14610e665780638a653c9314610e9d57806391876e5714610edc57806395d89b4114610ef15780639d6fac6f14610f7f578063a8f8884d14610fc2578063a9059cbb14611025578063b047fb5014611067578063b0c35c05146110bc578063bf4a5485146110e5578063bf86e01314611115578063c3bea9af14611157578063d1b12b4e1461117a578063d3e6f49f146111eb578063defb958414611226578063e6cbe3511461124f578063e9b58225146112a4578063ed60ade6146112c7578063f1ca9410146112e8578063f2b47d5214611311578063f7d8c88314611366575b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039f5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156103aa57600080fd5b005b34156103b757600080fd5b6103bf611387565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561040c57600080fd5b6104146113ad565b6040518082815260200191505060405180910390f35b341561043557600080fd5b61043d6113b3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047d578082015181840152602081019050610462565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c357600080fd5b6104f8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506113ec565b005b341561050557600080fd5b61051b6004808035906020019091905050611501565b005b341561052857600080fd5b61053061159c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561057d57600080fd5b6105856115c1565b6040518082815260200191505060405180910390f35b34156105a657600080fd5b6105d2600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115cc565b005b34156105df57600080fd5b61060b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611703565b005b341561061857600080fd5b6106206117b9565b6040518082815260200191505060405180910390f35b341561064157600080fd5b61065760048080359060200190919050506117e0565b604051808215151515815260200191505060405180910390f35b341561067c57600080fd5b61068461182f565b6040518082815260200191505060405180910390f35b34156106a557600080fd5b6106ad611836565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106fa57600080fd5b610726600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061185c565b005b341561073357600080fd5b610787600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611909565b005b341561079457600080fd5b6107c0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a0d565b005b34156107cd57600080fd5b6107e36004808035906020019091905050611b44565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083057600080fd5b61085c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b77565b005b341561086957600080fd5b610895600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c51565b005b34156108a257600080fd5b6108c5600480803590602001909190803561ffff16906020019091905050611d2c565b604051808261ffff1661ffff16815260200191505060405180910390f35b34156108ee57600080fd5b61091f6004808035906020019091908035906020019091908035906020019091908035906020019091905050611d9d565b005b341561092c57600080fd5b610934611f05565b005b341561094157600080fd5b61095760048080359060200190919050506120fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109a457600080fd5b6109c3600480803590602001909190803590602001909190505061212f565b604051808215151515815260200191505060405180910390f35b34156109e857600080fd5b610a1960048080359060200190919080359060200190919080359060200190919080359060200190919050506121b7565b005b3415610a2657600080fd5b610a3c600480803590602001909190505061231e565b005b3415610a4957600080fd5b610a7e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612384565b005b3415610a8b57600080fd5b610ab7600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061240b565b005b3415610ac457600080fd5b610acc6124e6565b6040518082815260200191505060405180910390f35b3415610aed57600080fd5b610b0360048080359060200190919050506124ec565b005b3415610b1057600080fd5b610b18612640565b604051808215151515815260200191505060405180910390f35b3415610b3d57600080fd5b610b536004808035906020019091905050612653565b604051808b1515151581526020018a1515151581526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b3415610bbb57600080fd5b610bc3612822565b005b3415610bd057600080fd5b610bd861290e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610c0557600080fd5b610c1b6004808035906020019091905050612924565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c6857600080fd5b610c7061299d565b6040518082815260200191505060405180910390f35b3415610c9157600080fd5b610c996129a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610ce657600080fd5b610d12600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506129c9565b005b3415610d1f57600080fd5b610d4b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b00565b6040518082815260200191505060405180910390f35b3415610d6c57600080fd5b610d98600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b49565b005b3415610da557600080fd5b610dad612c66565b6040518082815260200191505060405180910390f35b3415610dce57600080fd5b610dd6612c6c565b005b3415610de357600080fd5b610e0f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612db0565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e52578082015181840152602081019050610e37565b505050509050019250505060405180910390f35b3415610e7157600080fd5b610e876004808035906020019091905050612ee8565b6040518082815260200191505060405180910390f35b3415610ea857600080fd5b610ebe6004808035906020019091905050613307565b604051808261ffff1661ffff16815260200191505060405180910390f35b3415610ee757600080fd5b610eef613391565b005b3415610efc57600080fd5b610f046135d0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f44578082015181840152602081019050610f29565b50505050905090810190601f168015610f715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610f8a57600080fd5b610fa06004808035906020019091905050613609565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610fcd57600080fd5b610fe36004808035906020019091905050613638565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561103057600080fd5b611065600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061366b565b005b341561107257600080fd5b61107a613813565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156110c757600080fd5b6110cf613839565b6040518082815260200191505060405180910390f35b34156110f057600080fd5b611113600480803590602001909190803561ffff1690602001909190505061383f565b005b341561112057600080fd5b611155600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506138ac565b005b341561116257600080fd5b61117860048080359060200190919050506139a1565b005b341561118557600080fd5b6111d5600480803590602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613b5f565b6040518082815260200191505060405180910390f35b34156111f657600080fd5b61120c6004808035906020019091905050613bd8565b604051808215151515815260200191505060405180910390f35b341561123157600080fd5b611239613d45565b6040518082815260200191505060405180910390f35b341561125a57600080fd5b611262613d4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156112af57600080fd5b6112c56004808035906020019091905050613d71565b005b6112e66004808035906020019091908035906020019091905050613e10565b005b34156112f357600080fd5b6112fb613ff9565b6040518082815260200191505060405180910390f35b341561131c57600080fd5b611324613fff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6113856004808035906020019091908035906020019091905050614025565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6040805190810160405280600a81526020017f43727970746f426f74730000000000000000000000000000000000000000000081525081565b600260149054906101000a900460ff1615151561140857600080fd5b6114123382614368565b151561141d57600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff1614151561145457600080fd5b61145e81836143d4565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561155c57600080fd5b6000600e600083815260200190815260200160002060009054906101000a900461ffff1661ffff1614151561159057600080fd5b6115998161442a565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b662386f26fc1000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561162957600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166376190f8f6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561169857600080fd5b6102c65a03f115156116a957600080fd5b5050506040518051905015156116be57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175e57600080fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900463ffffffff1663ffffffff1660068054905003905090565b60008082118015611828575060006006838154811015156117fd57fe5b906000526020600020906002020160010160189054906101000a900463ffffffff1663ffffffff1614155b9050919050565b6201518081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118b757600080fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b600260149054906101000a900460ff1615151561192557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561196157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561199c57600080fd5b6119a633826144f7565b15156119b157600080fd5b6119bb8382614368565b15156119c657600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff161415156119fd57600080fd5b611a08838383614563565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a6a57600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166354c15b826000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611ad957600080fd5b6102c65a03f11515611aea57600080fd5b505050604051805190501515611aff57600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611bd257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611c0e57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cac57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ce857600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611d8d57600080fd5b611d97838361480c565b92915050565b600260149054906101000a900460ff16151515611db957600080fd5b611dc33385614368565b1515611dce57600080fd5b611dd7846117e0565b151515611de357600080fd5b611e0f84600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515611eeb57600080fd5b6102c65a03f11515611efc57600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6057600080fd5b600260149054906101000a900460ff161515611f7b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611fd957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561203757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561209557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156120f257600080fd5b6120fa6148db565b565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000808511151561214257600080fd5b60008411151561215157600080fd5b60068581548110151561216057fe5b9060005260206000209060020201915060068481548110151561217f57fe5b9060005260206000209060020201905061219b8286838761496e565b80156121ad57506121ac8486614b83565b5b9250505092915050565b600260149054906101000a900460ff161515156121d357600080fd5b6121dd3385614368565b15156121e857600080fd5b6121f184613bd8565b15156121fc57600080fd5b61222884600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b151561230457600080fd5b6102c65a03f1151561231557600080fd5b50505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561237a57600080fd5b80600f8190555050565b600260149054906101000a900460ff161515156123a057600080fd5b6123aa3382614368565b15156123b557600080fd5b81600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561246657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156124a257600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061259457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806125ec5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156125f757600080fd5b60036000600e8110151561260757fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168110151561263657600080fd5b8060058190555050565b600260149054906101000a900460ff1681565b60008060008060008060008060008060008073ffffffffffffffffffffffffffffffffffffffff16600760008e815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156126d257600080fd5b60068c8154811015156126e157fe5b9060005260206000209060020201905060008160010160189054906101000a900463ffffffff1663ffffffff1614159a50438160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff161115995080600101601c9054906101000a900461ffff1661ffff1698508060010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1697508060010160189054906101000a900463ffffffff1663ffffffff1696508060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1695508060010160109054906101000a900463ffffffff1663ffffffff1694508060010160149054906101000a900463ffffffff1663ffffffff16935080600101601e9054906101000a900461ffff1661ffff16925080600001549150509193959799509193959799565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561288157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff16319150600f546001601054010290508082111561290a57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284039081150290604051600060405180830381858888f19350505050505b5050565b600b60009054906101000a900463ffffffff1681565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561299857600080fd5b919050565b61afc881565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a2657600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166385b861886000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612a9557600080fd5b6102c65a03f11515612aa657600080fd5b505050604051805190501515612abb57600080fd5b80600b60046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ba457600080fd5b600260149054906101000a900460ff161515612bbf57600080fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60055481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612d1457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612d6c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612d7757600080fd5b600260149054906101000a900460ff16151515612d9357600080fd5b6001600260146101000a81548160ff021916908315150217905550565b612db8615670565b6000612dc2615670565b6000806000612dd087612b00565b94506000851415612e02576000604051805910612dea5750595b90808252806020026020018201604052509550612ede565b84604051805910612e105750595b90808252806020026020018201604052509350600160068054905003925060009150600090505b8281111515612eda578673ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ecd57808483815181101515612eb657fe5b906020019060200201818152505081806001019250505b8080600101915050612e37565b8395505b5050505050919050565b600080600080600080600080600260149054906101000a900460ff16151515612f1057600080fd5b600689815481101515612f1f57fe5b9060005260206000209060020201965060008760010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614151515612f6157600080fd5b613097876101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050614c96565b15156130a257600080fd5b8660010160189054906101000a900463ffffffff1663ffffffff1695506006868154811015156130ce57fe5b9060005260206000209060020201945086600101601e9054906101000a900461ffff16935086600101601e9054906101000a900461ffff1661ffff1685600101601e9054906101000a900461ffff1661ffff16111561313d5784600101601e9054906101000a900461ffff1693505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d9f5aed8860000154876000015460018b60010160089054906101000a900467ffffffffffffffff16036000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018267ffffffffffffffff1681526020019350505050602060405180830381600087803b151561321357600080fd5b6102c65a03f1151561322457600080fd5b505050604051805190509250600760008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150613294898860010160189054906101000a900463ffffffff1663ffffffff166001870161ffff168686614cd1565b90508660010160186101000a81549063ffffffff0219169055601060008154809291906001900391905055503373ffffffffffffffffffffffffffffffffffffffff166108fc600f549081150290604051600060405180830381858888f193505050505080975050505050505050919050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561336857600080fd5b600e600083815260200190815260200160002060009054906101000a900461ffff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061343957506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806134915750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561349c57600080fd5b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b151561352157600080fd5b6102c65a03f1151561353257600080fd5b505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156135ba57600080fd5b6102c65a03f115156135cb57600080fd5b505050565b6040805190810160405280600381526020017f434254000000000000000000000000000000000000000000000000000000000081525081565b600381600e8110151561361857fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1615151561368757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156136c357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156136fe57600080fd5b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561375b57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156137b857600080fd5b6137c23382614368565b15156137cd57600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff1614151561380457600080fd5b61380f338383614563565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561389e57600080fd5b6138a88282614fda565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561390a57600080fd5b819050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561396857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b61138860125410151561397a57600080fd5b60126000815480929190600101919050555061399b60008060008685614cd1565b50505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139ff57600080fd5b61afc8601354101515613a1157600080fd5b613a2060008060008530614cd1565b9050613a4e81600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a82613a95615205565b600062015180306040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515613b3557600080fd5b6102c65a03f11515613b4657600080fd5b5050506013600081548092919060010191905055505050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515613bc057600080fd5b613bcd8686868686614cd1565b905095945050505050565b600080600683815481101515613bea57fe5b90600052602060002090600202019050600083118015613d3d5750613d3c83826101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b5b915050919050565b61138881565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515613dd057600080fd5b6000600e600083815260200190815260200160002060009054906101000a900461ffff1661ffff16141515613e0457600080fd5b613e0d8161442a565b50565b6000600260149054906101000a900460ff16151515613e2e57600080fd5b613e383383614368565b1515613e4357600080fd5b613e4c82613bd8565b1515613e5757600080fd5b613e618284615377565b1515613e6c57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c55d0f56846000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515613f0557600080fd5b6102c65a03f11515613f1657600080fd5b505050604051805190509050600f5481013410151515613f3557600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663454a2ab3600f543403856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506000604051808303818588803b1515613fc957600080fd5b6125ee5a03f11515613fda57600080fd5b50505050613ff48263ffffffff168463ffffffff166153d0565b505050565b60135481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260149054906101000a900460ff1615151561404457600080fd5b600f54341015151561405557600080fd5b61405f3385614368565b151561406a57600080fd5b6140748385614b83565b151561407f57600080fd5b60068481548110151561408e57fe5b906000526020600020906002020191506141d584836101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b15156141e057600080fd5b6006838154811015156141ef57fe5b9060005260206000209060020201905061433683826101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b151561434157600080fd5b61434d8285838661496e565b151561435857600080fd5b61436284846153d0565b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b806009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000808211151561443a57600080fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156144ac57600080fd5b600b600081819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506144f381600084614563565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156145d3576007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055614675565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151561476857600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600a600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b6000808261ffff1611151561482057600080fd5b600e600084815260200190815260200160002060009054906101000a900461ffff1690508161ffff1682821661ffff1614151561485c57600080fd5b818118905080600e600085815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507f96b828b49c6eb235f60dde08b68959e6baef50b35a662b6db3cade02872d32308382604051808381526020018261ffff1661ffff1681526020019250505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561493657600080fd5b600260149054906101000a900460ff16151561495157600080fd5b6000600260146101000a81548160ff021916908315150217905550565b6000818414156149815760009050614b7b565b818560010160109054906101000a900463ffffffff1663ffffffff1614806149c25750818560010160149054906101000a900463ffffffff1663ffffffff16145b156149d05760009050614b7b565b838360010160109054906101000a900463ffffffff1663ffffffff161480614a115750838360010160149054906101000a900463ffffffff1663ffffffff16145b15614a1f5760009050614b7b565b60008360010160109054906101000a900463ffffffff1663ffffffff161480614a62575060008560010160109054906101000a900463ffffffff1663ffffffff16145b15614a705760019050614b7b565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff161480614ae557508460010160149054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff16145b15614af35760009050614b7b565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff161480614b6857508460010160149054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff16145b15614b765760009050614b7b565b600190505b949350505050565b60008060006007600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480614c8c57508173ffffffffffffffffffffffffffffffffffffffff16600a600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9250505092915050565b6000808260a0015163ffffffff1614158015614cca57504367ffffffffffffffff16826040015167ffffffffffffffff1611155b9050919050565b600080614cdc615684565b60008863ffffffff1689141515614cf257600080fd5b8763ffffffff1688141515614d0657600080fd5b8661ffff1687141515614d1857600080fd5b600287811515614d2457fe5b049250600d8361ffff161115614d3957600d92505b610100604051908101604052808781526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018a63ffffffff1681526020018963ffffffff168152602001600063ffffffff1681526020018461ffff1681526020018861ffff168152509150600160068054806001018281614dbc91906156f8565b916000526020600020906002020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff1681141515614f0e57600080fd5b7fa2950fd8c03e7518275ee57e05ca76c671969b5445b12b1aeea4b0b30195e5df8582846060015163ffffffff16856080015163ffffffff168660000151876020015167ffffffffffffffff16604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a1614fcb60008683614563565b80935050505095945050505050565b6000806000808461ffff16111515614ff157600080fd5b600e600086815260200190815260200160002060009054906101000a900461ffff169250600084841661ffff1614151561502a57600080fd5b60006001851661ffff1611156150835760068581548110151561504957fe5b9060005260206000209060020201915060008260010160189054906101000a900463ffffffff1663ffffffff1614151561508257600080fd5b5b60006002851661ffff161115615184576007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561512657600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561518357600080fd5b5b838317925082600e600087815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507f96b828b49c6eb235f60dde08b68959e6baef50b35a662b6db3cade02872d32308584604051808381526020018261ffff1661ffff1681526020019250505060405180910390a15050505050565b6000806000600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac9d94c6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561529857600080fd5b6102c65a03f115156152a957600080fd5b505050604051805190509150816fffffffffffffffffffffffffffffffff16821415156152d557600080fd5b6002828115156152e157fe5b0482019050662386f26fc1000081101561530057662386f26fc1000090505b809250505090565b6000808260a0015163ffffffff1614801561533b57504367ffffffffffffffff16826040015167ffffffffffffffff1611155b801561536f575060006001600e600086815260200190815260200160002060009054906101000a900461ffff161661ffff16145b905092915050565b600080600060068581548110151561538b57fe5b906000526020600020906002020191506006848154811015156153aa57fe5b906000526020600020906002020190506153c68286838761496e565b9250505092915050565b6000806006838154811015156153e257fe5b9060005260206000209060020201915060068481548110151561540157fe5b90600052602060002090600202019050828160010160186101000a81548163ffffffff021916908363ffffffff16021790555061543d8261559a565b6154468161559a565b600a600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556010600081548092919060010191905055507f241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b806007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685858460010160089054906101000a900467ffffffffffffffff16604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018267ffffffffffffffff16815260200194505050505060405180910390a150505050565b43600554600383600101601c9054906101000a900461ffff1661ffff16600e811015156155c357fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168115156155ee57fe5b04018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600d81600101601c9054906101000a900461ffff1661ffff16101561566d57600181600101601c8282829054906101000a900461ffff160192506101000a81548161ffff021916908361ffff1602179055505b50565b602060405190810160405280600081525090565b6101006040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff1681525090565b81548183558181151161572557600202816002028360005260206000209182019101615724919061572a565b5b505050565b6157f391905b808211156157ef576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff021916905550600201615730565b5090565b905600a165627a7a7230582018d63b4358ce375a48b0e3d10e02cef819212a7f1d5bf68fc9b6278dc6643eec0029

Swarm Source

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.