Latest 25 transactions from a total of 94 transactions

TxHash Age From To Value [TxFee]
0x7fc13a0f2563a2452ad1eb730a6a869210687601d97f77ef552954be7ff396c0270 days 17 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.0028921
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f1271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012612578
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.01259005
0x5ad7df6b014635cc99775a865bd7a9344b823a0ee68ce44fda616fa5b32f0b14271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.01260413
0xf1d76f7540147bc22581415db49016975d5f1ec9d8ddd7b030b99456cbff6680271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012599906
0xe7a1573e166ab5f5b260e95b7976c37edbe96af3b638c59a229bfebefdae9239271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012605538
0x65cd4e6105df0b93d71bf9f26a7cba5bbf2c5eb0144b54c7a4180d7af236d84b271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012588642
0xd644ffb1fca4ad344ceec4454850f88a3cf29136a94a358bc7898c4d55c021c5271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012599906
0x80ce33e61f2736ba7d1a92ee8df24e3d1033b6e0f1b7810c7d7dc269a9fc10aa271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012601314
0x678b0d2eb8ad4a3c6e57697c8a2d1c4990eb7284e1f649b89b588ff61f55742e271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012584418
0x7f668be15bb2b877054333271230a7acfc8a5560d8a08408825518d956c9611f271 days 9 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.01261117
0x7dfc228670a6fb7c1ae03911441f3e96d21aa4e4ae5d6378e423cec6fa303b8b272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012584418
0x45d2615788c9125cf8398a42c1bf5926822f345b4dfa2992d3ac6be8a850ecac272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012585826
0xcc7a747d6a224bc45364bef870153f2add00df52f332357f84ea6c721905f997272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012578786
0x867dbc35de1e699776e5bcdf58e338c9a39aaa480ba11b0f2100aac1fb36acde272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012585826
0x3455adc8b791b0a702a86b0235d94685678f9b885042d017e54642bb066b7387272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012585826
0xf6ee8b2014c8b27604c1e92183bd1a42447d0cc36d1de1223b74f0cc375c8dab272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012612578
0xd307ad905e2e2de58783a990c1026f1ba8dcd2a4265c223c80e60e6ba00e7b9a272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.01259005
0x22532f09022603ebeb321a17c33f1885604fdda3e8df8bd2d14fed9b1712f656272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012578786
0xacb122c5c720fd9b902dba5b4033816bb08097bb86a03780f5c3aaa2825f514e272 days 10 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.012609762
0xd3362026eb7a9af2581870cfb83cc85cfdb02686c681efac96443dd85b921a95272 days 15 hrs ago0x53562e8ecee54356dc89ad263a444528b34d6c80  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.0012751
0x5ef82b7fbe540b2e26c3c7a52080258871c9a3b8cad164b1a7a26f3cbd459bb3273 days 16 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.00170292
0xcaa22bda657504cd63c4a23f4433f73ecd1bb50c7f5acca564f622b5f1b11a8f275 days 13 hrs ago0x54e4095be6a921b30b8c4a1fdcfbdf599d785443  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.0449794
0x6227ebca3cd80fec34ee067e70a6f0dc6ee1dd12c49653904b6066f94362a578275 days 23 hrs ago0x5e1f839e35a77928938f55b14e548b0c10adc266  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.000027091
0x8891c62b35eb1ebe6369c563babae17875a20ffb59e22528b8b6a65fa830e1f7275 days 23 hrs ago0x5e1f839e35a77928938f55b14e548b0c10adc266  IN   0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0 Ether0.000078819
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xfcba1908773af421b923aebd941b4f612dfb98320 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0xf2c703b1d736a9b6162a187b5b33d94390e543644c973e36bbda906c95f1d6f13289229271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xfcba1908773af421b923aebd941b4f612dfb98320 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x33d72373334e560b5694b84ba46d3841f7ede5bd36e5a483783b644458d14bad3289228271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x5ad7df6b014635cc99775a865bd7a9344b823a0ee68ce44fda616fa5b32f0b143289227271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x5ad7df6b014635cc99775a865bd7a9344b823a0ee68ce44fda616fa5b32f0b143289227271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x5ad7df6b014635cc99775a865bd7a9344b823a0ee68ce44fda616fa5b32f0b143289227271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xfcba1908773af421b923aebd941b4f612dfb98320 Ether
0x5ad7df6b014635cc99775a865bd7a9344b823a0ee68ce44fda616fa5b32f0b143289227271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
0x5ad7df6b014635cc99775a865bd7a9344b823a0ee68ce44fda616fa5b32f0b143289227271 days 9 hrs ago0xeaf462e1546a49f7ba29aedff4b3e481a4a5fd4a0xae223623252de632f8242975441f87826d7391ff0 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0x0e1b23a7385a85401a7576e7e80b969dbc8d6de0
Contract Name: BitpaintingPaintings
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.15;

// File: contracts/interfaces/IAuctions.sol

contract IAuctions {

    function currentPrice(uint _tokenId) public constant returns (uint256);
    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration) public;
    function createReleaseAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration) public;
    function cancelAuction(uint256 _tokenId) external;
    function cancelAuctionWhenPaused(uint256 _tokenId) external;
    function bid(uint256 _tokenId, address _owner) external payable;
    function market() public constant returns (
        uint[] tokens,
        address[] sellers,
        uint8[] generations,
        uint8[] speeds,
        uint[] prices
    );
    function auctionsOf(address _of) public constant returns (
        uint[] tokens,
        uint[] prices
    );
    function signature() external constant returns (uint _signature);
}

// File: contracts/interfaces/IPaintings.sol

contract IPaintings {
    function createPainting(uint _tokenId) external;
    function sendAsGift(address _to, uint _tokenId) external;
    function collectionOf(address _of) public constant returns (
        uint[] tokens,
        bool[] pending,
        bool[] forSale,
        bool[] locked,
        uint8[] generations,
        uint8[] speeds
    );
    function collectionCountsOf(address _of)
        public constant returns (uint total, uint pending, uint forSale);
    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/BitpaintingPaintings.sol

contract BitpaintingPaintings is PaintingOwnership, IPaintings {

    function release(
        uint _tokenId,
        uint _artistId,
        uint _releasedAt,
        uint8[] _gens,
        uint _auctionStartingPrice,
        uint _auctionEndingPrice,
        uint _auctionDuration,
        string _artist,
        string _name
    ) external canReleaseArtwork whenNotPaused {
        _createOriginalPainting(_tokenId, _artistId, _releasedAt);
        _approve(_tokenId, owner);
        bitpaintingStorage.setEditionLimits(_tokenId, _gens[0], _gens[1],_gens[2]);
        auctionsContract().createReleaseAuction(
            _tokenId,
            _auctionStartingPrice,
            _auctionEndingPrice,
            _releasedAt,
            _auctionDuration);
        bitpaintingStorage.setPaintingArtist(_tokenId, _artist);
        bitpaintingStorage.setPaintingName(_tokenId, _name);
    }

    function releaseNow(
        uint _tokenId,
        uint _artistId,
        uint8[] _gens,
        uint _auctionStartingPrice,
        uint _auctionEndingPrice,
        uint _auctionDuration,
        string _artist,
        string _name
    ) external canReleaseArtwork whenNotPaused {
        uint _releasedAt = now;
        _createOriginalPainting(_tokenId, _artistId, _releasedAt);
        _approve(_tokenId, owner);
        bitpaintingStorage.setEditionLimits(_tokenId, _gens[0], _gens[1],_gens[2]);
        auctionsContract().createReleaseAuction(
            _tokenId,
            _auctionStartingPrice,
            _auctionEndingPrice,
            now, // _releasedAt
            _auctionDuration);
        bitpaintingStorage.setPaintingArtist(_tokenId, _artist);
        bitpaintingStorage.setPaintingName(_tokenId, _name);
    }

    function cancel(uint _tokenId) external canCancelArtwork whenNotPaused {
        require(bitpaintingStorage.isOnAuction(_tokenId));
        require(bitpaintingStorage.canBeChanged(_tokenId));

        bitpaintingStorage.resetPainting(_tokenId);
        bitpaintingStorage.removeAuction(_tokenId);
        bitpaintingStorage.resetEditionLimits(_tokenId);
        bitpaintingStorage.purgeInformation(_tokenId);
    }

    function auctionsContract() internal returns (IAuctions auctions){
        uint _signature = uint(keccak256("auctions"));
        return IAuctions(bitpaintingStorage.contracts(_signature));
    }

    function createPainting(uint _tokenId)
        external canReleaseArtwork whenNotPaused {
        _createOriginalPainting(_tokenId, 1, now);
        _approve(_tokenId, owner);
    }

    function sendAsGift(address _to, uint _tokenId) external whenNotPaused {
        require(_to != address(0));
        require(_to != address(this));
        require(_owns(msg.sender, _tokenId));
        require(bitpaintingStorage.isReady(_tokenId));
        require(!bitpaintingStorage.hasEditionInProgress(_tokenId));

        if (bitpaintingStorage.isOnAuction(_tokenId)) {
            bitpaintingStorage.removeAuction(_tokenId);
        }

        _transfer(msg.sender, _to, _tokenId);
        bitpaintingStorage.increaseOwnershipTokenCount(_to);
        bitpaintingStorage.decreaseOwnershipTokenCount(msg.sender);
    }

    function allTokenIds() public constant returns (uint[] tokenIds) {
        uint len = bitpaintingStorage.totalPaintingsCount();
        uint resultLen = bitpaintingStorage.paintingsCount();
        tokenIds = new uint[](resultLen);
        uint pointer = 0;
        for (uint index = 0; index < len; index++) {
            uint token = bitpaintingStorage.getPaintingIdAtIndex(index);
            if (bitpaintingStorage.isCanceled(token)) {
                continue;
            }
            tokenIds[pointer] = token;
            pointer++;
        }
    }

    function collectionOf(address _of) public constant returns (
            uint[] tokens,
            bool[] pending,
            bool[] forSale,
            bool[] locked,
            uint8[] generations,
            uint8[] speeds
        ) {

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

        tokens = new uint[](length);
        pending = new bool[](length);
        forSale = new bool[](length);
        locked = new bool[](length);
        generations = new uint8[](length);
        speeds = new uint8[](length);

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

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

            tokens[pointer] = tokenId;
            pending[pointer] = !bitpaintingStorage.isReady(tokenId);
            forSale[pointer] = (bitpaintingStorage.getAuctionStartedAt(tokenId) > 0);
            uint edition = bitpaintingStorage.lastEditionOf(tokenId);
            if (edition == 0) {
                locked[pointer] = false;
            } else {
                locked[pointer] = !bitpaintingStorage.isReady(edition);
            }
            generations[pointer] = bitpaintingStorage.getPaintingGeneration(tokenId);
            speeds[pointer] = bitpaintingStorage.getPaintingSpeed(tokenId);

            pointer++;
        }

    }

    function collectionCountsOf(address _of) public constant
        returns (uint total, uint pending, uint forSale) {
        uint tokenCount = totalSupply();

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

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

            total++;

            if (bitpaintingStorage.isReady(tokenId)) {
                if (bitpaintingStorage.getAuctionStartedAt(tokenId) > 0) {
                    forSale++;
                }

                continue;
            }

            if (!bitpaintingStorage.isReady(tokenId)) {
                pending++;
                continue;
            }

        }

    }

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

}

    Contract ABI  
[{"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":"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":"_address","type":"address"}],"name":"setBitpaintingStorage","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_artistId","type":"uint256"},{"name":"_releasedAt","type":"uint256"},{"name":"_gens","type":"uint8[]"},{"name":"_auctionStartingPrice","type":"uint256"},{"name":"_auctionEndingPrice","type":"uint256"},{"name":"_auctionDuration","type":"uint256"},{"name":"_artist","type":"string"},{"name":"_name","type":"string"}],"name":"release","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_of","type":"address"}],"name":"collectionOf","outputs":[{"name":"tokens","type":"uint256[]"},{"name":"pending","type":"bool[]"},{"name":"forSale","type":"bool[]"},{"name":"locked","type":"bool[]"},{"name":"generations","type":"uint8[]"},{"name":"speeds","type":"uint8[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancel","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":"_tokenId","type":"uint256"},{"name":"_artistId","type":"uint256"},{"name":"_gens","type":"uint8[]"},{"name":"_auctionStartingPrice","type":"uint256"},{"name":"_auctionEndingPrice","type":"uint256"},{"name":"_auctionDuration","type":"uint256"},{"name":"_artist","type":"string"},{"name":"_name","type":"string"}],"name":"releaseNow","outputs":[],"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":true,"inputs":[{"name":"_of","type":"address"}],"name":"collectionCountsOf","outputs":[{"name":"total","type":"uint256"},{"name":"pending","type":"uint256"},{"name":"forSale","type":"uint256"}],"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":"erc721Metadata","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"sendAsGift","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setMetadataAddress","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"allTokenIds","outputs":[{"name":"tokenIds","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"createPainting","outputs":[],"payable":false,"type":"function"},{"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"}]

  Contract Creation Code Switch To Opcodes View
60606040526000805460a060020a60ff02191690555b60008054600160a060020a03191633600160a060020a03161790555b5b613419806100416000396000f300606060405236156101855763ffffffff60e060020a60003504166301ffc9a7811461018a5780630560ff44146101d657806306fdde0314610270578063095ea7b3146102fb578063179047431461031f57806318160ddd1461034e57806323b872dd14610373578063290b3cb71461039d5780632f54bf6e146103d0578063362f29c91461040357806338284f36146104245780633ccfd60b146104755780633e94c9041461048a5780633f4ba83a1461065c57806340e58ee51461067157806351ff4847146106895780635c975abb146106ae5780636352211e146106d557806370a08231146107075780637984932e146107385780638456cb59146107845780638462151c146107995780638da5cb5b1461080c57806395d89b411461083b5780639d5c7be8146108c6578063a9059cbb14610909578063aad9973f1461092d578063bc4006f514610960578063c70461171461098f578063e17b25af146109b3578063e7619fad146109d4578063f2fde38b14610a3b578063fe5709cd14610a5c575b600080fd5b341561019557600080fd5b6101c27fffffffff0000000000000000000000000000000000000000000000000000000060043516610a74565b604051901515815260200160405180910390f35b34156101e157600080fd5b6101f8600480359060248035908101910135610cfb565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102355780820151818401525b60200161021c565b50505050905090810190601f1680156102625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561027b57600080fd5b6101f8610dda565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102355780820151818401525b60200161021c565b50505050905090810190601f1680156102625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030657600080fd5b61031d600160a060020a0360043516602435610e11565b005b341561032a57600080fd5b610332610e9d565b604051600160a060020a03909116815260200160405180910390f35b341561035957600080fd5b610361610eac565b60405190815260200160405180910390f35b341561037e57600080fd5b61031d600160a060020a0360043581169060243516604435610f16565b005b34156103a857600080fd5b6101c2600160a060020a0360043516610f3f565b604051901515815260200160405180910390f35b34156103db57600080fd5b6101c2600160a060020a0360043516611038565b604051901515815260200160405180910390f35b341561040e57600080fd5b61031d600160a060020a036004351661104f565b005b341561042f57600080fd5b61031d60048035906024803591604435916064358082019290810135916084359160a4359160c4359160e435808301929082013591610104359182019101356110ac565b005b341561048057600080fd5b61031d611348565b005b341561049557600080fd5b6104a9600160a060020a03600435166113a0565b6040518080602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b838110156104fe5780820151818401525b6020016104e5565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b8381101561053e5780820151818401525b602001610525565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b8381101561057e5780820151818401525b602001610565565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b838110156105be5780820151818401525b6020016105a5565b50505050905001878103835289818151815260200191508051906020019060200280838360005b838110156105fe5780820151818401525b6020016105e5565b50505050905001878103825288818151815260200191508051906020019060200280838360005b8381101561063e5780820151818401525b602001610625565b505050509050019c5050505050505050505050505060405180910390f35b341561066757600080fd5b61031d6118d6565b005b341561067c57600080fd5b61031d600435611996565b005b341561069457600080fd5b610361611c28565b60405190815260200160405180910390f35b34156106b957600080fd5b6101c2611c62565b604051901515815260200160405180910390f35b34156106e057600080fd5b610332600435611c72565b604051600160a060020a03909116815260200160405180910390f35b341561071257600080fd5b610361600160a060020a0360043516611c85565b60405190815260200160405180910390f35b341561074357600080fd5b61031d60048035906024803591604435808301929082013591606435916084359160a4359160c43580820192908101359160e435908101910135611d02565b005b341561078f57600080fd5b61031d611fa2565b005b34156107a457600080fd5b6107b8600160a060020a0360043516612061565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156107f85780820151818401525b6020016107df565b505050509050019250505060405180910390f35b341561081757600080fd5b6103326121a2565b604051600160a060020a03909116815260200160405180910390f35b341561084657600080fd5b6101f86121b1565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102355780820151818401525b60200161021c565b50505050905090810190601f1680156102625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108d157600080fd5b6108e5600160a060020a03600435166121e8565b60405180848152602001838152602001828152602001935050505060405180910390f35b341561091457600080fd5b61031d600160a060020a0360043516602435612420565b005b341561093857600080fd5b6101c2600160a060020a0360043516612493565b604051901515815260200160405180910390f35b341561096b57600080fd5b610332612607565b604051600160a060020a03909116815260200160405180910390f35b341561099a57600080fd5b61031d600160a060020a0360043516602435612616565b005b34156109be57600080fd5b61031d600160a060020a036004351661290d565b005b34156109df57600080fd5b6107b8612955565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156107f85780820151818401525b6020016107df565b505050509050019250505060405180910390f35b3415610a4657600080fd5b61031d600160a060020a0360043516612b7c565b005b3415610a6757600080fd5b61031d600435612bd9565b005b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610cf357506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b610d0361337c565b610d0b61338e565b600254600090600160a060020a03161515610d2557600080fd5b600254600160a060020a031663cb4799f2878787600060405160a0015260405160e060020a63ffffffff861602815260048101848152604060248301908152604483018490529091606401848480828437820191505094505050505060a060405180830381600087803b1515610d9a57600080fd5b6102c65a03f11515610dab57600080fd5b50505060405180608001805160209091016040529092509050610dce8282612c2d565b92505b50509392505050565b60408051908101604052600c81527f4269745061696e74696e67730000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615610e2857600080fd5b610e323382612c82565b1515610e3d57600080fd5b610e478183612d07565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b5b5050565b600154600160a060020a031681565b600154600090600160a060020a031663197b945482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610ef657600080fd5b6102c65a03f11515610f0757600080fd5b50505060405180519150505b90565b60005460a060020a900460ff1615610f2d57600080fd5b610f38838383612d77565b5b5b505050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f9a57600080fd5b6102c65a03f11515610fab57600080fd5b5050506040518051905080610cf35750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561101457600080fd5b6102c65a03f1151561102557600080fd5b505050604051805190505b90505b919050565b600054600160a060020a038281169116145b919050565b60005433600160a060020a0390811691161461106a57600080fd5b600160a060020a038116151561107f57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6110b533612493565b15156110c057600080fd5b60005460a060020a900460ff16156110d757600080fd5b6110e28c8c8c612e00565b6000546110f9908d90600160a060020a0316612d07565b600154600160a060020a031663783370b58d8b8b600081811061111857fe5b9050602002013560ff168c8c6001818110151561113157fe5b9050602002013560ff168d8d6002818110151561114a57fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b15156111a257600080fd5b6102c65a03f115156111b357600080fd5b5050506111be612e2a565b600160a060020a031663f26539668d89898e8a60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b151561122157600080fd5b6102c65a03f1151561123257600080fd5b5050600154600160a060020a0316905063d59f4e688d868660405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156112a257600080fd5b6102c65a03f115156112b357600080fd5b5050600154600160a060020a0316905063fabb79528d848460405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b151561132357600080fd5b6102c65a03f1151561133457600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a0390811691161461136357600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561139c57600080fd5b5b5b565b6113a861337c565b6113b061337c565b6113b861337c565b6113c061337c565b6113c861337c565b6113d061337c565b6000806000806000806113e1610eac565b95506113ec8d611c85565b9450846040518059106113fc5750595b908082528060200260200182016040525b509b508460405180591061141e5750595b908082528060200260200182016040525b509a50846040518059106114405750595b908082528060200260200182016040525b509950846040518059106114625750595b908082528060200260200182016040525b509850846040518059106114845750595b908082528060200260200182016040525b509750846040518059106114a65750595b908082528060200260200182016040525b509650600092505b858310156118c657600154600160a060020a031663a3e7061d8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561151857600080fd5b6102c65a03f1151561152957600080fd5b5050506040518051925050600160a060020a038d1661154783612ed4565b600160a060020a03161461155a576118bb565b818c858151811061156757fe5b60209081029091010152600154600160a060020a03166350df8f718360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156115c257600080fd5b6102c65a03f115156115d357600080fd5b50505060405180519050158b85815181106115ea57fe5b911515602092830290910190910152600154600090600160a060020a03166337016a5f84836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561164c57600080fd5b6102c65a03f1151561165d57600080fd5b50505060405180519050118a858151811061167457fe5b911515602092830290910190910152600154600160a060020a031663f50b769e8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156116d457600080fd5b6102c65a03f115156116e557600080fd5b505050604051805191505080151561171957600089858151811061170557fe5b9115156020928302909101909101526117a2565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561176a57600080fd5b6102c65a03f1151561177b57600080fd5b505050604051805190501589858151811061179257fe5b9115156020928302909101909101525b600154600160a060020a0316630af9d89c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156117f357600080fd5b6102c65a03f1151561180457600080fd5b5050506040518051905088858151811061181a57fe5b60ff909216602092830290910190910152600154600160a060020a0316639ed573608360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561187c57600080fd5b6102c65a03f1151561188d57600080fd5b505050604051805190508785815181106118a357fe5b60ff9092166020928302909101909101526001909301925b6001909201916114bf565b5b50505050505091939550919395565b60005433600160a060020a03908116911614806119665750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561193657600080fd5b6102c65a03f1151561194757600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561197157600080fd5b60005460a060020a900460ff16151561198957600080fd5b61139c612f49565b5b5b5b565b61199f33610f3f565b15156119aa57600080fd5b60005460a060020a900460ff16156119c157600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a1257600080fd5b6102c65a03f11515611a2357600080fd5b505050604051805190501515611a3857600080fd5b600154600160a060020a0316637d6979e78260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a8957600080fd5b6102c65a03f11515611a9a57600080fd5b505050604051805190501515611aaf57600080fd5b600154600160a060020a0316638635b5278260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611af757600080fd5b6102c65a03f11515611b0857600080fd5b5050600154600160a060020a03169050632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611b5457600080fd5b6102c65a03f11515611b6557600080fd5b5050600154600160a060020a03169050634a61f3478260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611bb157600080fd5b6102c65a03f11515611bc257600080fd5b5050600154600160a060020a0316905063a61bd76d8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611c0e57600080fd5b6102c65a03f11515611c1f57600080fd5b5050505b5b5b50565b60006040517f7061696e74696e67730000000000000000000000000000000000000000000000815260090160405190819003902090505b90565b60005460a060020a900460ff1681565b6000610cf382612ed4565b90505b919050565b600154600090600160a060020a031663b4f6eae483836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561101457600080fd5b6102c65a03f1151561102557600080fd5b50505060405180519150505b919050565b6000611d0d33612493565b1515611d1857600080fd5b60005460a060020a900460ff1615611d2f57600080fd5b5042611d3c8c8c83612e00565b600054611d53908d90600160a060020a0316612d07565b600154600160a060020a031663783370b58d8c8c6000818110611d7257fe5b9050602002013560ff168d8d60018181101515611d8b57fe5b9050602002013560ff168e8e60028181101515611da457fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b1515611dfc57600080fd5b6102c65a03f11515611e0d57600080fd5b505050611e18612e2a565b600160a060020a031663f26539668d8a8a428b60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b1515611e7b57600080fd5b6102c65a03f11515611e8c57600080fd5b5050600154600160a060020a0316905063d59f4e688d878760405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b1515611efc57600080fd5b6102c65a03f11515611f0d57600080fd5b5050600154600160a060020a0316905063fabb79528d858560405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b151561132357600080fd5b6102c65a03f1151561133457600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a03908116911614806120325750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561200257600080fd5b6102c65a03f1151561201357600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561203d57600080fd5b60005460a060020a900460ff161561205457600080fd5b61139c612faf565b5b5b5b565b61206961337c565b600061207361337c565b600080600061208187611c85565b94508415156120b25760006040518059106120995750595b908082528060200260200182016040525b509550612198565b846040518059106120c05750595b908082528060200260200182016040525b5093506120dc610eac565b925060009150600190505b82811161219457600154600160a060020a038089169116630d66343c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561214357600080fd5b6102c65a03f1151561215457600080fd5b50505060405180519050600160a060020a0316141561218b578084838151811061217a57fe5b602090810290910101526001909101905b5b6001016120e7565b8395505b5050505050919050565b600054600160a060020a031681565b60408051908101604052600281527f4250000000000000000000000000000000000000000000000000000000000000602082015281565b6000806000806000806121f9610eac565b9250600091505b8282101561241557600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561225957600080fd5b6102c65a03f1151561226a57600080fd5b5050506040518051915050600160a060020a03871661228882612ed4565b600160a060020a03161461229b57612409565b60018054960195600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156122f057600080fd5b6102c65a03f1151561230157600080fd5b505050604051805190501561239057600154600090600160a060020a03166337016a5f83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561236357600080fd5b6102c65a03f1151561237457600080fd5b50505060405180519050111561238b576001909301925b612409565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156123e157600080fd5b6102c65a03f115156123f257600080fd5b505050604051805190501515612409576001909401935b5b600190910190612200565b5b5050509193909250565b60005460a060020a900460ff161561243757600080fd5b600160a060020a038216151561244c57600080fd5b30600160a060020a031682600160a060020a03161415151561246d57600080fd5b6124773382612c82565b151561248257600080fd5b610e9833838361301a565b5b5b5050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156124ee57600080fd5b6102c65a03f115156124ff57600080fd5b50505060405180519050806125845750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561256857600080fd5b6102c65a03f1151561257957600080fd5b505050604051805190505b80610cf35750600154600160a060020a031663babcc5398360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561101457600080fd5b6102c65a03f1151561102557600080fd5b505050604051805190505b90505b919050565b600254600160a060020a031681565b60005460a060020a900460ff161561262d57600080fd5b600160a060020a038216151561264257600080fd5b30600160a060020a031682600160a060020a03161415151561266357600080fd5b61266d3382612c82565b151561267857600080fd5b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126c957600080fd5b6102c65a03f115156126da57600080fd5b5050506040518051905015156126ef57600080fd5b600154600160a060020a0316635f4eab658260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561274057600080fd5b6102c65a03f1151561275157600080fd5b505050604051805115905061276557600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156127b657600080fd5b6102c65a03f115156127c757600080fd5b505050604051805190501561283357600154600160a060020a0316632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561281e57600080fd5b6102c65a03f1151561282f57600080fd5b5050505b61283e33838361301a565b600154600160a060020a0316636bfaa9038360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561288e57600080fd5b6102c65a03f1151561289f57600080fd5b5050600154600160a060020a03169050631be6ce573360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156128f357600080fd5b6102c65a03f1151561290457600080fd5b5050505b5b5050565b60005433600160a060020a0390811691161461292857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b61295d61337c565b6001546000908190819081908190600160a060020a0316632efd08df82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156129af57600080fd5b6102c65a03f115156129c057600080fd5b5050506040518051600154909650600160a060020a0316905063197b94546000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612a1557600080fd5b6102c65a03f11515612a2657600080fd5b50505060405180519050935083604051805910612a405750595b908082528060200260200182016040525b50955060009250600091505b84821015612b7357600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612ab657600080fd5b6102c65a03f11515612ac757600080fd5b5050506040518051600154909250600160a060020a031690506339e3af9b8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612b2557600080fd5b6102c65a03f11515612b3657600080fd5b5050506040518051905015612b4a57612b68565b80868481518110612b5757fe5b602090810290910101526001909201915b600190910190612a5d565b5b505050505090565b60005433600160a060020a03908116911614612b9757600080fd5b600160a060020a0381161515612bac57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b612be233612493565b1515612bed57600080fd5b60005460a060020a900460ff1615612c0457600080fd5b612c1081600142612e00565b6000546110a8908290600160a060020a0316612d07565b5b5b5b50565b612c3561337c565b612c3d61337c565b60008084604051805910612c4e5750595b908082528060200260200182016040525b5092505060208201905084612c758282876130db565b8293505b50505092915050565b600154600090600160a060020a038085169116630d66343c84846040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612cd957600080fd5b6102c65a03f11515612cea57600080fd5b50505060405180519050600160a060020a03161490505b92915050565b600154600160a060020a031663febe4909838360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b15156128f357600080fd5b6102c65a03f1151561290457600080fd5b5050505b5050565b60005460a060020a900460ff1615612d8e57600080fd5b600160a060020a0382161515612da357600080fd5b30600160a060020a031682600160a060020a031614151515612dc457600080fd5b612dce3382613122565b1515612dd957600080fd5b612de38382612c82565b1515612dee57600080fd5b610f3883838361301a565b5b5b505050565b60008054600160a060020a03169080600a612e2084888480858b8b6131a7565b5b50505050505050565b6000806040517f61756374696f6e730000000000000000000000000000000000000000000000008152600801604051908190039020600154909150600160a060020a031663474da79a8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612eb357600080fd5b6102c65a03f11515612ec457600080fd5b50505060405180519250505b5090565b600154600090600160a060020a0316630d66343c83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561101457600080fd5b6102c65a03f1151561102557600080fd5b50505060405180519150505b919050565b60005460a060020a900460ff161515612f6157600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b5b565b60005460a060020a900460ff1615612fc657600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b5b565b600154600160a060020a031663687c4fa7828460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561307157600080fd5b6102c65a03f1151561308257600080fd5b5050507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b505050565b60005b6020821061310257825184526020840193506020830192505b6020820391506130de565b6001826020036101000a0390508019835116818551161784525b50505050565b600154600090600160a060020a031663b5b12e758385846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b151561318457600080fd5b6102c65a03f1151561319557600080fd5b50505060405180519150505b92915050565b60008063ffffffff881688146131bc57600080fd5b63ffffffff871687146131ce57600080fd5b5b600154600160a060020a0316638754b1d18a8a8a8a8a8a8a60405160e060020a63ffffffff8a16028152600160a060020a0390971660048801526024870195909552604486019390935260ff918216606486015216608484015260a483015260c482015260e401600060405180830381600087803b151561324f57600080fd5b6102c65a03f1151561326057600080fd5b5050600154600160a060020a0316905063145f8ba289600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156132b557600080fd5b6102c65a03f115156132c657600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296509094507f30327159df74d598a666b3800d1708fc84a7a52e5f6fb58cdd4bdffe7ad653c793508b92508c91508a9050898686604051958652600160a060020a03909416602086015260408086019390935260ff9091166060850152608084015260a083019190915260c0909101905180910390a161337060008a8a61301a565b5b505050505050505050565b60206040519081016040526000815290565b60806040519081016040526004815b6000815260001991909101906020018161339d5790505090565b60206040519081016040526000815290565b60206040519081016040526000815290565b602060405190810160405260008152905600a165627a7a72305820912f1b0ca994fa08fa6872170f45e2320328ddafef12affd268dd74de27eb71c0029

   Swarm Source:
bzzr://912f1b0ca994fa08fa6872170f45e2320328ddafef12affd268dd74de27eb71c

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward