ETH Price: $3,147.06 (-1.48%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer120587012021-03-17 21:50:511769 days ago1616017851IN
0x6Ad9C45C...35E249B6d
0 ETH0.00783965196.4924082
Create Edition62963182018-09-08 21:11:422690 days ago1536441102IN
0x6Ad9C45C...35E249B6d
0 ETH0.002484546
Create Edition58741762018-06-29 9:45:032761 days ago1530265503IN
0x6Ad9C45C...35E249B6d
0 ETH0.0038396210
Create Edition58696052018-06-28 14:48:412762 days ago1530197321IN
0x6Ad9C45C...35E249B6d
0 ETH0.00827420
Create Edition58685762018-06-28 10:26:412762 days ago1530181601IN
0x6Ad9C45C...35E249B6d
0 ETH0.004140910
Create Edition58638132018-06-27 14:48:032763 days ago1530110883IN
0x6Ad9C45C...35E249B6d
0 ETH0.000767922
Create Edition58579402018-06-26 14:32:362764 days ago1530023556IN
0x6Ad9C45C...35E249B6d
0 ETH0.00082742
Create Edition58179642018-06-19 17:30:292771 days ago1529429429IN
0x6Ad9C45C...35E249B6d
0 ETH0.0038401210
Create Edition58179622018-06-19 17:30:132771 days ago1529429413IN
0x6Ad9C45C...35E249B6d
0 ETH0.004140910
Create Edition58179502018-06-19 17:27:122771 days ago1529429232IN
0x6Ad9C45C...35E249B6d
0 ETH0.0038396210
Create Edition58118132018-06-18 16:26:152772 days ago1529339175IN
0x6Ad9C45C...35E249B6d
0 ETH0.00082742
Create Edition58073422018-06-17 22:23:202773 days ago1529274200IN
0x6Ad9C45C...35E249B6d
0 ETH0.00082742
Create Edition57824962018-06-13 16:13:022777 days ago1528906382IN
0x6Ad9C45C...35E249B6d
0 ETH0.002687737
Create Edition57821052018-06-13 14:32:102777 days ago1528900330IN
0x6Ad9C45C...35E249B6d
0 ETH0.00172984.5
Create Edition57767392018-06-12 16:03:172778 days ago1528819397IN
0x6Ad9C45C...35E249B6d
0 ETH0.00165484
Create Edition57602892018-06-09 18:08:232781 days ago1528567703IN
0x6Ad9C45C...35E249B6d
0 ETH0.001921765
Create Edition57544862018-06-08 17:27:492782 days ago1528478869IN
0x6Ad9C45C...35E249B6d
0 ETH0.002070455
Create Edition57543382018-06-08 16:48:462782 days ago1528476526IN
0x6Ad9C45C...35E249B6d
0 ETH0.001919815
Create Edition57510372018-06-08 2:55:022783 days ago1528426502IN
0x6Ad9C45C...35E249B6d
0 ETH0.00349769.1
Create Edition57489762018-06-07 18:05:272783 days ago1528394727IN
0x6Ad9C45C...35E249B6d
0 ETH0.004964412
Create Edition57486742018-06-07 16:47:422783 days ago1528390062IN
0x6Ad9C45C...35E249B6d
0 ETH0.003044427.92897111
Create Edition57485532018-06-07 16:16:242783 days ago1528388184IN
0x6Ad9C45C...35E249B6d
0 ETH0.002687737
Create Edition57485442018-06-07 16:12:592783 days ago1528387979IN
0x6Ad9C45C...35E249B6d
0 ETH0.003810179.21
Create Edition57451412018-06-07 1:39:402784 days ago1528335580IN
0x6Ad9C45C...35E249B6d
0 ETH0.002070455
Create Edition57438212018-06-06 20:04:332784 days ago1528315473IN
0x6Ad9C45C...35E249B6d
0 ETH0.0088656621.41
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BitpaintingEditions

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-05-29
*/

pragma solidity ^0.4.15;

// File: contracts/interfaces/IEditions.sol

contract IEditions {

    function createEdition(uint _tokenId) external;
    function pendingEditionsOf(address _of) public constant returns (
        uint[] tokens,
        uint[] startedAt,
        uint[] completedAt,
        uint8[] currentCounts,
        uint8[] limitCounts
    );
    function counter(uint _tokenId) public
        constant returns (uint8 current, uint8 limit);
    function signature() external constant returns (uint _signature);
}

// File: contracts/interfaces/IStorage.sol

contract IStorage {
    function isOwner(address _address) public constant returns (bool);

    function isAllowed(address _address) external constant returns (bool);
    function developer() public constant returns (address);
    function setDeveloper(address _address) public;
    function addAdmin(address _address) public;
    function isAdmin(address _address) public constant returns (bool);
    function removeAdmin(address _address) public;
    function contracts(uint _signature) public returns (address _address);

    function exists(uint _tokenId) external constant returns (bool);
    function paintingsCount() public constant returns (uint);
    function increaseOwnershipTokenCount(address _address) public;
    function decreaseOwnershipTokenCount(address _address) public;
    function setOwnership(uint _tokenId, address _address) public;
    function getPainting(uint _tokenId)
        external constant returns (address, uint, uint, uint, uint8, uint8);
    function createPainting(
        address _owner,
        uint _tokenId,
        uint _parentId,
        uint8 _generation,
        uint8 _speed,
        uint _artistId,
        uint _releasedAt) public;
    function approve(uint _tokenId, address _claimant) external;
    function isApprovedFor(uint _tokenId, address _claimant)
        external constant returns (bool);
    function createEditionMeta(uint _tokenId) public;
    function getPaintingOwner(uint _tokenId)
        external constant returns (address);
    function getPaintingGeneration(uint _tokenId)
        public constant returns (uint8);
    function getPaintingSpeed(uint _tokenId)
        external constant returns (uint8);
    function getPaintingArtistId(uint _tokenId)
        public constant returns (uint artistId);
    function getOwnershipTokenCount(address _address)
        external constant returns (uint);
    function isReady(uint _tokenId) public constant returns (bool);
    function getPaintingIdAtIndex(uint _index) public constant returns (uint);
    function lastEditionOf(uint _index) public constant returns (uint);
    function getPaintingOriginal(uint _tokenId)
        external constant returns (uint);
    function canBeBidden(uint _tokenId) public constant returns (bool _can);

    function addAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _duration,
        address _seller) public;
    function addReleaseAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration) public;
    function initAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration,
        address _seller,
        bool _byTeam) public;
    function _isOnAuction(uint _tokenId) internal constant returns (bool);
    function isOnAuction(uint _tokenId) external constant returns (bool);
    function removeAuction(uint _tokenId) public;
    function getAuction(uint256 _tokenId)
        external constant returns (
        address seller,
        uint256 startingPrice,
        uint256 endingPrice,
        uint256 duration,
        uint256 startedAt);
    function getAuctionSeller(uint256 _tokenId)
        public constant returns (address);
    function getAuctionEnd(uint _tokenId)
        public constant returns (uint);
    function canBeCanceled(uint _tokenId) external constant returns (bool);
    function getAuctionsCount() public constant returns (uint);
    function getTokensOnAuction() public constant returns (uint[]);
    function getTokenIdAtIndex(uint _index) public constant returns (uint);
    function getAuctionStartedAt(uint256 _tokenId) public constant returns (uint);

    function getOffsetIndex() public constant returns (uint);
    function nextOffsetIndex() public returns (uint);
    function canCreateEdition(uint _tokenId, uint8 _generation)
        public constant returns (bool);
    function isValidGeneration(uint8 _generation)
        public constant returns (bool);
    function increaseGenerationCount(uint _tokenId, uint8 _generation) public;
    function getEditionsCount(uint _tokenId) external constant returns (uint8[3]);
    function setLastEditionOf(uint _tokenId, uint _editionId) public;
    function setEditionLimits(uint _tokenId, uint8 _gen1, uint8 _gen2, uint8 _gen3) public;
    function getEditionLimits(uint _tokenId) external constant returns (uint8[3]);

    function hasEditionInProgress(uint _tokenId) external constant returns (bool);
    function hasEmptyEditionSlots(uint _tokenId) external constant returns (bool);

    function setPaintingName(uint _tokenId, string _name) public;
    function setPaintingArtist(uint _tokenId, string _name) public;
    function purgeInformation(uint _tokenId) public;
    function resetEditionLimits(uint _tokenId) public;
    function resetPainting(uint _tokenId) public;
    function decreaseSpeed(uint _tokenId) public;
    function isCanceled(uint _tokenId) public constant returns (bool _is);
    function totalPaintingsCount() public constant returns (uint _total);
    function isSecondary(uint _tokenId) public constant returns (bool _is);
    function secondarySaleCut() public constant returns (uint8 _cut);
    function sealForChanges(uint _tokenId) public;
    function canBeChanged(uint _tokenId) public constant returns (bool _can);

    function getPaintingName(uint _tokenId) public constant returns (string);
    function getPaintingArtist(uint _tokenId) public constant returns (string);

    function signature() external constant returns (bytes4);
}

// File: contracts/libs/Ownable.sol

/**
* @title Ownable
* @dev Manages ownership of the contracts
*/
contract Ownable {

    address public owner;

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

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

    function isOwner(address _address) public constant returns (bool) {
        return _address == owner;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0));
        owner = newOwner;
    }

}

// File: contracts/libs/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;

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

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

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function _pause() internal whenNotPaused {
        paused = true;
        Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function _unpause() internal whenPaused {
        paused = false;
        Unpause();
    }
}

// File: contracts/libs/BitpaintingBase.sol

contract BitpaintingBase is Pausable {
    /*** EVENTS ***/
    event Create(uint _tokenId,
        address _owner,
        uint _parentId,
        uint8 _generation,
        uint _createdAt,
        uint _completedAt);

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

    IStorage public bitpaintingStorage;

    modifier canPauseUnpause() {
        require(msg.sender == owner || msg.sender == bitpaintingStorage.developer());
        _;
    }

    function setBitpaintingStorage(address _address) public onlyOwner {
        require(_address != address(0));
        bitpaintingStorage = IStorage(_address);
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function pause() public canPauseUnpause whenNotPaused {
        super._pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() external canPauseUnpause whenPaused {
        super._unpause();
    }

    function canUserReleaseArtwork(address _address)
        public constant returns (bool _can) {
        return (bitpaintingStorage.isOwner(_address)
            || bitpaintingStorage.isAdmin(_address)
            || bitpaintingStorage.isAllowed(_address));
    }

    function canUserCancelArtwork(address _address)
        public constant returns (bool _can) {
        return (bitpaintingStorage.isOwner(_address)
            || bitpaintingStorage.isAdmin(_address));
    }

    modifier canReleaseArtwork() {
        require(canUserReleaseArtwork(msg.sender));
        _;
    }

    modifier canCancelArtwork() {
        require(canUserCancelArtwork(msg.sender));
        _;
    }

    /// @dev Assigns ownership of a specific Painting to an address.
    function _transfer(address _from, address _to, uint256 _tokenId)
        internal {
        bitpaintingStorage.setOwnership(_tokenId, _to);
        Transfer(_from, _to, _tokenId);
    }

    function _createOriginalPainting(uint _tokenId, uint _artistId, uint _releasedAt) internal {
        address _owner = owner;
        uint _parentId = 0;
        uint8 _generation = 0;
        uint8 _speed = 10;
        _createPainting(_owner, _tokenId, _parentId, _generation, _speed, _artistId, _releasedAt);
    }

    function _createPainting(
        address _owner,
        uint _tokenId,
        uint _parentId,
        uint8 _generation,
        uint8 _speed,
        uint _artistId,
        uint _releasedAt
    )
        internal
    {
        require(_tokenId == uint256(uint32(_tokenId)));
        require(_parentId == uint256(uint32(_parentId)));
        require(_generation == uint256(uint8(_generation)));

        bitpaintingStorage.createPainting(
            _owner, _tokenId, _parentId, _generation, _speed, _artistId, _releasedAt);

        uint _createdAt;
        uint _completedAt;
        (,,_createdAt, _completedAt,,) = bitpaintingStorage.getPainting(_tokenId);

        // emit the create event
        Create(
            _tokenId,
            _owner,
            _parentId,
            _generation,
            _createdAt,
            _completedAt
        );

        // This will assign ownership, and also emit the Transfer event as
        // per ERC721 draft
        _transfer(0, _owner, _tokenId);
    }

}

// File: contracts/libs/ERC721.sol

/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
/// @author Dieter Shirley <[email protected]> (https://github.com/dete)
contract ERC721 {
    // Required methods
    function totalSupply() public constant returns (uint256 total);
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external constant returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    // Events
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);

    // Optional
    // function name() public view returns (string name);
    // function symbol() public view returns (string symbol);
    // function tokensOfOwner(address _owner) external view returns (uint256[] tokenIds);
    // function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl);

    // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165)
    function supportsInterface(bytes4 _interfaceID) external constant returns (bool);
}

// File: contracts/libs/ERC721Metadata.sol

/// @title The external contract that is responsible for generating metadata for the kitties,
///  it has one function that will return the data as bytes.
contract ERC721Metadata {
    /// @dev Given a token Id, returns a byte array that is supposed to be converted into string.
    function getMetadata(uint256 _tokenId, string) public constant returns (bytes32[4] buffer, uint256 count) {
        if (_tokenId == 1) {
            buffer[0] = "Hello World! :D";
            count = 15;
        } else if (_tokenId == 2) {
            buffer[0] = "I would definitely choose a medi";
            buffer[1] = "um length string.";
            count = 49;
        } else if (_tokenId == 3) {
            buffer[0] = "Lorem ipsum dolor sit amet, mi e";
            buffer[1] = "st accumsan dapibus augue lorem,";
            buffer[2] = " tristique vestibulum id, libero";
            buffer[3] = " suscipit varius sapien aliquam.";
            count = 128;
        }
    }
}

// File: contracts/libs/PaintingOwnership.sol

contract PaintingOwnership is BitpaintingBase, ERC721 {

    /// @notice Name and symbol of the non fungible token, as defined in ERC721.
    string public constant name = "BitPaintings";
    string public constant symbol = "BP";

    ERC721Metadata public erc721Metadata;

    bytes4 constant InterfaceSignature_ERC165 =
        bytes4(keccak256('supportsInterface(bytes4)'));

    bytes4 constant InterfaceSignature_ERC721 =
        bytes4(keccak256('name()')) ^
        bytes4(keccak256('symbol()')) ^
        bytes4(keccak256('totalSupply()')) ^
        bytes4(keccak256('balanceOf(address)')) ^
        bytes4(keccak256('ownerOf(uint256)')) ^
        bytes4(keccak256('approve(address,uint256)')) ^
        bytes4(keccak256('transfer(address,uint256)')) ^
        bytes4(keccak256('transferFrom(address,address,uint256)')) ^
        bytes4(keccak256('tokensOfOwner(address)')) ^
        bytes4(keccak256('tokenMetadata(uint256,string)'));

    /// @notice Introspection interface as per ERC-165 (https://github.com/ethereum/EIPs/issues/165).
    ///  Returns true for any standardized interfaces implemented by this contract. We implement
    ///  ERC-165 (obviously!) and ERC-721.
    function supportsInterface(bytes4 _interfaceID) external constant returns (bool)
    {
        // DEBUG ONLY
        //require((InterfaceSignature_ERC165 == 0x01ffc9a7) && (InterfaceSignature_ERC721 == 0x9a20483d));

        return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721));
    }

    /// @dev Set the address of the sibling contract that tracks metadata.
    ///  CEO only.
    function setMetadataAddress(address _contractAddress) public onlyOwner {
        erc721Metadata = ERC721Metadata(_contractAddress);
    }

    function _owns(address _claimant, uint256 _tokenId) internal constant returns (bool) {
        return bitpaintingStorage.getPaintingOwner(_tokenId) == _claimant;
    }

    function balanceOf(address _owner) public constant returns (uint256 count) {
        return bitpaintingStorage.getOwnershipTokenCount(_owner);
    }

    function _approve(uint256 _tokenId, address _approved) internal {
        bitpaintingStorage.approve(_tokenId, _approved);
    }

    function _approvedFor(address _claimant, uint256 _tokenId)
        internal constant returns (bool) {
        return bitpaintingStorage.isApprovedFor(_tokenId, _claimant);
    }

    function transfer(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_owns(msg.sender, _tokenId));

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

    function approve(
      address _to,
      uint256 _tokenId
    )
      external
      whenNotPaused
    {
      require(_owns(msg.sender, _tokenId));
      _approve(_tokenId, _to);

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

    function transferFrom(
      address _from,
      address _to,
      uint256 _tokenId
    )
        external whenNotPaused {
        _transferFrom(_from, _to, _tokenId);
    }

    function _transferFrom(
      address _from,
      address _to,
      uint256 _tokenId
    )
        internal
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));

        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public constant returns (uint) {
      return bitpaintingStorage.paintingsCount();
    }

    function ownerOf(uint256 _tokenId)
        external constant returns (address) {
        return _ownerOf(_tokenId);
    }

    function _ownerOf(uint256 _tokenId)
        internal constant returns (address) {
        return bitpaintingStorage.getPaintingOwner(_tokenId);
    }

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

        if (tokenCount == 0) {
          return new uint256[](0);
        }

        uint256[] memory result = new uint256[](tokenCount);
        uint256 totalCats = totalSupply();
        uint256 resultIndex = 0;

        uint256 paintingId;

        for (paintingId = 1; paintingId <= totalCats; paintingId++) {
            if (bitpaintingStorage.getPaintingOwner(paintingId) == _owner) {
                result[resultIndex] = paintingId;
                resultIndex++;
            }
        }

        return result;
    }

    /// @dev Adapted from memcpy() by @arachnid (Nick Johnson <[email protected]>)
    ///  This method is licenced under the Apache License.
    ///  Ref: https://github.com/Arachnid/solidity-stringutils/blob/2f6ca9accb48ae14c66f1437ec50ed19a0616f78/strings.sol
    function _memcpy(uint _dest, uint _src, uint _len) private constant {
      // Copy word-length chunks while possible
      for(; _len >= 32; _len -= 32) {
          assembly {
              mstore(_dest, mload(_src))
          }
          _dest += 32;
          _src += 32;
      }

      // Copy remaining bytes
      uint256 mask = 256 ** (32 - _len) - 1;
      assembly {
          let srcpart := and(mload(_src), not(mask))
          let destpart := and(mload(_dest), mask)
          mstore(_dest, or(destpart, srcpart))
      }
    }

    /// @dev Adapted from toString(slice) by @arachnid (Nick Johnson <[email protected]>)
    ///  This method is licenced under the Apache License.
    ///  Ref: https://github.com/Arachnid/solidity-stringutils/blob/2f6ca9accb48ae14c66f1437ec50ed19a0616f78/strings.sol
    function _toString(bytes32[4] _rawBytes, uint256 _stringLength) private constant returns (string) {
      var outputString = new string(_stringLength);
      uint256 outputPtr;
      uint256 bytesPtr;

      assembly {
          outputPtr := add(outputString, 32)
          bytesPtr := _rawBytes
      }

      _memcpy(outputPtr, bytesPtr, _stringLength);

      return outputString;
    }

    /// @notice Returns a URI pointing to a metadata package for this token conforming to
    ///  ERC-721 (https://github.com/ethereum/EIPs/issues/721)
    /// @param _tokenId The ID number of the Kitty whose metadata should be returned.
    function tokenMetadata(uint256 _tokenId, string _preferredTransport) external constant returns (string infoUrl) {
      require(erc721Metadata != address(0));
      bytes32[4] memory buffer;
      uint256 count;
      (buffer, count) = erc721Metadata.getMetadata(_tokenId, _preferredTransport);

      return _toString(buffer, count);
    }

    function withdraw() external onlyOwner {
        owner.transfer(this.balance);
    }
}

// File: contracts/BitpaintingEditions.sol

contract BitpaintingEditions is PaintingOwnership, IEditions {

    event EditionCreated(
        address creator,
        uint parentId,
        uint editionId,
        uint8 parentSpeed);

    function createEdition(uint _tokenId) external whenNotPaused {
        address creator = msg.sender;
        require(creator == _ownerOf(_tokenId));
        require(bitpaintingStorage.isReady(_tokenId));
        require(!bitpaintingStorage.hasEditionInProgress(_tokenId));
        require(bitpaintingStorage.hasEmptyEditionSlots(_tokenId));
        require(!bitpaintingStorage.isOnAuction(_tokenId));

        bitpaintingStorage.createEditionMeta(_tokenId);
        uint editionId = bitpaintingStorage.getOffsetIndex();
        uint8 _generation =
            bitpaintingStorage.getPaintingGeneration(_tokenId) + 1;
        uint8 _speed = 10;
        uint _artistId = bitpaintingStorage.getPaintingArtistId(_tokenId);
        _createPainting(creator, editionId, _tokenId, _generation, _speed, _artistId, now + 1);
        bitpaintingStorage.decreaseSpeed(_tokenId);

        uint8 speed = bitpaintingStorage.getPaintingSpeed(_tokenId);
        EditionCreated(creator, _tokenId, editionId, speed);
    }

    function pendingEditionsOf(address _of) public constant returns (
            uint[] tokens,
            uint[] startedAt,
            uint[] completedAt,
            uint8[] currentCounts,
            uint8[] limitCounts
        ) {

        uint tokenCount = totalSupply();
        uint length = balanceOf(_of);
        uint pointer;

        tokens = new uint[](length);
        startedAt = new uint[](length);
        completedAt = new uint[](length);
        currentCounts = new uint8[](length);
        limitCounts = new uint8[](length);

        for(uint index = 0; index < tokenCount; index++) {
            uint tokenId = bitpaintingStorage.getPaintingIdAtIndex(index);

            if (tokenId == 0) {
                continue;
            }

            if (_ownerOf(tokenId) != _of) {
                continue;
            }

            if (bitpaintingStorage.isReady(tokenId)) {
                continue;
            }

            uint _startedAt;
            uint _completedAt;
            (,,_startedAt, _completedAt,,) = bitpaintingStorage.getPainting(tokenId);
            uint8 _current;
            uint8 _limit;
            (_current, _limit) = counter(tokenId);

            tokens[pointer] = tokenId;
            startedAt[pointer] = _startedAt;
            completedAt[pointer] = _completedAt;
            currentCounts[pointer] = _current;
            limitCounts[pointer] = _limit;

            pointer++;
        }
    }

    function counter(uint _tokenId) public
        constant returns (uint8 current, uint8 limit) {

        uint8 gen = bitpaintingStorage.getPaintingGeneration(_tokenId);
        if (gen == 0) {
            current = 1;
            limit = 1;
        } else {
            uint original = bitpaintingStorage.getPaintingOriginal(_tokenId);
            uint8[3] memory counts = bitpaintingStorage.getEditionsCount(original);
            uint8[3] memory limits = bitpaintingStorage.getEditionLimits(original);
            current = counts[gen - 1];
            limit = limits[gen - 1];
        }
    }

    function signature() external constant returns (uint _signature) {
        return uint(keccak256("editions"));
    }

}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_preferredTransport","type":"string"}],"name":"tokenMetadata","outputs":[{"name":"infoUrl","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_of","type":"address"}],"name":"pendingEditionsOf","outputs":[{"name":"tokens","type":"uint256[]"},{"name":"startedAt","type":"uint256[]"},{"name":"completedAt","type":"uint256[]"},{"name":"currentCounts","type":"uint8[]"},{"name":"limitCounts","type":"uint8[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"bitpaintingStorage","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"canUserCancelArtwork","outputs":[{"name":"_can","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"createEdition","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBitpaintingStorage","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"signature","outputs":[{"name":"_signature","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"canUserReleaseArtwork","outputs":[{"name":"_can","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"counter","outputs":[{"name":"current","type":"uint8"},{"name":"limit","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"erc721Metadata","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setMetadataAddress","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"creator","type":"address"},{"indexed":false,"name":"parentId","type":"uint256"},{"indexed":false,"name":"editionId","type":"uint256"},{"indexed":false,"name":"parentSpeed","type":"uint8"}],"name":"EditionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokenId","type":"uint256"},{"indexed":false,"name":"_owner","type":"address"},{"indexed":false,"name":"_parentId","type":"uint256"},{"indexed":false,"name":"_generation","type":"uint8"},{"indexed":false,"name":"_createdAt","type":"uint256"},{"indexed":false,"name":"_completedAt","type":"uint256"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

60606040526000805460a060020a60ff02191690555b60008054600160a060020a03191633600160a060020a03161790555b5b61277f806100416000396000f3006060604052361561014e5763ffffffff60e060020a60003504166301ffc9a781146101535780630560ff441461019f57806306fdde0314610239578063095ea7b3146102c457806312610b5b146102e8578063179047431461047457806318160ddd146104a357806323b872dd146104c8578063290b3cb7146104f25780632f54bf6e14610525578063330cbc7514610558578063362f29c9146105705780633ccfd60b146105915780633f4ba83a146105a657806351ff4847146105bb5780635c975abb146105e05780636352211e1461060757806370a08231146106395780638456cb591461066a5780638462151c1461067f5780638da5cb5b146106f257806395d89b4114610721578063a9059cbb146107ac578063aad9973f146107d0578063b1f525c614610803578063bc4006f514610837578063e17b25af14610866578063f2fde38b14610887575b600080fd5b341561015e57600080fd5b61018b7fffffffff00000000000000000000000000000000000000000000000000000000600435166108a8565b604051901515815260200160405180910390f35b34156101aa57600080fd5b6101c1600480359060248035908101910135610b2f565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561024457600080fd5b6101c1610c0e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102cf57600080fd5b6102e6600160a060020a0360043516602435610c45565b005b34156102f357600080fd5b610307600160a060020a0360043516610cd1565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156103585780820151818401525b60200161033f565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b838110156103985780820151818401525b60200161037f565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156103d85780820151818401525b6020016103bf565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156104185780820151818401525b6020016103ff565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156104585780820151818401525b60200161043f565b505050509050019a505050505050505050505060405180910390f35b341561047f57600080fd5b610487611032565b604051600160a060020a03909116815260200160405180910390f35b34156104ae57600080fd5b6104b6611041565b60405190815260200160405180910390f35b34156104d357600080fd5b6102e6600160a060020a03600435811690602435166044356110ab565b005b34156104fd57600080fd5b61018b600160a060020a03600435166110d4565b604051901515815260200160405180910390f35b341561053057600080fd5b61018b600160a060020a03600435166111cd565b604051901515815260200160405180910390f35b341561056357600080fd5b6102e66004356111e4565b005b341561057b57600080fd5b6102e6600160a060020a03600435166116f0565b005b341561059c57600080fd5b6102e661174d565b005b34156105b157600080fd5b6102e66117a5565b005b34156105c657600080fd5b6104b6611865565b60405190815260200160405180910390f35b34156105eb57600080fd5b61018b61189f565b604051901515815260200160405180910390f35b341561061257600080fd5b6104876004356118af565b604051600160a060020a03909116815260200160405180910390f35b341561064457600080fd5b6104b6600160a060020a03600435166118c2565b60405190815260200160405180910390f35b341561067557600080fd5b6102e661193f565b005b341561068a57600080fd5b61069e600160a060020a03600435166119fe565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156106de5780820151818401525b6020016106c5565b505050509050019250505060405180910390f35b34156106fd57600080fd5b610487611b3f565b604051600160a060020a03909116815260200160405180910390f35b341561072c57600080fd5b6101c1611b4e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107b757600080fd5b6102e6600160a060020a0360043516602435611b85565b005b34156107db57600080fd5b61018b600160a060020a0360043516611bf8565b604051901515815260200160405180910390f35b341561080e57600080fd5b610819600435611d6c565b60405160ff9283168152911660208201526040908101905180910390f35b341561084257600080fd5b610487611f9d565b604051600160a060020a03909116815260200160405180910390f35b341561087157600080fd5b6102e6600160a060020a0360043516611fac565b005b341561089257600080fd5b6102e6600160a060020a0360043516611ff4565b005b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610b2757506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b610b376126cc565b610b3f6126de565b600254600090600160a060020a03161515610b5957600080fd5b600254600160a060020a031663cb4799f2878787600060405160a0015260405160e060020a63ffffffff861602815260048101848152604060248301908152604483018490529091606401848480828437820191505094505050505060a060405180830381600087803b1515610bce57600080fd5b6102c65a03f11515610bdf57600080fd5b50505060405180608001805160209091016040529092509050610c028282612051565b92505b50509392505050565b60408051908101604052600c81527f4269745061696e74696e67730000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615610c5c57600080fd5b610c6633826120a6565b1515610c7157600080fd5b610c7b818361212b565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b5b5050565b610cd96126cc565b610ce16126cc565b610ce96126cc565b610cf16126cc565b610cf96126cc565b6000806000806000806000806000610d0f611041565b9850610d1a8f6118c2565b975087604051805910610d2a5750595b908082528060200260200182016040525b509d5087604051805910610d4c5750595b908082528060200260200182016040525b509c5087604051805910610d6e5750595b908082528060200260200182016040525b509b5087604051805910610d905750595b908082528060200260200182016040525b509a5087604051805910610db25750595b908082528060200260200182016040525b509950600095505b8886101561101f57600154600160a060020a031663a3e7061d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610e2457600080fd5b6102c65a03f11515610e3557600080fd5b5050506040518051955050841515610e4c57611014565b8e600160a060020a0316610e5f8661219b565b600160a060020a031614610e7257611014565b600154600160a060020a03166350df8f718660006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ec357600080fd5b6102c65a03f11515610ed457600080fd5b5050506040518051905015610ee857611014565b600154600160a060020a031663145f8ba286600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b1515610f3957600080fd5b6102c65a03f11515610f4a57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805150929850909650610f879350889250611d6c915050565b9092509050848e8881518110610f9957fe5b60209081029091010152838d8881518110610fb057fe5b60209081029091010152828c8881518110610fc757fe5b60209081029091010152818b8881518110610fde57fe5b60ff909216602092830290910190910152808a8881518110610ffc57fe5b60ff9092166020928302909101909101526001909601955b600190950194610dcb565b5b50505050505050505091939590929450565b600154600160a060020a031681565b600154600090600160a060020a031663197b945482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561108b57600080fd5b6102c65a03f1151561109c57600080fd5b50505060405180519150505b90565b60005460a060020a900460ff16156110c257600080fd5b6110cd838383612210565b5b5b505050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561112f57600080fd5b6102c65a03f1151561114057600080fd5b5050506040518051905080610b275750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b505050604051805190505b90505b919050565b600054600160a060020a038281169116145b919050565b600080600080600080600060149054906101000a900460ff1615151561120957600080fd5b3395506112158761219b565b600160a060020a0387811691161461122c57600080fd5b600154600160a060020a03166350df8f718860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561127d57600080fd5b6102c65a03f1151561128e57600080fd5b5050506040518051905015156112a357600080fd5b600154600160a060020a0316635f4eab658860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156112f457600080fd5b6102c65a03f1151561130557600080fd5b505050604051805115905061131957600080fd5b600154600160a060020a031663108a101b8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561136a57600080fd5b6102c65a03f1151561137b57600080fd5b50505060405180519050151561139057600080fd5b600154600160a060020a03166337e246ad8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156113e157600080fd5b6102c65a03f115156113f257600080fd5b505050604051805115905061140657600080fd5b600154600160a060020a03166370d1383d8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561144e57600080fd5b6102c65a03f1151561145f57600080fd5b5050600154600160a060020a0316905063fafb76dd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114ab57600080fd5b6102c65a03f115156114bc57600080fd5b5050506040518051600154909650600160a060020a03169050630af9d89c8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561151a57600080fd5b6102c65a03f1151561152b57600080fd5b50505060405180516001805491019550600a9450600160a060020a0316905063cd0fdc248860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561158f57600080fd5b6102c65a03f115156115a057600080fd5b5050506040518051905091506115be86868987878742600101612299565b600154600160a060020a0316639e6afbda8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561160657600080fd5b6102c65a03f1151561161757600080fd5b5050600154600160a060020a03169050639ed573608860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561166c57600080fd5b6102c65a03f1151561167d57600080fd5b5050506040518051905090507f3f97d0875a1b44e01bf3372d1da5a4087c4e97a5ad5f81a4e1c69768548c8a3a86888784604051600160a060020a039094168452602084019290925260408084019190915260ff90911660608301526080909101905180910390a15b5b50505050505050565b60005433600160a060020a0390811691161461170b57600080fd5b600160a060020a038116151561172057600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60005433600160a060020a0390811691161461176857600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156117a157600080fd5b5b5b565b60005433600160a060020a03908116911614806118355750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561180557600080fd5b6102c65a03f1151561181657600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561184057600080fd5b60005460a060020a900460ff16151561185857600080fd5b6117a161246e565b5b5b5b565b60006040517f65646974696f6e73000000000000000000000000000000000000000000000000815260080160405190819003902090505b90565b60005460a060020a900460ff1681565b6000610b278261219b565b90505b919050565b600154600090600160a060020a031663b4f6eae483836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b50505060405180519150505b919050565b60005433600160a060020a03908116911614806119cf5750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561199f57600080fd5b6102c65a03f115156119b057600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b15156119da57600080fd5b60005460a060020a900460ff16156119f157600080fd5b6117a16124d4565b5b5b5b565b611a066126cc565b6000611a106126cc565b6000806000611a1e876118c2565b9450841515611a4f576000604051805910611a365750595b908082528060200260200182016040525b509550611b35565b84604051805910611a5d5750595b908082528060200260200182016040525b509350611a79611041565b925060009150600190505b828111611b3157600154600160a060020a038089169116630d66343c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611ae057600080fd5b6102c65a03f11515611af157600080fd5b50505060405180519050600160a060020a03161415611b285780848381518110611b1757fe5b602090810290910101526001909101905b5b600101611a84565b8395505b5050505050919050565b600054600160a060020a031681565b60408051908101604052600281527f4250000000000000000000000000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615611b9c57600080fd5b600160a060020a0382161515611bb157600080fd5b30600160a060020a031682600160a060020a031614151515611bd257600080fd5b611bdc33826120a6565b1515611be757600080fd5b610ccc33838361253f565b5b5b5050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c5357600080fd5b6102c65a03f11515611c6457600080fd5b5050506040518051905080611ce95750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611ccd57600080fd5b6102c65a03f11515611cde57600080fd5b505050604051805190505b80610b275750600154600160a060020a031663babcc5398360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b505050604051805190505b90505b919050565b600080600080611d7a61272b565b611d8261272b565b600154600160a060020a0316630af9d89c8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611dd357600080fd5b6102c65a03f11515611de457600080fd5b505050604051805194505060ff84161515611e06576001955060019450611f93565b600154600160a060020a031663a42455278860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611e5757600080fd5b6102c65a03f11515611e6857600080fd5b5050506040518051600154909450600160a060020a03169050635de815348460006040516060015260405160e060020a63ffffffff84160281526004810191909152602401606060405180830381600087803b1515611ec657600080fd5b6102c65a03f11515611ed757600080fd5b505050604051606081016040908152600154919350600160a060020a039091169063f79098f4908590600090516060015260405160e060020a63ffffffff84160281526004810191909152602401606060405180830381600087803b1515611f3e57600080fd5b6102c65a03f11515611f4f57600080fd5b5050506040516060810160405290508160ff60001986011660038110611f7157fe5b602002015195508060ff60001986011660038110611f8b57fe5b602002015194505b5b50505050915091565b600254600160a060020a031681565b60005433600160a060020a03908116911614611fc757600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60005433600160a060020a0390811691161461200f57600080fd5b600160a060020a038116151561202457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6120596126cc565b6120616126cc565b600080846040518059106120725750595b908082528060200260200182016040525b5092505060208201905084612099828287612600565b8293505b50505092915050565b600154600090600160a060020a038085169116630d66343c84846040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156120fd57600080fd5b6102c65a03f1151561210e57600080fd5b50505060405180519050600160a060020a03161490505b92915050565b600154600160a060020a031663febe4909838360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561218257600080fd5b6102c65a03f1151561219357600080fd5b5050505b5050565b600154600090600160a060020a0316630d66343c83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b50505060405180519150505b919050565b60005460a060020a900460ff161561222757600080fd5b600160a060020a038216151561223c57600080fd5b30600160a060020a031682600160a060020a03161415151561225d57600080fd5b6122673382612647565b151561227257600080fd5b61227c83826120a6565b151561228757600080fd5b6110cd83838361253f565b5b5b505050565b60008063ffffffff881688146122ae57600080fd5b63ffffffff871687146122c057600080fd5b5b600154600160a060020a0316638754b1d18a8a8a8a8a8a8a60405160e060020a63ffffffff8a16028152600160a060020a0390971660048801526024870195909552604486019390935260ff918216606486015216608484015260a483015260c482015260e401600060405180830381600087803b151561234157600080fd5b6102c65a03f1151561235257600080fd5b5050600154600160a060020a0316905063145f8ba289600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156123a757600080fd5b6102c65a03f115156123b857600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296509094507f30327159df74d598a666b3800d1708fc84a7a52e5f6fb58cdd4bdffe7ad653c793508b92508c91508a9050898686604051958652600160a060020a03909416602086015260408086019390935260ff9091166060850152608084015260a083019190915260c0909101905180910390a161246260008a8a61253f565b5b505050505050505050565b60005460a060020a900460ff16151561248657600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b5b565b60005460a060020a900460ff16156124eb57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b5b565b600154600160a060020a031663687c4fa7828460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561259657600080fd5b6102c65a03f115156125a757600080fd5b5050507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b505050565b60005b6020821061262757825184526020840193506020830192505b602082039150612603565b6001826020036101000a0390508019835116818551161784525b50505050565b600154600090600160a060020a031663b5b12e758385846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156126a957600080fd5b6102c65a03f115156126ba57600080fd5b50505060405180519150505b92915050565b60206040519081016040526000815290565b60806040519081016040526004815b600081526000199190910190602001816126ed5790505090565b60206040519081016040526000815290565b60206040519081016040526000815290565b60606040519081016040526003815b60008152600019909101906020018161273a57905050905600a165627a7a723058203c0f4c698e6608d3635ce57694e7a7ae372a866e9f03f5aceb427912aae948af0029

Deployed Bytecode

0x6060604052361561014e5763ffffffff60e060020a60003504166301ffc9a781146101535780630560ff441461019f57806306fdde0314610239578063095ea7b3146102c457806312610b5b146102e8578063179047431461047457806318160ddd146104a357806323b872dd146104c8578063290b3cb7146104f25780632f54bf6e14610525578063330cbc7514610558578063362f29c9146105705780633ccfd60b146105915780633f4ba83a146105a657806351ff4847146105bb5780635c975abb146105e05780636352211e1461060757806370a08231146106395780638456cb591461066a5780638462151c1461067f5780638da5cb5b146106f257806395d89b4114610721578063a9059cbb146107ac578063aad9973f146107d0578063b1f525c614610803578063bc4006f514610837578063e17b25af14610866578063f2fde38b14610887575b600080fd5b341561015e57600080fd5b61018b7fffffffff00000000000000000000000000000000000000000000000000000000600435166108a8565b604051901515815260200160405180910390f35b34156101aa57600080fd5b6101c1600480359060248035908101910135610b2f565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561024457600080fd5b6101c1610c0e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102cf57600080fd5b6102e6600160a060020a0360043516602435610c45565b005b34156102f357600080fd5b610307600160a060020a0360043516610cd1565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156103585780820151818401525b60200161033f565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b838110156103985780820151818401525b60200161037f565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156103d85780820151818401525b6020016103bf565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156104185780820151818401525b6020016103ff565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156104585780820151818401525b60200161043f565b505050509050019a505050505050505050505060405180910390f35b341561047f57600080fd5b610487611032565b604051600160a060020a03909116815260200160405180910390f35b34156104ae57600080fd5b6104b6611041565b60405190815260200160405180910390f35b34156104d357600080fd5b6102e6600160a060020a03600435811690602435166044356110ab565b005b34156104fd57600080fd5b61018b600160a060020a03600435166110d4565b604051901515815260200160405180910390f35b341561053057600080fd5b61018b600160a060020a03600435166111cd565b604051901515815260200160405180910390f35b341561056357600080fd5b6102e66004356111e4565b005b341561057b57600080fd5b6102e6600160a060020a03600435166116f0565b005b341561059c57600080fd5b6102e661174d565b005b34156105b157600080fd5b6102e66117a5565b005b34156105c657600080fd5b6104b6611865565b60405190815260200160405180910390f35b34156105eb57600080fd5b61018b61189f565b604051901515815260200160405180910390f35b341561061257600080fd5b6104876004356118af565b604051600160a060020a03909116815260200160405180910390f35b341561064457600080fd5b6104b6600160a060020a03600435166118c2565b60405190815260200160405180910390f35b341561067557600080fd5b6102e661193f565b005b341561068a57600080fd5b61069e600160a060020a03600435166119fe565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156106de5780820151818401525b6020016106c5565b505050509050019250505060405180910390f35b34156106fd57600080fd5b610487611b3f565b604051600160a060020a03909116815260200160405180910390f35b341561072c57600080fd5b6101c1611b4e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fe5780820151818401525b6020016101e5565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107b757600080fd5b6102e6600160a060020a0360043516602435611b85565b005b34156107db57600080fd5b61018b600160a060020a0360043516611bf8565b604051901515815260200160405180910390f35b341561080e57600080fd5b610819600435611d6c565b60405160ff9283168152911660208201526040908101905180910390f35b341561084257600080fd5b610487611f9d565b604051600160a060020a03909116815260200160405180910390f35b341561087157600080fd5b6102e6600160a060020a0360043516611fac565b005b341561089257600080fd5b6102e6600160a060020a0360043516611ff4565b005b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610b2757506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b610b376126cc565b610b3f6126de565b600254600090600160a060020a03161515610b5957600080fd5b600254600160a060020a031663cb4799f2878787600060405160a0015260405160e060020a63ffffffff861602815260048101848152604060248301908152604483018490529091606401848480828437820191505094505050505060a060405180830381600087803b1515610bce57600080fd5b6102c65a03f11515610bdf57600080fd5b50505060405180608001805160209091016040529092509050610c028282612051565b92505b50509392505050565b60408051908101604052600c81527f4269745061696e74696e67730000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615610c5c57600080fd5b610c6633826120a6565b1515610c7157600080fd5b610c7b818361212b565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b5b5050565b610cd96126cc565b610ce16126cc565b610ce96126cc565b610cf16126cc565b610cf96126cc565b6000806000806000806000806000610d0f611041565b9850610d1a8f6118c2565b975087604051805910610d2a5750595b908082528060200260200182016040525b509d5087604051805910610d4c5750595b908082528060200260200182016040525b509c5087604051805910610d6e5750595b908082528060200260200182016040525b509b5087604051805910610d905750595b908082528060200260200182016040525b509a5087604051805910610db25750595b908082528060200260200182016040525b509950600095505b8886101561101f57600154600160a060020a031663a3e7061d8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610e2457600080fd5b6102c65a03f11515610e3557600080fd5b5050506040518051955050841515610e4c57611014565b8e600160a060020a0316610e5f8661219b565b600160a060020a031614610e7257611014565b600154600160a060020a03166350df8f718660006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ec357600080fd5b6102c65a03f11515610ed457600080fd5b5050506040518051905015610ee857611014565b600154600160a060020a031663145f8ba286600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b1515610f3957600080fd5b6102c65a03f11515610f4a57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805150929850909650610f879350889250611d6c915050565b9092509050848e8881518110610f9957fe5b60209081029091010152838d8881518110610fb057fe5b60209081029091010152828c8881518110610fc757fe5b60209081029091010152818b8881518110610fde57fe5b60ff909216602092830290910190910152808a8881518110610ffc57fe5b60ff9092166020928302909101909101526001909601955b600190950194610dcb565b5b50505050505050505091939590929450565b600154600160a060020a031681565b600154600090600160a060020a031663197b945482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561108b57600080fd5b6102c65a03f1151561109c57600080fd5b50505060405180519150505b90565b60005460a060020a900460ff16156110c257600080fd5b6110cd838383612210565b5b5b505050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561112f57600080fd5b6102c65a03f1151561114057600080fd5b5050506040518051905080610b275750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b505050604051805190505b90505b919050565b600054600160a060020a038281169116145b919050565b600080600080600080600060149054906101000a900460ff1615151561120957600080fd5b3395506112158761219b565b600160a060020a0387811691161461122c57600080fd5b600154600160a060020a03166350df8f718860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561127d57600080fd5b6102c65a03f1151561128e57600080fd5b5050506040518051905015156112a357600080fd5b600154600160a060020a0316635f4eab658860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156112f457600080fd5b6102c65a03f1151561130557600080fd5b505050604051805115905061131957600080fd5b600154600160a060020a031663108a101b8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561136a57600080fd5b6102c65a03f1151561137b57600080fd5b50505060405180519050151561139057600080fd5b600154600160a060020a03166337e246ad8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156113e157600080fd5b6102c65a03f115156113f257600080fd5b505050604051805115905061140657600080fd5b600154600160a060020a03166370d1383d8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561144e57600080fd5b6102c65a03f1151561145f57600080fd5b5050600154600160a060020a0316905063fafb76dd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114ab57600080fd5b6102c65a03f115156114bc57600080fd5b5050506040518051600154909650600160a060020a03169050630af9d89c8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561151a57600080fd5b6102c65a03f1151561152b57600080fd5b50505060405180516001805491019550600a9450600160a060020a0316905063cd0fdc248860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561158f57600080fd5b6102c65a03f115156115a057600080fd5b5050506040518051905091506115be86868987878742600101612299565b600154600160a060020a0316639e6afbda8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561160657600080fd5b6102c65a03f1151561161757600080fd5b5050600154600160a060020a03169050639ed573608860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561166c57600080fd5b6102c65a03f1151561167d57600080fd5b5050506040518051905090507f3f97d0875a1b44e01bf3372d1da5a4087c4e97a5ad5f81a4e1c69768548c8a3a86888784604051600160a060020a039094168452602084019290925260408084019190915260ff90911660608301526080909101905180910390a15b5b50505050505050565b60005433600160a060020a0390811691161461170b57600080fd5b600160a060020a038116151561172057600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60005433600160a060020a0390811691161461176857600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156117a157600080fd5b5b5b565b60005433600160a060020a03908116911614806118355750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561180557600080fd5b6102c65a03f1151561181657600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561184057600080fd5b60005460a060020a900460ff16151561185857600080fd5b6117a161246e565b5b5b5b565b60006040517f65646974696f6e73000000000000000000000000000000000000000000000000815260080160405190819003902090505b90565b60005460a060020a900460ff1681565b6000610b278261219b565b90505b919050565b600154600090600160a060020a031663b4f6eae483836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b50505060405180519150505b919050565b60005433600160a060020a03908116911614806119cf5750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561199f57600080fd5b6102c65a03f115156119b057600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b15156119da57600080fd5b60005460a060020a900460ff16156119f157600080fd5b6117a16124d4565b5b5b5b565b611a066126cc565b6000611a106126cc565b6000806000611a1e876118c2565b9450841515611a4f576000604051805910611a365750595b908082528060200260200182016040525b509550611b35565b84604051805910611a5d5750595b908082528060200260200182016040525b509350611a79611041565b925060009150600190505b828111611b3157600154600160a060020a038089169116630d66343c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611ae057600080fd5b6102c65a03f11515611af157600080fd5b50505060405180519050600160a060020a03161415611b285780848381518110611b1757fe5b602090810290910101526001909101905b5b600101611a84565b8395505b5050505050919050565b600054600160a060020a031681565b60408051908101604052600281527f4250000000000000000000000000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615611b9c57600080fd5b600160a060020a0382161515611bb157600080fd5b30600160a060020a031682600160a060020a031614151515611bd257600080fd5b611bdc33826120a6565b1515611be757600080fd5b610ccc33838361253f565b5b5b5050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c5357600080fd5b6102c65a03f11515611c6457600080fd5b5050506040518051905080611ce95750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611ccd57600080fd5b6102c65a03f11515611cde57600080fd5b505050604051805190505b80610b275750600154600160a060020a031663babcc5398360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b505050604051805190505b90505b919050565b600080600080611d7a61272b565b611d8261272b565b600154600160a060020a0316630af9d89c8860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611dd357600080fd5b6102c65a03f11515611de457600080fd5b505050604051805194505060ff84161515611e06576001955060019450611f93565b600154600160a060020a031663a42455278860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611e5757600080fd5b6102c65a03f11515611e6857600080fd5b5050506040518051600154909450600160a060020a03169050635de815348460006040516060015260405160e060020a63ffffffff84160281526004810191909152602401606060405180830381600087803b1515611ec657600080fd5b6102c65a03f11515611ed757600080fd5b505050604051606081016040908152600154919350600160a060020a039091169063f79098f4908590600090516060015260405160e060020a63ffffffff84160281526004810191909152602401606060405180830381600087803b1515611f3e57600080fd5b6102c65a03f11515611f4f57600080fd5b5050506040516060810160405290508160ff60001986011660038110611f7157fe5b602002015195508060ff60001986011660038110611f8b57fe5b602002015194505b5b50505050915091565b600254600160a060020a031681565b60005433600160a060020a03908116911614611fc757600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60005433600160a060020a0390811691161461200f57600080fd5b600160a060020a038116151561202457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6120596126cc565b6120616126cc565b600080846040518059106120725750595b908082528060200260200182016040525b5092505060208201905084612099828287612600565b8293505b50505092915050565b600154600090600160a060020a038085169116630d66343c84846040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156120fd57600080fd5b6102c65a03f1151561210e57600080fd5b50505060405180519050600160a060020a03161490505b92915050565b600154600160a060020a031663febe4909838360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561218257600080fd5b6102c65a03f1151561219357600080fd5b5050505b5050565b600154600090600160a060020a0316630d66343c83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111a957600080fd5b6102c65a03f115156111ba57600080fd5b50505060405180519150505b919050565b60005460a060020a900460ff161561222757600080fd5b600160a060020a038216151561223c57600080fd5b30600160a060020a031682600160a060020a03161415151561225d57600080fd5b6122673382612647565b151561227257600080fd5b61227c83826120a6565b151561228757600080fd5b6110cd83838361253f565b5b5b505050565b60008063ffffffff881688146122ae57600080fd5b63ffffffff871687146122c057600080fd5b5b600154600160a060020a0316638754b1d18a8a8a8a8a8a8a60405160e060020a63ffffffff8a16028152600160a060020a0390971660048801526024870195909552604486019390935260ff918216606486015216608484015260a483015260c482015260e401600060405180830381600087803b151561234157600080fd5b6102c65a03f1151561235257600080fd5b5050600154600160a060020a0316905063145f8ba289600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156123a757600080fd5b6102c65a03f115156123b857600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296509094507f30327159df74d598a666b3800d1708fc84a7a52e5f6fb58cdd4bdffe7ad653c793508b92508c91508a9050898686604051958652600160a060020a03909416602086015260408086019390935260ff9091166060850152608084015260a083019190915260c0909101905180910390a161246260008a8a61253f565b5b505050505050505050565b60005460a060020a900460ff16151561248657600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b5b565b60005460a060020a900460ff16156124eb57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b5b565b600154600160a060020a031663687c4fa7828460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561259657600080fd5b6102c65a03f115156125a757600080fd5b5050507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b505050565b60005b6020821061262757825184526020840193506020830192505b602082039150612603565b6001826020036101000a0390508019835116818551161784525b50505050565b600154600090600160a060020a031663b5b12e758385846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156126a957600080fd5b6102c65a03f115156126ba57600080fd5b50505060405180519150505b92915050565b60206040519081016040526000815290565b60806040519081016040526004815b600081526000199190910190602001816126ed5790505090565b60206040519081016040526000815290565b60206040519081016040526000815290565b60606040519081016040526003815b60008152600019909101906020018161273a57905050905600a165627a7a723058203c0f4c698e6608d3635ce57694e7a7ae372a866e9f03f5aceb427912aae948af0029

Swarm Source

bzzr://3c0f4c698e6608d3635ce57694e7a7ae372a866e9f03f5aceb427912aae948af

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.