ETH Price: $2,820.09 (-10.53%)
 

Overview

Max Total Supply

314,192.792982587851441462 RSV

Holders

220 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 RSV

Value
$0.00
0x5876fAd446bdc6b7b126446105B329403f6E17f7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Reserve token contract has migrated to 0x196f4727526eA7FB1e17b2071B3d8eAA38486988.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Reserve

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, BSD-2-Clause license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-10-06
*/

pragma solidity 0.5.7;
// produced by the Solididy File Flattener (c) David Appleton 2018
// contact : [email protected]
// released under Apache 2.0 licence
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

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

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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.
     *
     * NOTE: This is a feature of the next version of OpenZeppelin Contracts.
     * @dev Get it via `npm install @openzeppelin/contracts@next`.
     */
    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.
     * NOTE: This is a feature of the next version of OpenZeppelin Contracts.
     * @dev Get it via `npm install @openzeppelin/contracts@next`.
     */
    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.
     *
     * NOTE: This is a feature of the next version of OpenZeppelin Contracts.
     * @dev Get it via `npm install @openzeppelin/contracts@next`.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _nominatedOwner;

    event NewOwnerNominated(address indexed previousOwner, address indexed nominee);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Returns the address of the current nominated owner.
     */
    function nominatedOwner() external view returns (address) {
        return _nominatedOwner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _onlyOwner();
        _;
    }

    function _onlyOwner() internal view {
        require(_msgSender() == _owner, "caller is not owner");
    }

    /**
     * @dev Nominates a new owner `newOwner`.
     * Requires a follow-up `acceptOwnership`.
     * Can only be called by the current owner.
     */
    function nominateNewOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "new owner is 0 address");
        emit NewOwnerNominated(_owner, newOwner);
        _nominatedOwner = newOwner;
    }

    /**
     * @dev Accepts ownership of the contract.
     */
    function acceptOwnership() external {
        require(_nominatedOwner == _msgSender(), "unauthorized");
        emit OwnershipTransferred(_owner, _nominatedOwner);
        _owner = _nominatedOwner;
    }

    /** Set `_owner` to the 0 address.
     * Only do this to deliberately lock in the current permissions.
     *
     * THIS CANNOT BE UNDONE! Call this only if you know what you're doing and why you're doing it!
     */
    function renounceOwnership(string calldata declaration) external onlyOwner {
        string memory requiredDeclaration = "I hereby renounce ownership of this contract forever.";
        require(
            keccak256(abi.encodePacked(declaration)) ==
            keccak256(abi.encodePacked(requiredDeclaration)),
            "declaration incorrect");

        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

contract ReserveEternalStorage is Ownable {

    using SafeMath for uint256;


    // ===== auth =====

    address public reserveAddress;

    event ReserveAddressTransferred(
        address indexed oldReserveAddress,
        address indexed newReserveAddress
    );

    /// On construction, set auth fields.
    constructor() public {
        reserveAddress = _msgSender();
        emit ReserveAddressTransferred(address(0), reserveAddress);
    }

    /// Only run modified function if sent by `reserveAddress`.
    modifier onlyReserveAddress() {
        require(_msgSender() == reserveAddress, "onlyReserveAddress");
        _;
    }

    /// Set `reserveAddress`.
    function updateReserveAddress(address newReserveAddress) external {
        require(newReserveAddress != address(0), "zero address");
        require(_msgSender() == reserveAddress || _msgSender() == owner(), "not authorized");
        emit ReserveAddressTransferred(reserveAddress, newReserveAddress);
        reserveAddress = newReserveAddress;
    }



    // ===== balance =====

    mapping(address => uint256) public balance;

    /// Add `value` to `balance[key]`, unless this causes integer overflow.
    ///
    /// @dev This is a slight divergence from the strict Eternal Storage pattern, but it reduces
    /// the gas for the by-far most common token usage, it's a *very simple* divergence, and
    /// `setBalance` is available anyway.
    function addBalance(address key, uint256 value) external onlyReserveAddress {
        balance[key] = balance[key].add(value);
    }

    /// Subtract `value` from `balance[key]`, unless this causes integer underflow.
    function subBalance(address key, uint256 value) external onlyReserveAddress {
        balance[key] = balance[key].sub(value);
    }

    /// Set `balance[key]` to `value`.
    function setBalance(address key, uint256 value) external onlyReserveAddress {
        balance[key] = value;
    }



    // ===== allowed =====

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

    /// Set `to`'s allowance of `from`'s tokens to `value`.
    function setAllowed(address from, address to, uint256 value) external onlyReserveAddress {
        allowed[from][to] = value;
    }
}

interface ITXFee {
     function calculateFee(address from, address to, uint256 amount) external returns (uint256);
}

contract Reserve is IERC20, Ownable {
    using SafeMath for uint256;


    // ==== State ====


    // Non-constant-sized data
    ReserveEternalStorage internal trustedData;

    // TX Fee helper contract
    ITXFee public trustedTxFee;

    // Basic token data
    uint256 public totalSupply;
    uint256 public maxSupply;

    // Paused data
    bool public paused;

    // Auth roles
    address public minter;
    address public pauser;
    address public feeRecipient;


    // ==== Events, Constants, and Constructor ====


    // Auth role change events
    event MinterChanged(address indexed newMinter);
    event PauserChanged(address indexed newPauser);
    event FeeRecipientChanged(address indexed newFeeRecipient);
    event MaxSupplyChanged(uint256 indexed newMaxSupply);
    event EternalStorageTransferred(address indexed newReserveAddress);
    event TxFeeHelperChanged(address indexed newTxFeeHelper);

    // Pause events
    event Paused(address indexed account);
    event Unpaused(address indexed account);

    // Basic information as constants
    string public constant name = "Reserve";
    string public constant symbol = "RSV";
    uint8 public constant decimals = 18;

    /// Initialize critical fields.
    constructor() public {
        pauser = msg.sender;
        feeRecipient = msg.sender;
        // minter defaults to the zero address.

        maxSupply = 2 ** 256 - 1;
        paused = true;

        trustedTxFee = ITXFee(address(0));
        trustedData = new ReserveEternalStorage();
        trustedData.nominateNewOwner(msg.sender);
    }

    /// Accessor for eternal storage contract address.
    function getEternalStorageAddress() external view returns(address) {
        return address(trustedData);
    }


    // ==== Admin functions ====


    /// Modifies a function to only run if sent by `role`.
    modifier only(address role) {
        require(msg.sender == role, "unauthorized: not role holder");
        _;
    }

    /// Modifies a function to only run if sent by `role` or the contract's `owner`.
    modifier onlyOwnerOr(address role) {
        require(msg.sender == owner() || msg.sender == role, "unauthorized: not owner or role");
        _;
    }

    /// Change who holds the `minter` role.
    function changeMinter(address newMinter) external onlyOwnerOr(minter) {
        minter = newMinter;
        emit MinterChanged(newMinter);
    }

    /// Change who holds the `pauser` role.
    function changePauser(address newPauser) external onlyOwnerOr(pauser) {
        pauser = newPauser;
        emit PauserChanged(newPauser);
    }

    function changeFeeRecipient(address newFeeRecipient) external onlyOwnerOr(feeRecipient) {
        feeRecipient = newFeeRecipient;
        emit FeeRecipientChanged(newFeeRecipient);
    }

    /// Make a different address the EternalStorage contract's reserveAddress.
    /// This will break this contract, so only do it if you're
    /// abandoning this contract, e.g., for an upgrade.
    function transferEternalStorage(address newReserveAddress) external onlyOwner isPaused {
        require(newReserveAddress != address(0), "zero address");
        emit EternalStorageTransferred(newReserveAddress);
        trustedData.updateReserveAddress(newReserveAddress);
    }

    /// Change the contract that helps with transaction fee calculation.
    function changeTxFeeHelper(address newTrustedTxFee) external onlyOwner {
        trustedTxFee = ITXFee(newTrustedTxFee);
        emit TxFeeHelperChanged(newTrustedTxFee);
    }

    /// Change the maximum supply allowed.
    function changeMaxSupply(uint256 newMaxSupply) external onlyOwner {
        maxSupply = newMaxSupply;
        emit MaxSupplyChanged(newMaxSupply);
    }

    /// Pause the contract.
    function pause() external only(pauser) {
        paused = true;
        emit Paused(pauser);
    }

    /// Unpause the contract.
    function unpause() external only(pauser) {
        paused = false;
        emit Unpaused(pauser);
    }

    /// Modifies a function to run only when the contract is paused.
    modifier isPaused() {
        require(paused, "contract is not paused");
        _;
    }

    /// Modifies a function to run only when the contract is not paused.
    modifier notPaused() {
        require(!paused, "contract is paused");
        _;
    }


    // ==== Token transfers, allowances, minting, and burning ====


    /// @return how many attoRSV are held by `holder`.
    function balanceOf(address holder) external view returns (uint256) {
        return trustedData.balance(holder);
    }

    /// @return how many attoRSV `holder` has allowed `spender` to control.
    function allowance(address holder, address spender) external view returns (uint256) {
        return trustedData.allowed(holder, spender);
    }

    /// Transfer `value` attoRSV from `msg.sender` to `to`.
    function transfer(address to, uint256 value)
        external
        notPaused
        returns (bool)
    {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * Approve `spender` to spend `value` attotokens on behalf of `msg.sender`.
     *
     * Beware that changing a nonzero allowance with this method brings the risk that
     * someone may use both the old and the new allowance by unfortunate transaction ordering. One
     * way to mitigate this risk is to first reduce the spender's allowance
     * to 0, and then set the desired value afterwards, per
     * [this ERC-20 issue](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729).
     *
     * A simpler workaround is to use `increaseAllowance` or `decreaseAllowance`, below.
     *
     * @param spender address The address which will spend the funds.
     * @param value uint256 How many attotokens to allow `spender` to spend.
     */
    function approve(address spender, uint256 value)
        external
        notPaused
        returns (bool)
    {
        _approve(msg.sender, spender, value);
        return true;
    }

    /// Transfer approved tokens from one address to another.
    /// @param from address The address to send tokens from.
    /// @param to address The address to send tokens to.
    /// @param value uint256 The number of attotokens to send.
    function transferFrom(address from, address to, uint256 value)
        external
        notPaused
        returns (bool)
    {
        _transfer(from, to, value);
        _approve(from, msg.sender, trustedData.allowed(from, msg.sender).sub(value));
        return true;
    }

    /// Increase `spender`'s allowance of the sender's tokens.
    /// @dev From MonolithDAO Token.sol
    /// @param spender The address which will spend the funds.
    /// @param addedValue How many attotokens to increase the allowance by.
    function increaseAllowance(address spender, uint256 addedValue)
        external
        notPaused
        returns (bool)
    {
        _approve(msg.sender, spender, trustedData.allowed(msg.sender, spender).add(addedValue));
        return true;
    }

    /// Decrease `spender`'s allowance of the sender's tokens.
    /// @dev From MonolithDAO Token.sol
    /// @param spender The address which will spend the funds.
    /// @param subtractedValue How many attotokens to decrease the allowance by.
    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        notPaused
        returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            trustedData.allowed(msg.sender, spender).sub(subtractedValue)
        );
        return true;
    }

    /// Mint `value` new attotokens to `account`.
    function mint(address account, uint256 value)
        external
        notPaused
        only(minter)
    {
        require(account != address(0), "can't mint to address zero");

        totalSupply = totalSupply.add(value);
        require(totalSupply < maxSupply, "max supply exceeded");
        trustedData.addBalance(account, value);
        emit Transfer(address(0), account, value);
    }

    /// Burn `value` attotokens from `account`, if sender has that much allowance from `account`.
    function burnFrom(address account, uint256 value)
        external
        notPaused
        only(minter)
    {
        _burn(account, value);
        _approve(account, msg.sender, trustedData.allowed(account, msg.sender).sub(value));
    }

    /// @dev Transfer of `value` attotokens from `from` to `to`.
    /// Internal; doesn't check permissions.
    function _transfer(address from, address to, uint256 value) internal {
        require(to != address(0), "can't transfer to address zero");
        trustedData.subBalance(from, value);
        uint256 fee = 0;

        if (address(trustedTxFee) != address(0)) {
            fee = trustedTxFee.calculateFee(from, to, value);
            require(fee <= value, "transaction fee out of bounds");

            trustedData.addBalance(feeRecipient, fee);
            emit Transfer(from, feeRecipient, fee);
        }

        trustedData.addBalance(to, value.sub(fee));
        emit Transfer(from, to, value.sub(fee));
    }

    /// @dev Burn `value` attotokens from `account`.
    /// Internal; doesn't check permissions.
    function _burn(address account, uint256 value) internal {
        require(account != address(0), "can't burn from address zero");

        totalSupply = totalSupply.sub(value);
        trustedData.subBalance(account, value);
        emit Transfer(account, address(0), value);
    }

    /// @dev Set `spender`'s allowance on `holder`'s tokens to `value` attotokens.
    /// Internal; doesn't check permissions.
    function _approve(address holder, address spender, uint256 value) internal {
        require(spender != address(0), "spender cannot be address zero");
        require(holder != address(0), "holder cannot be address zero");

        trustedData.setAllowed(holder, spender, value);
        emit Approval(holder, spender, value);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newFeeRecipient","type":"address"}],"name":"changeFeeRecipient","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinter","type":"address"}],"name":"changeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newPauser","type":"address"}],"name":"changePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMaxSupply","type":"uint256"}],"name":"changeMaxSupply","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"declaration","type":"string"}],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReserveAddress","type":"address"}],"name":"transferEternalStorage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pauser","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newTrustedTxFee","type":"address"}],"name":"changeTxFeeHelper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"trustedTxFee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getEternalStorageAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newMinter","type":"address"}],"name":"MinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newFeeRecipient","type":"address"}],"name":"FeeRecipientChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newMaxSupply","type":"uint256"}],"name":"MaxSupplyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newReserveAddress","type":"address"}],"name":"EternalStorageTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newTxFeeHelper","type":"address"}],"name":"TxFeeHelperChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"nominee","type":"address"}],"name":"NewOwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040523480156200001157600080fd5b506000620000246200017060201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060078054336001600160a01b031991821681179092556008805482169092179091556000196005556006805460ff19166001179055600380549091169055604051620000ba9062000174565b604051809103906000f080158015620000d7573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283161790819055604080517f1627540c00000000000000000000000000000000000000000000000000000000815233600482015290519190921691631627540c91602480830192600092919082900301818387803b1580156200015157600080fd5b505af115801562000166573d6000803e3d6000fd5b5050505062000182565b3390565b6110be8062002b0d83390190565b61297b80620001926000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806353a47bb71161012a57806396cd5536116100bd578063ac5b54c21161008c578063d5abeb0111610071578063d5abeb01146106e7578063dd62ed3e146106ef578063fb5689661461072a5761020b565b8063ac5b54c2146106ac578063bdd1b96e146106df5761020b565b806396cd5536146105ff5780639fd0506d14610632578063a457c2d71461063a578063a9059cbb146106735761020b565b806379cc6790116100f957806379cc6790146105ae5780638456cb59146105e75780638da5cb5b146105ef57806395d89b41146105f75761020b565b806353a47bb7146105635780635c975abb1461056b57806370a082311461057357806379ba5097146105a65761020b565b80632cd271e7116101a2578063404c7cdd11610171578063404c7cdd1461049557806340c10f19146104b257806346904840146104eb5780634fdb7f44146104f35761020b565b80632cd271e714610403578063313ce5671461043657806339509351146104545780633f4ba83a1461048d5761020b565b806318160ddd116101de57806318160ddd14610340578063236040711461035a57806323b872dd1461038d5780632c4d4d18146103d05761020b565b806306fdde0314610210578063075461721461028d578063095ea7b3146102be5780631627540c1461030b575b600080fd5b610218610732565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025257818101518382015260200161023a565b50505050905090810190601f16801561027f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029561076b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102f7600480360360408110156102d457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561078c565b604080519115158252519081900360200190f35b61033e6004803603602081101561032157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610815565b005b61034861092c565b60408051918252519081900360200190f35b61033e6004803603602081101561037057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610932565b6102f7600480360360608110156103a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a7c565b61033e600480360360208110156103e657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bca565b61033e6004803603602081101561041957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d20565b61043e610e6a565b6040805160ff9092168252519081900360200190f35b6102f76004803603604081101561046a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e6f565b61033e610fa4565b61033e600480360360208110156104ab57600080fd5b503561109b565b61033e600480360360408110156104c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356110d6565b6102956113c3565b61033e6004803603602081101561050957600080fd5b81019060208101813564010000000081111561052457600080fd5b82018360208201111561053657600080fd5b8035906020019184600183028401116401000000008311171561055857600080fd5b5090925090506113df565b61029561159e565b6102f76115ba565b6103486004803603602081101561058957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115c3565b61033e61166c565b61033e600480360360408110156105c457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611790565b61033e611924565b610295611a1e565b610218611a3a565b61033e6004803603602081101561061557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a73565b610295611c3e565b6102f76004803603604081101561065057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611c5a565b6102f76004803603604081101561068957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d57565b61033e600480360360208110156106c257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611dd7565b610295611e4e565b610348611e6a565b6103486004803603604081101561070557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611e70565b610295611f22565b6040518060400160405280600781526020017f526573657276650000000000000000000000000000000000000000000000000081525081565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60065460009060ff161561080157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b61080c338484611f3e565b50600192915050565b61081d612131565b73ffffffffffffffffffffffffffffffffffffffff811661089f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577206f776e65722069732030206164647265737300000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917fb59bab42c554cfd49f4f001c983b6ed93ede25748b10114b7d1cb1b3c97df7af91a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045481565b60085473ffffffffffffffffffffffffffffffffffffffff16610953611a1e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a157503373ffffffffffffffffffffffffffffffffffffffff8216145b610a0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f167cccccc6e9b2892a740ec13fc1e51d3de8ea384f25bd87fee7412d588637e290600090a25050565b60065460009060ff1615610af157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610afc8484846121d6565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015233602483018190529251610bc094899493610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610b8357600080fd5b505afa158015610b97573d6000803e3d6000fd5b505050506040513d6020811015610bad57600080fd5b50519063ffffffff61262616565b611f3e565b5060019392505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff16610bf0611a1e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c3e57503373ffffffffffffffffffffffffffffffffffffffff8216145b610ca957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600680547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040517fb6b8f1859c5c352e5ffad07d0f77e384ac725512c015bd3a3ffc885831c8a42590600090a25050565b60075473ffffffffffffffffffffffffffffffffffffffff16610d41611a1e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d8f57503373ffffffffffffffffffffffffffffffffffffffff8216145b610dfa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a25050565b601281565b60065460009060ff1615610ee457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff8088166024840152925161080c9491938893610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d6020811015610f9657600080fd5b50519063ffffffff61266f16565b60075473ffffffffffffffffffffffffffffffffffffffff1633811461102b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560075460405173ffffffffffffffffffffffffffffffffffffffff909116907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a250565b6110a3612131565b600581905560405181907f28a10a2e0b5582da7164754cb994f6214b8af6aa7f7e003305fbc09e7106c51390600090a250565b60065460ff161561114857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600654610100900473ffffffffffffffffffffffffffffffffffffffff163381146111d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661125657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f63616e2774206d696e7420746f2061646472657373207a65726f000000000000604482015290519081900360640190fd5b600454611269908363ffffffff61266f16565b6004819055600554116112dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015290519081900360640190fd5b600254604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052915191909216916321e5383a91604480830192600092919082900301818387803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b505060408051858152905173ffffffffffffffffffffffffffffffffffffffff87169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b6113e7612131565b606060405180606001604052806035815260200161291b603591399050806040516020018082805190602001908083835b6020831061145557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611418565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001208383604051602001808383808284378083019250505092505050604051602081830303815290604052805190602001201461152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6465636c61726174696f6e20696e636f72726563740000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35050600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60065460ff1681565b600254604080517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151600093929092169163e3d670d791602480820192602092909190829003018186803b15801561163a57600080fd5b505afa15801561164e573d6000803e3d6000fd5b505050506040513d602081101561166457600080fd5b505192915050565b6116746126e3565b60015473ffffffffffffffffffffffffffffffffffffffff9081169116146116fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f756e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60065460ff161561180257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600654610100900473ffffffffffffffffffffffffffffffffffffffff1633811461188e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b61189883836126e7565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80871660048301523360248301819052925161191f94889493610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610b8357600080fd5b505050565b60075473ffffffffffffffffffffffffffffffffffffffff163381146119ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560075460405173ffffffffffffffffffffffffffffffffffffffff909116907f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600381526020017f525356000000000000000000000000000000000000000000000000000000000081525081565b611a7b612131565b60065460ff16611aec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f636f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611b6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f20616464726573730000000000000000000000000000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f170ee3488a79c35a0d86eff88a7857910c11193864052c0323ad49222232a2d790600090a2600254604080517ff84afd4800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151919092169163f84afd4891602480830192600092919082900301818387803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b5050505050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60065460009060ff1615611ccf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff8088166024840152925161080c9491938893610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610b8357600080fd5b60065460009060ff1615611dcc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b61080c3384846121d6565b611ddf612131565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe554fc9a6ce410c9b9537cefc8440997bdbd03a2a87193c1a7f4ee085188ced190600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152848116602483015291516000939290921691635c65816591604480820192602092909190829003018186803b158015611eef57600080fd5b505afa158015611f03573d6000803e3d6000fd5b505050506040513d6020811015611f1957600080fd5b50519392505050565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216611fc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7370656e6465722063616e6e6f742062652061646472657373207a65726f0000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661204257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f686f6c6465722063616e6e6f742062652061646472657373207a65726f000000604482015290519081900360640190fd5b600254604080517f33dd1b8a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152858116602483015260448201859052915191909216916333dd1b8a91606480830192600092919082900301818387803b1580156120c557600080fd5b505af11580156120d9573d6000803e3d6000fd5b505060408051848152905173ffffffffffffffffffffffffffffffffffffffff8087169450871692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3505050565b60005473ffffffffffffffffffffffffffffffffffffffff166121526126e3565b73ffffffffffffffffffffffffffffffffffffffff16146121d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616c6c6572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b565b73ffffffffffffffffffffffffffffffffffffffff821661225857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f63616e2774207472616e7366657220746f2061646472657373207a65726f0000604482015290519081900360640190fd5b600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590529151919092169163cf8eeb7e91604480830192600092919082900301818387803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b50506003546000925073ffffffffffffffffffffffffffffffffffffffff1615905061251957600354604080517f7ca87cb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301526044820186905291519190921691637ca87cb69160648083019260209291908290030181600087803b15801561239157600080fd5b505af11580156123a5573d6000803e3d6000fd5b505050506040513d60208110156123bb57600080fd5b505190508181111561242e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7472616e73616374696f6e20666565206f7574206f6620626f756e6473000000604482015290519081900360640190fd5b600254600854604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052905191909216916321e5383a91604480830192600092919082900301818387803b1580156124ac57600080fd5b505af11580156124c0573d6000803e3d6000fd5b505060085460408051858152905173ffffffffffffffffffffffffffffffffffffffff928316945091881692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b60025473ffffffffffffffffffffffffffffffffffffffff166321e5383a84612548858563ffffffff61262616565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156125b157600080fd5b505af11580156125c5573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff848116915085167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61260f8585612626565b60408051918252519081900360200190a350505050565b600061266883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612869565b9392505050565b60008282018381101561266857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b73ffffffffffffffffffffffffffffffffffffffff821661276957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e2774206275726e2066726f6d2061646472657373207a65726f00000000604482015290519081900360640190fd5b60045461277c908263ffffffff61262616565b6004908155600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811694820194909452602481018590529051929091169163cf8eeb7e9160448082019260009290919082900301818387803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b50506040805184815290516000935073ffffffffffffffffffffffffffffffffffffffff861692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008184841115612912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128d75781810151838201526020016128bf565b50505050905090810190601f1680156129045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe49206865726562792072656e6f756e6365206f776e657273686970206f66207468697320636f6e747261637420666f72657665722ea165627a7a7230582088894d0cbe483402d812789242eefcda2e2b696a37de24e68441af34ebd523760029608060405234801561001057600080fd5b5060006100216100ca60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100796100ca60201b60201c565b600280546001600160a01b0319166001600160a01b0392831617908190556040519116906000907feb667ad87f8e94a71252d18843f339e739a788f5641fd00d1404d93f4e547534908290a36100ce565b3390565b610fe1806100dd6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806379ba50971161008c578063e30443bc11610066578063e30443bc146102cc578063e3d670d714610305578063f79ed94b14610338578063f84afd4814610340576100df565b806379ba5097146102835780638da5cb5b1461028b578063cf8eeb7e14610293576100df565b80634fdb7f44116100bd5780634fdb7f441461019557806353a47bb7146102055780635c65816514610236576100df565b80631627540c146100e457806321e5383a1461011957806333dd1b8a14610152575b600080fd5b610117600480360360208110156100fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610373565b005b6101176004803603604081101561012f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561048a565b6101176004803603606081101561016857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610590565b610117600480360360208110156101ab57600080fd5b8101906020810181356401000000008111156101c657600080fd5b8201836020820111156101d857600080fd5b803590602001918460018302840111640100000000831117156101fa57600080fd5b50909250905061066c565b61020d61082b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102716004803603604081101561024c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610847565b60408051918252519081900360200190f35b610117610864565b61020d610988565b610117600480360360408110156102a957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109a4565b610117600480360360408110156102e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a7d565b6102716004803603602081101561031b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b49565b61020d610b5b565b6101176004803603602081101561035657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b77565b61037b610d6e565b73ffffffffffffffffffffffffffffffffffffffff81166103fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577206f776e65722069732030206164647265737300000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917fb59bab42c554cfd49f4f001c983b6ed93ede25748b10114b7d1cb1b3c97df7af91a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025473ffffffffffffffffffffffffffffffffffffffff166104ab610e13565b73ffffffffffffffffffffffffffffffffffffffff161461052d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6f6e6c7952657365727665416464726573730000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054610563908263ffffffff610e1716565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526003602052604090209190915550565b60025473ffffffffffffffffffffffffffffffffffffffff166105b1610e13565b73ffffffffffffffffffffffffffffffffffffffff161461063357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6f6e6c7952657365727665416464726573730000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff92831660009081526004602090815260408083209490951682529290925291902055565b610674610d6e565b6060604051806060016040528060358152602001610f81603591399050806040516020018082805190602001908083835b602083106106e257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016106a5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120838360405160200180838380828437808301925050509250505060405160208183030381529060405280519060200120146107b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6465636c61726174696f6e20696e636f72726563740000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35050600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b600460209081526000928352604080842090915290825290205481565b61086c610e13565b60015473ffffffffffffffffffffffffffffffffffffffff9081169116146108f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f756e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff166109c5610e13565b73ffffffffffffffffffffffffffffffffffffffff1614610a4757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6f6e6c7952657365727665416464726573730000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054610563908263ffffffff610e9216565b60025473ffffffffffffffffffffffffffffffffffffffff16610a9e610e13565b73ffffffffffffffffffffffffffffffffffffffff1614610b2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6f6e6c7952657365727665416464726573730000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff909116600090815260036020526040902055565b60036020526000908152604090205481565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff8116610bf957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f20616464726573730000000000000000000000000000000000000000604482015290519081900360640190fd5b60025473ffffffffffffffffffffffffffffffffffffffff16610c1a610e13565b73ffffffffffffffffffffffffffffffffffffffff161480610c755750610c3f610988565b73ffffffffffffffffffffffffffffffffffffffff16610c5d610e13565b73ffffffffffffffffffffffffffffffffffffffff16145b610ce057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b60025460405173ffffffffffffffffffffffffffffffffffffffff8084169216907feb667ad87f8e94a71252d18843f339e739a788f5641fd00d1404d93f4e54753490600090a3600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16610d8f610e13565b73ffffffffffffffffffffffffffffffffffffffff1614610e1157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616c6c6572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b565b3390565b600082820183811015610e8b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000610e8b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610f78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f3d578181015183820152602001610f25565b50505050905090810190601f168015610f6a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe49206865726562792072656e6f756e6365206f776e657273686970206f66207468697320636f6e747261637420666f72657665722ea165627a7a723058203f41f21ac65fb659dfc5d43511d3d95725f5541fcedf1e3b55b78f90c97a4eff0029

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061020b5760003560e01c806353a47bb71161012a57806396cd5536116100bd578063ac5b54c21161008c578063d5abeb0111610071578063d5abeb01146106e7578063dd62ed3e146106ef578063fb5689661461072a5761020b565b8063ac5b54c2146106ac578063bdd1b96e146106df5761020b565b806396cd5536146105ff5780639fd0506d14610632578063a457c2d71461063a578063a9059cbb146106735761020b565b806379cc6790116100f957806379cc6790146105ae5780638456cb59146105e75780638da5cb5b146105ef57806395d89b41146105f75761020b565b806353a47bb7146105635780635c975abb1461056b57806370a082311461057357806379ba5097146105a65761020b565b80632cd271e7116101a2578063404c7cdd11610171578063404c7cdd1461049557806340c10f19146104b257806346904840146104eb5780634fdb7f44146104f35761020b565b80632cd271e714610403578063313ce5671461043657806339509351146104545780633f4ba83a1461048d5761020b565b806318160ddd116101de57806318160ddd14610340578063236040711461035a57806323b872dd1461038d5780632c4d4d18146103d05761020b565b806306fdde0314610210578063075461721461028d578063095ea7b3146102be5780631627540c1461030b575b600080fd5b610218610732565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025257818101518382015260200161023a565b50505050905090810190601f16801561027f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029561076b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102f7600480360360408110156102d457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561078c565b604080519115158252519081900360200190f35b61033e6004803603602081101561032157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610815565b005b61034861092c565b60408051918252519081900360200190f35b61033e6004803603602081101561037057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610932565b6102f7600480360360608110156103a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a7c565b61033e600480360360208110156103e657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bca565b61033e6004803603602081101561041957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d20565b61043e610e6a565b6040805160ff9092168252519081900360200190f35b6102f76004803603604081101561046a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e6f565b61033e610fa4565b61033e600480360360208110156104ab57600080fd5b503561109b565b61033e600480360360408110156104c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356110d6565b6102956113c3565b61033e6004803603602081101561050957600080fd5b81019060208101813564010000000081111561052457600080fd5b82018360208201111561053657600080fd5b8035906020019184600183028401116401000000008311171561055857600080fd5b5090925090506113df565b61029561159e565b6102f76115ba565b6103486004803603602081101561058957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115c3565b61033e61166c565b61033e600480360360408110156105c457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611790565b61033e611924565b610295611a1e565b610218611a3a565b61033e6004803603602081101561061557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a73565b610295611c3e565b6102f76004803603604081101561065057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611c5a565b6102f76004803603604081101561068957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d57565b61033e600480360360208110156106c257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611dd7565b610295611e4e565b610348611e6a565b6103486004803603604081101561070557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611e70565b610295611f22565b6040518060400160405280600781526020017f526573657276650000000000000000000000000000000000000000000000000081525081565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60065460009060ff161561080157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b61080c338484611f3e565b50600192915050565b61081d612131565b73ffffffffffffffffffffffffffffffffffffffff811661089f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577206f776e65722069732030206164647265737300000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917fb59bab42c554cfd49f4f001c983b6ed93ede25748b10114b7d1cb1b3c97df7af91a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045481565b60085473ffffffffffffffffffffffffffffffffffffffff16610953611a1e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a157503373ffffffffffffffffffffffffffffffffffffffff8216145b610a0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f167cccccc6e9b2892a740ec13fc1e51d3de8ea384f25bd87fee7412d588637e290600090a25050565b60065460009060ff1615610af157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b610afc8484846121d6565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015233602483018190529251610bc094899493610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610b8357600080fd5b505afa158015610b97573d6000803e3d6000fd5b505050506040513d6020811015610bad57600080fd5b50519063ffffffff61262616565b611f3e565b5060019392505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff16610bf0611a1e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c3e57503373ffffffffffffffffffffffffffffffffffffffff8216145b610ca957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600680547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040517fb6b8f1859c5c352e5ffad07d0f77e384ac725512c015bd3a3ffc885831c8a42590600090a25050565b60075473ffffffffffffffffffffffffffffffffffffffff16610d41611a1e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d8f57503373ffffffffffffffffffffffffffffffffffffffff8216145b610dfa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f756e617574686f72697a65643a206e6f74206f776e6572206f7220726f6c6500604482015290519081900360640190fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a25050565b601281565b60065460009060ff1615610ee457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff8088166024840152925161080c9491938893610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d6020811015610f9657600080fd5b50519063ffffffff61266f16565b60075473ffffffffffffffffffffffffffffffffffffffff1633811461102b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560075460405173ffffffffffffffffffffffffffffffffffffffff909116907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a250565b6110a3612131565b600581905560405181907f28a10a2e0b5582da7164754cb994f6214b8af6aa7f7e003305fbc09e7106c51390600090a250565b60065460ff161561114857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600654610100900473ffffffffffffffffffffffffffffffffffffffff163381146111d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661125657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f63616e2774206d696e7420746f2061646472657373207a65726f000000000000604482015290519081900360640190fd5b600454611269908363ffffffff61266f16565b6004819055600554116112dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015290519081900360640190fd5b600254604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201869052915191909216916321e5383a91604480830192600092919082900301818387803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b505060408051858152905173ffffffffffffffffffffffffffffffffffffffff87169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b6113e7612131565b606060405180606001604052806035815260200161291b603591399050806040516020018082805190602001908083835b6020831061145557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611418565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001208383604051602001808383808284378083019250505092505050604051602081830303815290604052805190602001201461152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6465636c61726174696f6e20696e636f72726563740000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35050600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60065460ff1681565b600254604080517fe3d670d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151600093929092169163e3d670d791602480820192602092909190829003018186803b15801561163a57600080fd5b505afa15801561164e573d6000803e3d6000fd5b505050506040513d602081101561166457600080fd5b505192915050565b6116746126e3565b60015473ffffffffffffffffffffffffffffffffffffffff9081169116146116fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f756e617574686f72697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60065460ff161561180257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600654610100900473ffffffffffffffffffffffffffffffffffffffff1633811461188e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b61189883836126e7565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80871660048301523360248301819052925161191f94889493610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610b8357600080fd5b505050565b60075473ffffffffffffffffffffffffffffffffffffffff163381146119ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f756e617574686f72697a65643a206e6f7420726f6c6520686f6c646572000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560075460405173ffffffffffffffffffffffffffffffffffffffff909116907f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600381526020017f525356000000000000000000000000000000000000000000000000000000000081525081565b611a7b612131565b60065460ff16611aec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f636f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611b6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f20616464726573730000000000000000000000000000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f170ee3488a79c35a0d86eff88a7857910c11193864052c0323ad49222232a2d790600090a2600254604080517ff84afd4800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151919092169163f84afd4891602480830192600092919082900301818387803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b5050505050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60065460009060ff1615611ccf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b600254604080517f5c658165000000000000000000000000000000000000000000000000000000008152336004820181905273ffffffffffffffffffffffffffffffffffffffff8088166024840152925161080c9491938893610bbb938993921691635c65816591604480820192602092909190829003018186803b158015610b8357600080fd5b60065460009060ff1615611dcc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f636f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b61080c3384846121d6565b611ddf612131565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe554fc9a6ce410c9b9537cefc8440997bdbd03a2a87193c1a7f4ee085188ced190600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600254604080517f5c65816500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152848116602483015291516000939290921691635c65816591604480820192602092909190829003018186803b158015611eef57600080fd5b505afa158015611f03573d6000803e3d6000fd5b505050506040513d6020811015611f1957600080fd5b50519392505050565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216611fc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7370656e6465722063616e6e6f742062652061646472657373207a65726f0000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661204257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f686f6c6465722063616e6e6f742062652061646472657373207a65726f000000604482015290519081900360640190fd5b600254604080517f33dd1b8a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152858116602483015260448201859052915191909216916333dd1b8a91606480830192600092919082900301818387803b1580156120c557600080fd5b505af11580156120d9573d6000803e3d6000fd5b505060408051848152905173ffffffffffffffffffffffffffffffffffffffff8087169450871692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3505050565b60005473ffffffffffffffffffffffffffffffffffffffff166121526126e3565b73ffffffffffffffffffffffffffffffffffffffff16146121d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616c6c6572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b565b73ffffffffffffffffffffffffffffffffffffffff821661225857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f63616e2774207472616e7366657220746f2061646472657373207a65726f0000604482015290519081900360640190fd5b600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590529151919092169163cf8eeb7e91604480830192600092919082900301818387803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b50506003546000925073ffffffffffffffffffffffffffffffffffffffff1615905061251957600354604080517f7ca87cb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301526044820186905291519190921691637ca87cb69160648083019260209291908290030181600087803b15801561239157600080fd5b505af11580156123a5573d6000803e3d6000fd5b505050506040513d60208110156123bb57600080fd5b505190508181111561242e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7472616e73616374696f6e20666565206f7574206f6620626f756e6473000000604482015290519081900360640190fd5b600254600854604080517f21e5383a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052905191909216916321e5383a91604480830192600092919082900301818387803b1580156124ac57600080fd5b505af11580156124c0573d6000803e3d6000fd5b505060085460408051858152905173ffffffffffffffffffffffffffffffffffffffff928316945091881692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b60025473ffffffffffffffffffffffffffffffffffffffff166321e5383a84612548858563ffffffff61262616565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156125b157600080fd5b505af11580156125c5573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff848116915085167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61260f8585612626565b60408051918252519081900360200190a350505050565b600061266883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612869565b9392505050565b60008282018381101561266857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b73ffffffffffffffffffffffffffffffffffffffff821661276957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e2774206275726e2066726f6d2061646472657373207a65726f00000000604482015290519081900360640190fd5b60045461277c908263ffffffff61262616565b6004908155600254604080517fcf8eeb7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811694820194909452602481018590529051929091169163cf8eeb7e9160448082019260009290919082900301818387803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b50506040805184815290516000935073ffffffffffffffffffffffffffffffffffffffff861692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008184841115612912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128d75781810151838201526020016128bf565b50505050905090810190601f1680156129045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe49206865726562792072656e6f756e6365206f776e657273686970206f66207468697320636f6e747261637420666f72657665722ea165627a7a7230582088894d0cbe483402d812789242eefcda2e2b696a37de24e68441af34ebd523760029

Deployed Bytecode Sourcemap

13561:10272:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13561:10272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14678:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14678:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13975:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19570:192;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19570:192:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9927:227;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9927:227:0;;;;:::i;:::-;;13843:26;;;:::i;:::-;;;;;;;;;;;;;;;;16262:189;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16262:189:0;;;;:::i;20017:283::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20017:283:0;;;;;;;;;;;;;;;;;;:::i;15907:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15907:147:0;;;;:::i;16107:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16107:147:0;;;;:::i;14768:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20554:258;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20554:258:0;;;;;;;;;:::i;17589:106::-;;;:::i;17257:155::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17257:155:0;;:::i;21448:405::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21448:405:0;;;;;;;;;:::i;14031:27::-;;;:::i;10671:450::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10671:450:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;10671:450:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10671:450: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;-1:-1;10671:450:0;;-1:-1:-1;10671:450:0;-1:-1:-1;10671:450:0;:::i;9384:99::-;;;:::i;13929:18::-;;;:::i;18175:120::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18175:120:0;;;;:::i;10228:207::-;;;:::i;21960:247::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21960:247:0;;;;;;;;;:::i;17449:101::-;;;:::i;9214:79::-;;;:::i;14724:37::-;;;:::i;16660:284::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16660:284:0;;;;:::i;14003:21::-;;;:::i;21071:318::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21071:318:0;;;;;;;;;:::i;18595:184::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18595:184:0;;;;;;;;;:::i;17026:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17026:179:0;;;;:::i;13783:26::-;;;:::i;13876:24::-;;;:::i;18380:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18380:146:0;;;;;;;;;;;:::i;15267:113::-;;;:::i;14678:39::-;;;;;;;;;;;;;;;;;;;:::o;13975:21::-;;;;;;;;;:::o;19570:192::-;17988:6;;19674:4;;17988:6;;17987:7;17979:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19696:36;19705:10;19717:7;19726:5;19696:8;:36::i;:::-;-1:-1:-1;19750:4:0;19570:192;;;;:::o;9927:227::-;9608:12;:10;:12::i;:::-;10009:22;;;10001:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10092:6;;;10074:35;;;;;;;10092:6;;;10074:35;;;10120:15;:26;;;;;;;;;;;;;;;9927:227::o;13843:26::-;;;;:::o;16262:189::-;16336:12;;;;15769:7;:5;:7::i;:::-;15755:21;;:10;:21;;;:43;;;-1:-1:-1;15780:10:0;:18;;;;15755:43;15747:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16361:12;:30;;;;;;;;;;;;;16407:36;;;;-1:-1:-1;;16407:36:0;16262:189;;:::o;20017:283::-;17988:6;;20135:4;;17988:6;;17987:7;17979:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20157:26;20167:4;20173:2;20177:5;20157:9;:26::i;:::-;20221:11;;:37;;;;;;:11;:37;;;;;;;20209:10;20221:37;;;;;;;;20194:76;;20203:4;;20209:10;20221:48;;20263:5;;20221:11;;;:19;;:37;;;;;;;;;;;;;;;:11;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;20221:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20221:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20221:37:0;;:48;:41;:48;:::i;:::-;20194:8;:76::i;:::-;-1:-1:-1;20288:4:0;20017:283;;;;;:::o;15907:147::-;15969:6;;;;;;;15769:7;:5;:7::i;:::-;15755:21;;:10;:21;;;:43;;;-1:-1:-1;15780:10:0;:18;;;;15755:43;15747:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15988:6;:18;;;;;;;;;;;;;;;;;;16022:24;;;;-1:-1:-1;;16022:24:0;15907:147;;:::o;16107:::-;16169:6;;;;15769:7;:5;:7::i;:::-;15755:21;;:10;:21;;;:43;;;-1:-1:-1;15780:10:0;:18;;;;15755:43;15747:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16188:6;:18;;;;;;;;;;;;;16222:24;;;;-1:-1:-1;;16222:24:0;16107:147;;:::o;14768:35::-;14801:2;14768:35;:::o;20554:258::-;17988:6;;20673:4;;17988:6;;17987:7;17979:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20725:11;;:40;;;;;;20704:10;20725:40;;;;;;:11;:40;;;;;;;;;20695:87;;20704:10;;20716:7;;20725:56;;20770:10;;20725:11;;;:19;;:40;;;;;;;;;;;;;;;:11;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20725:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20725:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20725:40:0;;:56;:44;:56;:::i;17589:106::-;17622:6;;;;15535:10;:18;;15527:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17641:6;:14;;;;;;17680:6;;17671:16;;17680:6;;;;;17671:16;;17650:5;;17671:16;17589:106;:::o;17257:155::-;9608:12;:10;:12::i;:::-;17334:9;:24;;;17374:30;;17346:12;;17374:30;;;;;17257:155;:::o;21448:405::-;17988:6;;;;17987:7;17979:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21545:6;;;;;;;15535:10;:18;;15527:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21577:21;;;21569:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21656:11;;:22;;21672:5;21656:22;:15;:22;:::i;:::-;21642:11;:36;;;21711:9;;-1:-1:-1;21689:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21755:11;;:38;;;;;;:11;:38;;;;;;;;;;;;;;;:11;;;;;:22;;:38;;;;;:11;;:38;;;;;;;:11;;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21755:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21809:36:0;;;;;;;;;;;;-1:-1:-1;21826:1:0;;-1:-1:-1;21809:36:0;;;;;;;;;18028:1;21448:405;;:::o;14031:27::-;;;;;;:::o;10671:450::-;9608:12;:10;:12::i;:::-;10757:33;:91;;;;;;;;;;;;;;;;;;;10965:19;10948:37;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;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;;;10948:37:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10948:37:0;;;10938:48;;;;;;10908:11;;10891:29;;;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;10891:29:0;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10891:29:0;;;10881:40;;;;;;:105;10859:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11080:1;11064:6;;11043:40;;;11064:6;;;;11043:40;;11080:1;;11043:40;-1:-1:-1;;11111:1:0;11094:19;;;;;;-1:-1:-1;10671:450:0:o;9384:99::-;9460:15;;;;9384:99;:::o;13929:18::-;;;;;;:::o;18175:120::-;18260:11;;:27;;;;;;:11;:27;;;;;;;;;18233:7;;18260:11;;;;;:19;;:27;;;;;;;;;;;;;;;:11;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;18260:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18260:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18260:27:0;;18175:120;-1:-1:-1;;18175:120:0:o;10228:207::-;10302:12;:10;:12::i;:::-;10283:15;;:31;:15;;;:31;;;10275:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10376:15;;;10368:6;;10347:45;;10376:15;;;;;10368:6;;;;10347:45;;;10412:15;;;10403:24;;;;10412:15;;;;10403:24;;;;;;10228:207::o;21960:247::-;17988:6;;;;17987:7;17979:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22061:6;;;;;;;15535:10;:18;;15527:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22085:21;22091:7;22100:5;22085;:21::i;:::-;22147:11;;:40;;;;;;:11;:40;;;;;;;22135:10;22147:40;;;;;;;;22117:82;;22126:7;;22135:10;22147:51;;22192:5;;22147:11;;;:19;;:40;;;;;;;;;;;;;;;:11;:40;;;5:2:-1;;;;30:1;27;20:12;22117:82:0;18028:1;21960:247;;:::o;17449:101::-;17480:6;;;;15535:10;:18;;15527:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17499:6;:13;;;;17508:4;17499:13;;;17535:6;;17528:14;;17535:6;;;;;17528:14;;17499:6;;17528:14;17449:101;:::o;9214:79::-;9252:7;9279:6;;;9214:79;:::o;14724:37::-;;;;;;;;;;;;;;;;;;;:::o;16660:284::-;9608:12;:10;:12::i;:::-;17812:6;;;;17804:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16766:31;;;16758:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16830:44;;;;;;;;;;;16885:11;;:51;;;;;;:11;:51;;;;;;;;;:11;;;;;:32;;:51;;;;;:11;;:51;;;;;;;:11;;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;16885:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16885:51:0;;;;16660:284;:::o;14003:21::-;;;;;;:::o;21071:318::-;17988:6;;21195:4;;17988:6;;17987:7;17979:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21287:11;;:40;;;;;;21240:10;21287:40;;;;;;:11;:40;;;;;;;;;21217:142;;21240:10;;21265:7;;21287:61;;21332:15;;21287:11;;;:19;;:40;;;;;;;;;;;;;;;:11;:40;;;5:2:-1;;;;30:1;27;20:12;18595:184:0;17988:6;;18695:4;;17988:6;;17987:7;17979:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18717:32;18727:10;18739:2;18743:5;18717:9;:32::i;17026:179::-;9608:12;:10;:12::i;:::-;17108;:38;;;;;;;;;;;;;17162:35;;;;-1:-1:-1;;17162:35:0;17026:179;:::o;13783:26::-;;;;;;:::o;13876:24::-;;;;:::o;18380:146::-;18482:11;;:36;;;;;;:11;:36;;;;;;;;;;;;;;;;18455:7;;18482:11;;;;;:19;;:36;;;;;;;;;;;;;;;:11;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;18482:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18482:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18482:36:0;;18380:146;-1:-1:-1;;;18380:146:0:o;15267:113::-;15360:11;;;;15267:113;:::o;23492:338::-;23586:21;;;23578:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:20;;;23653:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23728:11;;:46;;;;;;:11;:46;;;;;;;;;;;;;;;;;;;;;;:11;;;;;:22;;:46;;;;;:11;;:46;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;23728:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23790:32:0;;;;;;;;;;;;;-1:-1:-1;23790:32:0;;;-1:-1:-1;23790:32:0;;;;;;;;;23492:338;;;:::o;9648:109::-;9719:6;;;;9703:12;:10;:12::i;:::-;:22;;;9695:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9648:109::o;22327:632::-;22415:16;;;22407:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22477:11;;:35;;;;;;:11;:35;;;;;;;;;;;;;;;:11;;;;;:22;;:35;;;;;:11;;:35;;;;;;;:11;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;22477:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22563:12:0;;22523:11;;-1:-1:-1;22555:35:0;22563:12;22555:35;;-1:-1:-1;22551:296:0;;22613:12;;:42;;;;;;:12;:42;;;;;;;;;;;;;;;;;;;;;;:12;;;;;:25;;:42;;;;;;;;;;;;;;:12;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;22613:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22613:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22613:42:0;;-1:-1:-1;22678:12:0;;;;22670:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22741:11;;22764:12;;22741:41;;;;;;:11;22764:12;;;22741:41;;;;;;;;;;;;:11;;;;;:22;;:41;;;;;:11;;:41;;;;;;;:11;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;22741:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22817:12:0;;22802:33;;;;;;;;22817:12;;;;;-1:-1:-1;22802:33:0;;;;-1:-1:-1;22802:33:0;;;;;;;;;;22551:296;22859:11;;;;:22;22882:2;22886:14;:5;22896:3;22886:14;:9;:14;:::i;:::-;22859:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22859:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;22917:34:0;;;;;-1:-1:-1;22917:34:0;;;22936:14;:5;22946:3;22936:9;:14::i;:::-;22917:34;;;;;;;;;;;;;;;22327:632;;;;:::o;3510:136::-;3568:7;3595:43;3599:1;3602;3595:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3588:50;3510:136;-1:-1:-1;;;3510:136:0:o;3054:181::-;3112:7;3144:5;;;3168:6;;;;3160:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8251:98;8331:10;8251:98;:::o;23067:287::-;23142:21;;;23134:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23223:11;;:22;;23239:5;23223:22;:15;:22;:::i;:::-;23209:11;:36;;;23256:11;;:38;;;;;;:11;:38;;;;;;;;;;;;;;;;;;:11;;;;;:22;;:38;;;;;:11;;:38;;;;;;;;:11;;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;23256:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23310:36:0;;;;;;;;23336:1;;-1:-1:-1;23310:36:0;;;;-1:-1:-1;23310:36:0;;;;;;;;;23067:287;;:::o;4096:192::-;4182:7;4218:12;4210:6;;;;4202:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4202:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4254:5:0;;;4096:192::o

Swarm Source

bzzr://3f41f21ac65fb659dfc5d43511d3d95725f5541fcedf1e3b55b78f90c97a4eff
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.