ETH Price: $3,873.60 (+0.68%)

Contract

0x1BBf25e71EC48B84d773809B4bA55B6F4bE946Fb
 

More Info

Private Name Tags

TokenTracker

Vow (VOW) (@$0.0964)

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Transfer213378692024-12-05 17:45:111 hr ago1733420711IN
Vow: VOW Token
0 ETH0.0016104423.1272752
Transfer213378362024-12-05 17:38:351 hr ago1733420315IN
Vow: VOW Token
0 ETH0.0017830725.61520448
Transfer213377662024-12-05 17:24:351 hr ago1733419475IN
Vow: VOW Token
0 ETH0.0020635429.63926638
Transfer213377452024-12-05 17:20:231 hr ago1733419223IN
Vow: VOW Token
0 ETH0.001663231.66674256
Approve213376512024-12-05 17:01:352 hrs ago1733418095IN
Vow: VOW Token
0 ETH0.0014128.3577807
Transfer213374852024-12-05 16:27:592 hrs ago1733416079IN
Vow: VOW Token
0 ETH0.0017613927.17276303
Transfer213374442024-12-05 16:19:472 hrs ago1733415587IN
Vow: VOW Token
0 ETH0.0014857228.28762655
Approve213360122024-12-05 11:31:237 hrs ago1733398283IN
Vow: VOW Token
0 ETH0.0009384618.87418061
Transfer213358862024-12-05 11:05:598 hrs ago1733396759IN
Vow: VOW Token
0 ETH0.0009763320.44861275
Approve213358622024-12-05 11:01:118 hrs ago1733396471IN
Vow: VOW Token
0 ETH0.0009277118.65799548
Transfer213356852024-12-05 10:25:478 hrs ago1733394347IN
Vow: VOW Token
0 ETH0.0010913720.77934761
Approve213356732024-12-05 10:23:238 hrs ago1733394203IN
Vow: VOW Token
0 ETH0.0009724619.57220964
Transfer213348292024-12-05 7:33:4711 hrs ago1733384027IN
Vow: VOW Token
0 ETH0.0012292617.6531638
Approve213345372024-12-05 6:35:1112 hrs ago1733380511IN
Vow: VOW Token
0 ETH0.0013122926.39257653
Transfer213343442024-12-05 5:56:1113 hrs ago1733378171IN
Vow: VOW Token
0 ETH0.0014549720.89459627
Approve213333802024-12-05 2:41:4716 hrs ago1733366507IN
Vow: VOW Token
0 ETH0.0009356118.81692631
Transfer213327642024-12-05 0:37:5918 hrs ago1733359079IN
Vow: VOW Token
0 ETH0.0010680720.33108415
Approve213324842024-12-04 23:41:1119 hrs ago1733355671IN
Vow: VOW Token
0 ETH0.0012744525.7872946
Transfer213324162024-12-04 23:27:3519 hrs ago1733354855IN
Vow: VOW Token
0 ETH0.0014139429.62126414
Approve213322492024-12-04 22:53:4720 hrs ago1733352827IN
Vow: VOW Token
0 ETH0.0015109930.58817994
Approve213306812024-12-04 17:39:1125 hrs ago1733333951IN
Vow: VOW Token
0 ETH0.00148430.02719886
Transfer213305432024-12-04 17:11:3526 hrs ago1733332295IN
Vow: VOW Token
0 ETH0.0018049537.79372974
Approve213300582024-12-04 15:34:3527 hrs ago1733326475IN
Vow: VOW Token
0 ETH0.0024623249.7982853
Approve213292362024-12-04 12:48:2330 hrs ago1733316503IN
Vow: VOW Token
0 ETH0.0010514421.14652164
Transfer213287912024-12-04 11:19:1131 hrs ago1733311151IN
Vow: VOW Token
0 ETH0.0011602424.29433209
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
197181732024-04-23 12:44:23226 days ago1713876263
Vow: VOW Token
0.02144294 ETH
197181242024-04-23 12:34:11226 days ago1713875651
Vow: VOW Token
0.0217924 ETH
180796112023-09-06 19:54:11455 days ago1694030051
Vow: VOW Token
0.04 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VOWToken

Compiler Version
v0.6.7+commit.b8d736ae

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// File: contracts/thirdParty/ECDSA.sol

// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/cryptography/ECDSA.sol
// Line 60 added to original source in accordance with recommendation on accepting signatures with 0/1 for v

pragma solidity ^0.6.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Check the signature length
        if (signature.length != 65) {
            revert("ECDSA: invalid signature length");
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            revert("ECDSA: invalid signature 's' value");
        }

        if (v < 27) v += 27;

        if (v != 27 && v != 28) {
            revert("ECDSA: invalid signature 'v' value");
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * replicates the behavior of the
     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]
     * JSON-RPC method.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}

// File: contracts/interfaces/IERC777.sol

pragma solidity 0.6.7;

// As defined in https://eips.ethereum.org/EIPS/eip-777
interface IERC777 {
  event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data,
      bytes operatorData);
  event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
  event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
  event AuthorizedOperator(address indexed operator,address indexed holder);
  event RevokedOperator(address indexed operator, address indexed holder);

  function name() external view returns (string memory);
  function symbol() external view returns (string memory);
  function totalSupply() external view returns (uint256);
  function balanceOf(address holder) external view returns (uint256);
  function granularity() external view returns (uint256);
  function defaultOperators() external view returns (address[] memory);
  function isOperatorFor(address operator, address holder) external view returns (bool);
  function authorizeOperator(address operator) external;
  function revokeOperator(address operator) external;
  function send(address to, uint256 amount, bytes calldata data) external;
  function operatorSend(address from, address to, uint256 amount, bytes calldata data, bytes calldata operatorData) external;
  function burn(uint256 amount, bytes calldata data) external;
  function operatorBurn( address from, uint256 amount, bytes calldata data, bytes calldata operatorData) external;
}

// File: contracts/interfaces/IERC20.sol

pragma solidity 0.6.7;

// As described in https://eips.ethereum.org/EIPS/eip-20
interface IERC20 {
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);

  function name() external view returns (string memory); // optional method - see eip spec
  function symbol() external view returns (string memory); // optional method - see eip spec
  function decimals() external view returns (uint8); // optional method - see eip spec
  function totalSupply() external view returns (uint256);
  function balanceOf(address owner) external view returns (uint256);
  function transfer(address to, uint256 value) external returns (bool);
  function transferFrom(address from, address to, uint256 value) external returns (bool);
  function approve(address spender, uint256 value) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint256);
}

// File: contracts/thirdParty/interfaces/IERC1820Registry.sol

// From open https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/introspection/IERC1820Registry.sol

pragma solidity ^0.6.0;

/**
 * @dev Interface of the global ERC1820 Registry, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
 * implementers for interfaces in this registry, as well as query support.
 *
 * Implementers may be shared by multiple accounts, and can also implement more
 * than a single interface for each account. Contracts can implement interfaces
 * for themselves, but externally-owned accounts (EOA) must delegate this to a
 * contract.
 *
 * {IERC165} interfaces can also be queried via the registry.
 *
 * For an in-depth explanation and source code analysis, see the EIP text.
 */
interface IERC1820Registry {
    /**
     * @dev Sets `newManager` as the manager for `account`. A manager of an
     * account is able to set interface implementers for it.
     *
     * By default, each account is its own manager. Passing a value of `0x0` in
     * `newManager` will reset the manager to this initial state.
     *
     * Emits a {ManagerChanged} event.
     *
     * Requirements:
     *
     * - the caller must be the current manager for `account`.
     */
    function setManager(address account, address newManager) external;

    /**
     * @dev Returns the manager for `account`.
     *
     * See {setManager}.
     */
    function getManager(address account) external view returns (address);

    /**
     * @dev Sets the `implementer` contract as ``account``'s implementer for
     * `interfaceHash`.
     *
     * `account` being the zero address is an alias for the caller's address.
     * The zero address can also be used in `implementer` to remove an old one.
     *
     * See {interfaceHash} to learn how these are created.
     *
     * Emits an {InterfaceImplementerSet} event.
     *
     * Requirements:
     *
     * - the caller must be the current manager for `account`.
     * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
     * end in 28 zeroes).
     * - `implementer` must implement {IERC1820Implementer} and return true when
     * queried for support, unless `implementer` is the caller. See
     * {IERC1820Implementer-canImplementInterfaceForAddress}.
     */
    function setInterfaceImplementer(address account, bytes32 interfaceHash, address implementer) external;

    /**
     * @dev Returns the implementer of `interfaceHash` for `account`. If no such
     * implementer is registered, returns the zero address.
     *
     * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
     * zeroes), `account` will be queried for support of it.
     *
     * `account` being the zero address is an alias for the caller's address.
     */
    function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address);

    /**
     * @dev Returns the interface hash for an `interfaceName`, as defined in the
     * corresponding
     * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
     */
    function interfaceHash(string calldata interfaceName) external pure returns (bytes32);

    /**
     *  @notice Updates the cache with whether the contract implements an ERC165 interface or not.
     *  @param account Address of the contract for which to update the cache.
     *  @param interfaceId ERC165 interface for which to update the cache.
     */
    function updateERC165Cache(address account, bytes4 interfaceId) external;

    /**
     *  @notice Checks whether a contract implements an ERC165 interface or not.
     *  If the result is not cached a direct lookup on the contract address is performed.
     *  If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
     *  {updateERC165Cache} with the contract address.
     *  @param account Address of the contract to check.
     *  @param interfaceId ERC165 interface to check.
     *  @return True if `account` implements `interfaceId`, false otherwise.
     */
    function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);

    /**
     *  @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.
     *  @param account Address of the contract to check.
     *  @param interfaceId ERC165 interface to check.
     *  @return True if `account` implements `interfaceId`, false otherwise.
     */
    function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);

    event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);

    event ManagerChanged(address indexed account, address indexed newManager);
}

// File: contracts/interfaces/IERC777Sender.sol

pragma solidity 0.6.7;

// As defined in the 'ERC777TokensSender And The tokensToSend Hook' section of https://eips.ethereum.org/EIPS/eip-777
interface IERC777Sender {
  function tokensToSend(address operator, address from, address to, uint256 amount, bytes calldata data,
      bytes calldata operatorData) external;
}

// File: contracts/interfaces/IERC777Recipient.sol

pragma solidity 0.6.7;

// As defined in the 'ERC777TokensRecipient And The tokensReceived Hook' section of https://eips.ethereum.org/EIPS/eip-777
interface IERC777Recipient {
  function tokensReceived(address operator, address from, address to, uint256 amount, bytes calldata data,
      bytes calldata operatorData) external;
}

// File: contracts/thirdParty/SafeMath.sol

// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts/libraries/LToken.sol

pragma solidity 0.6.7;





struct TokenState {
  uint256 totalSupply;
  mapping(address => uint256) balances;
  mapping(address => mapping(address => uint256)) approvals;
  mapping(address => mapping(address => bool)) authorizedOperators;
  address[] defaultOperators;
  mapping(address => bool) defaultOperatorIsRevoked;
  mapping(address => bool) minters;
}

library LToken {
  using SafeMath for uint256;

  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
  event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data,
      bytes operatorData);
  event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
  event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
  event AuthorizedOperator(address indexed operator, address indexed holder);
  event RevokedOperator(address indexed operator, address indexed holder);

  // Universal address as defined in Registry Contract Address section of https://eips.ethereum.org/EIPS/eip-1820
  IERC1820Registry constant internal ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
  // precalculated hashes - see https://github.com/ethereum/solidity/issues/4024
  // keccak256("ERC777TokensSender")
  bytes32 constant internal ERC777_TOKENS_SENDER_HASH = 0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895;
  // keccak256("ERC777TokensRecipient")
  bytes32 constant internal ERC777_TOKENS_RECIPIENT_HASH = 0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b;

  modifier checkSenderNotOperator(address _operator) {
    require(_operator != msg.sender, "Cannot be operator for self");
    _;
  }

  function initState(TokenState storage _tokenState, uint8 _decimals, uint256 _initialSupply)
    external
  {
    _tokenState.defaultOperators.push(address(this));
    _tokenState.totalSupply = _initialSupply.mul(10**uint256(_decimals));
    _tokenState.balances[msg.sender] = _tokenState.totalSupply;
  }

  function transferFrom(TokenState storage _tokenState, address _from, address _to, uint256 _value)
    external
  {
    _tokenState.approvals[_from][msg.sender] = _tokenState.approvals[_from][msg.sender].sub(_value, "Amount not approved");
    doSend(_tokenState, msg.sender, _from, _to, _value, "", "", false);
  }

  function approve(TokenState storage _tokenState, address _spender, uint256 _value)
    external
  {
    require(_spender != address(0), "Cannot approve to zero address");
    _tokenState.approvals[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
  }

  function authorizeOperator(TokenState storage _tokenState, address _operator)
    checkSenderNotOperator(_operator)
    external
  {
    if (_operator == address(this))
      _tokenState.defaultOperatorIsRevoked[msg.sender] = false;
    else
      _tokenState.authorizedOperators[_operator][msg.sender] = true;
    emit AuthorizedOperator(_operator, msg.sender);
  }

  function revokeOperator(TokenState storage _tokenState, address _operator)
    checkSenderNotOperator(_operator)
    external
  {
    if (_operator == address(this))
      _tokenState.defaultOperatorIsRevoked[msg.sender] = true;
    else
      _tokenState.authorizedOperators[_operator][msg.sender] = false;
    emit RevokedOperator(_operator, msg.sender);
  }

  function authorizeMinter(TokenState storage _tokenState, address _minter)
    external
  {
    _tokenState.minters[_minter] = true;
  }

  function revokeMinter(TokenState storage _tokenState, address _minter)
    external
  {
    _tokenState.minters[_minter] = false;
  }

  function doMint(TokenState storage _tokenState, address _to, uint256 _amount)
    external
  {
    assert(_to != address(0));

    _tokenState.totalSupply = _tokenState.totalSupply.add(_amount);
    _tokenState.balances[_to] = _tokenState.balances[_to].add(_amount);

    // From ERC777: The token contract MUST call the tokensReceived hook after updating the state.
    receiveHook(address(this), address(0), _to, _amount, "", "", true);

    emit Minted(address(this), _to, _amount, "", "");
    emit Transfer(address(0), _to, _amount);
  }

  function doBurn(TokenState storage _tokenState, address _operator, address _from, uint256 _amount, bytes calldata _data,
      bytes calldata _operatorData)
    external
  {
    assert(_from != address(0));
    // From ERC777: The token contract MUST call the tokensToSend hook before updating the state.
    sendHook(_operator, _from, address(0), _amount, _data, _operatorData);

    _tokenState.balances[_from] = _tokenState.balances[_from].sub(_amount, "Cannot burn more than balance");
    _tokenState.totalSupply = _tokenState.totalSupply.sub(_amount);

    emit Burned(_operator, _from, _amount, _data, _operatorData);
    emit Transfer(_from, address(0), _amount);
  }

  function doSend(TokenState storage _tokenState, address _operator, address _from, address _to, uint256 _amount,
      bytes memory _data, bytes memory _operatorData, bool _enforceERC777)
    public
  {
    assert(_from != address(0));

    require(_to != address(0), "Cannot send funds to 0 address");
    // From ERC777: The token contract MUST call the tokensToSend hook before updating the state.
    sendHook(_operator, _from, _to, _amount, _data, _operatorData);

    _tokenState.balances[_from] = _tokenState.balances[_from].sub(_amount, "Amount exceeds available funds");
    _tokenState.balances[_to] = _tokenState.balances[_to].add(_amount);

    emit Sent(_operator, _from, _to, _amount, _data, _operatorData);
    emit Transfer(_from, _to, _amount);

    // From ERC777: The token contract MUST call the tokensReceived hook after updating the state.
    receiveHook(_operator, _from, _to, _amount, _data, _operatorData, _enforceERC777);
  }

  function receiveHook(address _operator, address _from, address _to, uint256 _amount, bytes memory _data,
      bytes memory _operatorData, bool _enforceERC777)
    public
  {
    address implementer = ERC1820_REGISTRY.getInterfaceImplementer(_to, ERC777_TOKENS_RECIPIENT_HASH);
    if (implementer != address(0))
      IERC777Recipient(implementer).tokensReceived(_operator, _from, _to, _amount, _data, _operatorData);
    else if (_enforceERC777)
      require(!isContract(_to), "Must be registered with ERC1820");
  }

  function sendHook(address _operator, address _from, address _to, uint256 _amount, bytes memory _data,
      bytes memory _operatorData)
    public
  {
    address implementer = ERC1820_REGISTRY.getInterfaceImplementer(_from, ERC777_TOKENS_SENDER_HASH);
    if (implementer != address(0))
      IERC777Sender(implementer).tokensToSend(_operator, _from, _to, _amount, _data, _operatorData);
  }

  function isContract(address _account)
    private
    view
    returns (bool isContract_)
  {
    uint256 size;

    assembly {
      size := extcodesize(_account)
    }

    isContract_ = size != 0;
  }
}

// File: contracts/Token.sol

pragma solidity 0.6.7;




/**
 * Implements ERC777 with ERC20 as defined in https://eips.ethereum.org/EIPS/eip-777, with minting support.
 * NOTE: Minting is internal only: derive from this contract according to usage.
 */
contract Token is IERC777, IERC20 {

  string private tokenName;
  string private tokenSymbol;
  uint8 constant private tokenDecimals = 18;
  uint256 constant private tokenGranularity = 1;
  TokenState public tokenState;

  // Universal address as defined in Registry Contract Address section of https://eips.ethereum.org/EIPS/eip-1820
  IERC1820Registry constant internal ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
  // keccak256("ERC777Token")
  bytes32 constant internal ERC777_TOKEN_HASH = 0xac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054;
  // keccak256("ERC20Token")
  bytes32 constant internal ERC20_TOKEN_HASH = 0xaea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a;

  event AuthorizedMinter(address minter);
  event RevokedMinter(address minter);

  constructor(string memory _name, string memory _symbol, uint256 _initialSupply)
    internal
  {
    require(bytes(_name).length != 0, "Needs a name");
    require(bytes(_symbol).length != 0, "Needs a symbol");
    tokenName = _name;
    tokenSymbol = _symbol;
    LToken.initState(tokenState, tokenDecimals, _initialSupply);

    ERC1820_REGISTRY.setInterfaceImplementer(address(this), ERC777_TOKEN_HASH, address(this));
    ERC1820_REGISTRY.setInterfaceImplementer(address(this), ERC20_TOKEN_HASH, address(this));
  }

  modifier onlyOperator(address _holder) {
    require(isOperatorFor(msg.sender, _holder), "Not an operator");
    _;
  }

  modifier onlyMinter {
    require(tokenState.minters[msg.sender], "onlyMinter");
    _;
  }

  function name()
    external
    view
    override(IERC777, IERC20)
    returns (string memory name_)
  {
    name_ = tokenName;
  }

  function symbol()
    external
    view
    override(IERC777, IERC20)
    returns (string memory symbol_)
  {
    symbol_ = tokenSymbol;
  }

  function decimals()
    external
    view
    override
    returns (uint8 decimals_)
  {
    decimals_ = tokenDecimals;
  }

  function granularity()
    external
    view
    override
    returns (uint256 granularity_)
  {
    granularity_ = tokenGranularity;
  }

  function balanceOf(address _holder)
    external
    override(IERC777, IERC20)
    view
    returns (uint256 balance_)
  {
    balance_ = tokenState.balances[_holder];
  }

  function transfer(address _to, uint256 _value)
    external
    override
    returns (bool success_)
  {
    doSend(msg.sender, msg.sender, _to, _value, "", "", false);
    success_ = true;
  }

  function transferFrom(address _from, address _to, uint256 _value)
    external
    override
    returns (bool success_)
  {
    LToken.transferFrom(tokenState, _from, _to, _value);
    success_ = true;
  }

  function approve(address _spender, uint256 _value)
    external
    override
    returns (bool success_)
  {
    LToken.approve(tokenState, _spender, _value);
    success_ = true;
  }

  function allowance(address _holder, address _spender)
    external
    view
    override
    returns (uint256 remaining_)
  {
    remaining_ = tokenState.approvals[_holder][_spender];
  }

  function defaultOperators()
    external
    view
    override
    returns (address[] memory)
  {
    return tokenState.defaultOperators;
  }

  function authorizeOperator(address _operator)
    external
    override
  {
    LToken.authorizeOperator(tokenState, _operator);
  }

  function revokeOperator(address _operator)
    external
    override
  {
    LToken.revokeOperator(tokenState, _operator);
  }

  function send(address _to, uint256 _amount, bytes calldata _data)
    external
    override
  {
    doSend(msg.sender, msg.sender, _to, _amount, _data, "", true);
  }

  function operatorSend(address _from, address _to, uint256 _amount, bytes calldata _data, bytes calldata _operatorData)
    external
    override
    onlyOperator(_from)
  {
    doSend(msg.sender, _from, _to, _amount, _data, _operatorData, true);
  }

  function burn(uint256 _amount, bytes calldata _data)
    external
    override
  {
    doBurn(msg.sender, msg.sender, _amount, _data, "");
  }

  function operatorBurn(address _from, uint256 _amount, bytes calldata _data, bytes calldata _operatorData)
    external
    override
    onlyOperator(_from)
  {
    doBurn(msg.sender, _from, _amount, _data, _operatorData);
  }

  function mint(address _to, uint256 _amount)
    external
    onlyMinter
  {
    LToken.doMint(tokenState, _to, _amount);
  }

  function totalSupply()
    external
    view
    override(IERC777, IERC20)
    returns (uint256 totalSupply_)
  {
    totalSupply_ = tokenState.totalSupply;
  }

  function isOperatorFor(address _operator, address _holder)
    public
    view
    override
    returns (bool isOperatorFor_)
  {
    isOperatorFor_ = (_operator == _holder || tokenState.authorizedOperators[_operator][_holder]
        || _operator == address(this) && !tokenState.defaultOperatorIsRevoked[_holder]);
  }

  function doSend(address _operator, address _from, address _to, uint256 _amount, bytes memory _data,
      bytes memory _operatorData, bool _enforceERC777)
    internal
    virtual
  {
    LToken.doSend(tokenState, _operator, _from, _to, _amount, _data, _operatorData, _enforceERC777);
  }

  function doBurn(address _operator, address _from, uint256 _amount, bytes memory _data, bytes memory _operatorData)
    internal
  {
    LToken.doBurn(tokenState, _operator, _from, _amount, _data, _operatorData);
  }

  function authorizeMinter(address _minter)
    internal
  {
    LToken.authorizeMinter(tokenState, _minter);

    emit AuthorizedMinter(_minter);
  }

  function revokeMinter(address _minter)
    internal
  {
    LToken.revokeMinter(tokenState, _minter);

    emit RevokedMinter(_minter);
  }
}

// File: contracts/Owned.sol

pragma solidity 0.6.7;

contract Owned {

  address public owner = msg.sender;

  event LogOwnershipTransferred(address indexed owner, address indexed newOwner);

  modifier onlyOwner {
    require(msg.sender == owner, "Sender must be owner");
    _;
  }

  function setOwner(address _owner)
    external
    onlyOwner
  {
    require(_owner != address(0), "Owner cannot be zero address");
    emit LogOwnershipTransferred(owner, _owner);
    owner = _owner;
  }
}

// File: contracts/VOWToken.sol

pragma solidity 0.6.7;




/**
 * ERC777/20 contract which also:
 * - is owned
 * - supports proxying of own tokens (only if signed correctly)
 * - supports partner contracts, keyed by hash
 * - supports minting (only by owner approved contracts)
 * - has a USD price
 */
contract VOWToken is Token, IERC777Recipient, Owned {

  mapping (bytes32 => bool) public proxyProofs;
  uint256[2] public usdRate;
  address public usdRateSetter;
  mapping(bytes32 => address payable) public partnerContracts;

  // precalculated hash - see https://github.com/ethereum/solidity/issues/4024
  // keccak256("ERC777TokensRecipient")
  bytes32 constant internal ERC777_TOKENS_RECIPIENT_HASH = 0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b;

  event LogUSDRateSetterSet(address indexed usdRateSetter);
  event LogUSDRateSet(uint256 numTokens, uint256 numUSD);
  event LogProxiedTokens(address indexed from, address indexed to, uint256 amount, bytes data, uint256 nonce, bytes proof);
  event LogPartnerContractSet(bytes32 indexed keyHash, address indexed partnerContract);
  event LogMintPermissionSet(address indexed contractAddress, bool canMint);

  constructor(string memory _name, string memory _symbol, uint256 _initialSupply, uint256[2] memory _initialUSDRate)
    public
    Token(_name, _symbol, _initialSupply)
  {
    doSetUSDRate(_initialUSDRate[0], _initialUSDRate[1]);

    ERC1820_REGISTRY.setInterfaceImplementer(address(this), ERC777_TOKENS_RECIPIENT_HASH, address(this));
  }

  modifier onlyUSDRateSetter() {
    require(msg.sender == usdRateSetter, "onlyUSDRateSetter");
    _;
  }

  modifier onlyOwnTokens {
    require(msg.sender == address(this), "onlyOwnTokens");
    _;
  }

  modifier addressNotNull(address _address) {
    require(_address != address(0), "Address cannot be null");
    _;
  }

  function tokensReceived(address /* _operator */, address /* _from */, address /* _to */, uint256 _amount,
      bytes calldata _data, bytes calldata /* _operatorData */)
    external
    override
    onlyOwnTokens
  {
    (address from, address to, uint256 amount, bytes memory data, uint256 nonce, bytes memory proof) =
        abi.decode(_data, (address, address, uint256, bytes, uint256, bytes));
    checkProxying(from, to, amount, data, nonce, proof);

    if (_amount != 0)
      this.send(from, _amount, "");

    this.operatorSend(from, to, amount, data, _data);

    emit LogProxiedTokens(from, to, amount, data, nonce, proof);
  }

  function setPartnerContract(bytes32 _keyHash, address payable _partnerContract)
    external
    onlyOwner
    addressNotNull(_partnerContract)
  {
    require(_keyHash != bytes32(0), "Missing key hash");
    partnerContracts[_keyHash] = _partnerContract;

    emit LogPartnerContractSet(_keyHash, _partnerContract);
  }

  function setUSDRateSetter(address _usdRateSetter)
    external
    onlyOwner
    addressNotNull(_usdRateSetter)
  {
    usdRateSetter = _usdRateSetter;

    emit LogUSDRateSetterSet(_usdRateSetter);
  }

  function setUSDRate(uint256 _numTokens, uint256 _numUSD)
    external
    onlyUSDRateSetter
  {
    doSetUSDRate(_numTokens, _numUSD);

    emit LogUSDRateSet(_numTokens, _numUSD);
  }

  function setMintPermission(address _contract, bool _canMint)
    external
    onlyOwner
    addressNotNull(_contract)
  {
    if (_canMint)
      authorizeMinter(_contract);
    else
      revokeMinter(_contract);

    emit LogMintPermissionSet(_contract, _canMint);
  }

  function doSetUSDRate(uint256 _numTokens, uint256 _numUSD)
    private
  {
    require(_numTokens != 0, "numTokens cannot be zero");
    require(_numUSD != 0, "numUSD cannot be zero");
    usdRate = [_numTokens, _numUSD];
  }

  function checkProxying(address _from, address _to, uint256 _amount, bytes memory _data, uint256 _nonce, bytes memory _proof)
    private
  {
    require(!proxyProofs[keccak256(_proof)], "Proxy proof not unique");
    proxyProofs[keccak256(_proof)] = true;
    bytes32 hash = keccak256(abi.encodePacked(address(this), _from, _to, _amount, _data, _nonce));
    address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(hash), _proof);
    require(signer == _from, "Bad signer");
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint256[2]","name":"_initialUSDRate","type":"uint256[2]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"AuthorizedMinter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"holder","type":"address"}],"name":"AuthorizedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"canMint","type":"bool"}],"name":"LogMintPermissionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"LogOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"partnerContract","type":"address"}],"name":"LogPartnerContractSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"proof","type":"bytes"}],"name":"LogProxiedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numUSD","type":"uint256"}],"name":"LogUSDRateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usdRateSetter","type":"address"}],"name":"LogUSDRateSetterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"RevokedMinter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"holder","type":"address"}],"name":"RevokedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Sent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"authorizeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"granularity","outputs":[{"internalType":"uint256","name":"granularity_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_holder","type":"address"}],"name":"isOperatorFor","outputs":[{"internalType":"bool","name":"isOperatorFor_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"name_","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_operatorData","type":"bytes"}],"name":"operatorBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_operatorData","type":"bytes"}],"name":"operatorSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"partnerContracts","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"proxyProofs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"_canMint","type":"bool"}],"name":"setMintPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"address payable","name":"_partnerContract","type":"address"}],"name":"setPartnerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokens","type":"uint256"},{"internalType":"uint256","name":"_numUSD","type":"uint256"}],"name":"setUSDRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdRateSetter","type":"address"}],"name":"setUSDRateSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenState","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usdRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdRateSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405233600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200005257600080fd5b506040516200410138038062004101833981810160405260a08110156200007857600080fd5b81019080805160405193929190846401000000008211156200009957600080fd5b83820191506020820185811115620000b057600080fd5b8251866001820283011164010000000082111715620000ce57600080fd5b8083526020830192505050908051906020019080838360005b8381101562000104578082015181840152602081019050620000e7565b50505050905090810190601f168015620001325780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200015657600080fd5b838201915060208201858111156200016d57600080fd5b82518660018202830111640100000000821117156200018b57600080fd5b8083526020830192505050908051906020019080838360005b83811015620001c1578082015181840152602081019050620001a4565b50505050905090810190601f168015620001ef5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291909190505083838360008351141562000280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e656564732061206e616d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082511415620002f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6565647320612073796d626f6c00000000000000000000000000000000000081525060200191505060405180910390fd5b8260009080519060200190620003119291906200082f565b5081600190805190602001906200032a9291906200082f565b507360ca4ec4412a3b319f4bd6366bb836395336b39763bbce8abb60026012846040518463ffffffff1660e01b8152600401808481526020018360ff1660ff168152602001828152602001935050505060006040518083038186803b1580156200039357600080fd5b505af4158015620003a8573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460001b306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200049f57600080fd5b505af1158015620004b4573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60001b306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015620005ab57600080fd5b505af1158015620005c0573d6000803e3d6000fd5b50505050505050620005fd81600060028110620005d957fe5b602002015182600160028110620005ec57fe5b60200201516200071360201b60201c565b731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015620006f057600080fd5b505af115801562000705573d6000803e3d6000fd5b505050505050505062000923565b60008214156200078b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d546f6b656e732063616e6e6f74206265207a65726f000000000000000081525060200191505060405180910390fd5b600081141562000803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e756d5553442063616e6e6f74206265207a65726f000000000000000000000081525060200191505060405180910390fd5b604051806040016040528083815260200182815250600b9060026200082a929190620008b6565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200087257805160ff1916838001178555620008a3565b82800160010185558215620008a3579182015b82811115620008a257825182559160200191906001019062000885565b5b509050620008b29190620008fb565b5090565b8260028101928215620008e8579160200282015b82811115620008e7578251825591602001919060010190620008ca565b5b509050620008f79190620008fb565b5090565b6200092091905b808211156200091c57600081600090555060010162000902565b5090565b90565b6137ce80620009336000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80638da5cb5b1161010f578063b89f378a116100a2578063e90dd9e211610071578063e90dd9e214610cb9578063fad8b32a14610cd7578063fc673c4f14610d1b578063fe9d930314610e13576101e4565b8063b89f378a14610b37578063d95b637114610b81578063dd62ed3e14610bfd578063e47fca4e14610c75576101e4565b80639bd9bbc6116100de5780639bd9bbc614610970578063a04b1e9014610a13578063a9059cbb14610a63578063a9f83f8214610ac9576101e4565b80638da5cb5b146108195780638dfdd8a114610863578063959b8c3f146108a957806395d89b41146108ed576101e4565b8063313ce5671161018757806362ad1b831161015657806362ad1b83146106195780636eac7739146107315780636f54ed751461077f57806370a08231146107c1576101e4565b8063313ce567146105515780633c8585771461057557806340c10f19146105ad578063556f0dc7146105fb576101e4565b8063095ea7b3116101c3578063095ea7b31461040357806313af40351461046957806318160ddd146104ad57806323b872dd146104cb576101e4565b806223de29146101e957806306e485381461032157806306fdde0314610380575b600080fd5b61031f600480360360c08110156101ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460018302840111640100000000831117156102ba57600080fd5b9091929391929390803590602001906401000000008111156102db57600080fd5b8201836020820111156102ed57600080fd5b8035906020019184600183028401116401000000008311171561030f57600080fd5b9091929391929390505050610e96565b005b61032961147c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561036c578082015181840152602081019050610351565b505050509050019250505060405180910390f35b61038861150d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c85780820151818401526020810190506103ad565b50505050905090810190601f1680156103f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61044f6004803603604081101561041957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115af565b604051808215151515815260200191505060405180910390f35b6104ab6004803603602081101561047f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b005b6104b5611885565b6040518082815260200191505060405180910390f35b610537600480360360608110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611892565b604051808215151515815260200191505060405180910390f35b610559611977565b604051808260ff1660ff16815260200191505060405180910390f35b6105ab6004803603604081101561058b57600080fd5b810190808035906020019092919080359060200190929190505050611980565b005b6105f9600480360360408110156105c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a90565b005b610603611bfa565b6040518082815260200191505060405180910390f35b61072f600480360360a081101561062f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b9091929391929390803590602001906401000000008111156106eb57600080fd5b8201836020820111156106fd57600080fd5b8035906020019184600183028401116401000000008311171561071f57600080fd5b9091929391929390505050611c03565b005b61077d6004803603604081101561074757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d22565b005b6107ab6004803603602081101561079557600080fd5b8101908080359060200190929190505050611f9d565b6040518082815260200191505060405180910390f35b610803600480360360208110156107d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb5565b6040518082815260200191505060405180910390f35b610821612001565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61088f6004803603602081101561087957600080fd5b8101908080359060200190929190505050612027565b604051808215151515815260200191505060405180910390f35b6108eb600480360360208110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612047565b005b6108f56120e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561093557808201518184015260208101905061091a565b50505050905090810190601f1680156109625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a116004803603606081101561098657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b9091929391929390505050612188565b005b610a6160048036036040811015610a2957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506121f1565b005b610aaf60048036036040811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123cd565b604051808215151515815260200191505060405180910390f35b610af560048036036020811015610adf57600080fd5b8101908080359060200190929190505050612407565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3f61243a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610be360048036036040811015610b9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612460565b604051808215151515815260200191505060405180910390f35b610c5f60048036036040811015610c1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125bc565b6040518082815260200191505060405180910390f35b610cb760048036036020811015610c8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b005b610cc1612834565b6040518082815260200191505060405180910390f35b610d1960048036036020811015610ced57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612840565b005b610e1160048036036080811015610d3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d7857600080fd5b820183602082011115610d8a57600080fd5b80359060200191846001830284011164010000000083111715610dac57600080fd5b909192939192939080359060200190640100000000811115610dcd57600080fd5b820183602082011115610ddf57600080fd5b80359060200191846001830284011164010000000083111715610e0157600080fd5b90919293919293905050506128df565b005b610e9460048036036040811015610e2957600080fd5b810190808035906020019092919080359060200190640100000000811115610e5057600080fd5b820183602082011115610e6257600080fd5b80359060200191846001830284011164010000000083111715610e8457600080fd5b90919293919293905050506129fa565b005b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6f6e6c794f776e546f6b656e730000000000000000000000000000000000000081525060200191505060405180910390fd5b6000806000606060006060898960c0811015610f5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fb957600080fd5b820183602082011115610fcb57600080fd5b80359060200191846001830284011164010000000083111715610fed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561105a57600080fd5b82018360208201111561106c57600080fd5b8035906020019184600183028401116401000000008311171561108e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050509550955095509550955095506110f5868686868686612a5f565b60008b146111b1573073ffffffffffffffffffffffffffffffffffffffff16639bd9bbc6878d6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505b3073ffffffffffffffffffffffffffffffffffffffff166362ad1b83878787878f8f6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200180602001838103835286818151815260200191508051906020019080838360005b83811015611290578082015181840152602081019050611275565b50505050905090810190601f1680156112bd5780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f97823a4edabb1c2f3fb4ee63160c204ef488f4d2282a0bdd4290cdde86c708ec86868686604051808581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156113c85780820151818401526020810190506113ad565b50505050905090810190601f1680156113f55780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561142e578082015181840152602081019050611413565b50505050905090810190601f16801561145b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a35050505050505050505050505050565b6060600260040180548060200260200160405190810160405280929190818152602001828054801561150357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116114b9575b5050505050905090565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115a55780601f1061157a576101008083540402835291602001916115a5565b820191906000526020600020905b81548152906001019060200180831161158857829003601f168201915b5050505050905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397638bde1d78600285856040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561163d57600080fd5b505af4158015611651573d6000803e3d6000fd5b505050506001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e65722063616e6e6f74206265207a65726f20616464726573730000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdb6d05f3295cede580affa301a1eb5297528f3b3f6a56b075887ce6f61c45f2160405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260000154905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397632e6a560960028686866040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060006040518083038186803b15801561195457600080fd5b505af4158015611968573d6000803e3d6000fd5b50505050600190509392505050565b60006012905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f6e6c795553445261746553657474657200000000000000000000000000000081525060200191505060405180910390fd5b611a4d8282612d19565b7fcc375191748c1570d8cc8f49eb8a77b2d411830d2c609dbc4ea2b29dc56f68dc8282604051808381526020018281526020019250505060405180910390a15050565b600260060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c794d696e7465720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7360ca4ec4412a3b319f4bd6366bb836395336b397636eeb9e0f600284846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015611bde57600080fd5b505af4158015611bf2573d6000803e3d6000fd5b505050505050565b60006001905090565b86611c0e3382612460565b611c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b611d183389898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001612e31565b5050505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b6000801b831415611f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d697373696e67206b657920686173680000000000000000000000000000000081525060200191505060405180910390fd5b81600e600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16837f0ada7f316e371f763b084899958ab4f7c3eac45ded64a568087925f39d47bf2360405160405180910390a3505050565b600b8160028110611faa57fe5b016000915090505481565b6000600260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b7360ca4ec4412a3b319f4bd6366bb836395336b39763528aa17e6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156120cb57600080fd5b505af41580156120df573d6000803e3d6000fd5b5050505050565b606060018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561217e5780601f106121535761010080835404028352916020019161217e565b820191906000526020600020905b81548152906001019060200180831161216157829003601f168201915b5050505050905090565b6121eb3333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506001612e31565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b811561236c576123678361302c565b612376565b6123758361312e565b5b8273ffffffffffffffffffffffffffffffffffffffff167ff2bddba4dbca95e342065cf53fe3ea5804c27f6d053eea0ef7c8d913a4081acb83604051808215151515815260200191505060405180910390a2505050565b60006123fd3333858560405180602001604052806000815250604051806020016040528060008152506000612e31565b6001905092915050565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125255750600260030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125b457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b35750600260050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b905092915050565b60006002800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b81600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167f5ff20ba4bf41ff0e6c7e644533c6174e64a3126129f9016279fcdf8b5575efec60405160405180910390a25050565b60028060000154905081565b7360ca4ec4412a3b319f4bd6366bb836395336b39763a77f752c6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156128c457600080fd5b505af41580156128d8573d6000803e3d6000fd5b5050505050565b856128ea3382612460565b61295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b6129f133888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613230565b50505050505050565b612a5a33338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250613230565b505050565b600a60008280519060200120815260200190815260200160002060009054906101000a900460ff1615612afa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f50726f78792070726f6f66206e6f7420756e697175650000000000000000000081525060200191505060405180910390fd5b6001600a60008380519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055506000308787878787604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140184815260200183805190602001908083835b60208310612c105780518252602082019150602081019050602083039250612bed565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200196505050505050506040516020818303038152906040528051906020012090506000612c6c612c66836133e9565b84613441565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f426164207369676e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050505050505050565b6000821415612d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d546f6b656e732063616e6e6f74206265207a65726f000000000000000081525060200191505060405180910390fd5b6000811415612e07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e756d5553442063616e6e6f74206265207a65726f000000000000000000000081525060200191505060405180910390fd5b604051806040016040528083815260200182815250600b906002612e2c9291906136ef565b505050565b7360ca4ec4412a3b319f4bd6366bb836395336b39763b750dc466002898989898989896040518963ffffffff1660e01b8152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019080838360005b83811015612f53578082015181840152602081019050612f38565b50505050905090810190601f168015612f805780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015612fb9578082015181840152602081019050612f9e565b50505050905090810190601f168015612fe65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060006040518083038186803b15801561300b57600080fd5b505af415801561301f573d6000803e3d6000fd5b5050505050505050505050565b7360ca4ec4412a3b319f4bd6366bb836395336b397638c96a55d6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156130b057600080fd5b505af41580156130c4573d6000803e3d6000fd5b505050507fa1d81f39379cbd3fc0b41e0f22ac869eee88b0a7f221bf424e2db0eadb900b7b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976353a7daf46002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156131b257600080fd5b505af41580156131c6573d6000803e3d6000fd5b505050507f8e768d7a5530d1f68e76ded405597f5ab4e340da31733f8704353e0b62b911f881604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976324394467600287878787876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156133145780820151818401526020810190506132f9565b50505050905090810190601f1680156133415780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561337a57808201518184015260208101905061335f565b50505050905090810190601f1680156133a75780820380516001836020036101000a031916815260200191505b509850505050505050505060006040518083038186803b1580156133ca57600080fd5b505af41580156133de573d6000803e3d6000fd5b505050505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251146134ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45434453413a20696e76616c6964207369676e6174757265206c656e6774680081525060200191505060405180910390fd5b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115613553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137556022913960400191505060405180910390fd5b601b8160ff16101561356657601b810190505b601b8160ff161415801561357e5750601c8160ff1614155b156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137776022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613633573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45434453413a20696e76616c6964207369676e6174757265000000000000000081525060200191505060405180910390fd5b8094505050505092915050565b826002810192821561371e579160200282015b8281111561371d578251825591602001919060010190613702565b5b50905061372b919061372f565b5090565b61375191905b8082111561374d576000816000905550600101613735565b5090565b9056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a26469706673582212209fcdd8e88642d57d0a9a6eef9ede9d5da35ca30bda91f29450bb739684c5cf0f64736f6c6343000607003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000441e9db6000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003566f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003564f570000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e45760003560e01c80638da5cb5b1161010f578063b89f378a116100a2578063e90dd9e211610071578063e90dd9e214610cb9578063fad8b32a14610cd7578063fc673c4f14610d1b578063fe9d930314610e13576101e4565b8063b89f378a14610b37578063d95b637114610b81578063dd62ed3e14610bfd578063e47fca4e14610c75576101e4565b80639bd9bbc6116100de5780639bd9bbc614610970578063a04b1e9014610a13578063a9059cbb14610a63578063a9f83f8214610ac9576101e4565b80638da5cb5b146108195780638dfdd8a114610863578063959b8c3f146108a957806395d89b41146108ed576101e4565b8063313ce5671161018757806362ad1b831161015657806362ad1b83146106195780636eac7739146107315780636f54ed751461077f57806370a08231146107c1576101e4565b8063313ce567146105515780633c8585771461057557806340c10f19146105ad578063556f0dc7146105fb576101e4565b8063095ea7b3116101c3578063095ea7b31461040357806313af40351461046957806318160ddd146104ad57806323b872dd146104cb576101e4565b806223de29146101e957806306e485381461032157806306fdde0314610380575b600080fd5b61031f600480360360c08110156101ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460018302840111640100000000831117156102ba57600080fd5b9091929391929390803590602001906401000000008111156102db57600080fd5b8201836020820111156102ed57600080fd5b8035906020019184600183028401116401000000008311171561030f57600080fd5b9091929391929390505050610e96565b005b61032961147c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561036c578082015181840152602081019050610351565b505050509050019250505060405180910390f35b61038861150d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c85780820151818401526020810190506103ad565b50505050905090810190601f1680156103f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61044f6004803603604081101561041957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115af565b604051808215151515815260200191505060405180910390f35b6104ab6004803603602081101561047f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b005b6104b5611885565b6040518082815260200191505060405180910390f35b610537600480360360608110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611892565b604051808215151515815260200191505060405180910390f35b610559611977565b604051808260ff1660ff16815260200191505060405180910390f35b6105ab6004803603604081101561058b57600080fd5b810190808035906020019092919080359060200190929190505050611980565b005b6105f9600480360360408110156105c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a90565b005b610603611bfa565b6040518082815260200191505060405180910390f35b61072f600480360360a081101561062f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b9091929391929390803590602001906401000000008111156106eb57600080fd5b8201836020820111156106fd57600080fd5b8035906020019184600183028401116401000000008311171561071f57600080fd5b9091929391929390505050611c03565b005b61077d6004803603604081101561074757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d22565b005b6107ab6004803603602081101561079557600080fd5b8101908080359060200190929190505050611f9d565b6040518082815260200191505060405180910390f35b610803600480360360208110156107d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb5565b6040518082815260200191505060405180910390f35b610821612001565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61088f6004803603602081101561087957600080fd5b8101908080359060200190929190505050612027565b604051808215151515815260200191505060405180910390f35b6108eb600480360360208110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612047565b005b6108f56120e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561093557808201518184015260208101905061091a565b50505050905090810190601f1680156109625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a116004803603606081101561098657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b9091929391929390505050612188565b005b610a6160048036036040811015610a2957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506121f1565b005b610aaf60048036036040811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123cd565b604051808215151515815260200191505060405180910390f35b610af560048036036020811015610adf57600080fd5b8101908080359060200190929190505050612407565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3f61243a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610be360048036036040811015610b9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612460565b604051808215151515815260200191505060405180910390f35b610c5f60048036036040811015610c1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125bc565b6040518082815260200191505060405180910390f35b610cb760048036036020811015610c8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b005b610cc1612834565b6040518082815260200191505060405180910390f35b610d1960048036036020811015610ced57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612840565b005b610e1160048036036080811015610d3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d7857600080fd5b820183602082011115610d8a57600080fd5b80359060200191846001830284011164010000000083111715610dac57600080fd5b909192939192939080359060200190640100000000811115610dcd57600080fd5b820183602082011115610ddf57600080fd5b80359060200191846001830284011164010000000083111715610e0157600080fd5b90919293919293905050506128df565b005b610e9460048036036040811015610e2957600080fd5b810190808035906020019092919080359060200190640100000000811115610e5057600080fd5b820183602082011115610e6257600080fd5b80359060200191846001830284011164010000000083111715610e8457600080fd5b90919293919293905050506129fa565b005b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6f6e6c794f776e546f6b656e730000000000000000000000000000000000000081525060200191505060405180910390fd5b6000806000606060006060898960c0811015610f5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fb957600080fd5b820183602082011115610fcb57600080fd5b80359060200191846001830284011164010000000083111715610fed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561105a57600080fd5b82018360208201111561106c57600080fd5b8035906020019184600183028401116401000000008311171561108e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050509550955095509550955095506110f5868686868686612a5f565b60008b146111b1573073ffffffffffffffffffffffffffffffffffffffff16639bd9bbc6878d6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505b3073ffffffffffffffffffffffffffffffffffffffff166362ad1b83878787878f8f6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200180602001838103835286818151815260200191508051906020019080838360005b83811015611290578082015181840152602081019050611275565b50505050905090810190601f1680156112bd5780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f97823a4edabb1c2f3fb4ee63160c204ef488f4d2282a0bdd4290cdde86c708ec86868686604051808581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156113c85780820151818401526020810190506113ad565b50505050905090810190601f1680156113f55780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561142e578082015181840152602081019050611413565b50505050905090810190601f16801561145b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a35050505050505050505050505050565b6060600260040180548060200260200160405190810160405280929190818152602001828054801561150357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116114b9575b5050505050905090565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115a55780601f1061157a576101008083540402835291602001916115a5565b820191906000526020600020905b81548152906001019060200180831161158857829003601f168201915b5050505050905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397638bde1d78600285856040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561163d57600080fd5b505af4158015611651573d6000803e3d6000fd5b505050506001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e65722063616e6e6f74206265207a65726f20616464726573730000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdb6d05f3295cede580affa301a1eb5297528f3b3f6a56b075887ce6f61c45f2160405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260000154905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397632e6a560960028686866040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060006040518083038186803b15801561195457600080fd5b505af4158015611968573d6000803e3d6000fd5b50505050600190509392505050565b60006012905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f6e6c795553445261746553657474657200000000000000000000000000000081525060200191505060405180910390fd5b611a4d8282612d19565b7fcc375191748c1570d8cc8f49eb8a77b2d411830d2c609dbc4ea2b29dc56f68dc8282604051808381526020018281526020019250505060405180910390a15050565b600260060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c794d696e7465720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7360ca4ec4412a3b319f4bd6366bb836395336b397636eeb9e0f600284846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015611bde57600080fd5b505af4158015611bf2573d6000803e3d6000fd5b505050505050565b60006001905090565b86611c0e3382612460565b611c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b611d183389898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001612e31565b5050505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b6000801b831415611f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d697373696e67206b657920686173680000000000000000000000000000000081525060200191505060405180910390fd5b81600e600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16837f0ada7f316e371f763b084899958ab4f7c3eac45ded64a568087925f39d47bf2360405160405180910390a3505050565b600b8160028110611faa57fe5b016000915090505481565b6000600260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b7360ca4ec4412a3b319f4bd6366bb836395336b39763528aa17e6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156120cb57600080fd5b505af41580156120df573d6000803e3d6000fd5b5050505050565b606060018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561217e5780601f106121535761010080835404028352916020019161217e565b820191906000526020600020905b81548152906001019060200180831161216157829003601f168201915b5050505050905090565b6121eb3333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506001612e31565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b811561236c576123678361302c565b612376565b6123758361312e565b5b8273ffffffffffffffffffffffffffffffffffffffff167ff2bddba4dbca95e342065cf53fe3ea5804c27f6d053eea0ef7c8d913a4081acb83604051808215151515815260200191505060405180910390a2505050565b60006123fd3333858560405180602001604052806000815250604051806020016040528060008152506000612e31565b6001905092915050565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125255750600260030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125b457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b35750600260050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b905092915050565b60006002800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b81600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167f5ff20ba4bf41ff0e6c7e644533c6174e64a3126129f9016279fcdf8b5575efec60405160405180910390a25050565b60028060000154905081565b7360ca4ec4412a3b319f4bd6366bb836395336b39763a77f752c6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156128c457600080fd5b505af41580156128d8573d6000803e3d6000fd5b5050505050565b856128ea3382612460565b61295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b6129f133888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613230565b50505050505050565b612a5a33338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250613230565b505050565b600a60008280519060200120815260200190815260200160002060009054906101000a900460ff1615612afa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f50726f78792070726f6f66206e6f7420756e697175650000000000000000000081525060200191505060405180910390fd5b6001600a60008380519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055506000308787878787604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140184815260200183805190602001908083835b60208310612c105780518252602082019150602081019050602083039250612bed565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200196505050505050506040516020818303038152906040528051906020012090506000612c6c612c66836133e9565b84613441565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f426164207369676e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050505050505050565b6000821415612d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d546f6b656e732063616e6e6f74206265207a65726f000000000000000081525060200191505060405180910390fd5b6000811415612e07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e756d5553442063616e6e6f74206265207a65726f000000000000000000000081525060200191505060405180910390fd5b604051806040016040528083815260200182815250600b906002612e2c9291906136ef565b505050565b7360ca4ec4412a3b319f4bd6366bb836395336b39763b750dc466002898989898989896040518963ffffffff1660e01b8152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019080838360005b83811015612f53578082015181840152602081019050612f38565b50505050905090810190601f168015612f805780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015612fb9578082015181840152602081019050612f9e565b50505050905090810190601f168015612fe65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060006040518083038186803b15801561300b57600080fd5b505af415801561301f573d6000803e3d6000fd5b5050505050505050505050565b7360ca4ec4412a3b319f4bd6366bb836395336b397638c96a55d6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156130b057600080fd5b505af41580156130c4573d6000803e3d6000fd5b505050507fa1d81f39379cbd3fc0b41e0f22ac869eee88b0a7f221bf424e2db0eadb900b7b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976353a7daf46002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156131b257600080fd5b505af41580156131c6573d6000803e3d6000fd5b505050507f8e768d7a5530d1f68e76ded405597f5ab4e340da31733f8704353e0b62b911f881604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976324394467600287878787876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156133145780820151818401526020810190506132f9565b50505050905090810190601f1680156133415780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561337a57808201518184015260208101905061335f565b50505050905090810190601f1680156133a75780820380516001836020036101000a031916815260200191505b509850505050505050505060006040518083038186803b1580156133ca57600080fd5b505af41580156133de573d6000803e3d6000fd5b505050505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251146134ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45434453413a20696e76616c6964207369676e6174757265206c656e6774680081525060200191505060405180910390fd5b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115613553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137556022913960400191505060405180910390fd5b601b8160ff16101561356657601b810190505b601b8160ff161415801561357e5750601c8160ff1614155b156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137776022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613633573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45434453413a20696e76616c6964207369676e6174757265000000000000000081525060200191505060405180910390fd5b8094505050505092915050565b826002810192821561371e579160200282015b8281111561371d578251825591602001919060010190613702565b5b50905061372b919061372f565b5090565b61375191905b8082111561374d576000816000905550600101613735565b5090565b9056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a26469706673582212209fcdd8e88642d57d0a9a6eef9ede9d5da35ca30bda91f29450bb739684c5cf0f64736f6c63430006070033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000441e9db6000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003566f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003564f570000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Vow
Arg [1] : _symbol (string): VOW
Arg [2] : _initialSupply (uint256): 1142857142
Arg [3] : _initialUSDRate (uint256[2]): 5,1

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000000000000000000000000000000000000441e9db6
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 566f770000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 564f570000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

32465:4025:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32465:4025:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;34063:656:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34063:656:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;34063:656:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34063:656:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34063:656:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;34063:656:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34063:656:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34063:656:0;;;;;;;;;;;;:::i;:::-;;28884:148;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;28884:148:0;;;;;;;;;;;;;;;;;27296:139;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;27296:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28488:190;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28488:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31927:211;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31927:211:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;30281:167;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28270:212;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28270:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27594:130;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35276:191;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35276:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30146:129;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30146:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27730:144;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29495:255;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29495:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29495:255:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29495:255:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29495:255:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29495:255:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29495:255:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29495:255:0;;;;;;;;;;;;:::i;:::-;;34725:329;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34725:329:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32573:25;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32573:25:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27880:178;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27880:178:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31704:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32524:44;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32524:44:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29038:137;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29038:137:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;27441:147;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;27441:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29318:171;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29318:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29318:171:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29318:171:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29318:171:0;;;;;;;;;;;;:::i;:::-;;35473:281;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35473:281:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28064:200;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28064:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32636:59;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32636:59:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32603:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30454:327;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30454:327:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28684:194;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28684:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35060:210;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35060:210:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25882:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29181:131;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29181:131:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;29909:231;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29909:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29909:231:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29909:231:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29909:231:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29909:231:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29909:231:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29909:231:0;;;;;;;;;;;;:::i;:::-;;29756:147;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29756:147:0;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29756:147:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29756:147:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29756:147:0;;;;;;;;;;;;:::i;:::-;;34063:656;33894:4;33872:27;;:10;:27;;;33864:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34292:12:::1;34306:10:::0;34318:14:::1;34334:17;34353:13;34368:18;34410:5;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49::::0;42:12:::1;8:2;34399:69:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61::::0;54:12:::1;8:2;34399:69:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128::::0;121:12:::1;8:2;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49::::0;42:12:::1;8:2;34399:69:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61::::0;54:12:::1;8:2;34399:69:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128::::0;121:12:::1;8:2;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34399:69:0;;;;;;;;;;;;;;34291:177;;;;;;;;;;;;34475:51;34489:4;34495:2;34499:6;34507:4;34513:5;34520;34475:13;:51::i;:::-;34550:1;34539:7;:12;34535:53;;34560:4;:9;;;34570:4;34576:7;34560:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34560:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34560:28:0;;;;34535:53;34597:4;:17;;;34615:4;34621:2;34625:6;34633:4;34639:5;;34597:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;34597:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34597:48:0;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34597:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34597:48:0;;;;34682:2;34659:54;;34676:4;34659:54;;;34686:6;34694:4;34700:5;34707;34659:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;34659:54: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;34659:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33924:1;;;;;;34063:656:::0;;;;;;;;:::o;28884:148::-;28964:16;28999:10;:27;;28992:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28884:148;:::o;27296:139::-;27381:19;27420:9;27412:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27296:139;:::o;28488:190::-;28581:13;28606:6;:14;28621:10;28633:8;28643:6;28606:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28606:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28606:44:0;;;;28668:4;28657:15;;28488:190;;;;:::o;31927:211::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32026:1:::1;32008:20;;:6;:20;;;;32000:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32104:6;32073:38;;32097:5;;;;;;;;;;;32073:38;;;;;;;;;;;;32126:6;32118:5;;:14;;;;;;;;;;;;;;;;;;31927:211:::0;:::o;30281:167::-;30373:20;30420:10;:22;;;30405:37;;30281:167;:::o;28270:212::-;28378:13;28403:6;:19;28423:10;28435:5;28442:3;28447:6;28403:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28403:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28403:51:0;;;;28472:4;28461:15;;28270:212;;;;;:::o;27594:130::-;27666:15;25825:2;27693:25;;27594:130;:::o;35276:191::-;33779:13;;;;;;;;;;;33765:27;;:10;:27;;;33757:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35380:33:::1;35393:10;35405:7;35380:12;:33::i;:::-;35427:34;35441:10;35453:7;35427:34;;;;;;;;;;;;;;;;;;;;;;;;35276:191:::0;;:::o;30146:129::-;27231:10;:18;;:30;27250:10;27231:30;;;;;;;;;;;;;;;;;;;;;;;;;27223:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30230:6:::1;:13;30244:10;30256:3;30261:7;30230:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30230:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30230:39:0;;;;30146:129:::0;;:::o;27730:144::-;27805:20;25876:1;27837:31;;27730:144;:::o;29495:255::-;29660:5;27122:34;27136:10;27148:7;27122:13;:34::i;:::-;27114:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29677:67:::1;29684:10;29696:5;29703:3;29708:7;29717:5;;29677:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29677:67:0;;;;;;29724:13;;29677:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29677:67:0;;;;;;29739:4;29677:6;:67::i;:::-;29495:255:::0;;;;;;;;:::o;34725:329::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34854:16:::1;34014:1;33994:22;;:8;:22;;;;33986:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34910:1:::2;34902:10:::0;::::2;34890:8;:22;;34882:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;34969:16;34940;:26;34957:8;34940:26;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;35031:16;34999:49;;35021:8;34999:49;;;;;;;;;;31914:1:::1;34725:329:::0;;:::o;32573:25::-;;;;;;;;;;;;;;;;;;:::o;27880:178::-;27985:16;28024:10;:19;;:28;28044:7;28024:28;;;;;;;;;;;;;;;;28013:39;;27880:178;;;:::o;31704:33::-;;;;;;;;;;;;;:::o;32524:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;29038:137::-;29122:6;:24;29147:10;29159:9;29122:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29122:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29122:47:0;;;;29038:137;:::o;27441:147::-;27528:21;27571:11;27561:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27441:147;:::o;29318:171::-;29422:61;29429:10;29441;29453:3;29458:7;29467:5;;29422:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29422:61:0;;;;;;;;;;;;;;;;;;29478:4;29422:6;:61::i;:::-;29318:171;;;;:::o;35473:281::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35583:9:::1;34014:1;33994:22;;:8;:22;;;;33986:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35608:8:::2;35604:89;;;35625:26;35641:9;35625:15;:26::i;:::-;35604:89;;;35670:23;35683:9;35670:12;:23::i;:::-;35604:89;35728:9;35707:41;;;35739:8;35707:41;;;;;;;;;;;;;;;;;;;;;;31914:1:::1;35473:281:::0;;:::o;28064:200::-;28153:13;28178:58;28185:10;28197;28209:3;28214:6;28178:58;;;;;;;;;;;;;;;;;;;;;;;;28230:5;28178:6;:58::i;:::-;28254:4;28243:15;;28064:200;;;;:::o;32636:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;32603:28::-;;;;;;;;;;;;;:::o;30454:327::-;30563:19;30625:7;30612:20;;:9;:20;;;:74;;;;30636:10;:30;;:41;30667:9;30636:41;;;;;;;;;;;;;;;:50;30678:7;30636:50;;;;;;;;;;;;;;;;;;;;;;;;;30612:74;:162;;;;30720:4;30699:26;;:9;:26;;;:75;;;;;30730:10;:35;;:44;30766:7;30730:44;;;;;;;;;;;;;;;;;;;;;;;;;30729:45;30699:75;30612:162;30594:181;;30454:327;;;;:::o;28684:194::-;28790:18;28833:10;:20;;:29;28854:7;28833:29;;;;;;;;;;;;;;;:39;28863:8;28833:39;;;;;;;;;;;;;;;;28820:52;;28684:194;;;;:::o;35060:210::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35159:14:::1;34014:1;33994:22;;:8;:22;;;;33986:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35201:14:::2;35185:13;;:30;;;;;;;;;;;;;;;;;;35249:14;35229:35;;;;;;;;;;;;31914:1:::1;35060:210:::0;:::o;25882:28::-;;;;;;;;;:::o;29181:131::-;29262:6;:21;29284:10;29296:9;29262:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29262:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29262:44:0;;;;29181:131;:::o;29909:231::-;30061:5;27122:34;27136:10;27148:7;27122:13;:34::i;:::-;27114:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30078:56:::1;30085:10;30097:5;30104:7;30113:5;;30078:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30078:56:0;;;;;;30120:13;;30078:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30078:56:0;;;;;;:6;:56::i;:::-;29909:231:::0;;;;;;;:::o;29756:147::-;29847:50;29854:10;29866;29878:7;29887:5;;29847:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29847:50:0;;;;;;;;;;;;;;;;;;:6;:50::i;:::-;29756:147;;;:::o;35997:490::-;36154:11;:30;36176:6;36166:17;;;;;;36154:30;;;;;;;;;;;;;;;;;;;;;36153:31;36145:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36251:4;36218:11;:30;36240:6;36230:17;;;;;;36218:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36262:12;36312:4;36319:5;36326:3;36331:7;36340:5;36347:6;36287:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;36287:67:0;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;36287:67:0;;;36277:78;;;;;;36262:93;;36362:14;36379:57;36393:34;36422:4;36393:28;:34::i;:::-;36429:6;36379:13;:57::i;:::-;36362:74;;36461:5;36451:15;;:6;:15;;;36443:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35997:490;;;;;;;;:::o;35760:231::-;35864:1;35850:10;:15;;35842:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35920:1;35909:7;:12;;35901:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35954:31;;;;;;;;35965:10;35954:31;;;;35977:7;35954:31;;;:7;:31;;;;;;;:::i;:::-;;35760:231;;:::o;30787:294::-;30980:6;:13;30994:10;31006:9;31017:5;31024:3;31029:7;31038:5;31045:13;31060:14;30980:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;30980:95: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;30980:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30980:95:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30980:95:0;;;;30787:294;;;;;;;:::o;31312:154::-;31378:6;:22;31401:10;31413:7;31378:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31378:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31378:43:0;;;;31435:25;31452:7;31435:25;;;;;;;;;;;;;;;;;;;;;;31312:154;:::o;31472:145::-;31535:6;:19;31555:10;31567:7;31535:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31535:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31535:40:0;;;;31589:22;31603:7;31589:22;;;;;;;;;;;;;;;;;;;;;;31472:145;:::o;31087:219::-;31226:6;:13;31240:10;31252:9;31263:5;31270:7;31279:5;31286:13;31226:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;31226:74: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;31226:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31226:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31226:74:0;;;;31087:219;;;;;:::o;3737:269::-;3806:7;3992:4;3939:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3939:58:0;;;3929:69;;;;;;3922:76;;3737:269;;;:::o;1321:2142::-;1399:7;1482:2;1462:9;:16;:22;1458:96;;1501:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1458:96;1623:9;1643;1663:7;1915:4;1904:9;1900:20;1894:27;1889:32;;1961:4;1950:9;1946:20;1940:27;1935:32;;2015:4;2004:9;2000:20;1994:27;1991:1;1986:36;1981:41;;2945:66;2940:1;2932:10;;:79;2928:156;;;3028:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2928:156;3104:2;3100:1;:6;;;3096:19;;;3113:2;3108:7;;;;3096:19;3137:2;3132:1;:7;;;;:18;;;;;3148:2;3143:1;:7;;;;3132:18;3128:95;;;3167:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3128:95;3320:14;3337:24;3347:4;3353:1;3356;3359;3337:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3337:24:0;;;;;;;;3320:41;;3398:1;3380:20;;:6;:20;;;;3372:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3449:6;3442:13;;;;;;1321:2142;;;;:::o;32465:4025::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://9fcdd8e88642d57d0a9a6eef9ede9d5da35ca30bda91f29450bb739684c5cf0f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

The Vow ecosystem incentivizes a global shift from centralized issuance of currency, to decentralized issuance of currency.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.