ETH Price: $3,435.13 (-6.88%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Balance124334882021-05-14 16:08:321334 days ago1621008512IN
0x3BCbd209...d94a55A0D
0 ETH0.00525887158
Create Sale Auct...73568862019-03-12 21:57:442127 days ago1552427864IN
0x3BCbd209...d94a55A0D
0 ETH0.000238232
Create Sale Auct...66383252018-11-03 22:19:532256 days ago1541283593IN
0x3BCbd209...d94a55A0D
0 ETH0.00047624
Transfer65573762018-10-21 16:31:122270 days ago1540139472IN
0x3BCbd209...d94a55A0D
0 ETH0.00033737
Transfer65165902018-10-15 0:25:112276 days ago1539563111IN
0x3BCbd209...d94a55A0D
0 ETH0.0006637420
Transfer63260612018-09-13 20:25:262307 days ago1536870326IN
0x3BCbd209...d94a55A0D
0 ETH0.000181355.46456
Transfer63260232018-09-13 20:16:232307 days ago1536869783IN
0x3BCbd209...d94a55A0D
0 ETH0.000250615.200888
Transfer63260102018-09-13 20:12:542307 days ago1536869574IN
0x3BCbd209...d94a55A0D
0 ETH0.000293986.100999
Transfer63260032018-09-13 20:11:302307 days ago1536869490IN
0x3BCbd209...d94a55A0D
0 ETH0.000293986.100999
Transfer63259972018-09-13 20:09:362307 days ago1536869376IN
0x3BCbd209...d94a55A0D
0 ETH0.000250625.2009999
Transfer63259812018-09-13 20:06:322307 days ago1536869192IN
0x3BCbd209...d94a55A0D
0 ETH0.000250625.2009999
Transfer63259782018-09-13 20:05:322307 days ago1536869132IN
0x3BCbd209...d94a55A0D
0 ETH0.000250625.2009999
Transfer63259752018-09-13 20:05:022307 days ago1536869102IN
0x3BCbd209...d94a55A0D
0 ETH0.000250625.2009999
Transfer63259602018-09-13 20:02:282307 days ago1536868948IN
0x3BCbd209...d94a55A0D
0 ETH0.000250625.2009999
Transfer63259542018-09-13 20:00:572307 days ago1536868857IN
0x3BCbd209...d94a55A0D
0 ETH0.0006264313
Transfer63259362018-09-13 19:55:552307 days ago1536868555IN
0x3BCbd209...d94a55A0D
0 ETH0.000269895.60099
Transfer62816252018-09-06 10:00:522315 days ago1536228052IN
0x3BCbd209...d94a55A0D
0 ETH0.0003318710
Transfer62686372018-09-04 5:43:352317 days ago1536039815IN
0x3BCbd209...d94a55A0D
0 ETH0.0004921220
Transfer62686362018-09-04 5:43:132317 days ago1536039793IN
0x3BCbd209...d94a55A0D
0 ETH0.0006637420
Transfer62642182018-09-03 11:57:022318 days ago1535975822IN
0x3BCbd209...d94a55A0D
0 ETH0.0006650220
Transfer62641182018-09-03 11:32:482318 days ago1535974368IN
0x3BCbd209...d94a55A0D
0 ETH0.000123035
Transfer62637612018-09-03 10:02:592318 days ago1535968979IN
0x3BCbd209...d94a55A0D
0 ETH0.0006637420
Create Sale Auct...62574842018-09-02 8:55:382319 days ago1535878538IN
0x3BCbd209...d94a55A0D
0 ETH0.000273812.3
Create Sale Auct...62574532018-09-02 8:49:292319 days ago1535878169IN
0x3BCbd209...d94a55A0D
0 ETH0.0023810420
Transfer62543552018-09-01 20:14:562319 days ago1535832896IN
0x3BCbd209...d94a55A0D
0 ETH0.0006637420
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
124334882021-05-14 16:08:321334 days ago1621008512
0x3BCbd209...d94a55A0D
0.16330928 ETH
124334452021-05-14 16:00:031334 days ago1621008003
0x3BCbd209...d94a55A0D
0.16330928 ETH
60461952018-07-28 16:36:162355 days ago1532795776
0x3BCbd209...d94a55A0D
1.14058532 ETH
60461852018-07-28 16:34:252355 days ago1532795665
0x3BCbd209...d94a55A0D
1.14058532 ETH
60461762018-07-28 16:31:142355 days ago1532795474
0x3BCbd209...d94a55A0D
12.97012069 ETH
58387892018-06-23 7:27:582390 days ago1529738878
0x3BCbd209...d94a55A0D
0.0408081 ETH
58385182018-06-23 6:21:522390 days ago1529734912
0x3BCbd209...d94a55A0D
0.04452961 ETH
58384432018-06-23 6:05:252390 days ago1529733925
0x3BCbd209...d94a55A0D
0.13452435 ETH
58383582018-06-23 5:40:272390 days ago1529732427
0x3BCbd209...d94a55A0D
0.0323581 ETH
58381412018-06-23 4:48:412390 days ago1529729321
0x3BCbd209...d94a55A0D
0.02699475 ETH
58376032018-06-23 2:28:582390 days ago1529720938
0x3BCbd209...d94a55A0D
0.03974638 ETH
58375492018-06-23 2:14:562390 days ago1529720096
0x3BCbd209...d94a55A0D
0.0884762 ETH
58372472018-06-23 0:57:442390 days ago1529715464
0x3BCbd209...d94a55A0D
0.06038978 ETH
58371482018-06-23 0:31:452390 days ago1529713905
0x3BCbd209...d94a55A0D
0.03820305 ETH
58366592018-06-22 22:23:412390 days ago1529706221
0x3BCbd209...d94a55A0D
0.04338032 ETH
58362512018-06-22 20:51:262390 days ago1529700686
0x3BCbd209...d94a55A0D
0.0250136 ETH
58360702018-06-22 20:09:472390 days ago1529698187
0x3BCbd209...d94a55A0D
0.17056821 ETH
58360202018-06-22 19:59:052390 days ago1529697545
0x3BCbd209...d94a55A0D
0.01995673 ETH
58359722018-06-22 19:48:022390 days ago1529696882
0x3BCbd209...d94a55A0D
0.10608767 ETH
58355702018-06-22 18:09:072391 days ago1529690947
0x3BCbd209...d94a55A0D
0.05284826 ETH
58355242018-06-22 17:56:112391 days ago1529690171
0x3BCbd209...d94a55A0D
0.02190505 ETH
58351872018-06-22 16:32:092391 days ago1529685129
0x3BCbd209...d94a55A0D
0.03804981 ETH
58349502018-06-22 15:35:372391 days ago1529681737
0x3BCbd209...d94a55A0D
0.03558705 ETH
58346472018-06-22 14:21:242391 days ago1529677284
0x3BCbd209...d94a55A0D
0.04508783 ETH
58345432018-06-22 13:55:022391 days ago1529675702
0x3BCbd209...d94a55A0D
0.02273691 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DopeRaiderCore

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.19;

// DopeRaider Narcos Contract
// by gasmasters.io
// contact: [email protected]

contract DistrictsCoreInterface {
  // callable by other contracts to control economy
  function isDopeRaiderDistrictsCore() public pure returns (bool);
  function increaseDistrictWeed(uint256 _district, uint256 _quantity) public;
  function increaseDistrictCoke(uint256 _district, uint256 _quantity) public;
  function distributeRevenue(uint256 _district , uint8 _splitW, uint8 _splitC) public payable;
  function getNarcoLocation(uint256 _narcoId) public view returns (uint8 location);
}

/// @title sale clock auction interface
contract SaleClockAuction {
  function isSaleClockAuction() public pure returns (bool);
  function createAuction(uint256 _tokenId,  uint256 _startingPrice,uint256 _endingPrice,uint256 _duration,address _seller)public;
  function withdrawBalance() public;
  function averageGen0SalePrice() public view returns (uint256);

}


//// @title A facet of NarcoCore that manages special access privileges.
contract NarcoAccessControl {
    /// @dev Emited when contract is upgraded
    event ContractUpgrade(address newContract);

    address public ceoAddress;
    address public cooAddress;

    // @dev Keeps track whether the contract is paused. When that is true, most actions are blocked
    bool public paused = false;

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

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

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

        ceoAddress = _newCEO;
    }

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

        cooAddress = _newCOO;
    }

    function withdrawBalance() external onlyCLevel {
        msg.sender.transfer(address(this).balance);
    }


    /*** Pausable functionality adapted from OpenZeppelin ***/

    /// @dev Modifier to allow actions only when the contract IS NOT paused
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenPaused {
        require(paused);
        _;
    }

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

    function unpause() public onlyCLevel whenPaused {
        // can't unpause if contract was upgraded
        paused = false;
    }

    /// @dev The address of the calling contract
    address public districtContractAddress;

    DistrictsCoreInterface public districtsCore;

    function setDistrictAddress(address _address) public onlyCLevel {
        _setDistrictAddresss(_address);
    }

    function _setDistrictAddresss(address _address) internal {
      DistrictsCoreInterface candidateContract = DistrictsCoreInterface(_address);
      require(candidateContract.isDopeRaiderDistrictsCore());
      districtsCore = candidateContract;
      districtContractAddress = _address;
    }


    modifier onlyDopeRaiderContract() {
        require(msg.sender == districtContractAddress);
        _;
    }




}

/// @title Base contract for DopeRaider. Holds all common structs, events and base variables.
contract NarcoBase is NarcoAccessControl {
    /*** EVENTS ***/

    event NarcoCreated(address indexed owner, uint256 narcoId, string genes);

    /// @dev Transfer event as defined in current draft of ERC721. Emitted every time a narcos
    ///  ownership is assigned, including newly created narcos.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);


 /*** DATA TYPES ***/

    // consumable indexes
    /*
    uint constant gasIndex = 0;
    uint constant seedsIndex = 1;
    uint constant chemicalsIndex = 2;
    uint constant ammoIndex = 3;

    // skills indexes  - each skill can range from 1 - 10 in level
    uint constant speedIndex = 0; // speed of travel
    uint constant growIndex = 1; // speed/yield of grow
    uint constant refineIndex = 2; // refine coke
    uint constant attackIndex = 3; // attack
    uint constant defenseIndex = 4; // defense
    uint constant capacityIndex = 5; // how many items can be carried.

    // stat indexes
    uint constant dealsCompleted = 0; // dealsCompleted
    uint constant weedGrowCompleted = 1; // weedGrowCompleted
    uint constant cokeRefineCompleted = 2; // refineCompleted
    uint constant attacksSucceeded = 3; // attacksSucceeded
    uint constant defendedSuccessfully = 4; defendedSuccessfully
    uint constant raidsCompleted = 5; // raidsCompleted
    uint constant escapeHijack = 6; // escapeHijack
    uint constant travelling = 7; // traveller
    uint constant recruited = 8; // recruitment
*/


    /// @dev The main Narco struct. Every narco in DopeRaider is represented by a copy
    ///  of this structure.
    struct Narco {
        // The Narco's genetic code is packed into these 256-bits.
        string genes; // represents his avatar
        string narcoName;
        // items making level
        uint16 [9] stats;
        // inventory totals
        uint16 weedTotal;
        uint16 cokeTotal;
        uint8 [4] consumables; // gas, seeds, chemicals, ammo
        uint16 [6] skills;   // travel time, grow, refine, attack, defend carry
        uint256 [6] cooldowns; // skill cooldown periods speed, grow, refine, attack, others if needed
        uint8 homeLocation;
    }

    /*** STORAGE ***/

    /// @dev An array containing the Narco struct for all Narcos in existence. The ID
    ///  of each narco is actually an index into this array.
    Narco[] narcos;

    /// @dev A mapping from  narco IDs to the address that owns them. All  narcos have
    ///  some valid owner address, even gen0  narcos are created with a non-zero owner.
    mapping (uint256 => address) public narcoIndexToOwner;

    // @dev A mapping from owner address to count of tokens that address owns.
    //  Used internally inside balanceOf() to resolve ownership count.
    mapping (address => uint256) ownershipTokenCount;

    /// @dev A mapping from NarcoIDs to an address that has been approved to call
    ///  transferFrom(). A zero value means no approval is outstanding.
    mapping (uint256 => address) public  narcoIndexToApproved;

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        // since the number of  narcos is capped to 2^32
        // there is no way to overflow this
        ownershipTokenCount[_to]++;
        narcoIndexToOwner[_tokenId] = _to;

        if (_from != address(0)) {
            ownershipTokenCount[_from]--;
            delete narcoIndexToApproved[_tokenId];
        }

        Transfer(_from, _to, _tokenId);
    }

    // Will generate a new Narco and generate the event
    function _createNarco(
        string _genes,
        string _name,
        address _owner
    )
        internal
        returns (uint)
    {

        uint16[6] memory randomskills= [
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+1),
            uint16(random(9)+31)
        ];

        uint256[6] memory cools;
        uint16[9] memory nostats;

        Narco memory _narco = Narco({
            genes: _genes,
            narcoName: _name,
            cooldowns: cools,
            stats: nostats,
            weedTotal: 0,
            cokeTotal: 0,
            consumables: [4,6,2,1],
            skills: randomskills,
            homeLocation: uint8(random(6)+1)
        });

        uint256 newNarcoId = narcos.push(_narco) - 1;
        require(newNarcoId <= 4294967295);

        // raid character (token 0) live in 7 and have random special skills
        if (newNarcoId==0){
            narcos[0].homeLocation=7; // in vice island
            narcos[0].skills[4]=800; // defense
            narcos[0].skills[5]=65535; // carry
        }

        NarcoCreated(_owner, newNarcoId, _narco.genes);
        _transfer(0, _owner, newNarcoId);


        return newNarcoId;
    }

    function subToZero(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b <= a){
          return a - b;
        }else{
          return 0;
        }
      }

    function getRemainingCapacity(uint256 _narcoId) public view returns (uint16 capacity){
        uint256 usedCapacity = narcos[_narcoId].weedTotal + narcos[_narcoId].cokeTotal + narcos[_narcoId].consumables[0]+narcos[_narcoId].consumables[1]+narcos[_narcoId].consumables[2]+narcos[_narcoId].consumables[3];
        capacity = uint16(subToZero(uint256(narcos[_narcoId].skills[5]), usedCapacity));
    }

    // respect it's called now
    function getLevel(uint256 _narcoId) public view returns (uint16 rank){

    /*
      dealsCompleted = 0; // dealsCompleted
      weedGrowCompleted = 1; // weedGrowCompleted
      cokeRefineCompleted = 2; // refineCompleted
      attacksSucceeded = 3; // attacksSucceeded
      defendedSuccessfully = 4; defendedSuccessfully
      raidsCompleted = 5; // raidsCompleted
      escapeHijack = 6; // escapeHijack
      travel = 7; // travelling
    */

        rank =  (narcos[_narcoId].stats[0]/12)+
                 (narcos[_narcoId].stats[1]/4)+
                 (narcos[_narcoId].stats[2]/4)+
                 (narcos[_narcoId].stats[3]/6)+
                 (narcos[_narcoId].stats[4]/6)+
                 (narcos[_narcoId].stats[5]/1)+
                 (narcos[_narcoId].stats[7]/12)
                 ;
    }

    // pseudo random - but does that matter?
    uint64 _seed = 0;
    function random(uint64 upper) private returns (uint64 randomNumber) {
       _seed = uint64(keccak256(keccak256(block.blockhash(block.number-1), _seed), now));
       return _seed % upper;
     }


    // never call this from a contract
    /// @param _owner The owner whose tokens we are interested in.
    function narcosByOwner(address _owner) public view returns(uint256[] ownedNarcos) {
       uint256 tokenCount = ownershipTokenCount[_owner];
        uint256 totalNarcos = narcos.length - 1;
        uint256[] memory result = new uint256[](tokenCount);
        uint256 narcoId;
        uint256 resultIndex=0;
        for (narcoId = 0; narcoId <= totalNarcos; narcoId++) {
          if (narcoIndexToOwner[narcoId] == _owner) {
            result[resultIndex] = narcoId;
            resultIndex++;
          }
        }
        return result;
    }


}


/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
contract ERC721 {
    function implementsERC721() public pure returns (bool);
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) public view returns (address owner);
    function approve(address _to, uint256 _tokenId) public;
    function transferFrom(address _from, address _to, uint256 _tokenId) public;
    function transfer(address _to, uint256 _tokenId) public;
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    // Optional
    // function name() public view returns (string name);
    // function symbol() public view returns (string symbol);
    // function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId);
    // function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl);
}

/// @title The facet of the DopeRaider core contract that manages ownership, ERC-721 (draft) compliant.
contract NarcoOwnership is NarcoBase, ERC721 {
    string public name = "DopeRaider";
    string public symbol = "DOPR";

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

    /// @dev Checks if a given address is the current owner of a particular narco.
    /// @param _claimant the address we are validating against.
    /// @param _tokenId narco id, only valid when > 0
    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return narcoIndexToOwner[_tokenId] == _claimant;
    }

    /// @dev Checks if a given address currently has transferApproval for a particular narco.
    /// @param _claimant the address we are confirming narco is approved for.
    /// @param _tokenId narco id, only valid when > 0
    function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return narcoIndexToApproved[_tokenId] == _claimant;
    }

    /// @dev Marks an address as being approved for transferFrom(), overwriting any previous
    ///  approval. Setting _approved to address(0) clears all transfer approval.
    ///  NOTE: _approve() does NOT send the Approval event.
    function _approve(uint256 _tokenId, address _approved) internal {
        narcoIndexToApproved[_tokenId] = _approved;
    }


    /// @notice Returns the number of narcos owned by a specific address.
    /// @param _owner The owner address to check.
    function balanceOf(address _owner) public view returns (uint256 count) {
        return ownershipTokenCount[_owner];
    }

    /// @notice Transfers a narco to another address. If transferring to a smart
    ///  contract be VERY CAREFUL to ensure that it is aware of ERC-721 (or
    ///  DopeRaider specifically) or your narco may be lost forever. Seriously.
    /// @param _to The address of the recipient, can be a user or contract.
    /// @param _tokenId The ID of the narco to transfer.
    function transfer(
        address _to,
        uint256 _tokenId
    )
        public

    {
        require(_to != address(0));
        require(_owns(msg.sender, _tokenId));

        _transfer(msg.sender, _to, _tokenId);
    }

    /// @notice Grant another address the right to transfer a specific narco via
    ///  transferFrom(). This is the preferred flow for transfering NFTs to contracts.
    /// @param _to The address to be granted transfer approval. Pass address(0) to
    ///  clear all approvals.
    /// @param _tokenId The ID of the narco that can be transferred if this call succeeds.
    function approve(
        address _to,
        uint256 _tokenId
    )
        public

    {
        require(_owns(msg.sender, _tokenId));

        _approve(_tokenId, _to);

        Approval(msg.sender, _to, _tokenId);
    }

    /// @notice Transfer a narco owned by another address, for which the calling address
    ///  has previously been granted transfer approval by the owner.
    /// @param _from The address that owns the narco to be transfered.
    /// @param _to The address that should take ownership of the narco. Can be any address,
    ///  including the caller.
    /// @param _tokenId The ID of the narco to be transferred.
    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    )
        public

    {
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));
        require(_to != address(0));

        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public view returns (uint) {
        return narcos.length - 1;
    }

    function ownerOf(uint256 _tokenId)
        public
        view
        returns (address owner)
    {
        owner = narcoIndexToOwner[_tokenId];

        require(owner != address(0));
    }



}


// this helps with district functionality
// it gives the ability to an external contract to do the following:
// * update narcos stats
contract NarcoUpdates is NarcoOwnership {

    function updateWeedTotal(uint256 _narcoId, bool _add, uint16 _total) public onlyDopeRaiderContract {
      if(_add==true){
        narcos[_narcoId].weedTotal+= _total;
      }else{
        narcos[_narcoId].weedTotal-= _total;
      }
    }

    function updateCokeTotal(uint256 _narcoId, bool _add, uint16 _total) public onlyDopeRaiderContract {
       if(_add==true){
        narcos[_narcoId].cokeTotal+= _total;
      }else{
        narcos[_narcoId].cokeTotal-= _total;
      }
    }

    function updateConsumable(uint256 _narcoId, uint256 _index, uint8 _new) public onlyDopeRaiderContract  {
      narcos[_narcoId].consumables[_index] = _new;
    }

    function updateSkill(uint256 _narcoId, uint256 _index, uint16 _new) public onlyDopeRaiderContract  {
      narcos[_narcoId].skills[_index] = _new;
    }

    function incrementStat(uint256 _narcoId , uint256 _index) public onlyDopeRaiderContract  {
      narcos[_narcoId].stats[_index]++;
    }

    function setCooldown(uint256 _narcoId , uint256 _index , uint256 _new) public onlyDopeRaiderContract  {
      narcos[_narcoId].cooldowns[_index]=_new;
    }

}

/// @title Handles creating auctions for sale of narcos.
///  This wrapper of ReverseAuction exists only so that users can create
///  auctions with only one transaction.
contract NarcoAuction is NarcoUpdates {
    SaleClockAuction public saleAuction;

    function setSaleAuctionAddress(address _address) public onlyCLevel {
        SaleClockAuction candidateContract = SaleClockAuction(_address);
        require(candidateContract.isSaleClockAuction());
        saleAuction = candidateContract;
    }

    function createSaleAuction(
        uint256 _narcoId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        public
        whenNotPaused
    {
        // Auction contract checks input sizes
        // If narco is already on any auction, this will throw
        // because it will be owned by the auction contract
        require(_owns(msg.sender, _narcoId));
        _approve(_narcoId, saleAuction);
        // Sale auction throws if inputs are invalid and clears
        // transfer approval after escrowing the narco.
        saleAuction.createAuction(
            _narcoId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    /// @dev Transfers the balance of the sale auction contract
    /// to the DopeRaiderCore contract. We use two-step withdrawal to
    /// prevent two transfer calls in the auction bid function.
    function withdrawAuctionBalances() external onlyCLevel {
        saleAuction.withdrawBalance();
    }
}


/// @title all functions related to creating narcos
contract NarcoMinting is NarcoAuction {

    // Limits the number of narcos the contract owner can ever create.
    uint256 public promoCreationLimit = 200;
    uint256 public gen0CreationLimit = 5000;

    // Constants for gen0 auctions.
    uint256 public gen0StartingPrice = 1 ether;
    uint256 public gen0EndingPrice = 20 finney;
    uint256 public gen0AuctionDuration = 1 days;

    // Counts the number of narcos the contract owner has created.
    uint256 public promoCreatedCount;
    uint256 public gen0CreatedCount;

    /// @dev we can create promo narco, up to a limit
    function createPromoNarco(
        string _genes,
        string _name,
        address _owner
    ) public onlyCLevel {
        if (_owner == address(0)) {
             _owner = cooAddress;
        }
        require(promoCreatedCount < promoCreationLimit);
        require(gen0CreatedCount < gen0CreationLimit);

        promoCreatedCount++;
        gen0CreatedCount++;

        _createNarco(_genes, _name, _owner);
    }

    /// @dev Creates a new gen0 narco with the given genes and
    ///  creates an auction for it.
    function createGen0Auction(
       string _genes,
        string _name
    ) public onlyCLevel {
        require(gen0CreatedCount < gen0CreationLimit);

        uint256 narcoId = _createNarco(_genes,_name,address(this));

        _approve(narcoId, saleAuction);

        saleAuction.createAuction(
            narcoId,
            _computeNextGen0Price(),
            gen0EndingPrice,
            gen0AuctionDuration,
            address(this)
        );

        gen0CreatedCount++;
    }

    /// @dev Computes the next gen0 auction starting price, given
    ///  the average of the past 4 prices + 50%.
    function _computeNextGen0Price() internal view returns (uint256) {
        uint256 avePrice = saleAuction.averageGen0SalePrice();

        // sanity check to ensure we don't overflow arithmetic (this big number is 2^128-1).
        require(avePrice < 340282366920938463463374607431768211455);

        uint256 nextPrice = avePrice + (avePrice / 2);

        // We never auction for less than starting price
        if (nextPrice < gen0StartingPrice) {
            nextPrice = gen0StartingPrice;
        }

        return nextPrice;
    }
}


/// @title DopeRaider: Collectible, narcos on the Ethereum blockchain.
/// @dev The main DopeRaider contract
contract DopeRaiderCore is NarcoMinting {

    // This is the main DopeRaider contract. We have several seperately-instantiated  contracts
    // that handle auctions, districts and the creation of new narcos. By keeping
    // them in their own contracts, we can upgrade them without disrupting the main contract that tracks
    // narco ownership.
    //
    //      - NarcoBase: This is where we define the most fundamental code shared throughout the core
    //             functionality. This includes our main data storage, constants and data types, plus
    //             internal functions for managing these items.
    //
    //      - NarcoAccessControl: This contract manages the various addresses and constraints for operations
    //             that can be executed only by specific roles. Namely CEO, CFO and COO.
    //
    //      - NarcoOwnership: This provides the methods required for basic non-fungible token
    //             transactions, following the draft ERC-721 spec (https://github.com/ethereum/EIPs/issues/721).
    //
    //      - NarcoUpdates: This file contains the methods necessary to allow a separate contract to update narco stats
    //
    //      - NarcoAuction: Here we have the public methods for auctioning or bidding on narcos.
    //             The actual auction functionality is handled in a sibling sales contract,
    //             while auction creation and bidding is mostly mediated through this facet of the core contract.
    //
    //      - NarcoMinting: This final facet contains the functionality we use for creating new gen0 narcos.
    //             We can make up to 4096 "promo" narcos

    // Set in case the core contract is broken and an upgrade is required
    address public newContractAddress;

    bool public gamePaused = true;

    modifier whenGameNotPaused() {
        require(!gamePaused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenGamePaused {
        require(gamePaused);
        _;
    }

    function pause() public onlyCLevel whenGameNotPaused {
        gamePaused = true;
    }

    function unpause() public onlyCLevel whenGamePaused {
        // can't unpause if contract was upgraded
        gamePaused = false;
    }


    // EVENTS
    event GrowWeedCompleted(uint256 indexed narcoId, uint yield);
    event RefineCokeCompleted(uint256 indexed narcoId, uint yield);

    function DopeRaiderCore() public {
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
    }

    /// @dev Used to mark the smart contract as upgraded, in case there is a serious
    ///  breaking bug. This method does nothing but keep track of the new contract and
    ///  emit a message indicating that the new address is set. It's up to clients of this
    ///  contract to update to the new contract address in that case. (This contract will
    ///  be paused indefinitely if such an upgrade takes place.)
    /// @param _v2Address new address
    function setNewAddress(address _v2Address) public onlyCLevel whenPaused {
        newContractAddress = _v2Address;
        ContractUpgrade(_v2Address);
    }

    /// @notice No tipping!
    /// @dev Reject all Ether from being sent here, unless it's from one of the
    ///  two auction contracts. (Hopefully, we can prevent user accidents.)
    function() external payable {
        require(msg.sender == address(saleAuction));
    }

    /// @param _id The ID of the narco of interest.

   function getNarco(uint256 _id)
        public
        view
        returns (
        string  narcoName,
        uint256 weedTotal,
        uint256 cokeTotal,
        uint16[6] skills,
        uint8[4] consumables,
        string genes,
        uint8 homeLocation,
        uint16 level,
        uint256[6] cooldowns,
        uint256 id,
        uint16 [9] stats
    ) {
        Narco storage narco = narcos[_id];
        narcoName = narco.narcoName;
        weedTotal = narco.weedTotal;
        cokeTotal = narco.cokeTotal;
        skills = narco.skills;
        consumables = narco.consumables;
        genes = narco.genes;
        homeLocation = narco.homeLocation;
        level = getLevel(_id);
        cooldowns = narco.cooldowns;
        id = _id;
        stats = narco.stats;
    }

    uint256 public changeIdentityNarcoRespect = 30;
    function setChangeIdentityNarcoRespect(uint256 _respect) public onlyCLevel {
      changeIdentityNarcoRespect=_respect;
    }

    uint256 public personalisationCost = 0.01 ether; // pimp my narco
    function setPersonalisationCost(uint256 _cost) public onlyCLevel {
      personalisationCost=_cost;
    }
    function updateNarco(uint256 _narcoId, string _genes, string _name) public payable whenGameNotPaused {
       require(getLevel(_narcoId)>=changeIdentityNarcoRespect); // minimum level to recruit a narco
       require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
       require(msg.value>=personalisationCost);
       narcos[_narcoId].genes = _genes;
       narcos[_narcoId].narcoName = _name;
    }

    uint256 public respectRequiredToRecruit = 150;

    function setRespectRequiredToRecruit(uint256 _respect) public onlyCLevel {
      respectRequiredToRecruit=_respect;
    }

    function recruitNarco(uint256 _narcoId, string _genes, string _name) public whenGameNotPaused {
       require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
       require(getLevel(_narcoId)>=respectRequiredToRecruit); // minimum level to recruit a narco
       require(narcos[_narcoId].stats[8]<getLevel(_narcoId)/respectRequiredToRecruit); // must have recruited < respect / required reqpect (times)
      _createNarco(_genes,_name, msg.sender);
      narcos[_narcoId].stats[8]+=1; // increase number recruited
    }

   // crafting section
    uint256 public growCost = 0.003 ether;
    function setGrowCost(uint256 _cost) public onlyCLevel{
      growCost=_cost;
    }

    function growWeed(uint256 _narcoId) public payable whenGameNotPaused{
         require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
         require(msg.value>=growCost);
         require(now>narcos[_narcoId].cooldowns[1]); //cooldown must have expired
         uint16 growSkillLevel = narcos[_narcoId].skills[1]; // grow
         uint16 maxYield = 9 + growSkillLevel; // max amount can be grown based on skill
         uint yield = min(narcos[_narcoId].consumables[1],maxYield);
         require(yield>0); // gotta produce something

         // must be home location
         uint8 district = districtsCore.getNarcoLocation(_narcoId);
         require(district==narcos[_narcoId].homeLocation);

         // do the crafting
         uint256 cooldown = now + ((910-(10*growSkillLevel))* 1 seconds); //calculate cooldown switch to minutes later

         narcos[_narcoId].cooldowns[1]=cooldown;
         // use all available  - for now , maybe later make optional
         narcos[_narcoId].consumables[1]=uint8(subToZero(uint256(narcos[_narcoId].consumables[1]),yield));
         narcos[_narcoId].weedTotal+=uint8(yield);

         narcos[_narcoId].stats[1]+=1; // update the statistic for grow
         districtsCore.increaseDistrictWeed(district , yield);
         districtsCore.distributeRevenue.value(growCost)(uint256(district),50,50); // distribute the revenue to districts pots
         GrowWeedCompleted(_narcoId, yield); // notification event
    }


    uint256 public refineCost = 0.003 ether;
    function setRefineCost(uint256 _cost) public onlyCLevel{
      refineCost=_cost;
    }

    function refineCoke(uint256 _narcoId) public payable whenGameNotPaused{
         require(msg.sender==narcoIndexToOwner[_narcoId]); // can't be moving other peoples narcos about
         require(msg.value>=refineCost);
         require(now>narcos[_narcoId].cooldowns[2]); //cooldown must have expired
         uint16 refineSkillLevel = narcos[_narcoId].skills[2]; // refine
         uint16 maxYield = 3+(refineSkillLevel/3); // max amount can be grown based on skill
         uint yield = min(narcos[_narcoId].consumables[2],maxYield);
         require(yield>0); // gotta produce something

         // must be home location
         uint8 district = districtsCore.getNarcoLocation(_narcoId);
         require(district==narcos[_narcoId].homeLocation);

         // do the crafting
        // uint256 cooldown = now + min(3 minutes,((168-(2*refineSkillLevel))* 1 seconds)); // calculate cooldown
         uint256 cooldown = now + ((910-(10*refineSkillLevel))* 1 seconds); // calculate cooldown

         narcos[_narcoId].cooldowns[2]=cooldown;
         // use all available  - for now , maybe later make optional
         narcos[_narcoId].consumables[2]=uint8(subToZero(uint256(narcos[_narcoId].consumables[2]),yield));
         narcos[_narcoId].cokeTotal+=uint8(yield);

         narcos[_narcoId].stats[2]+=1;
         districtsCore.increaseDistrictCoke(district, yield);
         districtsCore.distributeRevenue.value(refineCost)(uint256(district),50,50); // distribute the revenue to districts pots
         RefineCokeCompleted(_narcoId, yield); // notification event

    }


    function min(uint a, uint b) private pure returns (uint) {
             return a < b ? a : b;
    }

}

Contract Security Audit

Contract ABI

[{"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":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cost","type":"uint256"}],"name":"setPersonalisationCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"getRemainingCapacity","outputs":[{"name":"capacity","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"districtContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"personalisationCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getNarco","outputs":[{"name":"narcoName","type":"string"},{"name":"weedTotal","type":"uint256"},{"name":"cokeTotal","type":"uint256"},{"name":"skills","type":"uint16[6]"},{"name":"consumables","type":"uint8[4]"},{"name":"genes","type":"string"},{"name":"homeLocation","type":"uint8"},{"name":"level","type":"uint16"},{"name":"cooldowns","type":"uint256[6]"},{"name":"id","type":"uint256"},{"name":"stats","type":"uint16[9]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"growWeed","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","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":"gen0CreationLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setDistrictAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_genes","type":"string"},{"name":"_name","type":"string"}],"name":"updateNarco","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_genes","type":"string"},{"name":"_name","type":"string"}],"name":"recruitNarco","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_genes","type":"string"},{"name":"_name","type":"string"}],"name":"createGen0Auction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"districtsCore","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"respectRequiredToRecruit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"changeIdentityNarcoRespect","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_respect","type":"uint256"}],"name":"setChangeIdentityNarcoRespect","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"string"},{"name":"_name","type":"string"},{"name":"_owner","type":"address"}],"name":"createPromoNarco","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"getLevel","outputs":[{"name":"rank","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"},{"name":"_new","type":"uint256"}],"name":"setCooldown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"}],"name":"refineCoke","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_add","type":"bool"},{"name":"_total","type":"uint16"}],"name":"updateCokeTotal","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_cost","type":"uint256"}],"name":"setGrowCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"refineCost","outputs":[{"name":"","type":"uint256"}],"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":"gen0EndingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gen0StartingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"promoCreationLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gamePaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"narcoIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_respect","type":"uint256"}],"name":"setRespectRequiredToRecruit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"},{"name":"_new","type":"uint8"}],"name":"updateConsumable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"},{"name":"_new","type":"uint16"}],"name":"updateSkill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"growCost","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":"_narcoId","type":"uint256"},{"name":"_add","type":"bool"},{"name":"_total","type":"uint16"}],"name":"updateWeedTotal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gen0AuctionDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gen0CreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cost","type":"uint256"}],"name":"setRefineCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"narcosByOwner","outputs":[{"name":"ownedNarcos","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_narcoId","type":"uint256"},{"name":"_index","type":"uint256"}],"name":"incrementStat","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"narcoIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"narcoId","type":"uint256"},{"indexed":false,"name":"yield","type":"uint256"}],"name":"GrowWeedCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"narcoId","type":"uint256"},{"indexed":false,"name":"yield","type":"uint256"}],"name":"RefineCokeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"narcoId","type":"uint256"},{"indexed":false,"name":"genes","type":"string"}],"name":"NarcoCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"}]

606060409081526001805460a060020a60ff02191690556008805467ffffffffffffffff191690558051908101604052600a81527f446f706552616964657200000000000000000000000000000000000000000000602082015260099080516200006e9291602001906200016b565b5060408051908101604052600481527f444f5052000000000000000000000000000000000000000000000000000000006020820152600a908051620000b89291602001906200016b565b5060c8600c55611388600d55670de0b6b3a7640000600e5566470de4df820000600f55620151806010556013805460a060020a60ff02191674010000000000000000000000000000000000000000179055601e601455662386f26fc100006015556096601655660aa87bee538000601781905560185534156200013a57600080fd5b60008054600160a060020a033316600160a060020a0319918216811790925560018054909116909117905562000210565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001ae57805160ff1916838001178555620001de565b82800160010185558215620001de579182015b82811115620001de578251825591602001919060010190620001c1565b50620001ec929150620001f0565b5090565b6200020d91905b80821115620001ec5760008155600101620001f7565b90565b61380080620002206000396000f3006060604052600436106102c65763ffffffff60e060020a60003504166305e4554681146102e357806306fdde0314610308578063095ea7b3146103925780630a0f8168146103b45780630a59bf2d146103e35780631051db34146103f957806318160ddd146104205780631b8ef0bb1461043357806320f317fb1461046057806323b872dd1461047357806327d7874c1461049b57806329337bda146104ba5780632ba73c15146104cd57806333f30a43146104ec57806334e415db146106c45780633d7d3f5a146106cf5780633f4ba83a146106ee578063404d0e3e146107015780634eb7be5b14610714578063554571db146107335780635c975abb146107c05780635fd8c710146107d35780636352211e146107e657806367907404146107fc5780636af04a57146108945780636fbde40d146108a757806370a08231146108c657806371587988146108e557806371ae973e14610904578063757501c5146109975780637c116ec9146109aa5780637e7e5a75146109bd578063817b106e146109d057806382402743146109e65780638456cb5914610a8457806386481d4014610a975780638b97502814610aad5780638e372dcd14610ac95780638ed5047c14610ad457806391876e5714610af657806395d89b4114610b095780639b4d9ecc14610b1c578063a8a5c22c14610b32578063a9059cbb14610b45578063ab94837414610b67578063ae4d0ff714610b7a578063b047fb5014610b8d578063b531933514610ba0578063c3de1ab914610bb3578063c5c5888114610bc6578063c805914a14610bdc578063cf5f87d014610bf2578063d62f146b14610c11578063e2865b4d14610c31578063e6cbe35114610c44578063e7696a2914610c57578063eb845c1714610c79578063f1ca941014610c8c578063f29c787014610c9f578063f4edb15b14610cb5578063f63c553214610d27578063f6a99bdc14610d40575b600b5433600160a060020a039081169116146102e157600080fd5b005b34156102ee57600080fd5b6102f6610d56565b60405190815260200160405180910390f35b341561031357600080fd5b61031b610d5c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561035757808201518382015260200161033f565b50505050905090810190601f1680156103845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561039d57600080fd5b6102e1600160a060020a0360043516602435610dfa565b34156103bf57600080fd5b6103c7610e5e565b604051600160a060020a03909116815260200160405180910390f35b34156103ee57600080fd5b6102e1600435610e6d565b341561040457600080fd5b61040c610ea8565b604051901515815260200160405180910390f35b341561042b57600080fd5b6102f6610eae565b341561043e57600080fd5b610449600435610eb8565b60405161ffff909116815260200160405180910390f35b341561046b57600080fd5b6103c7611018565b341561047e57600080fd5b6102e1600160a060020a0360043581169060243516604435611027565b34156104a657600080fd5b6102e1600160a060020a0360043516611076565b34156104c557600080fd5b6102f66110c8565b34156104d857600080fd5b6102e1600160a060020a03600435166110ce565b34156104f757600080fd5b610502600435611120565b60405180806020018c81526020018b81526020018a600660200280838360005b8381101561053a578082015183820152602001610522565b5050505090500189600460200280838360005b8381101561056557808201518382015260200161054d565b50505050905001806020018860ff1660ff1681526020018761ffff1661ffff16815260200186600660200280838360005b838110156105ae578082015183820152602001610596565b5050505090500185815260200184600960200280838360005b838110156105df5780820151838201526020016105c7565b5050505090500183810383528e818151815260200191508051906020019080838360005b8381101561061b578082015183820152602001610603565b50505050905090810190601f1680156106485780820380516001836020036101000a031916815260200191505b50838103825289818151815260200191508051906020019080838360005b8381101561067e578082015183820152602001610666565b50505050905090810190601f1680156106ab5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b6102e1600435611438565b34156106da57600080fd5b6102e160043560243560443560643561183a565b34156106f957600080fd5b6102e1611906565b341561070c57600080fd5b6102f6611974565b341561071f57600080fd5b6102e1600160a060020a036004351661197a565b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506119bc95505050505050565b34156107cb57600080fd5b61040c611a8f565b34156107de57600080fd5b6102e1611a9f565b34156107f157600080fd5b6103c7600435611b14565b341561080757600080fd5b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611b3d95505050505050565b341561089f57600080fd5b6103c7611c6a565b34156108b257600080fd5b6102e1600160a060020a0360043516611c79565b34156108d157600080fd5b6102f6600160a060020a0360043516611d43565b34156108f057600080fd5b6102e1600160a060020a0360043516611d5e565b341561090f57600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611e0795505050505050565b34156109a257600080fd5b6103c7611f11565b34156109b557600080fd5b6102f6611f20565b34156109c857600080fd5b6102f6611f26565b34156109db57600080fd5b6102e1600435611f2c565b34156109f157600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611f67915050565b3415610a8f57600080fd5b6102e1611ffb565b3415610aa257600080fd5b61044960043561206e565b3415610ab857600080fd5b6102e1600435602435604435612223565b6102e1600435612273565b3415610adf57600080fd5b6102e1600435602435151561ffff60443516612656565b3415610b0157600080fd5b6102e1612715565b3415610b1457600080fd5b61031b61279b565b3415610b2757600080fd5b6102e1600435612806565b3415610b3d57600080fd5b6102f6612841565b3415610b5057600080fd5b6102e1600160a060020a0360043516602435612847565b3415610b7257600080fd5b6102f6612880565b3415610b8557600080fd5b6102f6612886565b3415610b9857600080fd5b6103c761288c565b3415610bab57600080fd5b6102f661289b565b3415610bbe57600080fd5b61040c6128a1565b3415610bd157600080fd5b6103c76004356128b1565b3415610be757600080fd5b6102e16004356128cc565b3415610bfd57600080fd5b6102e160043560243560ff60443516612907565b3415610c1c57600080fd5b6102e160043560243561ffff60443516612975565b3415610c3c57600080fd5b6102f66129e8565b3415610c4f57600080fd5b6103c76129ee565b3415610c6257600080fd5b6102e1600435602435151561ffff604435166129fd565b3415610c8457600080fd5b6102f6612aa5565b3415610c9757600080fd5b6102f6612aab565b3415610caa57600080fd5b6102e1600435612ab1565b3415610cc057600080fd5b610cd4600160a060020a0360043516612aec565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015610d13578082015183820152602001610cfb565b505050509050019250505060405180910390f35b3415610d3257600080fd5b6102e1600435602435612baa565b3415610d4b57600080fd5b6103c7600435612c25565b60115481565b60098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b820191906000526020600020905b815481529060010190602001808311610dd557829003601f168201915b505050505081565b610e043382612c40565b1515610e0f57600080fd5b610e198183612c64565b8082600160a060020a031633600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054600160a060020a031681565b60015433600160a060020a0390811691161480610e98575060005433600160a060020a039081169116145b1515610ea357600080fd5b601555565b60015b90565b6004546000190190565b600080600483815481101515610eca57fe5b600091825260209091206004600d909202018101548154630100000090910460ff16919085908110610ef857fe5b600091825260209091206004600d9092020181015481546201000090910460ff16919086908110610f2557fe5b600091825260209091206004600d90920201810154815461010090910460ff16919087908110610f5157fe5b600091825260209091206004600d90920201810154815460ff909116919088908110610f7957fe5b90600052602060002090600d020160030160029054906101000a900461ffff16600488815481101515610fa857fe5b90600052602060002090600d020160030160009054906101000a900461ffff16010101010161ffff169050611011600484815481101515610fe557fe5b600091825260209091206005600d9092020101546a0100000000000000000000900461ffff1682612c92565b9392505050565b600254600160a060020a031681565b6110313382612cac565b151561103c57600080fd5b6110468382612c40565b151561105157600080fd5b600160a060020a038216151561106657600080fd5b611071838383612ccc565b505050565b60005433600160a060020a0390811691161461109157600080fd5b600160a060020a03811615156110a657600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b60155481565b60005433600160a060020a039081169116146110e957600080fd5b600160a060020a03811615156110fe57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6111286133a0565b6000806111336133b2565b61113b6133da565b6111436133a0565b60008061114e6133f4565b600061115861341b565b600060048d81548110151561116957fe5b90600052602060002090600d02019050806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b505050506003830154919d505061ffff8082169c506201000090910416995060058101600660c0604051908101604052919060c08301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161124c5790505050505050985080600401600480602002604051908101604052919060808301826000855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116112a957905050505050509750806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113765780601f1061134b57610100808354040283529160200191611376565b820191906000526020600020905b81548152906001019060200180831161135957829003601f168201915b50505050600c8301549198505060ff1695506113918d61206e565b945060068082019060c0604051908101604052919060c0830182845b8154815260200190600101908083116113ad57505050505093508c92508060020160098060200260405190810160405291906101208301826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116113e9579050505050505091505091939597999b90929496989a50565b6000806000806000601360149054906101000a900460ff1615151561145c57600080fd5b60008681526005602052604090205433600160a060020a0390811691161461148357600080fd5b60175434101561149257600080fd5b60048054879081106114a057fe5b600091825260209091206007600d90920201015442116114bf57600080fd5b60048054879081106114cd57fe5b600091825260209091206005600d909202010154600480546201000090920461ffff16965060098701955061153c918890811061150657fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041661ffff8616612d93565b92506000831161154b57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561159c57600080fd5b6102c65a03f115156115ad57600080fd5b5050506040518051905091506004868154811015156115c857fe5b60009182526020909120600c600d90920201015460ff8381169116146115ed57600080fd5b50600480544261ffff600a880261038e0316019182918890811061160d57fe5b600091825260209091206007600d9092020101556004805461166691908890811061163457fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041684612c92565b600480548890811061167457fe5b600091825260209091206004600d909202018101805461ff00191661010060ff94851602179055805491851691889081106116ab57fe5b60009182526020909120600d90910201600301805461ffff19811661ffff91821693909301169190911790556004805460019190889081106116e957fe5b600091825260209091206002600d9092020101805461ffff620100008083048216949094011690920263ffff000019909216919091179055600354600160a060020a031663c3645759838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561177157600080fd5b6102c65a03f1151561178257600080fd5b5050600354601754600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b15156117e957600080fd5b6125ee5a03f115156117fa57600080fd5b50505050857f75b0161e4165930093440d1034d01dc9ec811a5c5c4dab3f0d010a63853bf7348460405190815260200160405180910390a2505050505050565b60015460a060020a900460ff161561185157600080fd5b61185b3385612c40565b151561186657600080fd5b600b5461187d908590600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a858585853360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b15156118ec57600080fd5b6102c65a03f115156118fd57600080fd5b50505050505050565b60015433600160a060020a0390811691161480611931575060005433600160a060020a039081169116145b151561193c57600080fd5b60135460a060020a900460ff16151561195457600080fd5b6013805474ff000000000000000000000000000000000000000019169055565b600d5481565b60015433600160a060020a03908116911614806119a5575060005433600160a060020a039081169116145b15156119b057600080fd5b6119b981612da9565b50565b60135460a060020a900460ff16156119d357600080fd5b6014546119df8461206e565b61ffff1610156119ee57600080fd5b60008381526005602052604090205433600160a060020a03908116911614611a1557600080fd5b601554341015611a2457600080fd5b81600484815481101515611a3457fe5b90600052602060002090600d0201600001908051611a56929160200190613436565b5080600484815481101515611a6757fe5b90600052602060002090600d0201600101908051611a89929160200190613436565b50505050565b60015460a060020a900460ff1681565b60015433600160a060020a0390811691161480611aca575060005433600160a060020a039081169116145b1515611ad557600080fd5b33600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611b1257600080fd5b565b600081815260056020526040902054600160a060020a0316801515611b3857600080fd5b919050565b60135460a060020a900460ff1615611b5457600080fd5b60008381526005602052604090205433600160a060020a03908116911614611b7b57600080fd5b601654611b878461206e565b61ffff161015611b9657600080fd5b601654611ba28461206e565b61ffff16811515611baf57fe5b04600484815481101515611bbf57fe5b600091825260209091206002600d909202010154700100000000000000000000000000000000900461ffff1610611bf557600080fd5b611c00828233612e47565b506001600484815481101515611c1257fe5b60009182526020909120600d90910201600201805461ffff70010000000000000000000000000000000080830482169094011690920271ffff0000000000000000000000000000000019909216919091179055505050565b601354600160a060020a031681565b60015460009033600160a060020a0390811691161480611ca7575060005433600160a060020a039081169116145b1515611cb257600080fd5b5080600160a060020a0381166385b861886000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611cfa57600080fd5b6102c65a03f11515611d0b57600080fd5b505050604051805190501515611d2057600080fd5b600b8054600160a060020a031916600160a060020a039290921691909117905550565b600160a060020a031660009081526006602052604090205490565b60015433600160a060020a0390811691161480611d89575060005433600160a060020a039081169116145b1515611d9457600080fd5b60015460a060020a900460ff161515611dac57600080fd5b60138054600160a060020a031916600160a060020a0383161790557f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051600160a060020a03909116815260200160405180910390a150565b60015460009033600160a060020a0390811691161480611e35575060005433600160a060020a039081169116145b1515611e4057600080fd5b600d5460125410611e5057600080fd5b611e5b838330612e47565b600b54909150611e75908290600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a82611e8f61325e565b600f546010543060405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b1515611eef57600080fd5b6102c65a03f11515611f0057600080fd5b505060128054600101905550505050565b600354600160a060020a031681565b60165481565b60145481565b60015433600160a060020a0390811691161480611f57575060005433600160a060020a039081169116145b1515611f6257600080fd5b601455565b60015433600160a060020a0390811691161480611f92575060005433600160a060020a039081169116145b1515611f9d57600080fd5b600160a060020a0381161515611fbb5750600154600160a060020a03165b600c5460115410611fcb57600080fd5b600d5460125410611fdb57600080fd5b601180546001908101909155601280549091019055611a89838383612e47565b60015433600160a060020a0390811691161480612026575060005433600160a060020a039081169116145b151561203157600080fd5b60135460a060020a900460ff161561204857600080fd5b6013805474ff0000000000000000000000000000000000000000191660a060020a179055565b6000600c60048381548110151561208157fe5b600091825260209091206002600d9092020101546e010000000000000000000000000000900461ffff168115156120b457fe5b0460016004848154811015156120c657fe5b600091825260209091206002600d9092020101546a0100000000000000000000900461ffff168115156120f557fe5b04600660048581548110151561210757fe5b600091825260209091206002600d90920201015468010000000000000000900461ffff1681151561213457fe5b04600660048681548110151561214657fe5b600091825260209091206002600d9092020101546601000000000000900461ffff1681151561217157fe5b046004808781548110151561218257fe5b600091825260209091206002600d909202010154640100000000900461ffff168115156121ab57fe5b04600480888154811015156121bc57fe5b600091825260209091206002600d90920201015462010000900461ffff168115156121e357fe5b04600c6004898154811015156121f557fe5b600091825260209091206002600d90920201015461ffff1681151561221657fe5b0401010101010192915050565b60025433600160a060020a0390811691161461223e57600080fd5b8060048481548110151561224e57fe5b90600052602060002090600d02016006018360068110151561226c57fe5b0155505050565b6000806000806000601360149054906101000a900460ff1615151561229757600080fd5b60008681526005602052604090205433600160a060020a039081169116146122be57600080fd5b6018543410156122cd57600080fd5b60048054879081106122db57fe5b600091825260209091206008600d90920201015442116122fa57600080fd5b600480548790811061230857fe5b600091825260209091206005600d9092020101546004805464010000000090920461ffff169650600380880401955061235f918890811061234557fe5b600091825260209091206004600d9092020101600261151c565b92506000831161236e57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156123bf57600080fd5b6102c65a03f115156123d057600080fd5b5050506040518051905091506004868154811015156123eb57fe5b60009182526020909120600c600d90920201015460ff83811691161461241057600080fd5b50600480544261ffff600a880261038e0316019182918890811061243057fe5b600091825260209091206008600d9092020101556004805461247191908890811061245757fe5b600091825260209091206004600d9092020101600261164a565b600480548890811061247f57fe5b600091825260209091206004600d909202018101805462ff000019166201000060ff94851602179055805491851691889081106124b857fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff00001990921691909117905560048054600191908890811061250157fe5b600091825260209091206002600d9092020101805461ffff6401000000008083048216949094011690920265ffff0000000019909216919091179055600354600160a060020a031663db29fd6e838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561258d57600080fd5b6102c65a03f1151561259e57600080fd5b5050600354601854600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b151561260557600080fd5b6125ee5a03f1151561261657600080fd5b50505050857f770cca5addca826af2b5d12089bab2cda9bd6b50a2c584df148ece0f4cc5e06e8460405190815260200160405180910390a2505050505050565b60025433600160a060020a0390811691161461267157600080fd5b600182151514156126c8578060048481548110151561268c57fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff000019909216919091179055611071565b806004848154811015156126d857fe5b600091825260209091206003600d9092020101805461ffff620100008083048216949094031690920263ffff000019909216919091179055505050565b60015433600160a060020a0390811691161480612740575060005433600160a060020a039081169116145b151561274b57600080fd5b600b54600160a060020a0316635fd8c7106040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561278a57600080fd5b6102c65a03f1151561107157600080fd5b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b60015433600160a060020a0390811691161480612831575060005433600160a060020a039081169116145b151561283c57600080fd5b601755565b60185481565b600160a060020a038216151561285c57600080fd5b6128663382612c40565b151561287157600080fd5b61287c338383612ccc565b5050565b600f5481565b600e5481565b600154600160a060020a031681565b600c5481565b60135460a060020a900460ff1681565b600760205260009081526040902054600160a060020a031681565b60015433600160a060020a03908116911614806128f7575060005433600160a060020a039081169116145b151561290257600080fd5b601655565b60025433600160a060020a0390811691161461292257600080fd5b8060048481548110151561293257fe5b90600052602060002090600d02016004018360048110151561295057fe5b602091828204019190066101000a81548160ff021916908360ff160217905550505050565b60025433600160a060020a0390811691161461299057600080fd5b806004848154811015156129a057fe5b90600052602060002090600d0201600501836006811015156129be57fe5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550505050565b60175481565b600b54600160a060020a031681565b60025433600160a060020a03908116911614612a1857600080fd5b60018215151415612a645780600484815481101515612a3357fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930116919091179055611071565b80600484815481101515612a7457fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930316919091179055505050565b60105481565b60125481565b60015433600160a060020a0390811691161480612adc575060005433600160a060020a039081169116145b1515612ae757600080fd5b601855565b612af46133a0565b600080612aff6133a0565b600160a060020a038516600090815260066020526040808220546004549095506000190193508190859051805910612b345750595b9080825280602002602001820160405250925060009050600091505b838211612b9f57600082815260056020526040902054600160a060020a0388811691161415612b945781838281518110612b8657fe5b602090810290910101526001015b600190910190612b50565b509095945050505050565b60025433600160a060020a03908116911614612bc557600080fd5b6004805483908110612bd357fe5b90600052602060002090600d020160020181600981101515612bf157fe5b6010808204929092018054929091066002026101000a61ffff81810219841693829004811660010116029190911790555050565b600560205260009081526040902054600160a060020a031681565b600081815260056020526040902054600160a060020a038381169116145b92915050565b6000918252600760205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828211612ca45750808203612c5e565b506000612c5e565b600090815260076020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260066020908152604080832080546001019055858352600590915290208054600160a060020a0319169091179055831615612d4d57600160a060020a03831660009081526006602090815260408083208054600019019055838352600790915290208054600160a060020a03191690555b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818310612da25781611011565b5090919050565b80600160a060020a038116636237564c6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612df057600080fd5b6102c65a03f11515612e0157600080fd5b505050604051805190501515612e1657600080fd5b60038054600160a060020a03928316600160a060020a03199182161790915560028054939092169216919091179055565b6000612e516133b2565b612e596133f4565b612e6161341b565b612e696134b4565b600060c060405190810160405280612e816009613300565b60010161ffff1661ffff168152602001612e9b6009613300565b60010161ffff1661ffff168152602001612eb56009613300565b60010161ffff1661ffff168152602001612ecf6009613300565b60010161ffff1661ffff168152602001612ee96009613300565b60010161ffff1661ffff168152602001612f036009613300565b601f0161ffff1661ffff168152509450610120604051908101604052808a8152602001898152602001848152602001600061ffff168152602001600061ffff168152602001608060405190810160405280600460ff168152602001600660ff168152602001600260ff168152602001600160ff168152508152602001868152602001858152602001612f956006613300565b60010160ff168152509150600160048054806001018281612fb69190613525565b600092835260209092208591600d0201815181908051612fda929160200190613436565b50602082015181600101908051612ff5929160200190613436565b50604082015161300b9060028301906009613551565b50606082015160038201805461ffff191661ffff9290921691909117905560808201518160030160026101000a81548161ffff021916908361ffff16021790555060a082015161306190600480840191906135e3565b5060c08201516130779060058301906006613551565b5060e082015161308d9060068084019190613672565b50610100820151600c91909101805460ff191660ff9092169190911790555003905063ffffffff8111156130c057600080fd5b80151561319b576007600460008154811015156130d957fe5b90600052602060002090600d0201600c0160006101000a81548160ff021916908360ff1602179055506103206004600081548110151561311557fe5b6000918252602082206005600d929092020101805469ffff000000000000000019166801000000000000000061ffff9485160217905560048054909190811061315a57fe5b60009182526020909120600d90910201600501805461ffff929092166a0100000000000000000000026bffff00000000000000000000199092169190911790555b600160a060020a0387167f67dea66acb1ab87fd4200e1feb88d278784367a70c65c4cc733c52ebef27e22e82845160405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561320b5780820151838201526020016131f3565b50505050905090810190601f1680156132385780820380516001836020036101000a031916815260200191505b50935050505060405180910390a261325260008883612ccc565b98975050505050505050565b600b5460009081908190600160a060020a031663eac9d94c82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156132ac57600080fd5b6102c65a03f115156132bd57600080fd5b50505060405180519250506fffffffffffffffffffffffffffffffff82106132e457600080fd5b6002820482019050600e54811015612c5e5750600e5492915050565b6008546000906000194301409067ffffffffffffffff1660405191825267ffffffffffffffff1678010000000000000000000000000000000000000000000000000260208201526028016040518091039020426040519182526020820152604090810190519081900390206008805467ffffffffffffffff191667ffffffffffffffff9283161790819055838216911681151561339957fe5b0692915050565b60206040519081016040526000815290565b60c06040519081016040526006815b6000815260001990910190602001816133c15790505090565b6080604051908101604052600081526003602082016133c1565b60c06040519081016040526006815b60008152602001906001900390816134035790505090565b610120604051908101604052600081526008602082016133c1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061347757805160ff19168380011785556134a4565b828001600101855582156134a4579182015b828111156134a4578251825591602001919060010190613489565b506134b092915061369f565b5090565b6103c0604051908101604052806134c96133a0565b81526020016134d66133a0565b81526020016134e361341b565b815260006020820181905260408201526060016134fe6133da565b815260200161350b6133b2565b81526020016135186133f4565b8152600060209091015290565b81548183558181151161107157600d0281600d02836000526020600020918201910161107191906136b9565b6001830191839082156135d75791602002820160005b838211156135a757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613567565b80156135d55782816101000a81549061ffff02191690556002016020816001010492830192600103026135a7565b505b506134b092915061373d565b6001830191839082156136665791602002820160005b8382111561363757835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026135f9565b80156136645782816101000a81549060ff0219169055600101602081600001049283019260010302613637565b505b506134b092915061375c565b82600681019282156134a457916020028201828111156134a4578251825591602001919060010190613489565b610eab91905b808211156134b057600081556001016136a5565b610eab91905b808211156134b05760006136d3828261377a565b6136e160018301600061377a565b6136ef6002830160006137be565b60038201805463ffffffff1916905561370c6004830160006137be565b61371a6005830160006137be565b6137286006830160006137c5565b50600c8101805460ff19169055600d016136bf565b610eab91905b808211156134b057805461ffff19168155600101613743565b610eab91905b808211156134b057805460ff19168155600101613762565b50805460018160011615610100020316600290046000825580601f106137a057506119b9565b601f0160209004906000526020600020908101906119b9919061369f565b5060009055565b506119b990600681019061369f5600a165627a7a723058200f28b8959c158eb5414277529fd27a82caedc0f7ffd1730f3ff2ead374e55ac70029

Deployed Bytecode

0x6060604052600436106102c65763ffffffff60e060020a60003504166305e4554681146102e357806306fdde0314610308578063095ea7b3146103925780630a0f8168146103b45780630a59bf2d146103e35780631051db34146103f957806318160ddd146104205780631b8ef0bb1461043357806320f317fb1461046057806323b872dd1461047357806327d7874c1461049b57806329337bda146104ba5780632ba73c15146104cd57806333f30a43146104ec57806334e415db146106c45780633d7d3f5a146106cf5780633f4ba83a146106ee578063404d0e3e146107015780634eb7be5b14610714578063554571db146107335780635c975abb146107c05780635fd8c710146107d35780636352211e146107e657806367907404146107fc5780636af04a57146108945780636fbde40d146108a757806370a08231146108c657806371587988146108e557806371ae973e14610904578063757501c5146109975780637c116ec9146109aa5780637e7e5a75146109bd578063817b106e146109d057806382402743146109e65780638456cb5914610a8457806386481d4014610a975780638b97502814610aad5780638e372dcd14610ac95780638ed5047c14610ad457806391876e5714610af657806395d89b4114610b095780639b4d9ecc14610b1c578063a8a5c22c14610b32578063a9059cbb14610b45578063ab94837414610b67578063ae4d0ff714610b7a578063b047fb5014610b8d578063b531933514610ba0578063c3de1ab914610bb3578063c5c5888114610bc6578063c805914a14610bdc578063cf5f87d014610bf2578063d62f146b14610c11578063e2865b4d14610c31578063e6cbe35114610c44578063e7696a2914610c57578063eb845c1714610c79578063f1ca941014610c8c578063f29c787014610c9f578063f4edb15b14610cb5578063f63c553214610d27578063f6a99bdc14610d40575b600b5433600160a060020a039081169116146102e157600080fd5b005b34156102ee57600080fd5b6102f6610d56565b60405190815260200160405180910390f35b341561031357600080fd5b61031b610d5c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561035757808201518382015260200161033f565b50505050905090810190601f1680156103845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561039d57600080fd5b6102e1600160a060020a0360043516602435610dfa565b34156103bf57600080fd5b6103c7610e5e565b604051600160a060020a03909116815260200160405180910390f35b34156103ee57600080fd5b6102e1600435610e6d565b341561040457600080fd5b61040c610ea8565b604051901515815260200160405180910390f35b341561042b57600080fd5b6102f6610eae565b341561043e57600080fd5b610449600435610eb8565b60405161ffff909116815260200160405180910390f35b341561046b57600080fd5b6103c7611018565b341561047e57600080fd5b6102e1600160a060020a0360043581169060243516604435611027565b34156104a657600080fd5b6102e1600160a060020a0360043516611076565b34156104c557600080fd5b6102f66110c8565b34156104d857600080fd5b6102e1600160a060020a03600435166110ce565b34156104f757600080fd5b610502600435611120565b60405180806020018c81526020018b81526020018a600660200280838360005b8381101561053a578082015183820152602001610522565b5050505090500189600460200280838360005b8381101561056557808201518382015260200161054d565b50505050905001806020018860ff1660ff1681526020018761ffff1661ffff16815260200186600660200280838360005b838110156105ae578082015183820152602001610596565b5050505090500185815260200184600960200280838360005b838110156105df5780820151838201526020016105c7565b5050505090500183810383528e818151815260200191508051906020019080838360005b8381101561061b578082015183820152602001610603565b50505050905090810190601f1680156106485780820380516001836020036101000a031916815260200191505b50838103825289818151815260200191508051906020019080838360005b8381101561067e578082015183820152602001610666565b50505050905090810190601f1680156106ab5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b6102e1600435611438565b34156106da57600080fd5b6102e160043560243560443560643561183a565b34156106f957600080fd5b6102e1611906565b341561070c57600080fd5b6102f6611974565b341561071f57600080fd5b6102e1600160a060020a036004351661197a565b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506119bc95505050505050565b34156107cb57600080fd5b61040c611a8f565b34156107de57600080fd5b6102e1611a9f565b34156107f157600080fd5b6103c7600435611b14565b341561080757600080fd5b6102e1600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611b3d95505050505050565b341561089f57600080fd5b6103c7611c6a565b34156108b257600080fd5b6102e1600160a060020a0360043516611c79565b34156108d157600080fd5b6102f6600160a060020a0360043516611d43565b34156108f057600080fd5b6102e1600160a060020a0360043516611d5e565b341561090f57600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611e0795505050505050565b34156109a257600080fd5b6103c7611f11565b34156109b557600080fd5b6102f6611f20565b34156109c857600080fd5b6102f6611f26565b34156109db57600080fd5b6102e1600435611f2c565b34156109f157600080fd5b6102e160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250611f67915050565b3415610a8f57600080fd5b6102e1611ffb565b3415610aa257600080fd5b61044960043561206e565b3415610ab857600080fd5b6102e1600435602435604435612223565b6102e1600435612273565b3415610adf57600080fd5b6102e1600435602435151561ffff60443516612656565b3415610b0157600080fd5b6102e1612715565b3415610b1457600080fd5b61031b61279b565b3415610b2757600080fd5b6102e1600435612806565b3415610b3d57600080fd5b6102f6612841565b3415610b5057600080fd5b6102e1600160a060020a0360043516602435612847565b3415610b7257600080fd5b6102f6612880565b3415610b8557600080fd5b6102f6612886565b3415610b9857600080fd5b6103c761288c565b3415610bab57600080fd5b6102f661289b565b3415610bbe57600080fd5b61040c6128a1565b3415610bd157600080fd5b6103c76004356128b1565b3415610be757600080fd5b6102e16004356128cc565b3415610bfd57600080fd5b6102e160043560243560ff60443516612907565b3415610c1c57600080fd5b6102e160043560243561ffff60443516612975565b3415610c3c57600080fd5b6102f66129e8565b3415610c4f57600080fd5b6103c76129ee565b3415610c6257600080fd5b6102e1600435602435151561ffff604435166129fd565b3415610c8457600080fd5b6102f6612aa5565b3415610c9757600080fd5b6102f6612aab565b3415610caa57600080fd5b6102e1600435612ab1565b3415610cc057600080fd5b610cd4600160a060020a0360043516612aec565b60405160208082528190810183818151815260200191508051906020019060200280838360005b83811015610d13578082015183820152602001610cfb565b505050509050019250505060405180910390f35b3415610d3257600080fd5b6102e1600435602435612baa565b3415610d4b57600080fd5b6103c7600435612c25565b60115481565b60098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b820191906000526020600020905b815481529060010190602001808311610dd557829003601f168201915b505050505081565b610e043382612c40565b1515610e0f57600080fd5b610e198183612c64565b8082600160a060020a031633600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054600160a060020a031681565b60015433600160a060020a0390811691161480610e98575060005433600160a060020a039081169116145b1515610ea357600080fd5b601555565b60015b90565b6004546000190190565b600080600483815481101515610eca57fe5b600091825260209091206004600d909202018101548154630100000090910460ff16919085908110610ef857fe5b600091825260209091206004600d9092020181015481546201000090910460ff16919086908110610f2557fe5b600091825260209091206004600d90920201810154815461010090910460ff16919087908110610f5157fe5b600091825260209091206004600d90920201810154815460ff909116919088908110610f7957fe5b90600052602060002090600d020160030160029054906101000a900461ffff16600488815481101515610fa857fe5b90600052602060002090600d020160030160009054906101000a900461ffff16010101010161ffff169050611011600484815481101515610fe557fe5b600091825260209091206005600d9092020101546a0100000000000000000000900461ffff1682612c92565b9392505050565b600254600160a060020a031681565b6110313382612cac565b151561103c57600080fd5b6110468382612c40565b151561105157600080fd5b600160a060020a038216151561106657600080fd5b611071838383612ccc565b505050565b60005433600160a060020a0390811691161461109157600080fd5b600160a060020a03811615156110a657600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b60155481565b60005433600160a060020a039081169116146110e957600080fd5b600160a060020a03811615156110fe57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b6111286133a0565b6000806111336133b2565b61113b6133da565b6111436133a0565b60008061114e6133f4565b600061115861341b565b600060048d81548110151561116957fe5b90600052602060002090600d02019050806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b505050506003830154919d505061ffff8082169c506201000090910416995060058101600660c0604051908101604052919060c08301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161124c5790505050505050985080600401600480602002604051908101604052919060808301826000855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116112a957905050505050509750806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113765780601f1061134b57610100808354040283529160200191611376565b820191906000526020600020905b81548152906001019060200180831161135957829003601f168201915b50505050600c8301549198505060ff1695506113918d61206e565b945060068082019060c0604051908101604052919060c0830182845b8154815260200190600101908083116113ad57505050505093508c92508060020160098060200260405190810160405291906101208301826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116113e9579050505050505091505091939597999b90929496989a50565b6000806000806000601360149054906101000a900460ff1615151561145c57600080fd5b60008681526005602052604090205433600160a060020a0390811691161461148357600080fd5b60175434101561149257600080fd5b60048054879081106114a057fe5b600091825260209091206007600d90920201015442116114bf57600080fd5b60048054879081106114cd57fe5b600091825260209091206005600d909202010154600480546201000090920461ffff16965060098701955061153c918890811061150657fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041661ffff8616612d93565b92506000831161154b57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561159c57600080fd5b6102c65a03f115156115ad57600080fd5b5050506040518051905091506004868154811015156115c857fe5b60009182526020909120600c600d90920201015460ff8381169116146115ed57600080fd5b50600480544261ffff600a880261038e0316019182918890811061160d57fe5b600091825260209091206007600d9092020101556004805461166691908890811061163457fe5b600091825260209091206004600d909202010160015b60208082049092015460ff929091066101000a90041684612c92565b600480548890811061167457fe5b600091825260209091206004600d909202018101805461ff00191661010060ff94851602179055805491851691889081106116ab57fe5b60009182526020909120600d90910201600301805461ffff19811661ffff91821693909301169190911790556004805460019190889081106116e957fe5b600091825260209091206002600d9092020101805461ffff620100008083048216949094011690920263ffff000019909216919091179055600354600160a060020a031663c3645759838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561177157600080fd5b6102c65a03f1151561178257600080fd5b5050600354601754600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b15156117e957600080fd5b6125ee5a03f115156117fa57600080fd5b50505050857f75b0161e4165930093440d1034d01dc9ec811a5c5c4dab3f0d010a63853bf7348460405190815260200160405180910390a2505050505050565b60015460a060020a900460ff161561185157600080fd5b61185b3385612c40565b151561186657600080fd5b600b5461187d908590600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a858585853360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b15156118ec57600080fd5b6102c65a03f115156118fd57600080fd5b50505050505050565b60015433600160a060020a0390811691161480611931575060005433600160a060020a039081169116145b151561193c57600080fd5b60135460a060020a900460ff16151561195457600080fd5b6013805474ff000000000000000000000000000000000000000019169055565b600d5481565b60015433600160a060020a03908116911614806119a5575060005433600160a060020a039081169116145b15156119b057600080fd5b6119b981612da9565b50565b60135460a060020a900460ff16156119d357600080fd5b6014546119df8461206e565b61ffff1610156119ee57600080fd5b60008381526005602052604090205433600160a060020a03908116911614611a1557600080fd5b601554341015611a2457600080fd5b81600484815481101515611a3457fe5b90600052602060002090600d0201600001908051611a56929160200190613436565b5080600484815481101515611a6757fe5b90600052602060002090600d0201600101908051611a89929160200190613436565b50505050565b60015460a060020a900460ff1681565b60015433600160a060020a0390811691161480611aca575060005433600160a060020a039081169116145b1515611ad557600080fd5b33600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f193505050501515611b1257600080fd5b565b600081815260056020526040902054600160a060020a0316801515611b3857600080fd5b919050565b60135460a060020a900460ff1615611b5457600080fd5b60008381526005602052604090205433600160a060020a03908116911614611b7b57600080fd5b601654611b878461206e565b61ffff161015611b9657600080fd5b601654611ba28461206e565b61ffff16811515611baf57fe5b04600484815481101515611bbf57fe5b600091825260209091206002600d909202010154700100000000000000000000000000000000900461ffff1610611bf557600080fd5b611c00828233612e47565b506001600484815481101515611c1257fe5b60009182526020909120600d90910201600201805461ffff70010000000000000000000000000000000080830482169094011690920271ffff0000000000000000000000000000000019909216919091179055505050565b601354600160a060020a031681565b60015460009033600160a060020a0390811691161480611ca7575060005433600160a060020a039081169116145b1515611cb257600080fd5b5080600160a060020a0381166385b861886000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611cfa57600080fd5b6102c65a03f11515611d0b57600080fd5b505050604051805190501515611d2057600080fd5b600b8054600160a060020a031916600160a060020a039290921691909117905550565b600160a060020a031660009081526006602052604090205490565b60015433600160a060020a0390811691161480611d89575060005433600160a060020a039081169116145b1515611d9457600080fd5b60015460a060020a900460ff161515611dac57600080fd5b60138054600160a060020a031916600160a060020a0383161790557f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051600160a060020a03909116815260200160405180910390a150565b60015460009033600160a060020a0390811691161480611e35575060005433600160a060020a039081169116145b1515611e4057600080fd5b600d5460125410611e5057600080fd5b611e5b838330612e47565b600b54909150611e75908290600160a060020a0316612c64565b600b54600160a060020a03166327ebe40a82611e8f61325e565b600f546010543060405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b1515611eef57600080fd5b6102c65a03f11515611f0057600080fd5b505060128054600101905550505050565b600354600160a060020a031681565b60165481565b60145481565b60015433600160a060020a0390811691161480611f57575060005433600160a060020a039081169116145b1515611f6257600080fd5b601455565b60015433600160a060020a0390811691161480611f92575060005433600160a060020a039081169116145b1515611f9d57600080fd5b600160a060020a0381161515611fbb5750600154600160a060020a03165b600c5460115410611fcb57600080fd5b600d5460125410611fdb57600080fd5b601180546001908101909155601280549091019055611a89838383612e47565b60015433600160a060020a0390811691161480612026575060005433600160a060020a039081169116145b151561203157600080fd5b60135460a060020a900460ff161561204857600080fd5b6013805474ff0000000000000000000000000000000000000000191660a060020a179055565b6000600c60048381548110151561208157fe5b600091825260209091206002600d9092020101546e010000000000000000000000000000900461ffff168115156120b457fe5b0460016004848154811015156120c657fe5b600091825260209091206002600d9092020101546a0100000000000000000000900461ffff168115156120f557fe5b04600660048581548110151561210757fe5b600091825260209091206002600d90920201015468010000000000000000900461ffff1681151561213457fe5b04600660048681548110151561214657fe5b600091825260209091206002600d9092020101546601000000000000900461ffff1681151561217157fe5b046004808781548110151561218257fe5b600091825260209091206002600d909202010154640100000000900461ffff168115156121ab57fe5b04600480888154811015156121bc57fe5b600091825260209091206002600d90920201015462010000900461ffff168115156121e357fe5b04600c6004898154811015156121f557fe5b600091825260209091206002600d90920201015461ffff1681151561221657fe5b0401010101010192915050565b60025433600160a060020a0390811691161461223e57600080fd5b8060048481548110151561224e57fe5b90600052602060002090600d02016006018360068110151561226c57fe5b0155505050565b6000806000806000601360149054906101000a900460ff1615151561229757600080fd5b60008681526005602052604090205433600160a060020a039081169116146122be57600080fd5b6018543410156122cd57600080fd5b60048054879081106122db57fe5b600091825260209091206008600d90920201015442116122fa57600080fd5b600480548790811061230857fe5b600091825260209091206005600d9092020101546004805464010000000090920461ffff169650600380880401955061235f918890811061234557fe5b600091825260209091206004600d9092020101600261151c565b92506000831161236e57600080fd5b600354600160a060020a0316635b42109d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156123bf57600080fd5b6102c65a03f115156123d057600080fd5b5050506040518051905091506004868154811015156123eb57fe5b60009182526020909120600c600d90920201015460ff83811691161461241057600080fd5b50600480544261ffff600a880261038e0316019182918890811061243057fe5b600091825260209091206008600d9092020101556004805461247191908890811061245757fe5b600091825260209091206004600d9092020101600261164a565b600480548890811061247f57fe5b600091825260209091206004600d909202018101805462ff000019166201000060ff94851602179055805491851691889081106124b857fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff00001990921691909117905560048054600191908890811061250157fe5b600091825260209091206002600d9092020101805461ffff6401000000008083048216949094011690920265ffff0000000019909216919091179055600354600160a060020a031663db29fd6e838560405160e060020a63ffffffff851602815260ff90921660048301526024820152604401600060405180830381600087803b151561258d57600080fd5b6102c65a03f1151561259e57600080fd5b5050600354601854600160a060020a039091169150639b8430eb9060ff851660328060405160e060020a63ffffffff8716028152600481019390935260ff91821660248401521660448201526064016000604051808303818588803b151561260557600080fd5b6125ee5a03f1151561261657600080fd5b50505050857f770cca5addca826af2b5d12089bab2cda9bd6b50a2c584df148ece0f4cc5e06e8460405190815260200160405180910390a2505050505050565b60025433600160a060020a0390811691161461267157600080fd5b600182151514156126c8578060048481548110151561268c57fe5b600091825260209091206003600d9092020101805461ffff6201000080830482169094011690920263ffff000019909216919091179055611071565b806004848154811015156126d857fe5b600091825260209091206003600d9092020101805461ffff620100008083048216949094031690920263ffff000019909216919091179055505050565b60015433600160a060020a0390811691161480612740575060005433600160a060020a039081169116145b151561274b57600080fd5b600b54600160a060020a0316635fd8c7106040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561278a57600080fd5b6102c65a03f1151561107157600080fd5b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610df25780601f10610dc757610100808354040283529160200191610df2565b60015433600160a060020a0390811691161480612831575060005433600160a060020a039081169116145b151561283c57600080fd5b601755565b60185481565b600160a060020a038216151561285c57600080fd5b6128663382612c40565b151561287157600080fd5b61287c338383612ccc565b5050565b600f5481565b600e5481565b600154600160a060020a031681565b600c5481565b60135460a060020a900460ff1681565b600760205260009081526040902054600160a060020a031681565b60015433600160a060020a03908116911614806128f7575060005433600160a060020a039081169116145b151561290257600080fd5b601655565b60025433600160a060020a0390811691161461292257600080fd5b8060048481548110151561293257fe5b90600052602060002090600d02016004018360048110151561295057fe5b602091828204019190066101000a81548160ff021916908360ff160217905550505050565b60025433600160a060020a0390811691161461299057600080fd5b806004848154811015156129a057fe5b90600052602060002090600d0201600501836006811015156129be57fe5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550505050565b60175481565b600b54600160a060020a031681565b60025433600160a060020a03908116911614612a1857600080fd5b60018215151415612a645780600484815481101515612a3357fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930116919091179055611071565b80600484815481101515612a7457fe5b60009182526020909120600d90910201600301805461ffff19811661ffff9182169390930316919091179055505050565b60105481565b60125481565b60015433600160a060020a0390811691161480612adc575060005433600160a060020a039081169116145b1515612ae757600080fd5b601855565b612af46133a0565b600080612aff6133a0565b600160a060020a038516600090815260066020526040808220546004549095506000190193508190859051805910612b345750595b9080825280602002602001820160405250925060009050600091505b838211612b9f57600082815260056020526040902054600160a060020a0388811691161415612b945781838281518110612b8657fe5b602090810290910101526001015b600190910190612b50565b509095945050505050565b60025433600160a060020a03908116911614612bc557600080fd5b6004805483908110612bd357fe5b90600052602060002090600d020160020181600981101515612bf157fe5b6010808204929092018054929091066002026101000a61ffff81810219841693829004811660010116029190911790555050565b600560205260009081526040902054600160a060020a031681565b600081815260056020526040902054600160a060020a038381169116145b92915050565b6000918252600760205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828211612ca45750808203612c5e565b506000612c5e565b600090815260076020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260066020908152604080832080546001019055858352600590915290208054600160a060020a0319169091179055831615612d4d57600160a060020a03831660009081526006602090815260408083208054600019019055838352600790915290208054600160a060020a03191690555b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000818310612da25781611011565b5090919050565b80600160a060020a038116636237564c6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612df057600080fd5b6102c65a03f11515612e0157600080fd5b505050604051805190501515612e1657600080fd5b60038054600160a060020a03928316600160a060020a03199182161790915560028054939092169216919091179055565b6000612e516133b2565b612e596133f4565b612e6161341b565b612e696134b4565b600060c060405190810160405280612e816009613300565b60010161ffff1661ffff168152602001612e9b6009613300565b60010161ffff1661ffff168152602001612eb56009613300565b60010161ffff1661ffff168152602001612ecf6009613300565b60010161ffff1661ffff168152602001612ee96009613300565b60010161ffff1661ffff168152602001612f036009613300565b601f0161ffff1661ffff168152509450610120604051908101604052808a8152602001898152602001848152602001600061ffff168152602001600061ffff168152602001608060405190810160405280600460ff168152602001600660ff168152602001600260ff168152602001600160ff168152508152602001868152602001858152602001612f956006613300565b60010160ff168152509150600160048054806001018281612fb69190613525565b600092835260209092208591600d0201815181908051612fda929160200190613436565b50602082015181600101908051612ff5929160200190613436565b50604082015161300b9060028301906009613551565b50606082015160038201805461ffff191661ffff9290921691909117905560808201518160030160026101000a81548161ffff021916908361ffff16021790555060a082015161306190600480840191906135e3565b5060c08201516130779060058301906006613551565b5060e082015161308d9060068084019190613672565b50610100820151600c91909101805460ff191660ff9092169190911790555003905063ffffffff8111156130c057600080fd5b80151561319b576007600460008154811015156130d957fe5b90600052602060002090600d0201600c0160006101000a81548160ff021916908360ff1602179055506103206004600081548110151561311557fe5b6000918252602082206005600d929092020101805469ffff000000000000000019166801000000000000000061ffff9485160217905560048054909190811061315a57fe5b60009182526020909120600d90910201600501805461ffff929092166a0100000000000000000000026bffff00000000000000000000199092169190911790555b600160a060020a0387167f67dea66acb1ab87fd4200e1feb88d278784367a70c65c4cc733c52ebef27e22e82845160405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561320b5780820151838201526020016131f3565b50505050905090810190601f1680156132385780820380516001836020036101000a031916815260200191505b50935050505060405180910390a261325260008883612ccc565b98975050505050505050565b600b5460009081908190600160a060020a031663eac9d94c82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156132ac57600080fd5b6102c65a03f115156132bd57600080fd5b50505060405180519250506fffffffffffffffffffffffffffffffff82106132e457600080fd5b6002820482019050600e54811015612c5e5750600e5492915050565b6008546000906000194301409067ffffffffffffffff1660405191825267ffffffffffffffff1678010000000000000000000000000000000000000000000000000260208201526028016040518091039020426040519182526020820152604090810190519081900390206008805467ffffffffffffffff191667ffffffffffffffff9283161790819055838216911681151561339957fe5b0692915050565b60206040519081016040526000815290565b60c06040519081016040526006815b6000815260001990910190602001816133c15790505090565b6080604051908101604052600081526003602082016133c1565b60c06040519081016040526006815b60008152602001906001900390816134035790505090565b610120604051908101604052600081526008602082016133c1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061347757805160ff19168380011785556134a4565b828001600101855582156134a4579182015b828111156134a4578251825591602001919060010190613489565b506134b092915061369f565b5090565b6103c0604051908101604052806134c96133a0565b81526020016134d66133a0565b81526020016134e361341b565b815260006020820181905260408201526060016134fe6133da565b815260200161350b6133b2565b81526020016135186133f4565b8152600060209091015290565b81548183558181151161107157600d0281600d02836000526020600020918201910161107191906136b9565b6001830191839082156135d75791602002820160005b838211156135a757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613567565b80156135d55782816101000a81549061ffff02191690556002016020816001010492830192600103026135a7565b505b506134b092915061373d565b6001830191839082156136665791602002820160005b8382111561363757835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026135f9565b80156136645782816101000a81549060ff0219169055600101602081600001049283019260010302613637565b505b506134b092915061375c565b82600681019282156134a457916020028201828111156134a4578251825591602001919060010190613489565b610eab91905b808211156134b057600081556001016136a5565b610eab91905b808211156134b05760006136d3828261377a565b6136e160018301600061377a565b6136ef6002830160006137be565b60038201805463ffffffff1916905561370c6004830160006137be565b61371a6005830160006137be565b6137286006830160006137c5565b50600c8101805460ff19169055600d016136bf565b610eab91905b808211156134b057805461ffff19168155600101613743565b610eab91905b808211156134b057805460ff19168155600101613762565b50805460018160011615610100020316600290046000825580601f106137a057506119b9565b601f0160209004906000526020600020908101906119b9919061369f565b5060009055565b506119b990600681019061369f5600a165627a7a723058200f28b8959c158eb5414277529fd27a82caedc0f7ffd1730f3ff2ead374e55ac70029

Swarm Source

bzzr://0f28b8959c158eb5414277529fd27a82caedc0f7ffd1730f3ff2ead374e55ac7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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