ETH Price: $3,068.43 (+1.41%)
Gas: 6 Gwei

Token

JustHodlFinance (JHF)
 

Overview

Max Total Supply

997.677231929055062154 JHF

Holders

59

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
74.958993798390706633 JHF

Value
$0.00
0xb086755a5b0b10bd53956936588555f586f5f49d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
JustHodlFinance

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/GSN/Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

// File: @openzeppelin/contracts/math/SafeMath.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.0;

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.0;





/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20Burnable.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance");

        _approve(account, _msgSender(), decreasedAllowance);
        _burn(account, amount);
    }
}

// File: contracts/JustHodlFinance.sol

// pragma solidity ^0.6.0;




/*   __    __
    /  |  /  |
    $$ |  $$ |
    $$ |__$$ |
    $$    $$ |     Just Hodl Finance
    $$$$$$$$ |     $JHF
    $$ |  $$ |
    $$ |  $$ |
    $$ /  $$ /

    The Token For The Hodlers.

    More informations at https://justhodl.finance
*/

contract JustHodlFinance is ERC20Burnable {
    using SafeMath for uint256;

    address private owner;
    address private lastHodler;
    uint256 private burnRatio = 1;
    uint256 private maxSupply = 1000 * (10 ** 18);

    modifier _onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    constructor() public payable ERC20("JustHodlFinance", "JHF") {
        owner = msg.sender;
        lastHodler = msg.sender;
        _mint(msg.sender, 100 * (10 ** 18));
    }

    function getOwner() public view returns (address) {
        return owner;
    }

    function setOwner(address _address) public _onlyOwner {
        owner = _address;
    }

    function airdrop() public _onlyOwner {
        _mint(0x205B7B1DAee38C4744C6F0b782E27BcA286c23db, 0.2276737588958936 * (10 ** 18));
        _mint(0xe18bb5aF1c31177898Fe8EBb42E7C1A8F5d092D7, 3.530290916799638 * (10 ** 18));
        _mint(0xE20F75642b97c11Af651A81AfCBBc6D7B4E32981, 0.6956205372887625 * (10 ** 18));
        _mint(0xE5d837b7d4e4dA364d859eA1d58C28033c7a140C, 1.12117911111537 * (10 ** 18));
        _mint(0xe7bA0Da73b9d15f5D628BC99A2C014d839691762, 2.581371477314487 * (10 ** 18));
        _mint(0xE950C23891E41E5bb3fe4a45DdE62752a4BBf9Fb, 0.03518358094056085 * (10 ** 18));
        _mint(0xEe9EAFDdCDfbFFAb6B9E989B71a13684090cdfaa, 0.6256136872106572 * (10 ** 18));
        _mint(0xf82fFEE7eda1DD212Dd0d867E57aa174dc207D7e, 3.195544974078189 * (10 ** 18));
        _mint(0xFB04D99d7024bef7047cF6a16c4e33F48e1C4981, 1.790702153174264 * (10 ** 18));
        _mint(0xFfe10BE9b63A4005DD1e631eE6fca3f6D6024269, 3.52247792997366 * (10 ** 18));
        _mint(0x449A7E1C10D2a0F68243FE104f9330fE16FeFe1A, 3.1431348930692917 * (10 ** 18));
        _mint(0x5139E12886d06C57F20A345c583AD7f3B67D3A5C, 0.6720976429756417 * (10 ** 18));
        _mint(0x56E2356c0754Fae16ac4AEB96D3C843bEc6aff67, 3.679952433824852 * (10 ** 18));
        _mint(0x58f35BfF1F63D6F22f95e3bdFC368Eea31d3e3BE, 0.3503182918211028 * (10 ** 18));
        _mint(0x59d7b684bced2a28FedebFc09ce3A795F49a4620, 55.77475482437363 * (10 ** 18));
        _mint(0x66b45F47D5D22e30Ee9ee1EdFcD45D5249E54D3d, 27.283949732441588 * (10 ** 18));
        _mint(0x175E62E73DAdCFa666Cb0Bb6473E2977Dc05307f, 0.7422919000977971 * (10 ** 18));
        _mint(0x78024ea589A845Fb72f285371901614BAA04C168, 0.2923691714509132 * (10 ** 18));
        _mint(0x7944449Ed57CE81A6cF7fF557f3E917B7A468086, 2.3731092307996056 * (10 ** 18));
        _mint(0x830B69752e151Da5d31fb355fc6f636c3bf5e5f8, 2.4391588865673453 * (10 ** 18));
        _mint(0x8A449393Ce741a3CeaBd9373008be53dB12Bf246, 3.2353433988468248 * (10 ** 18));
        _mint(0x8E09fC3D36B0595086538A92BEfE13D09C072661, 2.2741812599861166 * (10 ** 18));
        _mint(0x9016563F047fde2a42bf68D9D3670A91E746F1Bc, 1.5723785018021137 * (10 ** 18));
        _mint(0x9bb354ddf9e43648A06FB69420425FF6C059D231, 4.682512107034554 * (10 ** 18));
        _mint(0x3F3FD86382f4d69E1C4e4CF5296B82B3d90FD693, 7.104355909931625 * (10 ** 18));
        _mint(0x9df06e44585d1A5B9869a5E5630709e1C74B3b3A, 0.22549939056665116 * (10 ** 18));
        _mint(0xA3544D5a648d8B4649455C836743b4aB49289bc1, 0.23958072543224931 * (10 ** 18));
        _mint(0xa574469c959803481f25f825b41f1137BAfcF095, 1.1376306396836815 * (10 ** 18));
        _mint(0xc07378E46f4a9D7de862f3d8a51182B48e5166b4, 3.851291836084955 * (10 ** 18));
        _mint(0xC56c068C41149fAb578e6e9321517a6c43BE5920, 0.024279185132858004 * (10 ** 18));
        _mint(0xC7789B84995E56ef8c1902279695b7b72F6844C1, 9.281166872406274 * (10 ** 18));
        _mint(0xc7B0C9C8A18949BB61Aa796d5Bbc1075D4b3b520, 8.136261597006314 * (10 ** 18));
        _mint(0x52217443E3fBed2DdF2364F8E174deC88a72b3a6, 10.1 * (10 ** 18));
        _mint(0x206971261B391763458134212FeEab2360874676, 0.4081283262011415 * (10 ** 18));
        _mint(0x25F0020A60aE7a375C0970750F5F85C6680bF9Bf, 8.642145180922418 * (10 ** 18));
        _mint(0x2759321Df4C0f0475c41BBf9d17891bd42E32C3c, 0.009817817077845634 * (10 ** 18));
        _mint(0x2b6336412636616e9158252999432e1D6938F89F, 3.1490874264861057 * (10 ** 18));
        _mint(0x2b80916dF4fF053B0108D694424bec7E86184d40, 2.049274481724094 * (10 ** 18));
        _mint(0x2dB216B512CF33053a074aA1716c7281647D905e, 1.1415597510952042 * (10 ** 18));
        _mint(0x3C9b75bfa82DDbb4613A0EAe58d636260436273A, 0.9371537894807526 * (10 ** 18));
        _mint(0xC8Ba2DB40C74883e7a81a529ea0CE304e61b1bC9, 6.069499161661045 * (10 ** 18));
        _mint(0x04689288b3d01d37a8fe85688042238c1Cd9e5FA, 6.211714939276014 * (10 ** 18));
        _mint(0x15151Ac99BBa4eE669199EfbDCD0d3af6d70fCb6, 2.4517449132361087 * (10 ** 18));
        _mint(0x1DF63e28C9ede182D6dfb6Bbc8C48D6fa537cCeF, 5.408291508234217 * (10 ** 18));
        _mint(0x151c67BeCfd20664a8bfE016569eBCA04F71342E, 2.736025906453531 * (10 ** 18));
        _mint(0x1711bc52bf7e0494325799717fe640F1924617B7, 2.1075260298420213 * (10 ** 18));
        _mint(0xcB948E57358fD6279cA0c09144c65d34974C2Ced, 4.722329207020091 * (10 ** 18));
        _mint(0xe0Dfe3d68389746AD23B9b77b10432377cC7a4CC, 0.07616236319028087 * (10 ** 18));
        _mint(0x1c8ad03a5DE826D4E4bCb842E3604e1e2F3e8359, 4.775338825445221 * (10 ** 18));
    }

    function transfer(address _to, uint256 _value) public override returns (bool) {
        uint256 toBurn = _value.mul(burnRatio).div(100);
        uint256 finalValue = _value.sub(toBurn);
        if (super.transfer(_to, finalValue)) {
            super.burn(toBurn);
            _mint(lastHodler, _valueToMint());
            if (!_isContract(_to)) {
                lastHodler = _to;
            }
            return true;
        }
        return false;
    }

    function transferFrom(address _from, address _to, uint256 _value) public override returns (bool) {
        uint256 toBurn = _value.mul(burnRatio).div(100);
        uint256 finalValue = _value.sub(toBurn);
        if (super.transferFrom(_from, _to, finalValue)) {
            super.burnFrom(_from, toBurn);
            _mint(lastHodler, _valueToMint());
            if (!_isContract(_to)) {
                lastHodler = _to;
            }
            return true;
        }
        return false;
    }

    function _valueToMint() private view returns (uint256) {
        uint256 remaining = maxSupply - totalSupply();
        if (remaining >= 10 ** 18) {
            return 10 ** 18;
        } else {
            return remaining;
        }
    }

    function _isContract(address _address) private view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(_address)
        }
        return (size > 0);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600755683635c9adc5dea000006008556040518060400160405280600f81526020017f4a757374486f646c46696e616e636500000000000000000000000000000000008152506040518060400160405280600381526020017f4a4846000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009a929190620003e1565b508060049080519060200190620000b3929190620003e1565b506012600560006101000a81548160ff021916908360ff160217905550505033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200016f3368056bc75e2d631000006200017560201b60201c565b62000490565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6200022d600083836200035360201b60201c565b62000249816002546200035860201b62001afa1790919060201c565b600281905550620002a7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200035860201b62001afa1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600080828401905083811015620003d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200042457805160ff191683800117855562000455565b8280016001018555821562000455579182015b828111156200045457825182559160200191906001019062000437565b5b50905062000464919062000468565b5090565b6200048d91905b80821115620004895760008160009055506001016200046f565b5090565b90565b61236f80620004a06000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806342966c681161009757806395d89b411161006657806395d89b4114610488578063a457c2d71461050b578063a9059cbb14610571578063dd62ed3e146105d757610100565b806342966c681461036a57806370a082311461039857806379cc6790146103f0578063893d20e81461043e57610100565b806323b872dd116100d357806323b872dd14610250578063313ce567146102d65780633884d635146102fa578063395093511461030457610100565b806306fdde0314610105578063095ea7b31461018857806313af4035146101ee57806318160ddd14610232575b600080fd5b61010d61064f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561014d578082015181840152602081019050610132565b50505050905090810190601f16801561017a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d46004803603604081101561019e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106f1565b604051808215151515815260200191505060405180910390f35b6102306004803603602081101561020457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061070f565b005b61023a6107ad565b6040518082815260200191505060405180910390f35b6102bc6004803603606081101561026657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107b7565b604051808215151515815260200191505060405180910390f35b6102de6108b0565b604051808260ff1660ff16815260200191505060405180910390f35b6103026108c7565b005b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611068565b604051808215151515815260200191505060405180910390f35b6103966004803603602081101561038057600080fd5b810190808035906020019092919050505061111b565b005b6103da600480360360208110156103ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061112f565b6040518082815260200191505060405180910390f35b61043c6004803603604081101561040657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611177565b005b6104466111d9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610490611203565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104d05780820151818401526020810190506104b5565b50505050905090810190601f1680156104fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105576004803603604081101561052157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112a5565b604051808215151515815260200191505060405180910390f35b6105bd6004803603604081101561058757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611372565b604051808215151515815260200191505060405180910390f35b610639600480360360408110156105ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611468565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106e75780601f106106bc576101008083540402835291602001916106e7565b820191906000526020600020905b8154815290600101906020018083116106ca57829003601f168201915b5050505050905090565b60006107056106fe6114ef565b84846114f7565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461076957600080fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b6000806107e260646107d4600754866116ee90919063ffffffff16565b61177490919063ffffffff16565b905060006107f982856117be90919063ffffffff16565b9050610806868683611808565b156108a2576108158683611177565b610848600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166108436118e1565b61191a565b61085185611ae1565b6108975784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001925050506108a9565b6000925050505b9392505050565b6000600560009054906101000a900460ff16905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092157600080fd5b61094773205b7b1daee38c4744c6f0b782e27bca286c23db670328dc13d3aaec6061191a565b61096d73e18bb5af1c31177898fe8ebb42e7c1a8f5d092d76730fe1ce271a169f061191a565b61099373e20f75642b97c11af651a81afcbbc6d7b4e329816709a757316f90248461191a565b6109b973e5d837b7d4e4da364d859ea1d58c28033c7a140c670f8f3a76179eae1061191a565b6109df73e7ba0da73b9d15f5d628bc99a2c014d8396917626723d2dfae92a7c2d861191a565b610a0473e950c23891e41e5bb3fe4a45dde62752a4bbf9fb667cff47cbe369d261191a565b610a2a73ee9eafddcdfbffab6b9e989b71a13684090cdfaa6708aea05578d045b061191a565b610a5073f82ffee7eda1dd212dd0d867e57aa174dc207d7e672c58db3923b71dc861191a565b610a7673fb04d99d7024bef7047cf6a16c4e33f48e1c49816718d9da1eea7aa8c061191a565b610a9c73ffe10be9b63a4005dd1e631ee6fca3f6d60242696730e25b03b13bb96061191a565b610ac273449a7e1c10d2a0f68243fe104f9330fe16fefe1a672b9ea8883e87d0b461191a565b610ae8735139e12886d06c57f20a345c583ad7f3b67d3a5c670953c53ecff0c06461191a565b610b0e7356e2356c0754fae16ac4aeb96d3c843bec6aff67673311d13dc876e82061191a565b610b347358f35bff1f63d6f22f95e3bdfc368eea31d3e3be6704dc94a15e5186d061191a565b610b5b7359d7b684bced2a28fedebfc09ce3a795f49a462068030607bc01654b743061191a565b610b827366b45f47d5d22e30ee9ee1edfcd45d5249e54d3d68017aa40fb99fcb812061191a565b610ba873175e62e73dadcfa666cb0bb6473e2977dc05307f670a4d268ce0fa9bec61191a565b610bce7378024ea589a845fb72f285371901614baa04c16867040eb4365f9b61b061191a565b610bf4737944449ed57ce81a6cf7ff557f3e917b7a4680866720eefa45ab02cf6061191a565b610c1a73830b69752e151da5d31fb355fc6f636c3bf5e5f86721d9a21588957c9461191a565b610c40738a449393ce741a3ceabd9373008be53db12bf246672ce63fadfeab816061191a565b610c66738e09fc3d36b0595086538a92befe13d09c072661671f8f83ce8c529ff861191a565b610c8c739016563f047fde2a42bf68d9d3670a91e746f1bc6715d235eaa4603aa461191a565b610cb2739bb354ddf9e43648a06fb69420425ff6c059d2316740fb9ff3cc42ae9061191a565b610cd8733f3fd86382f4d69e1c4e4cf5296b82b3d90fd693676297be0f416bea2861191a565b610cfe739df06e44585d1a5b9869a5e5630709e1c74b3b3a67032122803fcad51861191a565b610d2473a3544d5a648d8b4649455c836743b4ab49289bc16703532966826b6bde61191a565b610d4a73a574469c959803481f25f825b41f1137bafcf095670fc9ad0a13f23cdc61191a565b610d7073c07378e46f4a9d7de862f3d8a51182b48e5166b467357289851834a77861191a565b610d9573c56c068c41149fab578e6e9321517a6c43be5920665641ca4d47aa9461191a565b610dbb73c7789b84995e56ef8c1902279695b7b72f6844c16780cd5418c2e62fd061191a565b610de173c7b0c9c8a18949bb61aa796d5bbc1075d4b3b5206770e9ced09136ba1061191a565b610e077352217443e3fbed2ddf2364f8e174dec88a72b3a6678c2a687ce772000061191a565b610e2d73206971261b391763458134212feeab23608746766705a9f68ce1fe68fc61191a565b610e537325f0020a60ae7a375c0970750f5f85c6680bf9bf6777ef1141063c135061191a565b610e78732759321df4c0f0475c41bbf9d17891bd42e32c3c6622e140ab650e8261191a565b610e9e732b6336412636616e9158252999432e1d6938f89f672bb3ce546e5a766461191a565b610ec4732b80916df4ff053b0108d694424bec7e86184d40671c707c489a6ff63061191a565b610eea732db216b512cf33053a074aa1716c7281647d905e670fd7a28b9de9b96861191a565b610f10733c9b75bfa82ddbb4613a0eae58d636260436273a670d01706801e955d861191a565b610f3673c8ba2db40c74883e7a81a529ea0ce304e61b1bc967543b31547756790861191a565b610f5c7304689288b3d01d37a8fe85688042238c1cd9e5fa67563471d38188b1b061191a565b610f827315151ac99bba4ee669199efbdcd0d3af6d70fcb66722065902394f259c61191a565b610fa8731df63e28c9ede182d6dfb6bbc8c48d6fa537ccef674b0e1c78ee0fe62861191a565b610fce73151c67becfd20664a8bfe016569ebca04f71342e6725f85110da6dc97861191a565b610ff4731711bc52bf7e0494325799717fe640f1924617b7671d3f6fc20b9f7bb461191a565b61101a73cb948e57358fd6279ca0c09144c65d34974c2ced6741891564d0e2767861191a565b61104073e0dfe3d68389746ad23b9b77b10432377cc7a4cc67010e95440b3602a661191a565b611066731c8ad03a5de826d4e4bcb842e3604e1e2f3e8359674245695c64cb228861191a565b565b60006111116110756114ef565b8461110c85600160006110866114ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa90919063ffffffff16565b6114f7565b6001905092915050565b61112c6111266114ef565b82611b82565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006111b682604051806060016040528060248152602001612287602491396111a7866111a26114ef565b611468565b611d469092919063ffffffff16565b90506111ca836111c46114ef565b836114f7565b6111d48383611b82565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b5050505050905090565b60006113686112b26114ef565b846113638560405180606001604052806025815260200161231560259139600160006112dc6114ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6114f7565b6001905092915050565b60008061139d606461138f600754866116ee90919063ffffffff16565b61177490919063ffffffff16565b905060006113b482856117be90919063ffffffff16565b90506113c08582611e06565b1561145b576113ce8261111b565b611401600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113fc6118e1565b61191a565b61140a85611ae1565b6114505784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600192505050611462565b6000925050505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561157d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806122f16024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121f66022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080831415611701576000905061176e565b600082840290508284828161171257fe5b0414611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061223e6021913960400191505060405180910390fd5b809150505b92915050565b60006117b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e24565b905092915050565b600061180083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d46565b905092915050565b6000611815848484611eea565b6118d6846118216114ef565b6118d18560405180606001604052806028815260200161225f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118876114ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6114f7565b600190509392505050565b6000806118ec6107ad565b600854039050670de0b6b3a7640000811061191257670de0b6b3a7640000915050611917565b809150505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6119c9600083836121ab565b6119de81600254611afa90919063ffffffff16565b600281905550611a35816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080823b905060008163ffffffff1611915050919050565b600080828401905083811015611b78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806122ab6021913960400191505060405180910390fd5b611c14826000836121ab565b611c7f816040518060600160405280602281526020016121d4602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cd6816002546117be90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000838311158290611df3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611db8578082015181840152602081019050611d9d565b50505050905090810190601f168015611de55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000611e1a611e136114ef565b8484611eea565b6001905092915050565b60008083118290611ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e95578082015181840152602081019050611e7a565b50505050905090810190601f168015611ec25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611edc57fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806122cc6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806121b16023913960400191505060405180910390fd5b6120018383836121ab565b61206c81604051806060016040528060268152602001612218602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ff816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ace4e7b719f628d4ae9225e67ed568198b19e0330be96fc4a1f7cf663e5d16ce64736f6c63430006060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c806342966c681161009757806395d89b411161006657806395d89b4114610488578063a457c2d71461050b578063a9059cbb14610571578063dd62ed3e146105d757610100565b806342966c681461036a57806370a082311461039857806379cc6790146103f0578063893d20e81461043e57610100565b806323b872dd116100d357806323b872dd14610250578063313ce567146102d65780633884d635146102fa578063395093511461030457610100565b806306fdde0314610105578063095ea7b31461018857806313af4035146101ee57806318160ddd14610232575b600080fd5b61010d61064f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561014d578082015181840152602081019050610132565b50505050905090810190601f16801561017a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d46004803603604081101561019e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106f1565b604051808215151515815260200191505060405180910390f35b6102306004803603602081101561020457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061070f565b005b61023a6107ad565b6040518082815260200191505060405180910390f35b6102bc6004803603606081101561026657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107b7565b604051808215151515815260200191505060405180910390f35b6102de6108b0565b604051808260ff1660ff16815260200191505060405180910390f35b6103026108c7565b005b6103506004803603604081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611068565b604051808215151515815260200191505060405180910390f35b6103966004803603602081101561038057600080fd5b810190808035906020019092919050505061111b565b005b6103da600480360360208110156103ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061112f565b6040518082815260200191505060405180910390f35b61043c6004803603604081101561040657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611177565b005b6104466111d9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610490611203565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104d05780820151818401526020810190506104b5565b50505050905090810190601f1680156104fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105576004803603604081101561052157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112a5565b604051808215151515815260200191505060405180910390f35b6105bd6004803603604081101561058757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611372565b604051808215151515815260200191505060405180910390f35b610639600480360360408110156105ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611468565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106e75780601f106106bc576101008083540402835291602001916106e7565b820191906000526020600020905b8154815290600101906020018083116106ca57829003601f168201915b5050505050905090565b60006107056106fe6114ef565b84846114f7565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461076957600080fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b6000806107e260646107d4600754866116ee90919063ffffffff16565b61177490919063ffffffff16565b905060006107f982856117be90919063ffffffff16565b9050610806868683611808565b156108a2576108158683611177565b610848600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166108436118e1565b61191a565b61085185611ae1565b6108975784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001925050506108a9565b6000925050505b9392505050565b6000600560009054906101000a900460ff16905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092157600080fd5b61094773205b7b1daee38c4744c6f0b782e27bca286c23db670328dc13d3aaec6061191a565b61096d73e18bb5af1c31177898fe8ebb42e7c1a8f5d092d76730fe1ce271a169f061191a565b61099373e20f75642b97c11af651a81afcbbc6d7b4e329816709a757316f90248461191a565b6109b973e5d837b7d4e4da364d859ea1d58c28033c7a140c670f8f3a76179eae1061191a565b6109df73e7ba0da73b9d15f5d628bc99a2c014d8396917626723d2dfae92a7c2d861191a565b610a0473e950c23891e41e5bb3fe4a45dde62752a4bbf9fb667cff47cbe369d261191a565b610a2a73ee9eafddcdfbffab6b9e989b71a13684090cdfaa6708aea05578d045b061191a565b610a5073f82ffee7eda1dd212dd0d867e57aa174dc207d7e672c58db3923b71dc861191a565b610a7673fb04d99d7024bef7047cf6a16c4e33f48e1c49816718d9da1eea7aa8c061191a565b610a9c73ffe10be9b63a4005dd1e631ee6fca3f6d60242696730e25b03b13bb96061191a565b610ac273449a7e1c10d2a0f68243fe104f9330fe16fefe1a672b9ea8883e87d0b461191a565b610ae8735139e12886d06c57f20a345c583ad7f3b67d3a5c670953c53ecff0c06461191a565b610b0e7356e2356c0754fae16ac4aeb96d3c843bec6aff67673311d13dc876e82061191a565b610b347358f35bff1f63d6f22f95e3bdfc368eea31d3e3be6704dc94a15e5186d061191a565b610b5b7359d7b684bced2a28fedebfc09ce3a795f49a462068030607bc01654b743061191a565b610b827366b45f47d5d22e30ee9ee1edfcd45d5249e54d3d68017aa40fb99fcb812061191a565b610ba873175e62e73dadcfa666cb0bb6473e2977dc05307f670a4d268ce0fa9bec61191a565b610bce7378024ea589a845fb72f285371901614baa04c16867040eb4365f9b61b061191a565b610bf4737944449ed57ce81a6cf7ff557f3e917b7a4680866720eefa45ab02cf6061191a565b610c1a73830b69752e151da5d31fb355fc6f636c3bf5e5f86721d9a21588957c9461191a565b610c40738a449393ce741a3ceabd9373008be53db12bf246672ce63fadfeab816061191a565b610c66738e09fc3d36b0595086538a92befe13d09c072661671f8f83ce8c529ff861191a565b610c8c739016563f047fde2a42bf68d9d3670a91e746f1bc6715d235eaa4603aa461191a565b610cb2739bb354ddf9e43648a06fb69420425ff6c059d2316740fb9ff3cc42ae9061191a565b610cd8733f3fd86382f4d69e1c4e4cf5296b82b3d90fd693676297be0f416bea2861191a565b610cfe739df06e44585d1a5b9869a5e5630709e1c74b3b3a67032122803fcad51861191a565b610d2473a3544d5a648d8b4649455c836743b4ab49289bc16703532966826b6bde61191a565b610d4a73a574469c959803481f25f825b41f1137bafcf095670fc9ad0a13f23cdc61191a565b610d7073c07378e46f4a9d7de862f3d8a51182b48e5166b467357289851834a77861191a565b610d9573c56c068c41149fab578e6e9321517a6c43be5920665641ca4d47aa9461191a565b610dbb73c7789b84995e56ef8c1902279695b7b72f6844c16780cd5418c2e62fd061191a565b610de173c7b0c9c8a18949bb61aa796d5bbc1075d4b3b5206770e9ced09136ba1061191a565b610e077352217443e3fbed2ddf2364f8e174dec88a72b3a6678c2a687ce772000061191a565b610e2d73206971261b391763458134212feeab23608746766705a9f68ce1fe68fc61191a565b610e537325f0020a60ae7a375c0970750f5f85c6680bf9bf6777ef1141063c135061191a565b610e78732759321df4c0f0475c41bbf9d17891bd42e32c3c6622e140ab650e8261191a565b610e9e732b6336412636616e9158252999432e1d6938f89f672bb3ce546e5a766461191a565b610ec4732b80916df4ff053b0108d694424bec7e86184d40671c707c489a6ff63061191a565b610eea732db216b512cf33053a074aa1716c7281647d905e670fd7a28b9de9b96861191a565b610f10733c9b75bfa82ddbb4613a0eae58d636260436273a670d01706801e955d861191a565b610f3673c8ba2db40c74883e7a81a529ea0ce304e61b1bc967543b31547756790861191a565b610f5c7304689288b3d01d37a8fe85688042238c1cd9e5fa67563471d38188b1b061191a565b610f827315151ac99bba4ee669199efbdcd0d3af6d70fcb66722065902394f259c61191a565b610fa8731df63e28c9ede182d6dfb6bbc8c48d6fa537ccef674b0e1c78ee0fe62861191a565b610fce73151c67becfd20664a8bfe016569ebca04f71342e6725f85110da6dc97861191a565b610ff4731711bc52bf7e0494325799717fe640f1924617b7671d3f6fc20b9f7bb461191a565b61101a73cb948e57358fd6279ca0c09144c65d34974c2ced6741891564d0e2767861191a565b61104073e0dfe3d68389746ad23b9b77b10432377cc7a4cc67010e95440b3602a661191a565b611066731c8ad03a5de826d4e4bcb842e3604e1e2f3e8359674245695c64cb228861191a565b565b60006111116110756114ef565b8461110c85600160006110866114ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa90919063ffffffff16565b6114f7565b6001905092915050565b61112c6111266114ef565b82611b82565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006111b682604051806060016040528060248152602001612287602491396111a7866111a26114ef565b611468565b611d469092919063ffffffff16565b90506111ca836111c46114ef565b836114f7565b6111d48383611b82565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b5050505050905090565b60006113686112b26114ef565b846113638560405180606001604052806025815260200161231560259139600160006112dc6114ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6114f7565b6001905092915050565b60008061139d606461138f600754866116ee90919063ffffffff16565b61177490919063ffffffff16565b905060006113b482856117be90919063ffffffff16565b90506113c08582611e06565b1561145b576113ce8261111b565b611401600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113fc6118e1565b61191a565b61140a85611ae1565b6114505784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600192505050611462565b6000925050505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561157d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806122f16024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121f66022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080831415611701576000905061176e565b600082840290508284828161171257fe5b0414611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061223e6021913960400191505060405180910390fd5b809150505b92915050565b60006117b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e24565b905092915050565b600061180083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d46565b905092915050565b6000611815848484611eea565b6118d6846118216114ef565b6118d18560405180606001604052806028815260200161225f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118876114ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6114f7565b600190509392505050565b6000806118ec6107ad565b600854039050670de0b6b3a7640000811061191257670de0b6b3a7640000915050611917565b809150505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6119c9600083836121ab565b6119de81600254611afa90919063ffffffff16565b600281905550611a35816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080823b905060008163ffffffff1611915050919050565b600080828401905083811015611b78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806122ab6021913960400191505060405180910390fd5b611c14826000836121ab565b611c7f816040518060600160405280602281526020016121d4602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cd6816002546117be90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000838311158290611df3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611db8578082015181840152602081019050611d9d565b50505050905090810190601f168015611de55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000611e1a611e136114ef565b8484611eea565b6001905092915050565b60008083118290611ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e95578082015181840152602081019050611e7a565b50505050905090810190601f168015611ec25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611edc57fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806122cc6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806121b16023913960400191505060405180910390fd5b6120018383836121ab565b61206c81604051806060016040528060268152602001612218602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d469092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ff816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ace4e7b719f628d4ae9225e67ed568198b19e0330be96fc4a1f7cf663e5d16ce64736f6c63430006060033

Deployed Bytecode Sourcemap

27958:6733:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27958:6733:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;17572:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17572:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19678:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;19678:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28557:89;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28557:89:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18647:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33714:512;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33714:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18499:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28654:4573;;;:::i;:::-;;21051:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;21051:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26901:91;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;26901:91:0;;;;;;;;;;;;;;;;;:::i;:::-;;18810:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18810:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27311:295;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27311:295:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28468:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17774:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17774:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21772:269;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;21772:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33235:471;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33235:471:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19380:151;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;19380:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17572:83;17609:13;17642:5;17635:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17572:83;:::o;19678:169::-;19761:4;19778:39;19787:12;:10;:12::i;:::-;19801:7;19810:6;19778:8;:39::i;:::-;19835:4;19828:11;;19678:169;;;;:::o;28557:89::-;28248:5;;;;;;;;;;;28234:19;;:10;:19;;;28226:28;;12:1:-1;9;2:12;28226:28:0;28630:8:::1;28622:5;;:16;;;;;;;;;;;;;;;;;;28557:89:::0;:::o;18647:100::-;18700:7;18727:12;;18720:19;;18647:100;:::o;33714:512::-;33805:4;33822:14;33839:30;33865:3;33839:21;33850:9;;33839:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;33822:47;;33880:18;33901;33912:6;33901;:10;;:18;;;;:::i;:::-;33880:39;;33934:42;33953:5;33960:3;33965:10;33934:18;:42::i;:::-;33930:266;;;33993:29;34008:5;34015:6;33993:14;:29::i;:::-;34037:33;34043:10;;;;;;;;;;;34055:14;:12;:14::i;:::-;34037:5;:33::i;:::-;34090:16;34102:3;34090:11;:16::i;:::-;34085:74;;34140:3;34127:10;;:16;;;;;;;;;;;;;;;;;;34085:74;34180:4;34173:11;;;;;;33930:266;34213:5;34206:12;;;;33714:512;;;;;;:::o;18499:83::-;18540:5;18565:9;;;;;;;;;;;18558:16;;18499:83;:::o;28654:4573::-;28248:5;;;;;;;;;;;28234:19;;:10;:19;;;28226:28;;12:1:-1;9;2:12;28226:28:0;28702:82:::1;28708:42;28752:31;28702:5;:82::i;:::-;28795:81;28801:42;28845:30;28795:5;:81::i;:::-;28887:82;28893:42;28937:31;28887:5;:82::i;:::-;28980:80;28986:42;29030:29;28980:5;:80::i;:::-;29071:81;29077:42;29121:30;29071:5;:81::i;:::-;29163:83;29169:42;29213:32;29163:5;:83::i;:::-;29257:82;29263:42;29307:31;29257:5;:82::i;:::-;29350:81;29356:42;29400:30;29350:5;:81::i;:::-;29442;29448:42;29492:30;29442:5;:81::i;:::-;29534:80;29540:42;29584:29;29534:5;:80::i;:::-;29625:82;29631:42;29675:31;29625:5;:82::i;:::-;29718;29724:42;29768:31;29718:5;:82::i;:::-;29811:81;29817:42;29861:30;29811:5;:81::i;:::-;29903:82;29909:42;29953:31;29903:5;:82::i;:::-;29996:81;30002:42;30046:30;29996:5;:81::i;:::-;30088:82;30094:42;30138:31;30088:5;:82::i;:::-;30181;30187:42;30231:31;30181:5;:82::i;:::-;30274;30280:42;30324:31;30274:5;:82::i;:::-;30367;30373:42;30417:31;30367:5;:82::i;:::-;30460;30466:42;30510:31;30460:5;:82::i;:::-;30553;30559:42;30603:31;30553:5;:82::i;:::-;30646;30652:42;30696:31;30646:5;:82::i;:::-;30739;30745:42;30789:31;30739:5;:82::i;:::-;30832:81;30838:42;30882:30;30832:5;:81::i;:::-;30924;30930:42;30974:30;30924:5;:81::i;:::-;31016:83;31022:42;31066:32;31016:5;:83::i;:::-;31110;31116:42;31160:32;31110:5;:83::i;:::-;31204:82;31210:42;31254:31;31204:5;:82::i;:::-;31297:81;31303:42;31347:30;31297:5;:81::i;:::-;31389:84;31395:42;31439:33;31389:5;:84::i;:::-;31484:81;31490:42;31534:30;31484:5;:81::i;:::-;31576;31582:42;31626:30;31576:5;:81::i;:::-;31668:68;31674:42;31718:17;31668:5;:68::i;:::-;31747:82;31753:42;31797:31;31747:5;:82::i;:::-;31840:81;31846:42;31890:30;31840:5;:81::i;:::-;31932:84;31938:42;31982:33;31932:5;:84::i;:::-;32027:82;32033:42;32077:31;32027:5;:82::i;:::-;32120:81;32126:42;32170:30;32120:5;:81::i;:::-;32212:82;32218:42;32262:31;32212:5;:82::i;:::-;32305;32311:42;32355:31;32305:5;:82::i;:::-;32398:81;32404:42;32448:30;32398:5;:81::i;:::-;32490;32496:42;32540:30;32490:5;:81::i;:::-;32582:82;32588:42;32632:31;32582:5;:82::i;:::-;32675:81;32681:42;32725:30;32675:5;:81::i;:::-;32767;32773:42;32817:30;32767:5;:81::i;:::-;32859:82;32865:42;32909:31;32859:5;:82::i;:::-;32952:81;32958:42;33002:30;32952:5;:81::i;:::-;33044:83;33050:42;33094:32;33044:5;:83::i;:::-;33138:81;33144:42;33188:30;33138:5;:81::i;:::-;28654:4573::o:0;21051:218::-;21139:4;21156:83;21165:12;:10;:12::i;:::-;21179:7;21188:50;21227:10;21188:11;:25;21200:12;:10;:12::i;:::-;21188:25;;;;;;;;;;;;;;;:34;21214:7;21188:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21156:8;:83::i;:::-;21257:4;21250:11;;21051:218;;;;:::o;26901:91::-;26957:27;26963:12;:10;:12::i;:::-;26977:6;26957:5;:27::i;:::-;26901:91;:::o;18810:119::-;18876:7;18903:9;:18;18913:7;18903:18;;;;;;;;;;;;;;;;18896:25;;18810:119;;;:::o;27311:295::-;27388:26;27417:84;27454:6;27417:84;;;;;;;;;;;;;;;;;:32;27427:7;27436:12;:10;:12::i;:::-;27417:9;:32::i;:::-;:36;;:84;;;;;:::i;:::-;27388:113;;27514:51;27523:7;27532:12;:10;:12::i;:::-;27546:18;27514:8;:51::i;:::-;27576:22;27582:7;27591:6;27576:5;:22::i;:::-;27311:295;;;:::o;28468:81::-;28509:7;28536:5;;;;;;;;;;;28529:12;;28468:81;:::o;17774:87::-;17813:13;17846:7;17839:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17774:87;:::o;21772:269::-;21865:4;21882:129;21891:12;:10;:12::i;:::-;21905:7;21914:96;21953:15;21914:96;;;;;;;;;;;;;;;;;:11;:25;21926:12;:10;:12::i;:::-;21914:25;;;;;;;;;;;;;;;:34;21940:7;21914:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21882:8;:129::i;:::-;22029:4;22022:11;;21772:269;;;;:::o;33235:471::-;33307:4;33324:14;33341:30;33367:3;33341:21;33352:9;;33341:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;33324:47;;33382:18;33403;33414:6;33403;:10;;:18;;;;:::i;:::-;33382:39;;33436:31;33451:3;33456:10;33436:14;:31::i;:::-;33432:244;;;33484:18;33495:6;33484:10;:18::i;:::-;33517:33;33523:10;;;;;;;;;;;33535:14;:12;:14::i;:::-;33517:5;:33::i;:::-;33570:16;33582:3;33570:11;:16::i;:::-;33565:74;;33620:3;33607:10;;:16;;;;;;;;;;;;;;;;;;33565:74;33660:4;33653:11;;;;;;33432:244;33693:5;33686:12;;;;33235:471;;;;;:::o;19380:151::-;19469:7;19496:11;:18;19508:5;19496:18;;;;;;;;;;;;;;;:27;19515:7;19496:27;;;;;;;;;;;;;;;;19489:34;;19380:151;;;;:::o;657:106::-;710:15;745:10;738:17;;657:106;:::o;24917:346::-;25036:1;25019:19;;:5;:19;;;;25011:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25117:1;25098:21;;:7;:21;;;;25090:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25201:6;25171:11;:18;25183:5;25171:18;;;;;;;;;;;;;;;:27;25190:7;25171:27;;;;;;;;;;;;;;;:36;;;;25239:7;25223:32;;25232:5;25223:32;;;25248:6;25223:32;;;;;;;;;;;;;;;;;;24917:346;;;:::o;6161:471::-;6219:7;6469:1;6464;:6;6460:47;;;6494:1;6487:8;;;;6460:47;6519:9;6535:1;6531;:5;6519:17;;6564:1;6559;6555;:5;;;;;;:10;6547:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6623:1;6616:8;;;6161:471;;;;;:::o;7108:132::-;7166:7;7193:39;7197:1;7200;7193:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7186:46;;7108:132;;;;:::o;5271:136::-;5329:7;5356:43;5360:1;5363;5356:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5349:50;;5271:136;;;;:::o;20321:321::-;20427:4;20444:36;20454:6;20462:9;20473:6;20444:9;:36::i;:::-;20491:121;20500:6;20508:12;:10;:12::i;:::-;20522:89;20560:6;20522:89;;;;;;;;;;;;;;;;;:11;:19;20534:6;20522:19;;;;;;;;;;;;;;;:33;20542:12;:10;:12::i;:::-;20522:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20491:8;:121::i;:::-;20630:4;20623:11;;20321:321;;;;;:::o;34234:247::-;34280:7;34300:17;34332:13;:11;:13::i;:::-;34320:9;;:25;34300:45;;34373:8;34360:9;:21;34356:118;;34405:8;34398:15;;;;;34356:118;34453:9;34446:16;;;34234:247;;:::o;23351:378::-;23454:1;23435:21;;:7;:21;;;;23427:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23505:49;23534:1;23538:7;23547:6;23505:20;:49::i;:::-;23582:24;23599:6;23582:12;;:16;;:24;;;;:::i;:::-;23567:12;:39;;;;23638:30;23661:6;23638:9;:18;23648:7;23638:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;23617:9;:18;23627:7;23617:18;;;;;;;;;;;;;;;:51;;;;23705:7;23684:37;;23701:1;23684:37;;;23714:6;23684:37;;;;;;;;;;;;;;;;;;23351:378;;:::o;34489:199::-;34550:4;34567:11;34633:8;34621:21;34613:29;;34678:1;34671:4;:8;;;34663:17;;;34489:199;;;:::o;4807:181::-;4865:7;4885:9;4901:1;4897;:5;4885:17;;4926:1;4921;:6;;4913:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4979:1;4972:8;;;4807:181;;;;:::o;24061:418::-;24164:1;24145:21;;:7;:21;;;;24137:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24217:49;24238:7;24255:1;24259:6;24217:20;:49::i;:::-;24300:68;24323:6;24300:68;;;;;;;;;;;;;;;;;:9;:18;24310:7;24300:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;24279:9;:18;24289:7;24279:18;;;;;;;;;;;;;;;:89;;;;24394:24;24411:6;24394:12;;:16;;:24;;;;:::i;:::-;24379:12;:39;;;;24460:1;24434:37;;24443:7;24434:37;;;24464:6;24434:37;;;;;;;;;;;;;;;;;;24061:418;;:::o;5710:192::-;5796:7;5829:1;5824;:6;;5832:12;5816:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5816:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5856:9;5872:1;5868;:5;5856:17;;5893:1;5886:8;;;5710:192;;;;;:::o;19142:175::-;19228:4;19245:42;19255:12;:10;:12::i;:::-;19269:9;19280:6;19245:9;:42::i;:::-;19305:4;19298:11;;19142:175;;;;:::o;7736:278::-;7822:7;7854:1;7850;:5;7857:12;7842:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7842:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7881:9;7897:1;7893;:5;;;;;;7881:17;;8005:1;7998:8;;;7736:278;;;;;:::o;22531:539::-;22655:1;22637:20;;:6;:20;;;;22629:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22739:1;22718:23;;:9;:23;;;;22710:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22794:47;22815:6;22823:9;22834:6;22794:20;:47::i;:::-;22874:71;22896:6;22874:71;;;;;;;;;;;;;;;;;:9;:17;22884:6;22874:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22854:9;:17;22864:6;22854:17;;;;;;;;;;;;;;;:91;;;;22979:32;23004:6;22979:9;:20;22989:9;22979:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22956:9;:20;22966:9;22956:20;;;;;;;;;;;;;;;:55;;;;23044:9;23027:35;;23036:6;23027:35;;;23055:6;23027:35;;;;;;;;;;;;;;;;;;22531:539;;;:::o;26288:92::-;;;;:::o

Swarm Source

ipfs://ace4e7b719f628d4ae9225e67ed568198b19e0330be96fc4a1f7cf663e5d16ce
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.