ETH Price: $2,543.90 (-2.20%)

Contract

0xACe570A701adaE43C2842347a94FC29Cbd0d92bB
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Tokens ...137727532021-12-09 19:01:571049 days ago1639076517IN
0xACe570A7...Cbd0d92bB
0 ETH0.00885143155
Transfer Tokens ...137661882021-12-08 17:48:231050 days ago1638985703IN
0xACe570A7...Cbd0d92bB
0 ETH0.0038783.92791369
Transfer Tokens ...137647512021-12-08 12:18:441050 days ago1638965924IN
0xACe570A7...Cbd0d92bB
0 ETH0.0091721173.12652671
Transfer Tokens ...137540332021-12-06 19:07:581052 days ago1638817678IN
0xACe570A7...Cbd0d92bB
0 ETH0.0046574781.55840721
Transfer Tokens ...137532862021-12-06 16:15:061052 days ago1638807306IN
0xACe570A7...Cbd0d92bB
0 ETH0.0071472155
Transfer Tokens ...137522252021-12-06 12:15:451052 days ago1638792945IN
0xACe570A7...Cbd0d92bB
0 ETH0.0107696985.86356299
Transfer Tokens ...136794192021-11-24 20:50:291064 days ago1637787029IN
0xACe570A7...Cbd0d92bB
0 ETH0.007672134.32319543
Transfer Tokens ...136793482021-11-24 20:35:581064 days ago1637786158IN
0xACe570A7...Cbd0d92bB
0 ETH0.00882523191.34135659
Transfer Tokens ...136793422021-11-24 20:34:371064 days ago1637786077IN
0xACe570A7...Cbd0d92bB
0 ETH0.01671929133.28521262
Transfer Tokens ...136212332021-11-15 15:53:411073 days ago1636991621IN
0xACe570A7...Cbd0d92bB
0 ETH0.01056646185
Transfer Tokens ...136212322021-11-15 15:53:041073 days ago1636991584IN
0xACe570A7...Cbd0d92bB
0 ETH0.01056461185
Transfer Tokens ...136205752021-11-15 13:26:341073 days ago1636982794IN
0xACe570A7...Cbd0d92bB
0 ETH0.00472338102.43516391
Transfer Tokens ...136203992021-11-15 12:45:411073 days ago1636980341IN
0xACe570A7...Cbd0d92bB
0 ETH0.0159873127.46201952
Transfer Tokens ...136201652021-11-15 11:49:091073 days ago1636976949IN
0xACe570A7...Cbd0d92bB
0 ETH0.0034405374.59485517
Transfer Tokens ...136035832021-11-12 20:57:521076 days ago1636750672IN
0xACe570A7...Cbd0d92bB
0 ETH0.01716862136.86720592
Transfer Tokens ...135884492021-11-10 12:19:031078 days ago1636546743IN
0xACe570A7...Cbd0d92bB
0 ETH0.01056646185
Transfer Tokens ...135831952021-11-09 16:28:151079 days ago1636475295IN
0xACe570A7...Cbd0d92bB
0 ETH0.00752023163.04735418
Transfer Tokens ...135823732021-11-09 13:18:511079 days ago1636463931IN
0xACe570A7...Cbd0d92bB
0 ETH0.01884674150.2450817
Transfer Tokens ...134953192021-10-26 21:14:271093 days ago1635282867IN
0xACe570A7...Cbd0d92bB
0 ETH0.0107378188
Transfer Tokens ...134877652021-10-25 16:47:081094 days ago1635180428IN
0xACe570A7...Cbd0d92bB
0 ETH0.00535794116.16637082
Transfer Tokens ...134872942021-10-25 15:03:021094 days ago1635174182IN
0xACe570A7...Cbd0d92bB
0 ETH0.011694493.2270611
Transfer Tokens ...134446222021-10-18 23:12:461101 days ago1634598766IN
0xACe570A7...Cbd0d92bB
0 ETH0.00885298155
Transfer Tokens ...134434012021-10-18 18:29:521101 days ago1634581792IN
0xACe570A7...Cbd0d92bB
0 ETH0.00545016118.16578771
Transfer Tokens ...134427212021-10-18 15:54:571101 days ago1634572497IN
0xACe570A7...Cbd0d92bB
0 ETH0.0098499178.52289887
Transfer Tokens ...134101972021-10-13 13:16:331106 days ago1634130993IN
0xACe570A7...Cbd0d92bB
0 ETH0.01097338155
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenHolder

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-13
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.4.26;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    if (a == 0) {
      return 0;
    }
    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure 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 a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}


// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.4.26;

// Interface declarations

/* solhint-disable func-order */

interface IERC20 {
    // Emitted when the allowance of a spender for an owner is set by a call to approve.
    // Value is the new allowance
    event Approval(address indexed owner, address indexed spender, uint value);

    // Emitted when value tokens are moved from one account (from) to another (to).
    // Note that value may be zero
    event Transfer(address indexed from, address indexed to, uint value);

    // Returns the amount of tokens in existence
    function totalSupply() external view returns (uint);

    // Returns the amount of tokens owned by account
    function balanceOf(address account) external view returns (uint);

    // Returns the remaining number of tokens that spender will be allowed to spend on behalf of owner
    // through transferFrom. This is zero by default
    // This value changes when approve or transferFrom are called
    function allowance(address owner, address spender) external view returns (uint);

    // Sets amount as the allowance of spender over the caller’s tokens
    // Returns a boolean value indicating whether the operation succeeded
    // Emits an Approval event.
    function approve(address spender, uint amount) external returns (bool);

    // Moves amount tokens from the caller’s account to recipient
    // Returns a boolean value indicating whether the operation succeeded
    // Emits a Transfer event.
    function transfer(address recipient, uint amount) external returns (bool);

    // Moves amount tokens from sender to recipient using the allowance mechanism
    // Amount is then deducted from the caller’s allowance
    // Returns a boolean value indicating whether the operation succeeded
    // Emits a Transfer event
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
}

// Copyright (C) 2017  MixBytes, LLC

// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.

// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied).

// Code taken from https://github.com/ethereum/dapp-bin/blob/master/wallet/wallet.sol
// Audit, refactoring and improvements by github.com/Eenae

// @authors:
// Gav Wood <[email protected]>
// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a
// single, or, crucially, each of a number of, designated owners.
// usage:
// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by
// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the
// interior is executed.

pragma solidity ^0.4.26;


/// 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);
  event Op(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 onlyallowners(bytes32 _operation) {
    if (confirmAndCheckForAll(_operation)) {
      _;
    }
  }

  modifier onlyalmostallowners(bytes32 _operation) {
    if (confirmAndCheckForAlmostAll(_operation)) {
      _;
    }
  }

  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!).
  constructor(address[] _owners, uint _required)
      public
      validNumOwners(_owners.length)
      multiOwnedValidRequirement(_required, _owners.length)
  {
    assert(c_maxOwners <= 255);

    require(_owners.length == 6, "Gath3r: Number of total multisig owners must be equal to 6");
    require(_required == 3, "Gath3r: Number of required multisig owners must be equal to 3");

    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)
      onlyalmostallowners(keccak256(msg.data))
  {
    assertOwnersAreConsistent();

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

    assertOwnersAreConsistent();
    emit 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)
      onlyalmostallowners(keccak256(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)
    onlyalmostallowners(keccak256(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(keccak256(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 view returns (address) {
    return m_owners[ownerIndex + 1];
  }

  /// @notice Gets owners
  /// @return memory array of owners
  function getOwners() public view 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 view 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 view onlyowner returns (bool) {
    return true;
  }

  /// @notice Revokes a prior confirmation of the given operation
  /// @param _operation operation value, typically keccak256(msg.data)
  function revoke(bytes32 _operation)
    external
    multiOwnedOperationIsActive(_operation)
    onlyowner
  {
    uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
    MultiOwnedOperationPendingState 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 keccak256(msg.data)
  /// @param _owner an owner address
  function hasConfirmed(bytes32 _operation, address _owner)
    external
    view
    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();

    MultiOwnedOperationPendingState 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);
      }
    }
  }

  function confirmAndCheckForAll(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();

    MultiOwnedOperationPendingState 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_numOwners;
      // reset which owners have confirmed (none) - set our bitmap to 0.
      pending.ownersDone = 0;
      pending.index = m_multiOwnedPendingIndex.length++;
      m_multiOwnedPendingIndex[pending.index] = _operation;
      assertOperationIsConsistentForAll(_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;
        assertOperationIsConsistentForAll(_operation);
        Confirmation(msg.sender, _operation);
      }
    }
  }

  function confirmAndCheckForAlmostAll(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();

    MultiOwnedOperationPendingState 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_numOwners - 1;
      // reset which owners have confirmed (none) - set our bitmap to 0.
      pending.ownersDone = 0;
      pending.index = m_multiOwnedPendingIndex.length++;
      m_multiOwnedPendingIndex[pending.index] = _operation;
      assertOperationIsConsistentForAlmostAll(_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;
        assertOperationIsConsistentForAlmostAll(_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;
    // TODO block gas limit
    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 pure returns (uint) {
    assert(0 != ownerIndex && ownerIndex <= c_maxOwners);
    return ownerIndex;
  }

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

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


  function assertOwnersAreConsistent() private view {
    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 view {
    MultiOwnedOperationPendingState pending = m_multiOwnedPending[_operation];
    assert(0 != pending.yetNeeded);
    assert(m_multiOwnedPendingIndex[pending.index] == _operation);
    assert(pending.yetNeeded <= m_multiOwnedRequired);
  }

  function assertOperationIsConsistentForAll(bytes32 _operation) private view {
    MultiOwnedOperationPendingState pending = m_multiOwnedPending[_operation];
    assert(0 != pending.yetNeeded);
    assert(m_multiOwnedPendingIndex[pending.index] == _operation);
    assert(pending.yetNeeded <= m_numOwners);
  }

  function assertOperationIsConsistentForAlmostAll(bytes32 _operation) private view {
    MultiOwnedOperationPendingState pending = m_multiOwnedPending[_operation];
    assert(0 != pending.yetNeeded);
    assert(m_multiOwnedPendingIndex[pending.index] == _operation);
    assert(pending.yetNeeded <= m_numOwners - 1);
  }


  // FIELDS

  uint constant c_maxOwners = 250;

  // the number of owners that must confirm the same operation before it is run.
  uint256 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;
}


// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.4.26;





contract TokenHolder is multiowned {
    using SafeMath for uint256;

    IERC20 public token;

    event Transferred(address to, uint256 amount);

    constructor (address[] _owners, uint _required, address _token) multiowned(_owners, _required) public {
        token = IERC20(_token);
    }

    function transferTokensTo(address _address, uint256 _amount) external onlymanyowners(keccak256(msg.data)) {
        token.transfer(_address, _amount);
        emit Transferred(_address, _amount);
    }

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferTokensTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"amIOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"m_multiOwnedRequired","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ownerIndex","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"},{"name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transferred","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":"operation","type":"bytes32"}],"name":"Op","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"}]

60806040523480156200001157600080fd5b50604051620020523803806200205283398101806040528101908080518201929190602001805190602001909291908051906020019092919050505082826000806000845160008111801562000068575060fa8111155b15156200007457600080fd5b848651600082118015620000885750808211155b15156200009457600080fd5b60ff60fa11151515620000a357fe5b6006885114151562000143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001807f4761746833723a204e756d626572206f6620746f74616c206d756c746973696781526020017f206f776e657273206d75737420626520657175616c20746f203600000000000081525060400191505060405180910390fd5b600387141515620001e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001807f4761746833723a204e756d626572206f66207265717569726564206d756c746981526020017f736967206f776e657273206d75737420626520657175616c20746f203300000081525060400191505060405180910390fd5b875160018190555086600081905550600095505b8751861015620003275787868151811015156200020f57fe5b9060200190602002015194508473ffffffffffffffffffffffffffffffffffffffff166000141580156200025a5750620002588562000393640100000000026401000000009004565b155b15156200026657600080fd5b6200028360018701620003df640100000000026401000000009004565b935084600285610100811015156200029757fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508361010260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001019550620001f6565b6200034062000405640100000000026401000000009004565b50505050505050508061010560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200049d565b60008061010260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b600081600014158015620003f4575060fa8211155b1515620003fd57fe5b819050919050565b60006001541115156200041457fe5b60fa600154111515156200042457fe5b600060026000610100811015156200043857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156200047a57fe5b60005460001415801562000492575060015460005411155b15156200049b57fe5b565b611ba580620004ad6000396000f3006080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063173825d9146100d55780632be8c2a5146101185780632f54bf6e146101655780634123cb6b146101c05780634e4ab830146101eb5780637065cb481461021a578063787d64e41461025d578063a0e67e2b14610288578063b75c7dc6146102f4578063ba51a6df14610325578063c2cf732614610352578063c41a360a146103bb578063f00d4b5d14610428578063fc0c546a1461048b575b600080fd5b3480156100e157600080fd5b50610116600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104e2565b005b34801561012457600080fd5b50610163600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106d8565b005b34801561017157600080fd5b506101a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610877565b604051808215151515815260200191505060405180910390f35b3480156101cc57600080fd5b506101d56108c3565b6040518082815260200191505060405180910390f35b3480156101f757600080fd5b506102006108c9565b604051808215151515815260200191505060405180910390f35b34801561022657600080fd5b5061025b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108e6565b005b34801561026957600080fd5b50610272610a7e565b6040518082815260200191505060405180910390f35b34801561029457600080fd5b5061029d610a84565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102e05780820151818401526020810190506102c5565b505050509050019250505060405180910390f35b34801561030057600080fd5b506103236004803603810190808035600019169060200190929190505050610b34565b005b34801561033157600080fd5b5061035060048036038101908080359060200190929190505050610c4f565b005b34801561035e57600080fd5b506103a16004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ce7565b604051808215151515815260200191505060405180910390f35b3480156103c757600080fd5b506103e660048036038101908080359060200190929190505050610d4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043457600080fd5b50610489600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d89565b005b34801561049757600080fd5b506104a0610fc0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000816104ee81610877565b15156104f957600080fd5b600180540360008111801561050f575060fa8111155b151561051a57600080fd5b60005460018054036000821180156105325750808211155b151561053d57600080fd5b60003660405180838380828437820191505092505050604051809103902061056481610fe7565b156106cf5761057161127e565b610579611310565b6105c261010260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d8565b95506000600287610100811015156105d657fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061010260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106636113fc565b61066b61127e565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da87604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b50505050505050565b6000366040518083838082843782019150509250505060405180910390206106ff816116f9565b156108725761010560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156107ca57600080fd5b505af11580156107de573d6000803e3d6000fd5b505050506040513d60208110156107f457600080fd5b8101908080519060200190929190505050507fe6d858f14d755446648a6e0c8ab8b5a0f58ccc7920d4c910b0454e4dcd869af08383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505050565b60008061010260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b60015481565b60006108d433610877565b15156108df57600080fd5b6001905090565b806108f081610877565b1515156108fc57600080fd5b6001805401600081118015610912575060fa8111155b151561091d57600080fd5b60003660405180838380828437820191505092505050604051809103902061094481610fe7565b15610a785761095161127e565b610959611310565b6001600081548092919060010191905055508360026001546101008110151561097e57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109c86001546113d8565b61010260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a1461127e565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c384604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b50505050565b60005481565b6060806000600154604051908082528060200260200182016040528015610aba5781602001602082028038833980820191505090505b509150600090505b600154811015610b2c57610ad581610d4b565b8282815181101515610ae357fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610ac2565b819250505090565b60008082610b418161198e565b1515610b4c57600080fd5b610b5533610877565b1515610b6057600080fd5b610b69336119bb565b9250610103600085600019166000191681526020019081526020016000209150600083836001015416111515610b9e57600080fd5b610ba784611a15565b8160000160008154809291906001019190505550828260010160008282540392505081905550610bd684611a15565b7fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a150505050565b80600154600082118015610c635750808211155b1515610c6e57600080fd5b600036604051808383808284378201915050925050506040518091039020610c95816116f9565b15610ce15783600081905550610ca9611310565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da846040518082815260200191505060405180910390a15b50505050565b600082610cf38161198e565b1515610cfe57600080fd5b82610d0881610877565b1515610d1357600080fd5b6000610d1e856119bb565b61010360008860001916600019168152602001908152602001600020600101541614159250505092915050565b600060026001830161010081101515610d6057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600082610d9581610877565b1515610da057600080fd5b82610daa81610877565b151515610db657600080fd5b600036604051808383808284378201915050925050506040518091039020610ddd81610fe7565b15610fb857610dea61127e565b610df2611310565b610e3b61010260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d8565b93508460028561010081101515610e4e57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061010260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508361010260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f2061127e565b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8686604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505050505050565b61010560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000610ff533610877565b151561100057600080fd5b61010480549050610200141561101957611018611310565b5b6101036000856000191660001916815260200190815260200160002091506110408461198e565b15156110ab57600180540382600001819055506000826001018190555061010480548091906001016110729190611b07565b826002018190555083610104836002015481548110151561108f57fe5b9060005260206000200181600019169055506110aa84611a8d565b5b6110b4336119bb565b9050600081836001015416141561127657600082600001541115156110d557fe5b6001826000015414156111d257610104610103600086600019166000191681526020019081526020016000206002015481548110151561111157fe5b9060005260206000200160009055610103600085600019166000191681526020019081526020016000206000808201600090556001820160009055600282016000905550507f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd163385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a160019250611277565b81600001600081548092919060019003919050555080826001016000828254179250508190555061120284611a8d565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a15b5b5050919050565b600060015411151561128c57fe5b60fa6001541115151561129b57fe5b600060026000610100811015156112ae57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112ef57fe5b600054600014158015611306575060015460005411155b151561130e57fe5b565b60008061131c33610877565b151561132757600080fd5b610104805490509150600090505b818110156113c55760006001026101048281548110151561135257fe5b9060005260206000200154600019161415156113ba5761010360006101048381548110151561137d57fe5b9060005260206000200154600019166000191681526020019081526020016000206000808201600090556001820160009055600282016000905550505b806001019050611335565b61010460006113d49190611b33565b5050565b6000816000141580156113ec575060fa8211155b15156113f457fe5b819050919050565b6000600190505b6001548110156116f6575b60015481108015611467575060006002826101008110151561142c57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561147957808060010191505061140e565b5b600180541180156114d45750600060026001546101008110151561149a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156114f1576001600081548092919060019003919050555061147a565b6001548110801561154c5750600060026001546101008110151561151157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b801561159f575060006002826101008110151561156557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156116f1576002600154610100811015156115b657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600282610100811015156115e857fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508061010260006002846101008110151561163d57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006002600154610100811015156116b157fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b611403565b50565b600080600061170733610877565b151561171257600080fd5b61010480549050610200141561172b5761172a611310565b5b6101036000856000191660001916815260200190815260200160002091506117528461198e565b15156117bb5760005482600001819055506000826001018190555061010480548091906001016117829190611b07565b826002018190555083610104836002015481548110151561179f57fe5b9060005260206000200181600019169055506117ba84611a15565b5b6117c4336119bb565b9050600081836001015416141561198657600082600001541115156117e557fe5b6001826000015414156118e257610104610103600086600019166000191681526020019081526020016000206002015481548110151561182157fe5b9060005260206000200160009055610103600085600019166000191681526020019081526020016000206000808201600090556001820160009055600282016000905550507f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd163385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a160019250611987565b81600001600081548092919060019003919050555080826001016000828254179250508190555061191284611a15565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a15b5b5050919050565b60006101036000836000191660001916815260200190815260200160002060000154600014159050919050565b600080611a0761010260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d8565b90508060020a915050919050565b60006101036000836000191660001916815260200190815260200160002090508060000154600014151515611a4657fe5b81600019166101048260020154815481101515611a5f57fe5b906000526020600020015460001916141515611a7757fe5b600054816000015411151515611a8957fe5b5050565b60006101036000836000191660001916815260200190815260200160002090508060000154600014151515611abe57fe5b81600019166101048260020154815481101515611ad757fe5b906000526020600020015460001916141515611aef57fe5b6001805403816000015411151515611b0357fe5b5050565b815481835581811115611b2e57818360005260206000209182019101611b2d9190611b54565b5b505050565b5080546000825590600052602060002090810190611b519190611b54565b50565b611b7691905b80821115611b72576000816000905550600101611b5a565b5090565b905600a165627a7a723058208a108d8b24e8af724823f69b6bf3b9acd1ef54dea802a224a8becfe74592a484002900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c3771d47e2ab5a519e2917e61e23078d0c05ed7f0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000fa9d5f6d0a4823a87f37f9a3216d80e34cbb75ab00000000000000000000000050ec98ffd7fc601240679462b5a9cd490879587a0000000000000000000000004f959d80040bc1c5a799521eebc450b3b3b95ed4000000000000000000000000fd5b2eaeb9792c21674c723b0091336a1db39b6d000000000000000000000000b179210b997b60c4c2a2cd64ba417e95a3e33faa0000000000000000000000001b5c5d240447f7792186404233a13b8623c61cbf

Deployed Bytecode

0x6080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063173825d9146100d55780632be8c2a5146101185780632f54bf6e146101655780634123cb6b146101c05780634e4ab830146101eb5780637065cb481461021a578063787d64e41461025d578063a0e67e2b14610288578063b75c7dc6146102f4578063ba51a6df14610325578063c2cf732614610352578063c41a360a146103bb578063f00d4b5d14610428578063fc0c546a1461048b575b600080fd5b3480156100e157600080fd5b50610116600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104e2565b005b34801561012457600080fd5b50610163600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106d8565b005b34801561017157600080fd5b506101a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610877565b604051808215151515815260200191505060405180910390f35b3480156101cc57600080fd5b506101d56108c3565b6040518082815260200191505060405180910390f35b3480156101f757600080fd5b506102006108c9565b604051808215151515815260200191505060405180910390f35b34801561022657600080fd5b5061025b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108e6565b005b34801561026957600080fd5b50610272610a7e565b6040518082815260200191505060405180910390f35b34801561029457600080fd5b5061029d610a84565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102e05780820151818401526020810190506102c5565b505050509050019250505060405180910390f35b34801561030057600080fd5b506103236004803603810190808035600019169060200190929190505050610b34565b005b34801561033157600080fd5b5061035060048036038101908080359060200190929190505050610c4f565b005b34801561035e57600080fd5b506103a16004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ce7565b604051808215151515815260200191505060405180910390f35b3480156103c757600080fd5b506103e660048036038101908080359060200190929190505050610d4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043457600080fd5b50610489600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d89565b005b34801561049757600080fd5b506104a0610fc0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000816104ee81610877565b15156104f957600080fd5b600180540360008111801561050f575060fa8111155b151561051a57600080fd5b60005460018054036000821180156105325750808211155b151561053d57600080fd5b60003660405180838380828437820191505092505050604051809103902061056481610fe7565b156106cf5761057161127e565b610579611310565b6105c261010260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d8565b95506000600287610100811015156105d657fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061010260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106636113fc565b61066b61127e565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da87604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b50505050505050565b6000366040518083838082843782019150509250505060405180910390206106ff816116f9565b156108725761010560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156107ca57600080fd5b505af11580156107de573d6000803e3d6000fd5b505050506040513d60208110156107f457600080fd5b8101908080519060200190929190505050507fe6d858f14d755446648a6e0c8ab8b5a0f58ccc7920d4c910b0454e4dcd869af08383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505050565b60008061010260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b60015481565b60006108d433610877565b15156108df57600080fd5b6001905090565b806108f081610877565b1515156108fc57600080fd5b6001805401600081118015610912575060fa8111155b151561091d57600080fd5b60003660405180838380828437820191505092505050604051809103902061094481610fe7565b15610a785761095161127e565b610959611310565b6001600081548092919060010191905055508360026001546101008110151561097e57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109c86001546113d8565b61010260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a1461127e565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c384604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b50505050565b60005481565b6060806000600154604051908082528060200260200182016040528015610aba5781602001602082028038833980820191505090505b509150600090505b600154811015610b2c57610ad581610d4b565b8282815181101515610ae357fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610ac2565b819250505090565b60008082610b418161198e565b1515610b4c57600080fd5b610b5533610877565b1515610b6057600080fd5b610b69336119bb565b9250610103600085600019166000191681526020019081526020016000209150600083836001015416111515610b9e57600080fd5b610ba784611a15565b8160000160008154809291906001019190505550828260010160008282540392505081905550610bd684611a15565b7fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a150505050565b80600154600082118015610c635750808211155b1515610c6e57600080fd5b600036604051808383808284378201915050925050506040518091039020610c95816116f9565b15610ce15783600081905550610ca9611310565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da846040518082815260200191505060405180910390a15b50505050565b600082610cf38161198e565b1515610cfe57600080fd5b82610d0881610877565b1515610d1357600080fd5b6000610d1e856119bb565b61010360008860001916600019168152602001908152602001600020600101541614159250505092915050565b600060026001830161010081101515610d6057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600082610d9581610877565b1515610da057600080fd5b82610daa81610877565b151515610db657600080fd5b600036604051808383808284378201915050925050506040518091039020610ddd81610fe7565b15610fb857610dea61127e565b610df2611310565b610e3b61010260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d8565b93508460028561010081101515610e4e57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061010260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508361010260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f2061127e565b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8686604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505050505050565b61010560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000610ff533610877565b151561100057600080fd5b61010480549050610200141561101957611018611310565b5b6101036000856000191660001916815260200190815260200160002091506110408461198e565b15156110ab57600180540382600001819055506000826001018190555061010480548091906001016110729190611b07565b826002018190555083610104836002015481548110151561108f57fe5b9060005260206000200181600019169055506110aa84611a8d565b5b6110b4336119bb565b9050600081836001015416141561127657600082600001541115156110d557fe5b6001826000015414156111d257610104610103600086600019166000191681526020019081526020016000206002015481548110151561111157fe5b9060005260206000200160009055610103600085600019166000191681526020019081526020016000206000808201600090556001820160009055600282016000905550507f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd163385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a160019250611277565b81600001600081548092919060019003919050555080826001016000828254179250508190555061120284611a8d565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a15b5b5050919050565b600060015411151561128c57fe5b60fa6001541115151561129b57fe5b600060026000610100811015156112ae57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112ef57fe5b600054600014158015611306575060015460005411155b151561130e57fe5b565b60008061131c33610877565b151561132757600080fd5b610104805490509150600090505b818110156113c55760006001026101048281548110151561135257fe5b9060005260206000200154600019161415156113ba5761010360006101048381548110151561137d57fe5b9060005260206000200154600019166000191681526020019081526020016000206000808201600090556001820160009055600282016000905550505b806001019050611335565b61010460006113d49190611b33565b5050565b6000816000141580156113ec575060fa8211155b15156113f457fe5b819050919050565b6000600190505b6001548110156116f6575b60015481108015611467575060006002826101008110151561142c57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561147957808060010191505061140e565b5b600180541180156114d45750600060026001546101008110151561149a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156114f1576001600081548092919060019003919050555061147a565b6001548110801561154c5750600060026001546101008110151561151157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b801561159f575060006002826101008110151561156557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156116f1576002600154610100811015156115b657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600282610100811015156115e857fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508061010260006002846101008110151561163d57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006002600154610100811015156116b157fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b611403565b50565b600080600061170733610877565b151561171257600080fd5b61010480549050610200141561172b5761172a611310565b5b6101036000856000191660001916815260200190815260200160002091506117528461198e565b15156117bb5760005482600001819055506000826001018190555061010480548091906001016117829190611b07565b826002018190555083610104836002015481548110151561179f57fe5b9060005260206000200181600019169055506117ba84611a15565b5b6117c4336119bb565b9050600081836001015416141561198657600082600001541115156117e557fe5b6001826000015414156118e257610104610103600086600019166000191681526020019081526020016000206002015481548110151561182157fe5b9060005260206000200160009055610103600085600019166000191681526020019081526020016000206000808201600090556001820160009055600282016000905550507f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd163385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a160019250611987565b81600001600081548092919060019003919050555080826001016000828254179250508190555061191284611a15565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a15b5b5050919050565b60006101036000836000191660001916815260200190815260200160002060000154600014159050919050565b600080611a0761010260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113d8565b90508060020a915050919050565b60006101036000836000191660001916815260200190815260200160002090508060000154600014151515611a4657fe5b81600019166101048260020154815481101515611a5f57fe5b906000526020600020015460001916141515611a7757fe5b600054816000015411151515611a8957fe5b5050565b60006101036000836000191660001916815260200190815260200160002090508060000154600014151515611abe57fe5b81600019166101048260020154815481101515611ad757fe5b906000526020600020015460001916141515611aef57fe5b6001805403816000015411151515611b0357fe5b5050565b815481835581811115611b2e57818360005260206000209182019101611b2d9190611b54565b5b505050565b5080546000825590600052602060002090810190611b519190611b54565b50565b611b7691905b80821115611b72576000816000905550600101611b5a565b5090565b905600a165627a7a723058208a108d8b24e8af724823f69b6bf3b9acd1ef54dea802a224a8becfe74592a4840029

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

00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c3771d47e2ab5a519e2917e61e23078d0c05ed7f0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000fa9d5f6d0a4823a87f37f9a3216d80e34cbb75ab00000000000000000000000050ec98ffd7fc601240679462b5a9cd490879587a0000000000000000000000004f959d80040bc1c5a799521eebc450b3b3b95ed4000000000000000000000000fd5b2eaeb9792c21674c723b0091336a1db39b6d000000000000000000000000b179210b997b60c4c2a2cd64ba417e95a3e33faa0000000000000000000000001b5c5d240447f7792186404233a13b8623c61cbf

-----Decoded View---------------
Arg [0] : _owners (address[]): 0xfa9D5f6d0A4823A87f37F9a3216D80e34cbB75Ab,0x50eC98FFd7fC601240679462B5A9Cd490879587a,0x4F959d80040Bc1C5a799521EeBc450b3B3B95Ed4,0xfd5b2eaeB9792c21674c723b0091336a1Db39B6D,0xb179210B997b60c4C2a2CD64BA417e95A3e33FAA,0x1b5c5D240447F7792186404233a13b8623c61CBf
Arg [1] : _required (uint256): 3
Arg [2] : _token (address): 0xc3771d47E2Ab5A519E2917E61e23078d0C05Ed7f

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 000000000000000000000000c3771d47e2ab5a519e2917e61e23078d0c05ed7f
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 000000000000000000000000fa9d5f6d0a4823a87f37f9a3216d80e34cbb75ab
Arg [5] : 00000000000000000000000050ec98ffd7fc601240679462b5a9cd490879587a
Arg [6] : 0000000000000000000000004f959d80040bc1c5a799521eebc450b3b3b95ed4
Arg [7] : 000000000000000000000000fd5b2eaeb9792c21674c723b0091336a1db39b6d
Arg [8] : 000000000000000000000000b179210b997b60c4c2a2cd64ba417e95a3e33faa
Arg [9] : 0000000000000000000000001b5c5d240447f7792186404233a13b8623c61cbf


Deployed Bytecode Sourcemap

22732:519:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9348:606;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9348:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23042:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23042:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11047:102;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11047:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22064:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22064:23:0;;;;;;;;;;;;;;;;;;;;;;;11401:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11401:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8803:412;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8803:412:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21969:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21969:35:0;;;;;;;;;;;;;;;;;;;;;;;10689:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10689:216:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10689:216:0;;;;;;;;;;;;;;;;;11629:514;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11629:514:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10131:271;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10131:271:0;;;;;;;;;;;;;;;;;;;;;;;;;;12316:274;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12316:274:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10509:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10509:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8211:468;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8211:468:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22809:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22809:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9348:606;9645:15;9416:6;6614:17;6622:8;6614:7;:17::i;:::-;6606:26;;;;;;;;9458:1;9444:11;;:15;6364:1;6351:10;:14;:43;;;;;21877:3;6369:10;:25;;6351:43;6343:52;;;;;;;;9493:20;;9529:1;9515:11;;:15;6511:1;6499:9;:13;:40;;;;;6529:10;6516:9;:23;;6499:40;6491:49;;;;;;;;9567:8;;9557:19;;;;;;;;;;;;;;;;;;;;;;;;;6225:39;6253:10;6225:27;:39::i;:::-;6221:63;;;9588:27;:25;:27::i;:::-;9624:14;:12;:14::i;:::-;9663:37;9679:12;:20;9692:6;9679:20;;;;;;;;;;;;;;;;9663:15;:37::i;:::-;9645:55;;9730:1;9707:8;9716:10;9707:20;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;9761:1;9738:12;:20;9751:6;9738:20;;;;;;;;;;;;;;;:24;;;;9867:18;:16;:18::i;:::-;9894:27;:25;:27::i;:::-;9928:20;9941:6;9928:20;;;;;;;;;;;;;;;;;;;;;;6221:63;6547:1;6402;;6639;9348:606;;;:::o;23042:204::-;23137:8;;23127:19;;;;;;;;;;;;;;;;;;;;;;;;;5754:27;5770:10;5754:15;:27::i;:::-;5750:51;;;23159:5;;;;;;;;;;;:14;;;23174:8;23184:7;23159:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23159:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23159:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23159:33:0;;;;;;;;;;;;;;;;;23208:30;23220:8;23230:7;23208:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;5750:51;23042:204;;;:::o;11047:102::-;11100:4;11142:1;11120:12;:19;11133:5;11120:19;;;;;;;;;;;;;;;;:23;11113:30;;11047:102;;;:::o;22064:23::-;;;;:::o;11401:83::-;11454:4;5461:19;5469:10;5461:7;:19::i;:::-;5453:28;;;;;;;;11474:4;11467:11;;11401:83;:::o;8803:412::-;8878:6;6713:17;6721:8;6713:7;:17::i;:::-;6712:18;6704:27;;;;;;;;8922:1;8908:11;;:15;6364:1;6351:10;:14;:43;;;;;21877:3;6369:10;:25;;6351:43;6343:52;;;;;;;;8962:8;;8952:19;;;;;;;;;;;;;;;;;;;;;;;;;6225:39;6253:10;6225:27;:39::i;:::-;6221:63;;;8983:27;:25;:27::i;:::-;9019:14;:12;:14::i;:::-;9040:11;;:13;;;;;;;;;;;;;9084:6;9060:8;9069:11;;9060:21;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;9120:28;9136:11;;9120:15;:28::i;:::-;9097:12;:20;9110:6;9097:20;;;;;;;;;;;;;;;:51;;;;9157:27;:25;:27::i;:::-;9191:18;9202:6;9191:18;;;;;;;;;;;;;;;;;;;;;;6221:63;6402:1;6738;8803:412;;:::o;21969:35::-;;;;:::o;10689:216::-;10731:9;10749:23;10813:6;10789:11;;10775:26;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;10775:26:0;;;;10749:52;;10822:1;10813:10;;10808:69;10829:11;;10825:1;:15;10808:69;;;10866:11;10875:1;10866:8;:11::i;:::-;10854:6;10861:1;10854:9;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10842:3;;;;;;;10808:69;;;10893:6;10886:13;;10689:216;;;:::o;11629:514::-;11749:18;11807:39;11712:10;6823:29;6841:10;6823:17;:29::i;:::-;6815:38;;;;;;;;5461:19;5469:10;5461:7;:19::i;:::-;5453:28;;;;;;;;11770:30;11789:10;11770:18;:30::i;:::-;11749:51;;11849:19;:31;11869:10;11849:31;;;;;;;;;;;;;;;;;11807:73;;11932:1;11916:13;11895:7;:18;;;:34;:38;11887:47;;;;;;;;11943:39;11971:10;11943:27;:39::i;:::-;11991:7;:17;;;:19;;;;;;;;;;;;;12039:13;12017:7;:18;;;:35;;;;;;;;;;;12061:39;12089:10;12061:27;:39::i;:::-;12107:30;12114:10;12126;12107:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11629:514;;;;:::o;10131:271::-;10223:12;10237:11;;6511:1;6499:9;:13;:40;;;;;6529:10;6516:9;:23;;6499:40;6491:49;;;;;;;;10280:8;;10270:19;;;;;;;;;;;;;;;;;;;;;;;;;5754:27;5770:10;5754:15;:27::i;:::-;5750:51;;;10324:12;10301:20;:35;;;;10343:14;:12;:14::i;:::-;10364:32;10383:12;10364:32;;;;;;;;;;;;;;;;;;5750:51;6547:1;10131:271;;;:::o;12316:274::-;12482:4;12431:10;6823:29;6841:10;6823:17;:29::i;:::-;6815:38;;;;;;;;12460:6;6614:17;6622:8;6614:7;:17::i;:::-;6606:26;;;;;;;;12582:1;12552:26;12571:6;12552:18;:26::i;:::-;12507:19;:31;12527:10;12507:31;;;;;;;;;;;;;;;;;:42;;;:71;:76;12505:79;12498:86;;6860:1;12316:274;;;;;:::o;10509:109::-;10565:7;10588:8;10610:1;10597:10;:14;10588:24;;;;;;;;;;;;;;;;;;;;10581:31;;10509:109;;;:::o;8211:468::-;8447:15;8295:5;6614:17;6622:8;6614:7;:17::i;:::-;6606:26;;;;;;;;8327:3;6713:17;6721:8;6713:7;:17::i;:::-;6712:18;6704:27;;;;;;;;8369:8;;8359:19;;;;;;;;;;;;;;;;;;;;;;;;;6225:39;6253:10;6225:27;:39::i;:::-;6221:63;;;8390:27;:25;:27::i;:::-;8426:14;:12;:14::i;:::-;8465:36;8481:12;:19;8494:5;8481:19;;;;;;;;;;;;;;;;8465:15;:36::i;:::-;8447:54;;8531:3;8508:8;8517:10;8508:20;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;8563:1;8541:12;:19;8554:5;8541:19;;;;;;;;;;;;;;;:23;;;;8591:10;8571:12;:17;8584:3;8571:17;;;;;;;;;;;;;;;:30;;;;8610:27;:25;:27::i;:::-;8649:24;8662:5;8669:3;8649:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6221:63;6738:1;6639;8211:468;;;;:::o;22809:19::-;;;;;;;;;;;;;:::o;16774:2097::-;16873:4;17324:39;17982:18;5461:19;5469:10;5461:7;:19::i;:::-;5453:28;;;;;;;;16900:24;:31;;;;16893:3;:38;16889:426;;;17301:14;:12;:14::i;:::-;16889:426;17366:19;:31;17386:10;17366:31;;;;;;;;;;;;;;;;;17324:73;;17511:29;17529:10;17511:17;:29::i;:::-;17509:31;17505:420;;;17632:1;17618:11;;:15;17598:7;:17;;:35;;;;17737:1;17716:7;:18;;:22;;;;17763:24;:33;;;;;;;;;;;:::i;:::-;17747:7;:13;;:49;;;;17847:10;17805:24;17830:7;:13;;;17805:39;;;;;;;;;;;;;;;;;:52;;;;;;;17866:51;17906:10;17866:39;:51::i;:::-;17505:420;18003:30;18022:10;18003:18;:30::i;:::-;17982:51;;18169:1;18152:13;18131:7;:18;;;:34;:39;18127:739;;;18261:1;18241:7;:17;;;:21;18234:29;;;;;;18297:1;18276:7;:17;;;:22;18272:587;;;18376:24;18401:19;:31;18421:10;18401:31;;;;;;;;;;;;;;;;;:37;;;18376:63;;;;;;;;;;;;;;;;;18369:70;;;18457:19;:31;18477:10;18457:31;;;;;;;;;;;;;;;;;;18450:38;;;;;;;;;;;;;;;;;;;;18499:41;18517:10;18529;18499:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18558:4;18551:11;;;;18272:587;18675:7;:17;;;:19;;;;;;;;;;;;;;18727:13;18705:7;:18;;;:35;;;;;;;;;;;18751:51;18791:10;18751:39;:51::i;:::-;18813:36;18826:10;18838;18813:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18127:739;5488:1;16774:2097;;;;;:::o;20616:237::-;20694:1;20680:11;;:15;20673:23;;;;;;21877:3;20710:11;;:26;;20703:34;;;;;;20766:1;20751:8;20760:1;20751:11;;;;;;;;;;;;;;;;;;;;:16;;;20744:24;;;;;;20787:20;;20782:1;:25;;:64;;;;;20835:11;;20811:20;;:35;;20782:64;20775:72;;;;;;20616:237::o;19797:326::-;19846:11;19932:6;5461:19;5469:10;5461:7;:19::i;:::-;5453:28;;;;;;;;19860:24;:31;;;;19846:45;;19941:1;19932:10;;19927:153;19948:6;19944:1;:10;19927:153;;;20005:1;19974:32;;:24;19999:1;19974:27;;;;;;;;;;;;;;;;;;:32;;;;;19970:102;;;20024:19;:48;20044:24;20069:1;20044:27;;;;;;;;;;;;;;;;;;20024:48;;;;;;;;;;;;;;;;;;20017:55;;;;;;;;;;;;;;;;;;;;19970:102;19956:3;;;;;19927:153;;;20093:24;;20086:31;;;;:::i;:::-;19797:326;;:::o;20129:159::-;20193:4;20218:10;20213:1;:15;;:44;;;;;21877:3;20232:10;:25;;20213:44;20206:52;;;;;;20272:10;20265:17;;20129:159;;;:::o;19014:777::-;19057:9;19069:1;19057:13;;19077:709;19091:11;;19084:4;:18;19077:709;;;19180:56;19194:11;;19187:4;:18;:41;;;;;19227:1;19209:8;19218:4;19209:14;;;;;;;;;;;;;;;;;;;;:19;;;;19187:41;19180:56;;;19230:6;;;;;;;19180:56;;;19307:67;19328:1;19314:11;;:15;:45;;;;;19358:1;19333:8;19342:11;;19333:21;;;;;;;;;;;;;;;;;;;;:26;;;19314:45;19307:67;;;19361:11;;:13;;;;;;;;;;;;;;19307:67;;;19475:11;;19468:4;:18;:48;;;;;19515:1;19490:8;19499:11;;19490:21;;;;;;;;;;;;;;;;;;;;:26;;;;19468:48;:71;;;;;19538:1;19520:8;19529:4;19520:14;;;;;;;;;;;;;;;;;;;;:19;;;19468:71;19464:315;;;19666:8;19675:11;;19666:21;;;;;;;;;;;;;;;;;;;;19649:8;19658:4;19649:14;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;19729:4;19698:12;:28;19711:8;19720:4;19711:14;;;;;;;;;;;;;;;;;;;;19698:28;;;;;;;;;;;;;;;:35;;;;19768:1;19744:8;19753:11;;19744:21;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;19464:315;19077:709;;;19014:777;:::o;12621:2066::-;12708:4;13159:39;13810:18;5461:19;5469:10;5461:7;:19::i;:::-;5453:28;;;;;;;;12735:24;:31;;;;12728:3;:38;12724:426;;;13136:14;:12;:14::i;:::-;12724:426;13201:19;:31;13221:10;13201:31;;;;;;;;;;;;;;;;;13159:73;;13346:29;13364:10;13346:17;:29::i;:::-;13344:31;13340:413;;;13453:20;;13433:7;:17;;:40;;;;13577:1;13556:7;:18;;:22;;;;13603:24;:33;;;;;;;;;;;:::i;:::-;13587:7;:13;;:49;;;;13687:10;13645:24;13670:7;:13;;;13645:39;;;;;;;;;;;;;;;;;:52;;;;;;;13706:39;13734:10;13706:27;:39::i;:::-;13340:413;13831:30;13850:10;13831:18;:30::i;:::-;13810:51;;13997:1;13980:13;13959:7;:18;;;:34;:39;13955:727;;;14089:1;14069:7;:17;;;:21;14062:29;;;;;;14125:1;14104:7;:17;;;:22;14100:575;;;14204:24;14229:19;:31;14249:10;14229:31;;;;;;;;;;;;;;;;;:37;;;14204:63;;;;;;;;;;;;;;;;;14197:70;;;14285:19;:31;14305:10;14285:31;;;;;;;;;;;;;;;;;;14278:38;;;;;;;;;;;;;;;;;;;;14327:41;14345:10;14357;14327:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14386:4;14379:11;;;;14100:575;14503:7;:17;;;:19;;;;;;;;;;;;;;14555:13;14533:7;:18;;;:35;;;;;;;;;;;14579:39;14607:10;14579:27;:39::i;:::-;14629:36;14642:10;14654;14629:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13955:727;5488:1;12621:2066;;;;;:::o;20467:141::-;20536:4;20561:19;:31;20581:10;20561:31;;;;;;;;;;;;;;;;;:41;;;20556:1;:46;;20549:53;;20467:141;;;:::o;20294:167::-;20359:4;20372:15;20390:36;20406:12;:19;20419:5;20406:19;;;;;;;;;;;;;;;;20390:15;:36::i;:::-;20372:54;;20445:10;20440:1;:15;20433:22;;20294:167;;;;:::o;20859:317::-;20936:39;20978:19;:31;20998:10;20978:31;;;;;;;;;;;;;;;;;20936:73;;21028:7;:17;;;21023:1;:22;;21016:30;;;;;;21103:10;21060:53;;;:24;21085:7;:13;;;21060:39;;;;;;;;;;;;;;;;;;:53;;;;21053:61;;;;;;21149:20;;21128:7;:17;;;:41;;21121:49;;;;;;20859:317;;:::o;21502:324::-;21591:39;21633:19;:31;21653:10;21633:31;;;;;;;;;;;;;;;;;21591:73;;21683:7;:17;;;21678:1;:22;;21671:30;;;;;;21758:10;21715:53;;;:24;21740:7;:13;;;21715:39;;;;;;;;;;;;;;;;;;:53;;;;21708:61;;;;;;21818:1;21804:11;;:15;21783:7;:17;;;:36;;21776:44;;;;;;21502:324;;:::o;22732:519::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://8a108d8b24e8af724823f69b6bf3b9acd1ef54dea802a224a8becfe74592a484

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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