Sponsored Link:   WELL – WORKING HEALTHCARE U.S. PLATFORM - RAISED $3M IN PRE-ICO – JOIN NOW WITH 40% BONUS
Contract Overview
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 1350 txns
  Latest 25 txns from a total Of 1350 transactions (+2 PendingTxns) View All

TxHash Age From To Value [TxFee]
0x22a47949f0c727c871e235fdb95102d3e4c5c5dbf3b2dd167666853125c30453(pending)1 min ago0xedc2e7e9725f675799696af7e3d68b25778d6e8c  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xbf5101d9820e46c9da81c85f7539bc6b7f79b41d05234bef6d392b2ed8455d51(pending)10 mins ago0xa364962d309d01e3c65ff861f0dbf61b7d54d1df  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x05475bd3df68421fd6f1144db58fba8268277b1159a2cc0d4410835da18a40151 hr 19 mins ago0x93c53779c51494f18bdc3b0a8b5a679a90ee5b34  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000279229531
0xc9b1fc3d09f0e18422bf2ff439cb7a831b7378dadd542562e1b515065656466e1 hr 19 mins ago0x6205c0aef2dfdb14622a66291285e08753574674  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000958744
0x18537456e9c15c36a6d0718ec90c987a10cc7fce369a4805f72bc7b6c74e35281 hr 22 mins ago0x93c53779c51494f18bdc3b0a8b5a679a90ee5b34  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00021596
0x217b96806e802f51c31ca10eea6cc31d6f2f72e6444d5db6b7a5f26118e6d4e81 hr 24 mins ago0x6020b2c3e0fcb900850d65070f252853f42e960e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00048
0xbd6c3f9046a5341a2ab0a4ad0b743c25956854d877cada48429a9d74ed6134261 hr 28 mins ago0x73a03cafecb5f375b67a8964fd11af071534a12c  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000958744
0xff180345c6d0dd3c1c20ef59db3540bbced0b9e0c3d994370162aa74ae38e90a1 hr 33 mins ago0x6020b2c3e0fcb900850d65070f252853f42e960e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0004664
0x84f0b1b9ca2a3560f0b5be790ceb4633fcfe604bb9a1a6858b4a11001304e1561 hr 48 mins ago0x791b1f6c6cc4a40fb1f7e84991512217169f3f5b  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000958744
0x707f62a87bc21d97bbcd05a74eb5d2dc6df1096429d12d25e6bf196fe30df26f2 hrs 35 mins ago0x95234f6eb43cc0feccb933bf4d6d40ead372f3b8  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000026931
0x9d4e6100c708e72911077b9922b73e2e75901aa7a8657de9ed0c5127472487152 hrs 49 mins ago0x6576c2afe57265cd531f869014027c0247769d43  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00098
0x21a06a0f0f5bb31d463e6c7437b5e0a050d2244e16c9f2138f36f690800cc6022 hrs 50 mins ago0x322f34188c941c5e8ca1f96e0dab4ff38800e890  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.001106795
0xc607e9c57c91365368116e2f7d71eb468f3b28aa70fd29fe95257e03925f90cf3 hrs 24 mins ago0xd1ac78cbeda2dda7a61d1e4f7684dae2f2919d79  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00048
0xcfd5e329db999b0652e5e9d84988ecaf586bcc3167fa4b6b41decd00b47eb9323 hrs 33 mins ago0xc4aae6b3ec5cf43fbb6b6b085bdf6b86e8fdcd7a  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00026995
0xe11b99624b00403015b5b96ab63c2eed502c2342f7e1c873599209e72a5f711a3 hrs 50 mins ago0xc464e7daefe700b0d9327b293a17dd2b83dd5241  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0016197
0x17f1f8fd0bfa3db44c5145a4eb437ada51022a1671152bd6309bf6dc9c034b6e3 hrs 53 mins ago0xb181b55057e3327e188e675f645bba7c125600ad  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00093536
0x73480075fc1e78718e89a918c51ef9efe9dadcf3ead0aca1db5123631dfa772c4 hrs 2 mins ago0x61db903821faa97fa47aac9d4738378d0e8148f2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000504
0x0d491017600874aa77a593a6118b23dbbd08cb0de16e25c1713e8dcd2265a5eb4 hrs 6 mins ago0x07b5413956c048333e3ac923d59400cf3395d044  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000026931
0xd7c01bab1e401c87247ddff863e769694eae9adb8120ba495951996c9b9a6c0b4 hrs 11 mins ago0xc464e7daefe700b0d9327b293a17dd2b83dd5241  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.001025
0xc32186b29f00215d09b5b85b2ae2a69c5cf6b0e0029cf990f6c1d9a080fe89d74 hrs 16 mins ago0x3510590bec5960a66ebde71421aac50a24f2fa1a  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00108236
0x9aa6dd2026ab1201a160df733e3660bc98b19cde17f2557eba17bcc3fe0b01d44 hrs 24 mins ago0xf0b95200955842ee76b8081f08d551e0d981972b  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000042086
0x1c1df4759761e6068fdf53e04c4b6730c016fc89659cbbd07846a7005321af8b4 hrs 34 mins ago0xde3bf26de6b4d98b130bf28c06819760fde5934c  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00046768
0x3d850d7c27ee6b7f65a147612ff5bce9dbcee6deefc4d7e02d41d216b98a7ea05 hrs 16 mins ago0x0b814d0f6433fbb3c8b3f48f7375ef1cd7a451bf  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.001025
0x0a105d67a321512ed60a78d96edab0d0d6811c7fe072fb6e9ab333360f75f6b25 hrs 22 mins ago0x5491ffa2edb559721201dcaeb56cab61b652f35a  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00054118
0xa83f4735ed92dc2d6689410ea9082fdb6c6fadc41fec4fe9a425d2c761600bff5 hrs 24 mins ago0x5491ffa2edb559721201dcaeb56cab61b652f35a  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000525
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified
Contract Name: STQToken
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity 0.4.15;

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) constant returns (uint256);
  function transfer(address to, uint256 value) returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances. 
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) returns (bool) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of. 
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) constant returns (uint256 balance) {
    return balances[_owner];
  }

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) returns (bool);
  function approve(address spender, uint256 value) returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
    var _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) returns (bool) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    require((_value == 0) || (allowed[msg.sender][_spender] == 0));

    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

}


/// @title StandardToken which circulation can be delayed and started by another contract.
/// @dev To be used as a mixin contract.
/// The contract is created in disabled state: circulation is disabled.
contract CirculatingToken is StandardToken {

    event CirculationEnabled();

    modifier requiresCirculation {
        require(m_isCirculating);
        _;
    }


    // PUBLIC interface

    function transfer(address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    function approve(address _spender, uint256 _value) requiresCirculation returns (bool) {
        return super.approve(_spender, _value);
    }


    // INTERNAL functions

    function enableCirculation() internal returns (bool) {
        if (m_isCirculating)
            return false;

        m_isCirculating = true;
        CirculationEnabled();
        return true;
    }


    // FIELDS

    /// @notice are the circulation started?
    bool public m_isCirculating;
}

/// note: during any ownership changes all pending operations (waiting for more signatures) are cancelled
// TODO acceptOwnership
contract multiowned {

	// TYPES

    // struct for the status of a pending operation.
    struct MultiOwnedOperationPendingState {
        // count of confirmations needed
        uint yetNeeded;

        // bitmap of confirmations where owner #ownerIndex's decision corresponds to 2**ownerIndex bit
        uint ownersDone;

        // position of this operation key in m_multiOwnedPendingIndex
        uint index;
    }

	// EVENTS

    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    event FinalConfirmation(address owner, bytes32 operation);

    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);

    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

	// MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        require(isOwner(msg.sender));
        _;
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation)) {
            _;
        }
        // Even if required number of confirmations has't been collected yet,
        // we can't throw here - because changes to the state have to be preserved.
        // But, confirmAndCheck itself will throw in case sender is not an owner.
    }

    modifier validNumOwners(uint _numOwners) {
        require(_numOwners > 0 && _numOwners <= c_maxOwners);
        _;
    }

    modifier multiOwnedValidRequirement(uint _required, uint _numOwners) {
        require(_required > 0 && _required <= _numOwners);
        _;
    }

    modifier ownerExists(address _address) {
        require(isOwner(_address));
        _;
    }

    modifier ownerDoesNotExist(address _address) {
        require(!isOwner(_address));
        _;
    }

    modifier multiOwnedOperationIsActive(bytes32 _operation) {
        require(isOperationActive(_operation));
        _;
    }

	// METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them (msg.sender is not added to the owners!).
    function multiowned(address[] _owners, uint _required)
        validNumOwners(_owners.length)
        multiOwnedValidRequirement(_required, _owners.length)
    {
        assert(c_maxOwners <= 255);

        m_numOwners = _owners.length;
        m_multiOwnedRequired = _required;

        for (uint i = 0; i < _owners.length; ++i)
        {
            address owner = _owners[i];
            // invalid and duplicate addresses are not allowed
            require(0 != owner && !isOwner(owner) /* not isOwner yet! */);

            uint currentOwnerIndex = checkOwnerIndex(i + 1 /* first slot is unused */);
            m_owners[currentOwnerIndex] = owner;
            m_ownerIndex[owner] = currentOwnerIndex;
        }

        assertOwnersAreConsistent();
    }

    /// @notice replaces an owner `_from` with another `_to`.
    /// @param _from address of owner to replace
    /// @param _to address of new owner
    // All pending operations will be canceled!
    function changeOwner(address _from, address _to)
        external
        ownerExists(_from)
        ownerDoesNotExist(_to)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_from]);
        m_owners[ownerIndex] = _to;
        m_ownerIndex[_from] = 0;
        m_ownerIndex[_to] = ownerIndex;

        assertOwnersAreConsistent();
        OwnerChanged(_from, _to);
    }

    /// @notice adds an owner
    /// @param _owner address of new owner
    // All pending operations will be canceled!
    function addOwner(address _owner)
        external
        ownerDoesNotExist(_owner)
        validNumOwners(m_numOwners + 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        m_numOwners++;
        m_owners[m_numOwners] = _owner;
        m_ownerIndex[_owner] = checkOwnerIndex(m_numOwners);

        assertOwnersAreConsistent();
        OwnerAdded(_owner);
    }

    /// @notice removes an owner
    /// @param _owner address of owner to remove
    // All pending operations will be canceled!
    function removeOwner(address _owner)
        external
        ownerExists(_owner)
        validNumOwners(m_numOwners - 1)
        multiOwnedValidRequirement(m_multiOwnedRequired, m_numOwners - 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_owner]);
        m_owners[ownerIndex] = 0;
        m_ownerIndex[_owner] = 0;
        //make sure m_numOwners is equal to the number of owners and always points to the last owner
        reorganizeOwners();

        assertOwnersAreConsistent();
        OwnerRemoved(_owner);
    }

    /// @notice changes the required number of owner signatures
    /// @param _newRequired new number of signatures required
    // All pending operations will be canceled!
    function changeRequirement(uint _newRequired)
        external
        multiOwnedValidRequirement(_newRequired, m_numOwners)
        onlymanyowners(sha3(msg.data))
    {
        m_multiOwnedRequired = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }

    /// @notice Gets an owner by 0-indexed position
    /// @param ownerIndex 0-indexed owner position
    function getOwner(uint ownerIndex) public constant returns (address) {
        return m_owners[ownerIndex + 1];
    }

    /// @notice Gets owners
    /// @return memory array of owners
    function getOwners() public constant returns (address[]) {
        address[] memory result = new address[](m_numOwners);
        for (uint i = 0; i < m_numOwners; i++)
            result[i] = getOwner(i);

        return result;
    }

    /// @notice checks if provided address is an owner address
    /// @param _addr address to check
    /// @return true if it's an owner
    function isOwner(address _addr) public constant returns (bool) {
        return m_ownerIndex[_addr] > 0;
    }

    /// @notice Tests ownership of the current caller.
    /// @return true if it's an owner
    // It's advisable to call it by new owner to make sure that the same erroneous address is not copy-pasted to
    // addOwner/changeOwner and to isOwner.
    function amIOwner() external constant onlyowner returns (bool) {
        return true;
    }

    /// @notice Revokes a prior confirmation of the given operation
    /// @param _operation operation value, typically sha3(msg.data)
    function revoke(bytes32 _operation)
        external
        multiOwnedOperationIsActive(_operation)
        onlyowner
    {
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        var pending = m_multiOwnedPending[_operation];
        require(pending.ownersDone & ownerIndexBit > 0);

        assertOperationIsConsistent(_operation);

        pending.yetNeeded++;
        pending.ownersDone -= ownerIndexBit;

        assertOperationIsConsistent(_operation);
        Revoke(msg.sender, _operation);
    }

    /// @notice Checks if owner confirmed given operation
    /// @param _operation operation value, typically sha3(msg.data)
    /// @param _owner an owner address
    function hasConfirmed(bytes32 _operation, address _owner)
        external
        constant
        multiOwnedOperationIsActive(_operation)
        ownerExists(_owner)
        returns (bool)
    {
        return !(m_multiOwnedPending[_operation].ownersDone & makeOwnerBitmapBit(_owner) == 0);
    }

    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation)
        private
        onlyowner
        returns (bool)
    {
        if (512 == m_multiOwnedPendingIndex.length)
            // In case m_multiOwnedPendingIndex grows too much we have to shrink it: otherwise at some point
            // we won't be able to do it because of block gas limit.
            // Yes, pending confirmations will be lost. Dont see any security or stability implications.
            // TODO use more graceful approach like compact or removal of clearPending completely
            clearPending();

        var pending = m_multiOwnedPending[_operation];

        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (! isOperationActive(_operation)) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_multiOwnedRequired;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_multiOwnedPendingIndex.length++;
            m_multiOwnedPendingIndex[pending.index] = _operation;
            assertOperationIsConsistent(_operation);
        }

        // determine the bit to set for this owner.
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            // ok - check if count is enough to go ahead.
            assert(pending.yetNeeded > 0);
            if (pending.yetNeeded == 1) {
                // enough confirmations: reset and run interior.
                delete m_multiOwnedPendingIndex[m_multiOwnedPending[_operation].index];
                delete m_multiOwnedPending[_operation];
                FinalConfirmation(msg.sender, _operation);
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
                assertOperationIsConsistent(_operation);
                Confirmation(msg.sender, _operation);
            }
        }
    }

    // Reclaims free slots between valid owners in m_owners.
    // TODO given that its called after each removal, it could be simplified.
    function reorganizeOwners() private {
        uint free = 1;
        while (free < m_numOwners)
        {
            // iterating to the first free slot from the beginning
            while (free < m_numOwners && m_owners[free] != 0) free++;

            // iterating to the first occupied slot from the end
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;

            // swap, if possible, so free slot is located at the end after the swap
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                // owners between swapped slots should't be renumbered - that saves a lot of gas
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }

    function clearPending() private onlyowner {
        uint length = m_multiOwnedPendingIndex.length;
        for (uint i = 0; i < length; ++i) {
            if (m_multiOwnedPendingIndex[i] != 0)
                delete m_multiOwnedPending[m_multiOwnedPendingIndex[i]];
        }
        delete m_multiOwnedPendingIndex;
    }

    function checkOwnerIndex(uint ownerIndex) private constant returns (uint) {
        assert(0 != ownerIndex && ownerIndex <= c_maxOwners);
        return ownerIndex;
    }

    function makeOwnerBitmapBit(address owner) private constant returns (uint) {
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[owner]);
        return 2 ** ownerIndex;
    }

    function isOperationActive(bytes32 _operation) private constant returns (bool) {
        return 0 != m_multiOwnedPending[_operation].yetNeeded;
    }


    function assertOwnersAreConsistent() private constant {
        assert(m_numOwners > 0);
        assert(m_numOwners <= c_maxOwners);
        assert(m_owners[0] == 0);
        assert(0 != m_multiOwnedRequired && m_multiOwnedRequired <= m_numOwners);
    }

    function assertOperationIsConsistent(bytes32 _operation) private constant {
        var pending = m_multiOwnedPending[_operation];
        assert(0 != pending.yetNeeded);
        assert(m_multiOwnedPendingIndex[pending.index] == _operation);
        assert(pending.yetNeeded <= m_multiOwnedRequired);
    }


   	// FIELDS

    uint constant c_maxOwners = 250;

    // the number of owners that must confirm the same operation before it is run.
    uint public m_multiOwnedRequired;


    // pointer used to find a free slot in m_owners
    uint public m_numOwners;

    // list of owners (addresses),
    // slot 0 is unused so there are no owner which index is 0.
    // TODO could we save space at the end of the array for the common case of <10 owners? and should we?
    address[256] internal m_owners;

    // index on the list of owners to allow reverse lookup: owner address => index in m_owners
    mapping(address => uint) internal m_ownerIndex;


    // the ongoing operations.
    mapping(bytes32 => MultiOwnedOperationPendingState) internal m_multiOwnedPending;
    bytes32[] internal m_multiOwnedPendingIndex;
}


/**
 * @title Contract which is owned by owners and operated by controller.
 *
 * @notice Provides a way to set up an entity (typically other contract) entitled to control actions of this contract.
 * Controller is set up by owners or during construction.
 *
 * @dev controller check is performed by onlyController modifier.
 */
contract MultiownedControlled is multiowned {

    event ControllerSet(address controller);
    event ControllerRetired(address was);


    modifier onlyController {
        require(msg.sender == m_controller);
        _;
    }


    // PUBLIC interface

    function MultiownedControlled(address[] _owners, uint _signaturesRequired, address _controller)
        multiowned(_owners, _signaturesRequired)
    {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev sets the controller
    function setController(address _controller) external onlymanyowners(sha3(msg.data)) {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev ability for controller to step down
    function detachController() external onlyController {
        address was = m_controller;
        m_controller = address(0);
        ControllerRetired(was);
    }


    // FIELDS

    /// @notice address of entity entitled to mint new tokens
    address public m_controller;
}


/// @title StandardToken which can be minted by another contract.
contract MintableMultiownedToken is MultiownedControlled, StandardToken {

    /// @dev parameters of an extra token emission
    struct EmissionInfo {
        // tokens created
        uint256 created;

        // totalSupply at the moment of emission (excluding created tokens)
        uint256 totalSupplyWas;
    }

    event Mint(address indexed to, uint256 amount);
    event Emission(uint256 tokensCreated, uint256 totalSupplyWas, uint256 time);
    event Dividend(address indexed to, uint256 amount);


    // PUBLIC interface

    function MintableMultiownedToken(address[] _owners, uint _signaturesRequired, address _minter)
        MultiownedControlled(_owners, _signaturesRequired, _minter)
    {
        dividendsPool = this;   // or any other special unforgeable value, actually

        // emission #0 is a dummy: because of default value 0 in m_lastAccountEmission
        m_emissions.push(EmissionInfo({created: 0, totalSupplyWas: 0}));
    }

    /// @notice Request dividends for current account.
    function requestDividends() external {
        payDividendsTo(msg.sender);
    }

    /// @notice hook on standard ERC20#transfer to pay dividends
    function transfer(address _to, uint256 _value) returns (bool) {
        payDividendsTo(msg.sender);
        payDividendsTo(_to);
        return super.transfer(_to, _value);
    }

    /// @notice hook on standard ERC20#transferFrom to pay dividends
    function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
        payDividendsTo(_from);
        payDividendsTo(_to);
        return super.transferFrom(_from, _to, _value);
    }

    // Disabled: this could be undesirable because sum of (balanceOf() for each token owner) != totalSupply
    // (but: sum of (balances[owner] for each token owner) == totalSupply!).
    //
    // @notice hook on standard ERC20#balanceOf to take dividends into consideration
    // function balanceOf(address _owner) constant returns (uint256) {
    //     var (hasNewDividends, dividends) = calculateDividendsFor(_owner);
    //     return hasNewDividends ? super.balanceOf(_owner).add(dividends) : super.balanceOf(_owner);
    // }


    /// @dev mints new tokens
    function mint(address _to, uint256 _amount) external onlyController {
        require(m_externalMintingEnabled);
        payDividendsTo(_to);
        mintInternal(_to, _amount);
    }

    /// @dev disables mint(), irreversible!
    function disableMinting() external onlyController {
        require(m_externalMintingEnabled);
        m_externalMintingEnabled = false;
    }


    // INTERNAL functions

    /**
     * @notice Starts new token emission
     * @param _tokensCreated Amount of tokens to create
     * @dev Dividends are not distributed immediately as it could require billions of gas,
     * instead they are `pulled` by a holder from dividends pool account before any update to the holder account occurs.
     */
    function emissionInternal(uint256 _tokensCreated) internal {
        require(0 != _tokensCreated);
        require(_tokensCreated < totalSupply / 2);  // otherwise it looks like an error

        uint256 totalSupplyWas = totalSupply;

        m_emissions.push(EmissionInfo({created: _tokensCreated, totalSupplyWas: totalSupplyWas}));
        mintInternal(dividendsPool, _tokensCreated);

        Emission(_tokensCreated, totalSupplyWas, now);
    }

    function mintInternal(address _to, uint256 _amount) internal {
        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Transfer(this, _to, _amount);
        Mint(_to, _amount);
    }

    /// @dev adds dividends to the account _to
    function payDividendsTo(address _to) internal {
        var (hasNewDividends, dividends) = calculateDividendsFor(_to);
        if (!hasNewDividends)
            return;

        if (0 != dividends) {
            balances[dividendsPool] = balances[dividendsPool].sub(dividends);
            balances[_to] = balances[_to].add(dividends);
            Transfer(dividendsPool, _to, dividends);
        }
        m_lastAccountEmission[_to] = getLastEmissionNum();
    }

    /// @dev calculates dividends for the account _for
    /// @return (true if state has to be updated, dividend amount (could be 0!))
    function calculateDividendsFor(address _for) constant internal returns (bool hasNewDividends, uint dividends) {
        assert(_for != dividendsPool);  // no dividends for the pool!

        uint256 lastEmissionNum = getLastEmissionNum();
        uint256 lastAccountEmissionNum = m_lastAccountEmission[_for];
        assert(lastAccountEmissionNum <= lastEmissionNum);
        if (lastAccountEmissionNum == lastEmissionNum)
            return (false, 0);

        uint256 initialBalance = balances[_for];    // beware of recursion!
        if (0 == initialBalance)
            return (true, 0);

        uint256 balance = initialBalance;
        for (uint256 emissionToProcess = lastAccountEmissionNum + 1; emissionToProcess <= lastEmissionNum; emissionToProcess++) {
            EmissionInfo storage emission = m_emissions[emissionToProcess];
            assert(0 != emission.created && 0 != emission.totalSupplyWas);

            uint256 dividend = balance.mul(emission.created).div(emission.totalSupplyWas);
            Dividend(_for, dividend);

            balance = balance.add(dividend);
        }

        return (true, balance.sub(initialBalance));
    }

    function getLastEmissionNum() private constant returns (uint256) {
        return m_emissions.length - 1;
    }


    // FIELDS

    /// @notice if this true then token is still externally mintable (but this flag does't affect emissions!)
    bool public m_externalMintingEnabled = true;

    /// @dev internal address of dividends in balances mapping.
    address dividendsPool;

    /// @notice record of issued dividend emissions
    EmissionInfo[] public m_emissions;

    /// @dev for each token holder: last emission (index in m_emissions) which was processed for this holder
    mapping(address => uint256) m_lastAccountEmission;
}


/// @title Storiqa coin contract
contract STQToken is CirculatingToken, MintableMultiownedToken {


    // PUBLIC interface

    function STQToken(address[] _owners)
        MintableMultiownedToken(_owners, 2, /* minter: */ address(0))
    {
        require(3 == _owners.length);
    }

    /// @dev Allows token transfers
    function startCirculation() external onlyController {
        assert(enableCirculation());    // must be called once
    }

    /// @notice Starts new token emission
    /// @param _tokensCreatedInSTQ Amount of STQ (not STQ-wei!) to create, like 30 000 or so
    function emission(uint256 _tokensCreatedInSTQ) external onlymanyowners(sha3(msg.data)) {
        emissionInternal(_tokensCreatedInSTQ.mul(uint256(10) ** uint256(decimals)));
    }


    // FIELDS

    string public constant name = 'Storiqa Token';
    string public constant symbol = 'STQ';
    uint8 public constant decimals = 18;
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"startCirculation","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_externalMintingEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"amIOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"detachController","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokensCreatedInSTQ","type":"uint256"}],"name":"emission","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_multiOwnedRequired","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"m_emissions","outputs":[{"name":"created","type":"uint256"},{"name":"totalSupplyWas","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"ownerIndex","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"requestDividends","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_isCirculating","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokensCreated","type":"uint256"},{"indexed":false,"name":"totalSupplyWas","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Emission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Dividend","type":"event"},{"anonymous":false,"inputs":[],"name":"CirculationEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"controller","type":"address"}],"name":"ControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"was","type":"address"}],"name":"ControllerRetired","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"FinalConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052610109805461ff00191661010017905534156200002057600080fd5b60405162002419380380620024198339810160405280805190910190505b80600260005b8282825b82825b6000806000845160008111801562000064575060fa8111155b15156200007057600080fd5b848651600082118015620000845750808211155b15156200009057600080fd5b5b8751600155600087815595505b87518610156200016e57878681518110620000b557fe5b906020019060200201519450600160a060020a03851615801590620000f05750620000ee85640100000000620009916200028382021704565b155b1515620000fc57600080fd5b620001186001870164010000000062001560620002a482021704565b93508460028561010081106200012a57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905585166000908152610102602052604090208490555b8560010195506200009e565b6200018664010000000062001453620002c882021704565b5b5b50505b50506101058054600160a060020a031916600160a060020a0387811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79550169250604091505051600160a060020a03909116815260200160405180910390a15b505061010980546201000060b060020a0319166201000030600160a060020a0316021790555061010a8054600181016200022f83826200032c565b916000526020600020906002020160005b604080519081016040526000808252602082015291905081518155602082015181600101555050505b50505080516003146200027b57600080fd5b5b506200038b565b600160a060020a03811660009081526101026020526040812054115b919050565b60008115801590620002b7575060fa8211155b1515620002c057fe5b50805b919050565b60015460009011620002d657fe5b60015460fa901115620002e557fe5b600260005b0160005b9054600160a060020a036101009290920a900416156200030a57fe5b6000541580159062000320575060015460005411155b15156200032957fe5b5b565b8154818355818115116200035b576002028160020283600052602060002091820191016200035b919062000361565b5b505050565b6200038891905b8082111562000384576000808255600182015560020162000368565b5090565b90565b61207e806200039b6000396000f300606060405236156101935763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610198578063095ea7b314610223578063173825d91461025957806318160ddd1461027a57806320190ccd1461029f57806323b872dd146102b45780632f54bf6e146102f0578063313ce5671461032357806340c10f191461034c5780634123cb6b1461037057806344cc5f7e146103955780634e4ab830146103bc57806357d444fd146103e357806358292a3d146103f85780637065cb481461041057806370a0823114610431578063787d64e4146104625780637e5cd5c11461048757806392eefe9b1461049c57806395d89b41146104bd578063a0e67e2b14610548578063a9059cbb146105af578063af107749146105e5578063b75c7dc614610613578063ba51a6df1461062b578063c2cf732614610643578063c41a360a14610679578063d4a9991f146106ab578063d7311963146106c0578063d785e5c9146106ef578063dd62ed3e14610716578063f00d4b5d1461074d575b600080fd5b34156101a357600080fd5b6101ab610774565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022e57600080fd5b610245600160a060020a03600435166024356107ab565b604051901515815260200160405180910390f35b341561026457600080fd5b610278600160a060020a03600435166107d4565b005b341561028557600080fd5b61028d610931565b60405190815260200160405180910390f35b34156102aa57600080fd5b610278610938565b005b34156102bf57600080fd5b610245600160a060020a0360043581169060243516604435610968565b604051901515815260200160405180910390f35b34156102fb57600080fd5b610245600160a060020a0360043516610991565b604051901515815260200160405180910390f35b341561032e57600080fd5b6103366109b2565b60405160ff909116815260200160405180910390f35b341561035757600080fd5b610278600160a060020a03600435166024356109b7565b005b341561037b57600080fd5b61028d610a03565b60405190815260200160405180910390f35b34156103a057600080fd5b610245610a09565b604051901515815260200160405180910390f35b34156103c757600080fd5b610245610a18565b604051901515815260200160405180910390f35b34156103ee57600080fd5b610278610a36565b005b341561040357600080fd5b610278600435610ac1565b005b341561041b57600080fd5b610278600160a060020a0360043516610b14565b005b341561043c57600080fd5b61028d600160a060020a0360043516610c3b565b60405190815260200160405180910390f35b341561046d57600080fd5b61028d610c5b565b60405190815260200160405180910390f35b341561049257600080fd5b610278610c61565b005b34156104a757600080fd5b610278600160a060020a0360043516610ca4565b005b34156104c857600080fd5b6101ab610d44565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561055357600080fd5b61055b610d7b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561059b5780820151818401525b602001610582565b505050509050019250505060405180910390f35b34156105ba57600080fd5b610245600160a060020a0360043516602435610dfe565b604051901515815260200160405180910390f35b34156105f057600080fd5b6105fb600435610e25565b60405191825260208201526040908101905180910390f35b341561061e57600080fd5b610278600435610e54565b005b341561063657600080fd5b610278600435610f20565b005b341561064e57600080fd5b610245600435600160a060020a0360243516610fb5565b604051901515815260200160405180910390f35b341561068457600080fd5b61068f60043561100d565b604051600160a060020a03909116815260200160405180910390f35b34156106b657600080fd5b61027861103e565b005b34156106cb57600080fd5b61068f61104a565b604051600160a060020a03909116815260200160405180910390f35b34156106fa57600080fd5b61024561105a565b604051901515815260200160405180910390f35b341561072157600080fd5b61028d600160a060020a0360043581169060243516611064565b60405190815260200160405180910390f35b341561075857600080fd5b610278600160a060020a0360043581169060243516611092565b005b60408051908101604052600d81527f53746f7269716120546f6b656e00000000000000000000000000000000000000602082015281565b6101095460009060ff1615156107c057600080fd5b6107ca83836111ca565b90505b5b92915050565b6000816107e081610991565b15156107eb57600080fd5b6001805403600081118015610801575060fa8111155b151561080c57600080fd5b60005460018054036000821180156108245750808211155b151561082f57600080fd5b60003660405180838380828437820191505092505050604051809103902061085681611273565b1561092357610863611453565b61086b6114b2565b600160a060020a0387166000908152610102602052604090205461088e90611560565b9550600060028761010081106108a057fe5b0160005b8154600160a060020a039384166101009290920a91820291840219161790558716600090815261010260205260408120556108dd611582565b6108e5611453565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da87604051600160a060020a03909116815260200160405180910390a15b5b5b505b50505b505b505050565b6101065481565b6101055433600160a060020a0390811691161461095457600080fd5b61095c611768565b151561096457fe5b5b5b565b6000610973846117c0565b61097c836117c0565b6109878484846118ca565b90505b9392505050565b600160a060020a03811660009081526101026020526040812054115b919050565b601281565b6101055433600160a060020a039081169116146109d357600080fd5b61010954610100900460ff1615156109ea57600080fd5b6109f3826117c0565b6109fd82826118f5565b5b5b5050565b60015481565b61010954610100900460ff1681565b6000610a2333610991565b1515610a2e57600080fd5b5060015b5b90565b6101055460009033600160a060020a03908116911614610a5557600080fd5b50610105805473ffffffffffffffffffffffffffffffffffffffff198116909155600160a060020a03167fc82cd8e6862d9c7b2c4c1d4f8dbac09a809e276399883e1070457f61a0f5349081604051600160a060020a03909116815260200160405180910390a15b5b50565b600036604051808383808284378201915050925050506040518091039020610ae881611273565b156109fd576109fd610b0883670de0b6b3a764000063ffffffff6119c016565b6119ef565b5b5b5b5050565b80610b1e81610991565b15610b2857600080fd5b600154600101600081118015610b3f575060fa8111155b1515610b4a57600080fd5b600036604051808383808284378201915050925050506040518091039020610b7181611273565b1561092a57610b7e611453565b610b866114b2565b6001805481019081905584906002906101008110610ba057fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550610bd1600154611560565b600160a060020a03851660009081526101026020526040902055610bf3611453565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c384604051600160a060020a03909116815260200160405180910390a15b5b5b505b505b5050565b600160a060020a038116600090815261010760205260409020545b919050565b60005481565b6101055433600160a060020a03908116911614610c7d57600080fd5b61010954610100900460ff161515610c9457600080fd5b610109805461ff00191690555b5b565b600036604051808383808284378201915050925050506040518091039020610ccb81611273565b156109fd57610105805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79116604051600160a060020a03909116815260200160405180910390a15b5b5b5050565b60408051908101604052600381527f5354510000000000000000000000000000000000000000000000000000000000602082015281565b610d83611f5a565b610d8b611f5a565b6000600154604051805910610d9d5750595b908082528060200260200182016040525b509150600090505b600154811015610df557610dc98161100d565b828281518110610dd557fe5b600160a060020a039092166020928302909101909101525b600101610db6565b8192505b505090565b6000610e09336117c0565b610e12836117c0565b6107ca8383611acc565b90505b92915050565b61010a805482908110610e3457fe5b906000526020600020906002020160005b50805460019091015490915082565b60008082610e6181611af5565b1515610e6c57600080fd5b610e7533610991565b1515610e8057600080fd5b610e8933611b0d565b6000858152610103602052604081206001810154929550935090841611610eaf57600080fd5b610eb884611b41565b815460019081018355820180548490039055610ed384611b41565b7fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b50505050565b80600154600082118015610f345750808211155b1515610f3f57600080fd5b600036604051808383808284378201915050925050506040518091039020610f6681611273565b1561092a576000849055610f786114b2565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da8460405190815260200160405180910390a15b5b5b505b505050565b600082610fc181611af5565b1515610fcc57600080fd5b82610fd681610991565b1515610fe157600080fd5b610fea84611b0d565b6000868152610103602052604090206001015416151592505b5b505b5092915050565b6000600260018301610100811061102057fe5b0160005b9054906101000a9004600160a060020a031690505b919050565b610964336117c0565b5b565b61010554600160a060020a031681565b6101095460ff1681565b600160a060020a03808316600090815261010860209081526040808320938516835292905220545b92915050565b60008261109e81610991565b15156110a957600080fd5b826110b381610991565b156110bd57600080fd5b6000366040518083838082843782019150509250505060405180910390206110e481611273565b15610927576110f1611453565b6110f96114b2565b600160a060020a0386166000908152610102602052604090205461111c90611560565b935084600285610100811061112d57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905586811660009081526101026020526040808220829055918716815220849055611177611453565b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8686604051600160a060020a039283168152911660208201526040908101905180910390a15b5b5b505b505b50505050565b60008115806111fd5750600160a060020a0333811660009081526101086020908152604080832093871683529290522054155b151561120857600080fd5b600160a060020a0333811660008181526101086020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600080600061128133610991565b151561128c57600080fd5b6101045461020014156112a1576112a16114b2565b5b60008481526101036020526040902091506112bc84611af5565b1515611313576000805483556001808401919091556101048054916112e391908301611f6c565b60028301819055610104805486929081106112fa57fe5b906000526020600020900160005b505561131384611b41565b5b61131d33611b0d565b905080826001015416600014156114495781546000901161133a57fe5b8154600114156113e957600084815261010360205260409020600201546101048054909190811061136757fe5b906000526020600020900160005b50600090819055848152610103602052604080822082815560018101839055600201919091557f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd16903390869051600160a060020a03909216825260208201526040908101905180910390a160019250611449565b81546000190182556001820180548217905561140484611b41565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b5b5050919050565b6001546000901161146057fe5b60015460fa90111561146e57fe5b600260005b0160005b9054600160a060020a036101009290920a9004161561149257fe5b6000541580159061095c575060015460005411155b151561096457fe5b5b565b6000806114be33610991565b15156114c957600080fd5b50506101045460005b8181101561154d576101048054829081106114e957fe5b906000526020600020900160005b5054156115445761010360006101048381548110151561151357fe5b906000526020600020900160005b505481526020810191909152604001600090812081815560018101829055600201555b5b6001016114d2565b6109fd6101046000611f96565b5b5b5050565b60008115801590611572575060fa8211155b151561157a57fe5b50805b919050565b60015b600154811015610abd575b600154811080156115c5575060028161010081106115aa57fe5b0160005b9054600160a060020a036101009290920a90041615155b156115d257600101611590565b5b6001805411801561160a575060015460029061010081106115f057fe5b0160005b9054600160a060020a036101009290920a900416155b1561161e57600180546000190190556115d2565b600154811080156116565750600154600290610100811061163b57fe5b0160005b9054600160a060020a036101009290920a90041615155b80156116855750600281610100811061166b57fe5b0160005b9054600160a060020a036101009290920a900416155b1561175f57600154600290610100811061169b57fe5b0160005b9054906101000a9004600160a060020a0316600282610100811015156116c157fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550806101026000600284610100811015156116fd57fe5b0160005b905461010091820a9004600160a060020a031682526020820192909252604001600090812092909255600154600291811061173857fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b611585565b5b50565b6101095460009060ff161561177f57506000610a32565b610109805460ff191660011790557f61ff8191b26826d8bb82f4fa7cb8ef434fa4f34635af54cac08f7c476c5e279460405160405180910390a15060015b90565b6000806117cc83611b98565b915091508115156117dc5761092c565b80156118a25761010954620100009004600160a060020a03166000908152610107602052604090205461180f9082611d48565b61010954600160a060020a0362010000909104811660009081526101076020526040808220939093559085168152205461184f908263ffffffff611d5f16565b600160a060020a0380851660008181526101076020526040908190209390935561010954909262010000909104909116906000805160206120338339815191529084905190815260200160405180910390a35b6118aa611d79565b600160a060020a038416600090815261010b60205260409020555b505050565b6101095460009060ff1615156118df57600080fd5b610987848484611d85565b90505b5b9392505050565b61010654611909908263ffffffff611d5f16565b61010655600160a060020a03821660009081526101076020526040902054611937908263ffffffff611d5f16565b600160a060020a038084166000818152610107602052604090819020939093559130909116906000805160206120338339815191529084905190815260200160405180910390a381600160a060020a03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405190815260200160405180910390a25b5050565b60008282028315806119dc57508284828115156119d957fe5b04145b15156119e457fe5b8091505b5092915050565b60008115156119fd57600080fd5b610106546002905b048210611a1157600080fd5b506101065461010a805460018101611a298382611fb8565b916000526020600020906002020160005b6040805190810160405285815260208101859052919050815181556020820151600190910155505061010954611a8090600160a060020a036201000090910416836118f5565b7fb6d34f12e241bbb736de0a0cc42ddcb06ed877521d75a28e8c375794fadaf23582824260405180848152602001838152602001828152602001935050505060405180910390a15b5050565b6101095460009060ff161515611ae157600080fd5b6107ca8383611e8d565b90505b5b92915050565b6000818152610103602052604090205415155b919050565b600160a060020a038116600090815261010260205260408120548190611b3290611560565b90508060020a91505b50919050565b60008181526101036020526040902080541515611b5a57fe5b600281015461010480548492908110611b6f57fe5b906000526020600020900160005b505414611b8657fe5b600054815411156109fd57fe5b5b5050565b600080600080600080600080600061010960029054906101000a9004600160a060020a0316600160a060020a03168a600160a060020a031614151515611bda57fe5b611be2611d79565b600160a060020a038b16600090815261010b6020526040902054909750955086861115611c0b57fe5b86861415611c1f5760009850889750611d3c565b600160a060020a038a16600090815261010760205260409020549450841515611c4f576001985060009750611d3c565b8493508560010192505b868311611d255761010a805484908110611c6f57fe5b906000526020600020906002020160005b50805490925015801590611c975750600182015415155b1515611c9f57fe5b60018201548254611cc89190611cbc90879063ffffffff6119c016565b9063ffffffff611f3e16565b905089600160a060020a03167ff6a7e669306918b018d1eb595a21c8180bdecc0c90847daef23f9cf5fbd4902a8260405190815260200160405180910390a2611d17848263ffffffff611d5f16565b93505b600190920191611c59565b6001611d37858763ffffffff611d4816565b985098505b50505050505050915091565b600082821115611d5457fe5b508082035b92915050565b6000828201838110156119e457fe5b8091505b5092915050565b61010a54600019015b90565b600160a060020a0380841660009081526101086020908152604080832033851684528252808320549386168352610107909152812054909190611dce908463ffffffff611d5f16565b600160a060020a03808616600090815261010760205260408082209390935590871681522054611e04908463ffffffff611d4816565b600160a060020a03861660009081526101076020526040902055611e2e818463ffffffff611d4816565b600160a060020a0380871660008181526101086020908152604080832033861684529091529081902093909355908616916000805160206120338339815191529086905190815260200160405180910390a3600191505b509392505050565b600160a060020a03331660009081526101076020526040812054611eb7908363ffffffff611d4816565b600160a060020a03338116600090815261010760205260408082209390935590851681522054611eed908363ffffffff611d5f16565b600160a060020a038085166000818152610107602052604090819020939093559133909116906000805160206120338339815191529085905190815260200160405180910390a35060015b92915050565b6000808284811515611f4c57fe5b0490508091505b5092915050565b60206040519081016040526000815290565b81548183558181151161092c5760008381526020902061092c918101908301611fea565b5b505050565b5080546000825590600052602060002090810190610abd9190611fea565b5b50565b81548183558181151161092c5760020281600202836000526020600020918201910161092c919061200b565b5b505050565b610a3291905b808211156120045760008155600101611ff0565b5090565b90565b610a3291905b808211156120045760008082556001820155600201612011565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a002900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e70000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d

    Constructor Arguments (ABI-encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e70000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d

-----Decoded View---------------
Found 5 constructor arguments :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e
Arg [3] : 000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e7
Arg [4] : 0000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d


   Swarm Source:
bzzr://806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.