ETH Price: $1,976.59 (+0.73%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute Transact...74537722019-03-28 0:11:522523 days ago1553731912IN
Hydro: MultiSig
0 ETH0.000583926
Confirm Transact...73632182019-03-13 21:48:042537 days ago1552513684IN
Hydro: MultiSig
0 ETH0.000417736
Submit Transacti...73632002019-03-13 21:42:412537 days ago1552513361IN
Hydro: MultiSig
0 ETH0.000996896

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
Add Address74537722019-03-28 0:11:522523 days ago1553731912
Hydro: MultiSig
0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
MultiSigWalletWithLock

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 1000000 runs

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

pragma solidity 0.4.24;

/** @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.
  * @author Stefan George - <stefan.george@consensys.net>
  */
contract MultiSigWallet {

    uint256 constant public MAX_OWNER_COUNT = 50;

    event Confirmation(address indexed sender, uint256 indexed transactionId);
    event Revocation(address indexed sender, uint256 indexed transactionId);
    event Submission(uint256 indexed transactionId);
    event Execution(uint256 indexed transactionId);
    event ExecutionFailure(uint256 indexed transactionId);
    event Deposit(address indexed sender, uint256 value);
    event OwnerAddition(address indexed owner);
    event OwnerRemoval(address indexed owner);
    event RequirementChange(uint256 required);

    mapping (uint256 => Transaction) public transactions;
    mapping (uint256 => mapping (address => bool)) public confirmations;
    mapping (address => bool) public isOwner;

    address[] public owners;
    uint256 public required;
    uint256 public transactionCount;

    struct Transaction {
        address destination;
        uint256 value;
        bytes data;
        bool executed;
    }

    modifier onlyWallet() {
        if (msg.sender != address(this))
            revert("ONLY_WALLET_ERROR");
        _;
    }

    modifier ownerDoesNotExist(address owner) {
        if (isOwner[owner])
            revert("OWNER_DOES_NOT_EXIST_ERROR");
        _;
    }

    modifier ownerExists(address owner) {
        if (!isOwner[owner])
            revert("OWNER_EXISTS_ERROR");
        _;
    }

    modifier transactionExists(uint256 transactionId) {
        if (transactions[transactionId].destination == 0)
            revert("TRANSACTION_EXISTS_ERROR");
        _;
    }

    modifier confirmed(uint256 transactionId, address owner) {
        if (!confirmations[transactionId][owner])
            revert("CONFIRMED_ERROR");
        _;
    }

    modifier notConfirmed(uint256 transactionId, address owner) {
        if (confirmations[transactionId][owner])
            revert("NOT_CONFIRMED_ERROR");
        _;
    }

    modifier notExecuted(uint256 transactionId) {
        if (transactions[transactionId].executed)
            revert("NOT_EXECUTED_ERROR");
        _;
    }

    modifier notNull(address _address) {
        if (_address == 0)
            revert("NOT_NULL_ERROR");
        _;
    }

    modifier validRequirement(uint256 ownerCount, uint256 _required) {
        if (ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0)
            revert("VALID_REQUIREMENT_ERROR");
        _;
    }

    /** @dev Fallback function allows to deposit ether. */
    function() public payable {
        if (msg.value > 0) {
            emit Deposit(msg.sender, msg.value);
        }
    }

    /** @dev Contract constructor sets initial owners and required number of confirmations.
      * @param _owners List of initial owners.
      * @param _required Number of required confirmations.
      */
    constructor(address[] _owners, uint256 _required)
        public
        validRequirement(_owners.length, _required)
    {
        for (uint256 i = 0; i < _owners.length; i++) {
            if (isOwner[_owners[i]] || _owners[i] == 0) {
                revert("OWNER_ERROR");
            }

            isOwner[_owners[i]] = true;
        }

        owners = _owners;
        required = _required;
    }

    /** @dev Allows to add a new owner. Transaction has to be sent by wallet.
      * @param owner Address of new owner.
      */
    function addOwner(address owner)
        public
        onlyWallet
        ownerDoesNotExist(owner)
        notNull(owner)
        validRequirement(owners.length + 1, required)
    {
        isOwner[owner] = true;
        owners.push(owner);
        emit OwnerAddition(owner);
    }

    /** @dev Allows to remove an owner. Transaction has to be sent by wallet.
      * @param owner Address of owner.
      */
    function removeOwner(address owner)
        public
        onlyWallet
        ownerExists(owner)
    {
        isOwner[owner] = false;
        for (uint256 i = 0; i < owners.length - 1; i++) {
            if (owners[i] == owner) {
                owners[i] = owners[owners.length - 1];
                break;
            }
        }

        owners.length -= 1;

        if (required > owners.length) {
            changeRequirement(owners.length);
        }

        emit OwnerRemoval(owner);
    }

    /** @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.
      * @param owner Address of owner to be replaced.
      * @param owner Address of new owner.
      */
    function replaceOwner(address owner, address newOwner)
        public
        onlyWallet
        ownerExists(owner)
        ownerDoesNotExist(newOwner)
    {
        for (uint256 i = 0; i < owners.length; i++) {
            if (owners[i] == owner) {
                owners[i] = newOwner;
                break;
            }
        }

        isOwner[owner] = false;
        isOwner[newOwner] = true;
        emit OwnerRemoval(owner);
        emit OwnerAddition(newOwner);
    }

    /** @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.
      * @param _required Number of required confirmations.
      */
    function changeRequirement(uint256 _required)
        public
        onlyWallet
        validRequirement(owners.length, _required)
    {
        required = _required;
        emit RequirementChange(_required);
    }

    /** @dev Allows an owner to submit and confirm a transaction.
      * @param destination Transaction target address.
      * @param value Transaction ether value.
      * @param data Transaction data payload.
      * @return Returns transaction ID.
      */
    function submitTransaction(address destination, uint256 value, bytes data)
        public
        returns (uint256 transactionId)
    {
        transactionId = addTransaction(destination, value, data);
        confirmTransaction(transactionId);
    }

    /** @dev Allows an owner to confirm a transaction.
      * @param transactionId Transaction ID.
      */
    function confirmTransaction(uint256 transactionId)
        public
        ownerExists(msg.sender)
        transactionExists(transactionId)
        notConfirmed(transactionId, msg.sender)
    {
        confirmations[transactionId][msg.sender] = true;
        emit Confirmation(msg.sender, transactionId);
        executeTransaction(transactionId);
    }

    /** @dev Allows an owner to revoke a confirmation for a transaction.
      * @param transactionId Transaction ID.
      */
    function revokeConfirmation(uint256 transactionId)
        public
        ownerExists(msg.sender)
        confirmed(transactionId, msg.sender)
        notExecuted(transactionId)
    {
        confirmations[transactionId][msg.sender] = false;
        emit Revocation(msg.sender, transactionId);
    }

    /** @dev Allows anyone to execute a confirmed transaction.
      * @param transactionId Transaction ID.
      */
    function executeTransaction(uint256 transactionId)
        public
        ownerExists(msg.sender)
        notExecuted(transactionId)
    {
        if (isConfirmed(transactionId)) {
            Transaction storage transaction = transactions[transactionId];
            transaction.executed = true;
            if (transaction.destination.call.value(transaction.value)(transaction.data))
                emit Execution(transactionId);
            else {
                emit ExecutionFailure(transactionId);
                transaction.executed = false;
            }
        }
    }

    /** @dev Returns the confirmation status of a transaction.
      * @param transactionId Transaction ID.
      * @return Confirmation status.
      */
    function isConfirmed(uint256 transactionId)
        public
        view
        returns (bool)
    {
        uint256 count = 0;
        for (uint256 i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]]) {
                count += 1;
            }

            if (count >= required) {
                return true;
            }
        }
    }

    /* Internal functions */

    /** @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.
      * @param destination Transaction target address.
      * @param value Transaction ether value.
      * @param data Transaction data payload.
      * @return Returns transaction ID.
      */
    function addTransaction(address destination, uint256 value, bytes data)
        internal
        notNull(destination)
        returns (uint256 transactionId)
    {
        transactionId = transactionCount;
        transactions[transactionId] = Transaction({
            destination: destination,
            value: value,
            data: data,
            executed: false
        });
        transactionCount += 1;
        emit Submission(transactionId);
    }


    /* Web3 call functions */

    /** @dev Returns number of confirmations of a transaction.
      * @param transactionId Transaction ID.
      * @return Number of confirmations.
      */
    function getConfirmationCount(uint256 transactionId)
        public
        view
        returns (uint256 count)
    {
        for (uint256 i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]]) {
                count += 1;
            }
        }
    }

    /** @dev Returns total number of transactions after filers are applied.
      * @param pending Include pending transactions.
      * @param executed Include executed transactions.
      * @return Total number of transactions after filters are applied.
      */
    function getTransactionCount(bool pending, bool executed)
        public
        view
        returns (uint256 count)
    {
        for (uint256 i = 0; i < transactionCount; i++) {
            if (pending && !transactions[i].executed || executed && transactions[i].executed) {
                count += 1;
            }
        }
    }

    /** @dev Returns list of owners.
      * @return List of owner addresses.
      */
    function getOwners() public view returns (address[]) {
        return owners;
    }

    /** @dev Returns array with owner addresses, which confirmed transaction.
      * @param transactionId Transaction ID.
      * @return Returns array of owner addresses.
      */
    function getConfirmations(uint256 transactionId)
        public
        view
        returns (address[] _confirmations)
    {
        address[] memory confirmationsTemp = new address[](owners.length);
        uint256 count = 0;
        uint256 i;

        for (i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]]) {
                confirmationsTemp[count] = owners[i];
                count += 1;
            }
        }

        _confirmations = new address[](count);

        for (i = 0; i < count; i++) {
            _confirmations[i] = confirmationsTemp[i];
        }
    }
}

contract MultiSigWalletWithLock is
    MultiSigWallet
{
    /* default lock time is 2 weeks, can be modified later */
    uint256 public lockSeconds = 1209600;

    /* events */
    event UnlockTimeSet(uint256 indexed transactionId, uint256 confirmationTime);
    event LockSecondsChange(uint256 lockSeconds);

    /* unlock time of transactions */
    mapping (uint256 => uint256) public unlockTimes;


    /** @dev Contract constructor sets initial owners and required number of confirmations.
      * @param _owners List of initial owners.
      * @param _required Number of required confirmations.
      */
    constructor (
        address[] _owners,
        uint256 _required
    )
        public
        MultiSigWallet(_owners, _required)
    {}

    /** @dev Changes the duration of the time lock for transactions.
      * @param _lockSeconds Duration needed after a transaction is confirmed and before it becomes executable, in seconds.
      */
    function changeLockSeconds(uint256 _lockSeconds)
        public
        onlyWallet
    {
        lockSeconds = _lockSeconds;
        emit LockSecondsChange(_lockSeconds);
    }

    /** @dev Allows an owner to confirm a transaction.
      * @param transactionId Transaction ID.
      */
    function confirmTransaction(uint256 transactionId)
        public
        ownerExists(msg.sender)
        transactionExists(transactionId)
        notConfirmed(transactionId, msg.sender)
    {
        confirmations[transactionId][msg.sender] = true;
        emit Confirmation(msg.sender, transactionId);
        if (isConfirmed(transactionId) && unlockTimes[transactionId] == 0) {
            uint256 unlockTime = block.timestamp + lockSeconds;
            unlockTimes[transactionId] = unlockTime;
            emit UnlockTimeSet(transactionId, unlockTime);
        }
    }

    /** @dev Allows anyone to execute a confirmed transaction.
      * @param transactionId Transaction ID.
      */
    function executeTransaction(uint256 transactionId)
        public
        ownerExists(msg.sender)
        notExecuted(transactionId)
    {
        require(
            block.timestamp >= unlockTimes[transactionId],
            "TRANSACTION_NEED_TO_UNLOCK"
        );
        super.executeTransaction(transactionId);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"owners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"transactionId","type":"uint256"}],"name":"revokeConfirmation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"confirmations","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"pending","type":"bool"},{"name":"executed","type":"bool"}],"name":"getTransactionCount","outputs":[{"name":"count","type":"uint256"}],"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":"","type":"uint256"}],"name":"unlockTimes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"transactionId","type":"uint256"}],"name":"isConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"transactionId","type":"uint256"}],"name":"getConfirmationCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockSeconds","type":"uint256"}],"name":"changeLockSeconds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transactions","outputs":[{"name":"destination","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"},{"name":"executed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"transactionId","type":"uint256"}],"name":"getConfirmations","outputs":[{"name":"_confirmations","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transactionCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_required","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockSeconds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"transactionId","type":"uint256"}],"name":"confirmTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"destination","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"submitTransaction","outputs":[{"name":"transactionId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_OWNER_COUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"required","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"newOwner","type":"address"}],"name":"replaceOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"transactionId","type":"uint256"}],"name":"executeTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"transactionId","type":"uint256"},{"indexed":false,"name":"confirmationTime","type":"uint256"}],"name":"UnlockTimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"lockSeconds","type":"uint256"}],"name":"LockSecondsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":true,"name":"transactionId","type":"uint256"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":true,"name":"transactionId","type":"uint256"}],"name":"Revocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"transactionId","type":"uint256"}],"name":"Submission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"transactionId","type":"uint256"}],"name":"Execution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"transactionId","type":"uint256"}],"name":"ExecutionFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerRemoval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"required","type":"uint256"}],"name":"RequirementChange","type":"event"}]

6080604052621275006006553480156200001857600080fd5b506040516200244138038062002441833981016040528051602082015191018051909190829082906000908260328211806200005357508181115b806200005d575080155b8062000067575081155b15620000d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f56414c49445f524551554952454d454e545f4552524f52000000000000000000604482015290519081900360640190fd5b600092505b84518310156200020a57600260008685815181101515620000f657fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff168062000149575084838151811015156200013257fe5b90602001906020020151600160a060020a03166000145b15620001b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f574e45525f4552524f52000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600260008786815181101515620001cb57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff191691151591909117905560019290920191620000d9565b84516200021f90600390602088019062000233565b50505060049190915550620002c792505050565b8280548282559060005260206000209081019282156200028b579160200282015b828111156200028b5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000254565b50620002999291506200029d565b5090565b620002c491905b8082111562000299578054600160a060020a0319168155600101620002a4565b90565b61216a80620002d76000396000f3006080604052600436106101325763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610174578063173825d9146101b557806320ea8d86146101e35780632f54bf6e146101fb5780633411c81c1461023d578063547415251461026e5780637065cb481461029f57806376ac947a146102cd578063784547a7146102e55780638b51d13f146102fd5780638c22d5d3146103155780639ace38c21461032d578063a0e67e2b14610402578063b5dc40c314610467578063b77bf6001461047f578063ba51a6df14610494578063bfa6fddb146104ac578063c01a8c84146104c1578063c6427474146104d9578063d74f8edd1461054f578063dc8452cd14610564578063e20056e614610579578063ee22610b146105ad575b60003411156101725760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561018057600080fd5b5061018c6004356105c5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101c157600080fd5b5061017273ffffffffffffffffffffffffffffffffffffffff600435166105fa565b3480156101ef57600080fd5b50610172600435610915565b34801561020757600080fd5b5061022973ffffffffffffffffffffffffffffffffffffffff60043516610b13565b604080519115158252519081900360200190f35b34801561024957600080fd5b5061022960043573ffffffffffffffffffffffffffffffffffffffff60243516610b28565b34801561027a57600080fd5b5061028d60043515156024351515610b48565b60408051918252519081900360200190f35b3480156102ab57600080fd5b5061017273ffffffffffffffffffffffffffffffffffffffff60043516610bb4565b3480156102d957600080fd5b5061028d600435610ea9565b3480156102f157600080fd5b50610229600435610ebb565b34801561030957600080fd5b5061028d600435610f4b565b34801561032157600080fd5b50610172600435610fc7565b34801561033957600080fd5b50610345600435611070565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156103c45781810151838201526020016103ac565b50505050905090810190601f1680156103f15780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561040e57600080fd5b50610417611159565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561045357818101518382015260200161043b565b505050509050019250505060405180910390f35b34801561047357600080fd5b506104176004356111c9565b34801561048b57600080fd5b5061028d611376565b3480156104a057600080fd5b5061017260043561137c565b3480156104b857600080fd5b5061028d6114b7565b3480156104cd57600080fd5b506101726004356114bd565b3480156104e557600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261028d94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506117529650505050505050565b34801561055b57600080fd5b5061028d611771565b34801561057057600080fd5b5061028d611776565b34801561058557600080fd5b5061017273ffffffffffffffffffffffffffffffffffffffff6004358116906024351661177c565b3480156105b957600080fd5b50610172600435611ab2565b60038054829081106105d357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461066a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821015610885578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156107a257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561087a57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106107fa57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061082d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610885565b600190910190610750565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108b69082612082565b5060035460045411156108cf576003546108cf9061137c565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561099557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b60008281526001602090815260408083203380855292529091205483919060ff161515610a2357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f434f4e4649524d45445f4552524f520000000000000000000000000000000000604482015290519081900360640190fd5b600084815260208190526040902060030154849060ff1615610aa657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e4f545f45584543555445445f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600085815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610bad57838015610b75575060008181526020819052604090206003015460ff16155b80610b995750828015610b99575060008181526020819052604090206003015460ff165b15610ba5576001820191505b600101610b4c565b5092915050565b333014610c2257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610cb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f574e45525f444f45535f4e4f545f45584953545f4552524f52000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610d3e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4e554c4c5f4552524f52000000000000000000000000000000000000604482015290519081900360640190fd5b6003805490506001016004546032821180610d5857508181115b80610d61575080155b80610d6a575081155b15610dd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f56414c49445f524551554952454d454e545f4552524f52000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b60076020526000908152604090205481565b600080805b600354811015610f445760008481526001602052604081206003805491929184908110610ee957fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610f2a576001820191505b6004548210610f3c5760019250610f44565b600101610ec0565b5050919050565b6000805b600354811015610fc15760008381526001602052604081206003805491929184908110610f7857fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610fb9576001820191505b600101610f4f565b50919050565b33301461103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b60068190556040805182815290517f884d6758bafbcb4b5e2e0393178ca1f3da3dd380a54ce05ab60aa59756db9dc19181900360200190a150565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156111465780601f1061111b57610100808354040283529160200191611146565b820191906000526020600020905b81548152906001019060200180831161112957829003601f168201915b5050506003909301549192505060ff1684565b606060038054806020026020016040519081016040528092919081815260200182805480156111be57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611193575b505050505090505b90565b6060806000806003805490506040519080825280602002602001820160405280156111fe578160200160208202803883390190505b50925060009150600090505b6003548110156112e2576000858152600160205260408120600380549192918490811061123357fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156112da57600380548290811061127b57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff909116908490849081106112ae57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b60010161120a565b8160405190808252806020026020018201604052801561130c578160200160208202803883390190505b509350600090505b8181101561136e57828181518110151561132a57fe5b90602001906020020151848281518110151561134257fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101611314565b505050919050565b60055481565b3330146113ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b6003548160328211806113fc57508181115b80611405575080155b8061140e575081155b1561147a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f56414c49445f524551554952454d454e545f4552524f52000000000000000000604482015290519081900360640190fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b60065481565b3360008181526002602052604081205490919060ff16151561154057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600083815260208190526040902054839073ffffffffffffffffffffffffffffffffffffffff1615156115d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f5452414e53414354494f4e5f4558495354535f4552524f520000000000000000604482015290519081900360640190fd5b60008481526001602090815260408083203380855292529091205485919060ff161561166157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e4f545f434f4e4649524d45445f4552524f5200000000000000000000000000604482015290519081900360640190fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36116d586610ebb565b80156116ed5750600086815260076020526040902054155b1561174a5760065442019450846007600088815260200190815260200160002081905550857f280af6a3ba059a74f0e894262aa07f2c4d0de1e231882263c0d7dcda111b1a44866040518082815260200191505060405180910390a25b505050505050565b600061175f848484611c40565b905061176a816114bd565b9392505050565b603281565b60045481565b60003330146117ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561188457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f574e45525f444f45535f4e4f545f45584953545f4552524f52000000000000604482015290519081900360640190fd5b600092505b6003548310156119e0578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561195057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156119d5578360038481548110151561198857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e0565b600190920191611920565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b3360008181526002602052604090205460ff161515611b3257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600082815260208190526040902060030154829060ff1615611bb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e4f545f45584543555445445f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600083815260076020526040902054421015611c3257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5452414e53414354494f4e5f4e4545445f544f5f554e4c4f434b000000000000604482015290519081900360640190fd5b611c3b83611dd5565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611cc757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4e554c4c5f4552524f52000000000000000000000000000000000000604482015290519081900360640190fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783555160018301559251805194965091939092611d5f9260028501929101906120a6565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b3360008181526002602052604081205490919060ff161515611e5857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600083815260208190526040902060030154839060ff1615611edb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e4f545f45584543555445445f4552524f520000000000000000000000000000604482015290519081900360640190fd5b611ee484610ebb565b1561207c57600084815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915581548183015493516002808501805495995073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611fdb5780601f10611fb057610100808354040283529160200191611fdb565b820191906000526020600020905b815481529060010190602001808311611fbe57829003601f168201915b505091505060006040518083038185875af192505050156120265760405184907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a261207c565b60405184907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050565b815481835581811115611c3b57600083815260209020611c3b918101908301612124565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120e757805160ff1916838001178555612114565b82800160010185558215612114579182015b828111156121145782518255916020019190600101906120f9565b50612120929150612124565b5090565b6111c691905b80821115612120576000815560010161212a5600a165627a7a7230582078d36aa978a067559d9b95fb0da129f3aee1b265a8fd78d7b93fa29f3d934b2f0029000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000957082a1b43fc1e1b6f70c75f5cb1cd68c4327ec000000000000000000000000cd77fe287240ad55ea083b671501cb0367769d3200000000000000000000000015cbef6b721870f5dbb054ded1e61476a688a06b

Deployed Bytecode

0x6080604052600436106101325763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610174578063173825d9146101b557806320ea8d86146101e35780632f54bf6e146101fb5780633411c81c1461023d578063547415251461026e5780637065cb481461029f57806376ac947a146102cd578063784547a7146102e55780638b51d13f146102fd5780638c22d5d3146103155780639ace38c21461032d578063a0e67e2b14610402578063b5dc40c314610467578063b77bf6001461047f578063ba51a6df14610494578063bfa6fddb146104ac578063c01a8c84146104c1578063c6427474146104d9578063d74f8edd1461054f578063dc8452cd14610564578063e20056e614610579578063ee22610b146105ad575b60003411156101725760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561018057600080fd5b5061018c6004356105c5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101c157600080fd5b5061017273ffffffffffffffffffffffffffffffffffffffff600435166105fa565b3480156101ef57600080fd5b50610172600435610915565b34801561020757600080fd5b5061022973ffffffffffffffffffffffffffffffffffffffff60043516610b13565b604080519115158252519081900360200190f35b34801561024957600080fd5b5061022960043573ffffffffffffffffffffffffffffffffffffffff60243516610b28565b34801561027a57600080fd5b5061028d60043515156024351515610b48565b60408051918252519081900360200190f35b3480156102ab57600080fd5b5061017273ffffffffffffffffffffffffffffffffffffffff60043516610bb4565b3480156102d957600080fd5b5061028d600435610ea9565b3480156102f157600080fd5b50610229600435610ebb565b34801561030957600080fd5b5061028d600435610f4b565b34801561032157600080fd5b50610172600435610fc7565b34801561033957600080fd5b50610345600435611070565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156103c45781810151838201526020016103ac565b50505050905090810190601f1680156103f15780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561040e57600080fd5b50610417611159565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561045357818101518382015260200161043b565b505050509050019250505060405180910390f35b34801561047357600080fd5b506104176004356111c9565b34801561048b57600080fd5b5061028d611376565b3480156104a057600080fd5b5061017260043561137c565b3480156104b857600080fd5b5061028d6114b7565b3480156104cd57600080fd5b506101726004356114bd565b3480156104e557600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261028d94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506117529650505050505050565b34801561055b57600080fd5b5061028d611771565b34801561057057600080fd5b5061028d611776565b34801561058557600080fd5b5061017273ffffffffffffffffffffffffffffffffffffffff6004358116906024351661177c565b3480156105b957600080fd5b50610172600435611ab2565b60038054829081106105d357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461066a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821015610885578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156107a257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561087a57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106107fa57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061082d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610885565b600190910190610750565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108b69082612082565b5060035460045411156108cf576003546108cf9061137c565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561099557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b60008281526001602090815260408083203380855292529091205483919060ff161515610a2357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f434f4e4649524d45445f4552524f520000000000000000000000000000000000604482015290519081900360640190fd5b600084815260208190526040902060030154849060ff1615610aa657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e4f545f45584543555445445f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600085815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610bad57838015610b75575060008181526020819052604090206003015460ff16155b80610b995750828015610b99575060008181526020819052604090206003015460ff165b15610ba5576001820191505b600101610b4c565b5092915050565b333014610c2257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610cb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f574e45525f444f45535f4e4f545f45584953545f4552524f52000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610d3e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4e554c4c5f4552524f52000000000000000000000000000000000000604482015290519081900360640190fd5b6003805490506001016004546032821180610d5857508181115b80610d61575080155b80610d6a575081155b15610dd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f56414c49445f524551554952454d454e545f4552524f52000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b60076020526000908152604090205481565b600080805b600354811015610f445760008481526001602052604081206003805491929184908110610ee957fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610f2a576001820191505b6004548210610f3c5760019250610f44565b600101610ec0565b5050919050565b6000805b600354811015610fc15760008381526001602052604081206003805491929184908110610f7857fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610fb9576001820191505b600101610f4f565b50919050565b33301461103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b60068190556040805182815290517f884d6758bafbcb4b5e2e0393178ca1f3da3dd380a54ce05ab60aa59756db9dc19181900360200190a150565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156111465780601f1061111b57610100808354040283529160200191611146565b820191906000526020600020905b81548152906001019060200180831161112957829003601f168201915b5050506003909301549192505060ff1684565b606060038054806020026020016040519081016040528092919081815260200182805480156111be57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611193575b505050505090505b90565b6060806000806003805490506040519080825280602002602001820160405280156111fe578160200160208202803883390190505b50925060009150600090505b6003548110156112e2576000858152600160205260408120600380549192918490811061123357fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156112da57600380548290811061127b57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff909116908490849081106112ae57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b60010161120a565b8160405190808252806020026020018201604052801561130c578160200160208202803883390190505b509350600090505b8181101561136e57828181518110151561132a57fe5b90602001906020020151848281518110151561134257fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101611314565b505050919050565b60055481565b3330146113ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b6003548160328211806113fc57508181115b80611405575080155b8061140e575081155b1561147a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f56414c49445f524551554952454d454e545f4552524f52000000000000000000604482015290519081900360640190fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b60065481565b3360008181526002602052604081205490919060ff16151561154057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600083815260208190526040902054839073ffffffffffffffffffffffffffffffffffffffff1615156115d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f5452414e53414354494f4e5f4558495354535f4552524f520000000000000000604482015290519081900360640190fd5b60008481526001602090815260408083203380855292529091205485919060ff161561166157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e4f545f434f4e4649524d45445f4552524f5200000000000000000000000000604482015290519081900360640190fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36116d586610ebb565b80156116ed5750600086815260076020526040902054155b1561174a5760065442019450846007600088815260200190815260200160002081905550857f280af6a3ba059a74f0e894262aa07f2c4d0de1e231882263c0d7dcda111b1a44866040518082815260200191505060405180910390a25b505050505050565b600061175f848484611c40565b905061176a816114bd565b9392505050565b603281565b60045481565b60003330146117ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f4e4c595f57414c4c45545f4552524f52000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561188457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4f574e45525f444f45535f4e4f545f45584953545f4552524f52000000000000604482015290519081900360640190fd5b600092505b6003548310156119e0578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561195057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156119d5578360038481548110151561198857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e0565b600190920191611920565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b3360008181526002602052604090205460ff161515611b3257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600082815260208190526040902060030154829060ff1615611bb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e4f545f45584543555445445f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600083815260076020526040902054421015611c3257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5452414e53414354494f4e5f4e4545445f544f5f554e4c4f434b000000000000604482015290519081900360640190fd5b611c3b83611dd5565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611cc757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4e554c4c5f4552524f52000000000000000000000000000000000000604482015290519081900360640190fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783555160018301559251805194965091939092611d5f9260028501929101906120a6565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b3360008181526002602052604081205490919060ff161515611e5857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f574e45525f4558495354535f4552524f520000000000000000000000000000604482015290519081900360640190fd5b600083815260208190526040902060030154839060ff1615611edb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e4f545f45584543555445445f4552524f520000000000000000000000000000604482015290519081900360640190fd5b611ee484610ebb565b1561207c57600084815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915581548183015493516002808501805495995073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611fdb5780601f10611fb057610100808354040283529160200191611fdb565b820191906000526020600020905b815481529060010190602001808311611fbe57829003601f168201915b505091505060006040518083038185875af192505050156120265760405184907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a261207c565b60405184907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050565b815481835581811115611c3b57600083815260209020611c3b918101908301612124565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120e757805160ff1916838001178555612114565b82800160010185558215612114579182015b828111156121145782518255916020019190600101906120f9565b50612120929150612124565b5090565b6111c691905b80821115612120576000815560010161212a5600a165627a7a7230582078d36aa978a067559d9b95fb0da129f3aee1b265a8fd78d7b93fa29f3d934b2f0029

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000957082a1b43fc1e1b6f70c75f5cb1cd68c4327ec000000000000000000000000cd77fe287240ad55ea083b671501cb0367769d3200000000000000000000000015cbef6b721870f5dbb054ded1e61476a688a06b

-----Decoded View---------------
Arg [0] : _owners (address[]): 0x957082A1B43Fc1e1B6F70c75F5CB1cD68C4327eC,0xcd77fe287240Ad55EA083b671501cb0367769D32,0x15CbEf6b721870F5dBB054dED1e61476A688a06b
Arg [1] : _required (uint256): 2

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 000000000000000000000000957082a1b43fc1e1b6f70c75f5cb1cd68c4327ec
Arg [4] : 000000000000000000000000cd77fe287240ad55ea083b671501cb0367769d32
Arg [5] : 00000000000000000000000015cbef6b721870f5dbb054ded1e61476a688a06b


Swarm Source

bzzr://78d36aa978a067559d9b95fb0da129f3aee1b265a8fd78d7b93fa29f3d934b2f

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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