ETH Price: $2,356.84 (+0.62%)

Token

JustHodl (JH)
 

Overview

Max Total Supply

2,000 JH

Holders

82

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2.46351574056154457 JH

Value
$0.00
0xfc04ec649be75e2b9bfe15d49e385f65277103b4
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:
JustHodl

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-11-08
*/

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

// SPDX-License-Identifier: MIT

/*   __    __
    /  |  /  |
    $$ |  $$ |
    $$ |__$$ |
    $$    $$ |     Just Hodl
    $$$$$$$$ |     $JH
    $$ |  $$ |
    $$ |  $$ |
    $$ /  $$ /

    The Token For The Hodlers.

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

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: contracts/JustHodlBase.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.0;





contract JustHodlBase is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    uint256 internal _totalHodlSinceLastBuy = 0;
    uint256 internal _totalHodlersCount = 0;
    uint256 internal _bonusSupply = 0;
    uint256 internal _holdersSupply = 0;

    mapping (address => uint256) internal _hodlerHodlTime;

    mapping (address => uint256) internal _balances;

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

    uint256 private _totalSupply;

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

    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function bonusSupply() public view returns (uint256) {
        return _bonusSupply;
    }

    function holdersSupply() public view returns (uint256) {
        return _holdersSupply;
    }

    function totalHodlSinceLastBuy() public view returns (uint256) {
        return _totalHodlSinceLastBuy;
    }

    function balanceOf(address account) public view override returns (uint256) {
        uint256 balance = _balances[account];
        if (balance > 0 && hodlMinimumAchived(account)) {
            return balance + _getHodlBonus(account, balance);
        } else {
            return balance;
        }
    }

    function pureBalanceOf(address _address) public view returns (uint256) {
        return _balances[_address];
    }

    function pureBonusOf(address _address) public view returns (uint256) {
        return balanceOf(_address).sub(_balances[_address]);
    }

    function hodlTimeOf(address _address) public view returns (uint256) {
        return _hodlerHodlTime[_address];
    }

    function hodlMinimumAchived(address _address) public view returns (bool) {
        uint256 hodlTime = _hodlerHodlTime[_address];
        return hodlTime > 0 && (now - 7 days) > hodlTime;
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    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, "JustHodlBase: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "JustHodlBase: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "JustHodlBase: transfer from the zero address");
        require(recipient != address(0), "JustHodlBase: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 finalSenderAmount = amount;
        uint256 pureBalance = _balances[sender];
        uint256 totalBalance = balanceOf(sender);
        if (amount > pureBalance && amount <= totalBalance) {
            finalSenderAmount = pureBalance;
        }

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

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "JustHodlBase: 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);
    }

    function _getMinHodlDiff() internal view returns (uint256) {
        return (now - 7 days);
    }

    function _getHoldDiff(address _address, uint256 _minHodlDiff) internal view returns (uint256) {
        return _minHodlDiff - _hodlerHodlTime[_address];
    }

    function _getHodlBonus(address _address, uint256 _balance) internal view returns (uint256) {
        uint256 minHodlDiff = _getMinHodlDiff();
        uint256 hodlDiff = _getHoldDiff(_address, minHodlDiff);
        uint256 totalHodlDiff = minHodlDiff.mul(_totalHodlersCount) - _totalHodlSinceLastBuy;
        return _bonusSupply.mul(((_balance*10**18).div(_holdersSupply).add((hodlDiff*10**18).div(totalHodlDiff))).div(2)).div(10**18);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "JustHodlBase: approve from the zero address");
        require(spender != address(0), "JustHodlBase: approve to the zero address");

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

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

// File: contracts/JustHodl.sol

// pragma solidity ^0.6.0;

contract JustHodl is JustHodlBase {
    address private owner;
    uint256 private penaltyRatio = 10;
    uint256 private maxSupply = 2000 * (10 ** 18);

    struct Addr {
        address _address;
        bool exists;
    }

    mapping (address => Addr) private senderExceptions;
    mapping (address => Addr) private recipientExceptions;
    mapping (address => mapping (address => Addr)) private whitelistedSenders;

    modifier _onlyOwner() {
        require(msg.sender == owner, "JustHodl: only owner can perform this action");
        _;
    }

    constructor() public payable JustHodlBase("JustHodl", "JH") {
        uint256 restTokens = maxSupply;
        uint256 time = now;
        owner = msg.sender;
        _mint(0x04689288b3d01d37a8fe85688042238c1Cd9e5FA, 6.21171493927601 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x04689288b3d01d37a8fe85688042238c1Cd9e5FA] = time;
        restTokens -= 6.21171493927601 * (10**18);
        _mint(0x048AAEA5D07a21196e6Df02E13cCDB23218f65Ae, 1.96477428231032 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x048AAEA5D07a21196e6Df02E13cCDB23218f65Ae] = time;
        restTokens -= 1.96477428231032 * (10**18);
        _mint(0x074abaaff265fD872F438D37d22d31bF1D93fdC8, 0.000000000000015438 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x074abaaff265fD872F438D37d22d31bF1D93fdC8] = time;
        restTokens -= 0.000000000000015438 * (10**18);
        _mint(0x15151Ac99BBa4eE669199EfbDCD0d3af6d70fCb6, 2.45174491323611 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x15151Ac99BBa4eE669199EfbDCD0d3af6d70fCb6] = time;
        restTokens -= 2.45174491323611 * (10**18);
        _mint(0x151c67BeCfd20664a8bfE016569eBCA04F71342E, 2.73602590645353 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x151c67BeCfd20664a8bfE016569eBCA04F71342E] = time;
        restTokens -= 2.73602590645353 * (10**18);
        _mint(0x17e00383A843A9922bCA3B280C0ADE9f8BA48449, 3.94812 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x17e00383A843A9922bCA3B280C0ADE9f8BA48449] = time;
        restTokens -= 3.94812 * (10**18);
        _mint(0x1c8ad03a5DE826D4E4bCb842E3604e1e2F3e8359, 23.9179371378008 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x1c8ad03a5DE826D4E4bCb842E3604e1e2F3e8359] = time;
        restTokens -= 23.9179371378008 * (10**18);
        _mint(0x1DF63e28C9ede182D6dfb6Bbc8C48D6fa537cCeF, 1.10783440633302 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x1DF63e28C9ede182D6dfb6Bbc8C48D6fa537cCeF] = time;
        restTokens -= 1.10783440633302 * (10**18);
        _mint(0x1F2FACAfF2A95027398F946D6868a7dBA5a97667, 91.3750565166852 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x1F2FACAfF2A95027398F946D6868a7dBA5a97667] = time;
        restTokens -= 91.3750565166852 * (10**18);
        _mint(0x205B7B1DAee38C4744C6F0b782E27BcA286c23db, 0.227673758895894 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x205B7B1DAee38C4744C6F0b782E27BcA286c23db] = time;
        restTokens -= 0.227673758895894 * (10**18);
        _mint(0x206971261B391763458134212FeEab2360874676, 1.77998731135435 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x206971261B391763458134212FeEab2360874676] = time;
        restTokens -= 1.77998731135435 * (10**18);
        _mint(0x25F0020A60aE7a375C0970750F5F85C6680bF9Bf, 10.3323681270537 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x25F0020A60aE7a375C0970750F5F85C6680bF9Bf] = time;
        restTokens -= 10.3323681270537 * (10**18);
        _mint(0x2759321Df4C0f0475c41BBf9d17891bd42E32C3c, 26.62505749454025 * (10**18)); // 0.5x
        _totalHodlersCount++;
        _hodlerHodlTime[0x2759321Df4C0f0475c41BBf9d17891bd42E32C3c] = time;
        restTokens -= 26.62505749454025 * (10**18);
        _mint(0x2b6336412636616e9158252999432e1D6938F89F, 3.14908742648611 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x2b6336412636616e9158252999432e1D6938F89F] = time;
        restTokens -= 3.14908742648611 * (10**18);
        _mint(0x34F63cF9E5347D6B00403907ED65eF148177668B, 3.99 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x34F63cF9E5347D6B00403907ED65eF148177668B] = time;
        restTokens -= 3.99 * (10**18);
        _mint(0x3BAAaffbB4eDe1fFA7b512bCEA490cedA2dB0EE6, 1 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x3BAAaffbB4eDe1fFA7b512bCEA490cedA2dB0EE6] = time;
        restTokens -= 1 * (10**18);
        _mint(0x3C9b75bfa82DDbb4613A0EAe58d636260436273A, 0.937153789480753 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x3C9b75bfa82DDbb4613A0EAe58d636260436273A] = time;
        restTokens -= 0.937153789480753 * (10**18);
        _mint(0x3F3FD86382f4d69E1C4e4CF5296B82B3d90FD693, 25.08251279989605 * (10**18)); // 0.5x
        _totalHodlersCount++;
        _hodlerHodlTime[0x3F3FD86382f4d69E1C4e4CF5296B82B3d90FD693] = time;
        restTokens -= 25.08251279989605 * (10**18);
        _mint(0x424dddc996c1dF3D3e9D3D9D89aa32eA5FaDb51f, 2.69635513967925 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x424dddc996c1dF3D3e9D3D9D89aa32eA5FaDb51f] = time;
        restTokens -= 2.69635513967925 * (10**18);
        _mint(0x449A7E1C10D2a0F68243FE104f9330fE16FeFe1A, 85.4291707701004 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x449A7E1C10D2a0F68243FE104f9330fE16FeFe1A] = time;
        restTokens -= 85.4291707701004 * (10**18);
        _mint(0x5139E12886d06C57F20A345c583AD7f3B67D3A5C, 0.672097642975642 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x5139E12886d06C57F20A345c583AD7f3B67D3A5C] = time;
        restTokens -= 0.672097642975642 * (10**18);
        _mint(0x52217443E3fBed2DdF2364F8E174deC88a72b3a6, 10.1 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x52217443E3fBed2DdF2364F8E174deC88a72b3a6] = time;
        restTokens -= 10.1 * (10**18);
        _mint(0x553C0A82a14F2fb77437917e87643A76FbEd8cf4, 1.2475 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x553C0A82a14F2fb77437917e87643A76FbEd8cf4] = time;
        restTokens -= 1.2475 * (10**18);
        _mint(0x56E2356c0754Fae16ac4AEB96D3C843bEc6aff67, 3.67995243382485 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x56E2356c0754Fae16ac4AEB96D3C843bEc6aff67] = time;
        restTokens -= 3.67995243382485 * (10**18);
        _mint(0x59d7b684bced2a28FedebFc09ce3A795F49a4620, 55.7747548243736 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x59d7b684bced2a28FedebFc09ce3A795F49a4620] = time;
        restTokens -= 55.7747548243736 * (10**18);
        _mint(0x5d1EE9f2A17ACcf72532Dd17ad36F0B8909a38CA, 5.13429897024556 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x5d1EE9f2A17ACcf72532Dd17ad36F0B8909a38CA] = time;
        restTokens -= 5.13429897024556 * (10**18);
        _mint(0x7527f8E3a272699f91065b13EF51292034437C7d, 1 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x7527f8E3a272699f91065b13EF51292034437C7d] = time;
        restTokens -= 1 * (10**18);
        _mint(0x78024ea589A845Fb72f285371901614BAA04C168, 2.23804228559044 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x78024ea589A845Fb72f285371901614BAA04C168] = time;
        restTokens -= 2.23804228559044 * (10**18);
        _mint(0x7944449Ed57CE81A6cF7fF557f3E917B7A468086, 2.37310923079961 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x7944449Ed57CE81A6cF7fF557f3E917B7A468086] = time;
        restTokens -= 2.37310923079961 * (10**18);
        _mint(0x830B69752e151Da5d31fb355fc6f636c3bf5e5f8, 2.43915888656735 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x830B69752e151Da5d31fb355fc6f636c3bf5e5f8] = time;
        restTokens -= 2.43915888656735 * (10**18);
        _mint(0x8A449393Ce741a3CeaBd9373008be53dB12Bf246, 4.29474339884683 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x8A449393Ce741a3CeaBd9373008be53dB12Bf246] = time;
        restTokens -= 4.29474339884683 * (10**18);
        _mint(0x8E09fC3D36B0595086538A92BEfE13D09C072661, 2.27418125998612 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x8E09fC3D36B0595086538A92BEfE13D09C072661] = time;
        restTokens -= 2.27418125998612 * (10**18);
        _mint(0x9016563F047fde2a42bf68D9D3670A91E746F1Bc, 1.57237850180211 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x9016563F047fde2a42bf68D9D3670A91E746F1Bc] = time;
        restTokens -= 1.57237850180211 * (10**18);
        _mint(0x9317d29f94f9f399ED27048a14bBaE81D7fd73fB, 7.95 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x9317d29f94f9f399ED27048a14bBaE81D7fd73fB] = time;
        restTokens -= 7.95 * (10**18);
        _mint(0x9853c360CcCaf3968f8DD46d50c133e61Ddb67b1, 125.215644991617 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x9853c360CcCaf3968f8DD46d50c133e61Ddb67b1] = time;
        restTokens -= 125.215644991617 * (10**18);
        _mint(0x9bb354ddf9e43648A06FB69420425FF6C059D231, 68.9075461951348 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x9bb354ddf9e43648A06FB69420425FF6C059D231] = time;
        restTokens -= 68.9075461951348 * (10**18);
        _mint(0x9d2c491a573114d5fBb7aaD5AFC29637F33F31a4, 3.98 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x9d2c491a573114d5fBb7aaD5AFC29637F33F31a4] = time;
        restTokens -= 3.98 * (10**18);
        _mint(0x9df06e44585d1A5B9869a5E5630709e1C74B3b3A, 0.225499390566651 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0x9df06e44585d1A5B9869a5E5630709e1C74B3b3A] = time;
        restTokens -= 0.225499390566651 * (10**18);
        _mint(0xA3544D5a648d8B4649455C836743b4aB49289bc1, 0.239580725432249 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xA3544D5a648d8B4649455C836743b4aB49289bc1] = time;
        restTokens -= 0.239580725432249 * (10**18);
        _mint(0xa574469c959803481f25f825b41f1137BAfcF095, 5.55941808192726 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xa574469c959803481f25f825b41f1137BAfcF095] = time;
        restTokens -= 5.55941808192726 * (10**18);
        _mint(0xa5AAd2CD204e43dC16e4F93c4A20F4A3036124CD, 16.6411113838537 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xa5AAd2CD204e43dC16e4F93c4A20F4A3036124CD] = time;
        restTokens -= 16.6411113838537 * (10**18);
        _mint(0xAA3d85aD9D128DFECb55424085754F6dFa643eb1, 1.01188 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xAA3d85aD9D128DFECb55424085754F6dFa643eb1] = time;
        restTokens -= 1.01188 * (10**18);
        _mint(0xB086755a5B0b10BD53956936588555f586f5f49d, 74.9589937983907 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xB086755a5B0b10BD53956936588555f586f5f49d] = time;
        restTokens -= 74.9589937983907 * (10**18);
        _mint(0xB1Fe569478506aeFEC2bcc84321e8d2053FE3fBB, 9.55813705750499 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xB1Fe569478506aeFEC2bcc84321e8d2053FE3fBB] = time;
        restTokens -= 9.55813705750499 * (10**18);
        _mint(0xc07378E46f4a9D7de862f3d8a51182B48e5166b4, 3.85129183608496 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xc07378E46f4a9D7de862f3d8a51182B48e5166b4] = time;
        restTokens -= 3.85129183608496 * (10**18);
        _mint(0xC56c068C41149fAb578e6e9321517a6c43BE5920, 0.024279185132858 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xC56c068C41149fAb578e6e9321517a6c43BE5920] = time;
        restTokens -= 0.024279185132858 * (10**18);
        _mint(0xC7789B84995E56ef8c1902279695b7b72F6844C1, 2 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xC7789B84995E56ef8c1902279695b7b72F6844C1] = time;
        restTokens -= 2 * (10**18);
        _mint(0xe18bb5aF1c31177898Fe8EBb42E7C1A8F5d092D7, 3.53029091679964 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xe18bb5aF1c31177898Fe8EBb42E7C1A8F5d092D7] = time;
        restTokens -= 3.53029091679964 * (10**18);
        _mint(0xE20F75642b97c11Af651A81AfCBBc6D7B4E32981, 0.695620537288762 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xE20F75642b97c11Af651A81AfCBBc6D7B4E32981] = time;
        restTokens -= 0.695620537288762 * (10**18);
        _mint(0xe7bA0Da73b9d15f5D628BC99A2C014d839691762, 25.6815017450919 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xe7bA0Da73b9d15f5D628BC99A2C014d839691762] = time;
        restTokens -= 25.6815017450919 * (10**18);
        _mint(0xE950C23891E41E5bb3fe4a45DdE62752a4BBf9Fb, 0.0351835809405609 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xE950C23891E41E5bb3fe4a45DdE62752a4BBf9Fb] = time;
        restTokens -= 0.0351835809405609 * (10**18);
        _mint(0xEc1625f0Be12B31d8edfdd165f7750eE4630a475, 3.66244411786722 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xEc1625f0Be12B31d8edfdd165f7750eE4630a475] = time;
        restTokens -= 3.66244411786722 * (10**18);
        _mint(0xEe9EAFDdCDfbFFAb6B9E989B71a13684090cdfaa, 21.0815596983417 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xEe9EAFDdCDfbFFAb6B9E989B71a13684090cdfaa] = time;
        restTokens -= 21.0815596983417 * (10**18);
        _mint(0xf82fFEE7eda1DD212Dd0d867E57aa174dc207D7e, 3.19554497407819 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xf82fFEE7eda1DD212Dd0d867E57aa174dc207D7e] = time;
        restTokens -= 3.19554497407819 * (10**18);
        _mint(0xF872Ea3e3BC2d9EFcb660dE497A6F1c50E4ad25D, 25.6350510199272 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xF872Ea3e3BC2d9EFcb660dE497A6F1c50E4ad25D] = time;
        restTokens -= 25.6350510199272 * (10**18);
        _mint(0xFB04D99d7024bef7047cF6a16c4e33F48e1C4981, 1.79070215317426 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xFB04D99d7024bef7047cF6a16c4e33F48e1C4981] = time;
        restTokens -= 1.79070215317426 * (10**18);
        _mint(0xFC04Ec649be75e2b9bFe15d49e385F65277103b4, 2.1958520537044 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xFC04Ec649be75e2b9bFe15d49e385F65277103b4] = time;
        restTokens -= 2.1958520537044 * (10**18);
        _mint(0xFfe10BE9b63A4005DD1e631eE6fca3f6D6024269, 3.52247792997366 * (10**18));
        _totalHodlersCount++;
        _hodlerHodlTime[0xFfe10BE9b63A4005DD1e631eE6fca3f6D6024269] = time;
        restTokens -= 3.52247792997366 * (10**18);

        _holdersSupply = maxSupply - restTokens;
        _mint(msg.sender, restTokens);
    }

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

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

    function isSenderException(address _address) public view returns (bool) {
        return senderExceptions[_address].exists;
    }

    function addSenderException(address _address) public _onlyOwner returns (bool) {
        require(!isSenderException(_address), "JustHodl: address is already present in the sender exceptions list");
        senderExceptions[_address] = Addr(_address, true);
        return true;
    }

    function removeSenderException(address _address) public _onlyOwner returns (bool) {
        require(isSenderException(_address), "JustHodl: address is not present in the sender exceptions list");
        delete senderExceptions[_address];
        return true;
    }

    function isRecipientException(address _address) public view returns (bool) {
        return recipientExceptions[_address].exists;
    }

    function addRecipientException(address _address) public _onlyOwner returns (bool) {
        require(!isRecipientException(_address), "JustHodl: address is already present in the recipient exceptions list");
        recipientExceptions[_address] = Addr(_address, true);
        return true;
    }

    function removeRecipientException(address _address) public _onlyOwner returns (bool) {
        require(isRecipientException(_address), "JustHodl: address is not present in the recipient exceptions list");
        delete recipientExceptions[_address];
        return true;
    }

    function isWhitelistedSender(address _address) public view returns (bool) {
        return whitelistedSenders[msg.sender][_address].exists;
    }

    function addWhitelistedSender(address _address) public returns (bool) {
        require(!isWhitelistedSender(_address), "JustHodl: address is already present in the whitelist");
        whitelistedSenders[msg.sender][_address] = Addr(_address, true);
        return true;
    }

    function removeWhitelistedSender(address _address) public returns (bool) {
        require(isWhitelistedSender(_address), "JustHodl: address is not present in the whitelist");
        delete whitelistedSenders[msg.sender][_address];
        return true;
    }

    function transfer(address _to, uint256 _value) public override returns (bool) {
        bool isFromHodler = _isValidHodler(msg.sender);
        bool isToHodler = _isValidHodler(_to);
        if (_allowedToSend(msg.sender, _to)) {
            uint256 penalty = 0;
            uint256 finalValue = _value;
            uint256 pureFromBalanceBeforeThx = pureBalanceOf(msg.sender);
            uint256 pureToBalanceBeforeThx = pureBalanceOf(_to);
            if (isFromHodler && !hodlMinimumAchived(msg.sender)) {
                penalty = _value.mul(penaltyRatio).div(100);
                finalValue = _value.sub(penalty);
            }
            if (super.transfer(_to, finalValue)) {
                if (penalty > 0) {
                    _balances[msg.sender] = _balances[msg.sender].sub(penalty);
                }
                _updateTimer(msg.sender, _to, isFromHodler, isToHodler);
                _updateHodlersCount(msg.sender, isFromHodler, isToHodler, pureToBalanceBeforeThx);
                _updateBonusSupply(_value, penalty, pureFromBalanceBeforeThx);
                _updateHoldersSupply(isFromHodler, isToHodler, finalValue, penalty, pureFromBalanceBeforeThx);
                _updateAllowedSender(msg.sender, _to);
                return true;
            }
        }
        return false;
    }

    function transferFrom(address _from, address _to, uint256 _value) public override returns (bool) {
        bool isFromHodler = _isValidHodler(_from);
        bool isToHodler = _isValidHodler(_to);
        if (_allowedToSend(_from, _to)) {
            uint256 penalty = 0;
            uint256 finalValue = _value;
            uint256 pureFromBalanceBeforeThx = pureBalanceOf(_from);
            uint256 pureToBalanceBeforeThx = pureBalanceOf(_to);
            if (isFromHodler && !hodlMinimumAchived(_from)) {
                penalty = _value.mul(penaltyRatio).div(100);
                finalValue = _value.sub(penalty);
            }
            if (super.transferFrom(_from, _to, finalValue)) {
                if (penalty > 0) {
                    _balances[_from] = _balances[_from].sub(penalty);
                }
                _updateTimer(_from, _to, isFromHodler, isToHodler);
                _updateHodlersCount(_from, isFromHodler, isToHodler, pureToBalanceBeforeThx);
                _updateBonusSupply(_value, penalty, pureFromBalanceBeforeThx);
                _updateHoldersSupply(isFromHodler, isToHodler, finalValue, penalty, pureFromBalanceBeforeThx);
                _updateAllowedSender(_from, _to);
                return true;
            }
        }
        return false;
    }

    function _allowedToSend(address _from, address _to) private view returns (bool) {
        require (
            _from == owner ||
            _isContract(_to) ||
            isSenderException(_from) ||
            isRecipientException(_to) ||
            whitelistedSenders[_to][_from].exists,
            "JustHodl: you are not allowed to send tokens to that address"
        );
        return true;
    }

    function _updateAllowedSender(address _from, address _to) private {
        if (!whitelistedSenders[_from][_to].exists) {
            whitelistedSenders[_from][_to] = Addr(_to, true);
        }
    }

    function _updateTimer(address _from, address _to, bool _isFromHodler, bool _isToHodler) private {
        if (_isFromHodler && _balances[_from] == 0) {
            _totalHodlSinceLastBuy = _totalHodlSinceLastBuy.sub(_hodlerHodlTime[_from]);
            _hodlerHodlTime[_from] = 0;
        }
        if (_isToHodler) {
            uint256 oldLastBuy = _hodlerHodlTime[_to];
            uint256 newLastBuy = now;
            _totalHodlSinceLastBuy = _totalHodlSinceLastBuy.add(newLastBuy).sub(oldLastBuy);
            _hodlerHodlTime[_to] = newLastBuy;
        }
    }

    function _updateHodlersCount(address _from, bool _isFromHodler, bool _isToHodler, uint256 _pureToBalanceBeforeThx) private {
        if (_isFromHodler && _balances[_from] == 0) {
            _totalHodlersCount--;
        }
        if (_isToHodler && _pureToBalanceBeforeThx == 0) {
            _totalHodlersCount++;
        }
    }

    function _updateBonusSupply(uint256 _value, uint256 _penalty, uint256 _pureFromBalanceBeforeThx) private {
        if (_value > _pureFromBalanceBeforeThx) {
            uint256 spentBonus = _value.sub(_pureFromBalanceBeforeThx);
            _bonusSupply = _bonusSupply.sub(spentBonus).add(_penalty);
        } else {
            _bonusSupply = _bonusSupply.add(_penalty);
        }
    }

    function _updateHoldersSupply(bool _isFromHodler, bool _isToHodler, uint256 _value, uint256 _penalty, uint256 _pureFromBalanceBeforeThx) private {
        uint256 finalValue = _holdersSupply;
        uint256 subValue = _value;
        if (_value > _pureFromBalanceBeforeThx) {
            subValue = _pureFromBalanceBeforeThx;
        }
        if (_isFromHodler) {
            finalValue = finalValue.sub(subValue).sub(_penalty);
        }
        if (_isToHodler) {
            finalValue = finalValue.add(_value);
        }
        _holdersSupply = finalValue;
    }

    function _isValidHodler(address _address) private view returns (bool) {
        return !_isContract(_address) && _address != owner;
    }

    function _isContract(address _address) private view returns (bool) {
        uint256 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":[{"internalType":"address","name":"_address","type":"address"}],"name":"addRecipientException","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addSenderException","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addWhitelistedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"bonusSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_address","type":"address"}],"name":"hodlMinimumAchived","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"hodlTimeOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdersSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"isRecipientException","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isSenderException","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelistedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"pureBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"pureBonusOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeRecipientException","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeSenderException","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhitelistedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"totalHodlSinceLastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

608060405260008055600060015560006002556000600355600a600b55686c6b935b8bbd400000600c556040518060400160405280600881526020017f4a757374486f646c0000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4a480000000000000000000000000000000000000000000000000000000000008152508160089080519060200190620000ad92919062002913565b508060099080519060200190620000c692919062002913565b506012600a60006101000a81548160ff021916908360ff16021790555050506000600c549050600042905033600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001607304689288b3d01d37a8fe85688042238c1cd9e5fa67563471d38188a210620026c160201b60201c565b60016000815480929190600101919050555080600460007304689288b3d01d37a8fe85688042238c1cd9e5fa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067563471d38188a210820391506200020573048aaea5d07a21196e6df02e13ccdb23218f65ae671b4447ccc8edff80620026c160201b60201c565b600160008154809291906001019190505550806004600073048aaea5d07a21196e6df02e13ccdb23218f65ae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550671b4447ccc8edff8082039150620002a473074abaaff265fd872f438d37d22d31bf1d93fdc8613c4e620026c160201b60201c565b600160008154809291906001019190505550806004600073074abaaff265fd872f438d37d22d31bf1d93fdc873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c4e82039150620003437315151ac99bba4ee669199efbdcd0d3af6d70fcb66722065902394f2ab0620026c160201b60201c565b60016000815480929190600101919050555080600460007315151ac99bba4ee669199efbdcd0d3af6d70fcb673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506722065902394f2ab082039150620003e873151c67becfd20664a8bfe016569ebca04f71342e6725f85110da6dc590620026c160201b60201c565b600160008154809291906001019190505550806004600073151c67becfd20664a8bfe016569ebca04f71342e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506725f85110da6dc590820391506200048d7317e00383a843a9922bca3b280c0ade9f8ba484496736ca8a38d29d8000620026c160201b60201c565b60016000815480929190600101919050555080600460007317e00383a843a9922bca3b280c0ade9f8ba4844973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506736ca8a38d29d80008203915062000533731c8ad03a5de826d4e4bcb842e3604e1e2f3e835968014bed951aaabd6700620026c160201b60201c565b6001600081548092919060010191905055508060046000731c8ad03a5de826d4e4bcb842e3604e1e2f3e835973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068014bed951aaabd670082039150620005d9731df63e28c9ede182d6dfb6bbc8c48d6fa537ccef670f5fd185e36f7760620026c160201b60201c565b6001600081548092919060010191905055508060046000731df63e28c9ede182d6dfb6bbc8c48d6fa537ccef73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670f5fd185e36f7760820391506200067f731f2facaff2a95027398f946d6868a7dba5a976676804f41569c6b0437a80620026c160201b60201c565b6001600081548092919060010191905055508060046000731f2facaff2a95027398f946d6868a7dba5a9766773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506804f41569c6b0437a80820391506200072573205b7b1daee38c4744c6f0b782e27bca286c23db670328dc13d3aaedf0620026c160201b60201c565b600160008154809291906001019190505550806004600073205b7b1daee38c4744c6f0b782e27bca286c23db73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670328dc13d3aaedf082039150620007ca73206971261b391763458134212feeab23608746766718b3c90765fa89b0620026c160201b60201c565b600160008154809291906001019190505550806004600073206971261b391763458134212feeab236087467673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506718b3c90765fa89b0820391506200086f7325f0020a60ae7a375c0970750f5f85c6680bf9bf678f63f2117d9a9ba0620026c160201b60201c565b60016000815480929190600101919050555080600460007325f0020a60ae7a375c0970750f5f85c6680bf9bf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550678f63f2117d9a9ba08203915062000915732759321df4c0f0475c41bbf9d17891bd42e32c3c6801717f34b9c66c6b90620026c160201b60201c565b6001600081548092919060010191905055508060046000732759321df4c0f0475c41bbf9d17891bd42e32c3c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506801717f34b9c66c6b9082039150620009bb732b6336412636616e9158252999432e1d6938f89f672bb3ce546e5a8730620026c160201b60201c565b6001600081548092919060010191905055508060046000732b6336412636616e9158252999432e1d6938f89f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550672bb3ce546e5a87308203915062000a607334f63cf9e5347d6b00403907ed65ef148177668b67375f53dc2dcf0000620026c160201b60201c565b60016000815480929190600101919050555080600460007334f63cf9e5347d6b00403907ed65ef148177668b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067375f53dc2dcf00008203915062000b05733baaaffbb4ede1ffa7b512bcea490ceda2db0ee6670de0b6b3a7640000620026c160201b60201c565b6001600081548092919060010191905055508060046000733baaaffbb4ede1ffa7b512bcea490ceda2db0ee673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670de0b6b3a76400008203915062000baa733c9b75bfa82ddbb4613a0eae58d636260436273a670d01706801e95768620026c160201b60201c565b6001600081548092919060010191905055508060046000733c9b75bfa82ddbb4613a0eae58d636260436273a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670d01706801e957688203915062000c50733f3fd86382f4d69e1c4e4cf5296b82b3d90fd69368015c16fc7fa7fe1950620026c160201b60201c565b6001600081548092919060010191905055508060046000733f3fd86382f4d69e1c4e4cf5296b82b3d90fd69373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068015c16fc7fa7fe19508203915062000cf673424dddc996c1df3d3e9d3d9d89aa32ea5fadb51f67256b60b6b0e16650620026c160201b60201c565b600160008154809291906001019190505550806004600073424dddc996c1df3d3e9d3d9d89aa32ea5fadb51f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067256b60b6b0e166508203915062000d9c73449a7e1c10d2a0f68243fe104f9330fe16fefe1a6804a19162313804af80620026c160201b60201c565b600160008154809291906001019190505550806004600073449a7e1c10d2a0f68243fe104f9330fe16fefe1a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506804a19162313804af808203915062000e42735139e12886d06c57f20a345c583ad7f3b67d3a5c670953c53ecff0c190620026c160201b60201c565b6001600081548092919060010191905055508060046000735139e12886d06c57f20a345c583ad7f3b67d3a5c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670953c53ecff0c1908203915062000ee77352217443e3fbed2ddf2364f8e174dec88a72b3a6678c2a687ce7720000620026c160201b60201c565b60016000815480929190600101919050555080600460007352217443e3fbed2ddf2364f8e174dec88a72b3a673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550678c2a687ce77200008203915062000f8c73553c0a82a14f2fb77437917e87643a76fbed8cf467115002a3f54cc000620026c160201b60201c565b600160008154809291906001019190505550806004600073553c0a82a14f2fb77437917e87643a76fbed8cf473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067115002a3f54cc00082039150620010317356e2356c0754fae16ac4aeb96d3c843bec6aff67673311d13dc876e050620026c160201b60201c565b60016000815480929190600101919050555080600460007356e2356c0754fae16ac4aeb96d3c843bec6aff6773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550673311d13dc876e05082039150620010d77359d7b684bced2a28fedebfc09ce3a795f49a462068030607bc01654aff00620026c160201b60201c565b60016000815480929190600101919050555080600460007359d7b684bced2a28fedebfc09ce3a795f49a462073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068030607bc01654aff00820391506200117d735d1ee9f2a17accf72532dd17ad36f0b8909a38ca674740b1b5f423f6c0620026c160201b60201c565b6001600081548092919060010191905055508060046000735d1ee9f2a17accf72532dd17ad36f0b8909a38ca73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550674740b1b5f423f6c08203915062001222737527f8e3a272699f91065b13ef51292034437c7d670de0b6b3a7640000620026c160201b60201c565b6001600081548092919060010191905055508060046000737527f8e3a272699f91065b13ef51292034437c7d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670de0b6b3a764000082039150620012c77378024ea589a845fb72f285371901614baa04c168671f0f1f99e0ebe840620026c160201b60201c565b60016000815480929190600101919050555080600460007378024ea589a845fb72f285371901614baa04c16873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550671f0f1f99e0ebe840820391506200136c737944449ed57ce81a6cf7ff557f3e917b7a4680866720eefa45ab02e090620026c160201b60201c565b6001600081548092919060010191905055508060046000737944449ed57ce81a6cf7ff557f3e917b7a46808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506720eefa45ab02e090820391506200141173830b69752e151da5d31fb355fc6f636c3bf5e5f86721d9a21588958ef0620026c160201b60201c565b600160008154809291906001019190505550806004600073830b69752e151da5d31fb355fc6f636c3bf5e5f873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506721d9a21588958ef082039150620014b6738a449393ce741a3ceabd9373008be53db12bf246673b99fe5de1b815b0620026c160201b60201c565b6001600081548092919060010191905055508060046000738a449393ce741a3ceabd9373008be53db12bf24673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550673b99fe5de1b815b0820391506200155b738e09fc3d36b0595086538a92befe13d09c072661671f8f83ce8c52ad40620026c160201b60201c565b6001600081548092919060010191905055508060046000738e09fc3d36b0595086538a92befe13d09c07266173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550671f8f83ce8c52ad408203915062001600739016563f047fde2a42bf68d9d3670a91e746f1bc6715d235eaa4602c30620026c160201b60201c565b6001600081548092919060010191905055508060046000739016563f047fde2a42bf68d9d3670a91e746f1bc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506715d235eaa4602c3082039150620016a5739317d29f94f9f399ed27048a14bbae81d7fd73fb676e5412e10c5b0000620026c160201b60201c565b6001600081548092919060010191905055508060046000739317d29f94f9f399ed27048a14bbae81d7fd73fb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550676e5412e10c5b0000820391506200174b739853c360cccaf3968f8dd46d50c133e61ddb67b16806c9b755b2eec06240620026c160201b60201c565b6001600081548092919060010191905055508060046000739853c360cccaf3968f8dd46d50c133e61ddb67b173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506806c9b755b2eec0624082039150620017f2739bb354ddf9e43648a06fb69420425ff6c059d2316803bc48c82d38d46080620026c160201b60201c565b6001600081548092919060010191905055508060046000739bb354ddf9e43648a06fb69420425ff6c059d23173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506803bc48c82d38d460808203915062001898739d2c491a573114d5fbb7aad5afc29637f33f31a467373bcce9be0e0000620026c160201b60201c565b6001600081548092919060010191905055508060046000739d2c491a573114d5fbb7aad5afc29637f33f31a473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067373bcce9be0e0000820391506200193d739df06e44585d1a5b9869a5e5630709e1c74b3b3a67032122803fcad478620026c160201b60201c565b6001600081548092919060010191905055508060046000739df06e44585d1a5b9869a5e5630709e1c74b3b3a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067032122803fcad47882039150620019e273a3544d5a648d8b4649455c836743b4ab49289bc16703532966826b6aa8620026c160201b60201c565b600160008154809291906001019190505550806004600073a3544d5a648d8b4649455c836743b4ab49289bc173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506703532966826b6aa88203915062001a8773a574469c959803481f25f825b41f1137bafcf095674d27054a5b286760620026c160201b60201c565b600160008154809291906001019190505550806004600073a574469c959803481f25f825b41f1137bafcf09573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550674d27054a5b2867608203915062001b2c73a5aad2cd204e43dc16e4f93c4a20f4a3036124cd67e6f11aa29e4f13a0620026c160201b60201c565b600160008154809291906001019190505550806004600073a5aad2cd204e43dc16e4f93c4a20f4a3036124cd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067e6f11aa29e4f13a08203915062001bd173aa3d85ad9d128dfecb55424085754f6dfa643eb1670e0aeb7fb3528000620026c160201b60201c565b600160008154809291906001019190505550806004600073aa3d85ad9d128dfecb55424085754f6dfa643eb173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670e0aeb7fb35280008203915062001c7773b086755a5b0b10bd53956936588555f586f5f49d68041043d7b5b9c957e0620026c160201b60201c565b600160008154809291906001019190505550806004600073b086755a5b0b10bd53956936588555f586f5f49d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068041043d7b5b9c957e08203915062001d1d73b1fe569478506aefec2bcc84321e8d2053fe3fbb6784a553033b151330620026c160201b60201c565b600160008154809291906001019190505550806004600073b1fe569478506aefec2bcc84321e8d2053fe3fbb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506784a553033b1513308203915062001dc273c07378e46f4a9d7de862f3d8a51182b48e5166b467357289851834bb00620026c160201b60201c565b600160008154809291906001019190505550806004600073c07378e46f4a9d7de862f3d8a51182b48e5166b473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555067357289851834bb008203915062001e6673c56c068c41149fab578e6e9321517a6c43be5920665641ca4d47aa90620026c160201b60201c565b600160008154809291906001019190505550806004600073c56c068c41149fab578e6e9321517a6c43be592073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550665641ca4d47aa908203915062001f0a73c7789b84995e56ef8c1902279695b7b72f6844c1671bc16d674ec80000620026c160201b60201c565b600160008154809291906001019190505550806004600073c7789b84995e56ef8c1902279695b7b72f6844c173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550671bc16d674ec800008203915062001faf73e18bb5af1c31177898fe8ebb42e7c1a8f5d092d76730fe1ce271a171c0620026c160201b60201c565b600160008154809291906001019190505550806004600073e18bb5af1c31177898fe8ebb42e7c1a8f5d092d773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506730fe1ce271a171c0820391506200205473e20f75642b97c11af651a81afcbbc6d7b4e329816709a757316f902290620026c160201b60201c565b600160008154809291906001019190505550806004600073e20f75642b97c11af651a81afcbbc6d7b4e3298173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506709a757316f90229082039150620020fa73e7ba0da73b9d15f5d628bc99a2c014d8396917626801646705c54ec6f260620026c160201b60201c565b600160008154809291906001019190505550806004600073e7ba0da73b9d15f5d628bc99a2c014d83969176273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506801646705c54ec6f260820391506200219f73e950c23891e41e5bb3fe4a45dde62752a4bbf9fb667cff47cbe36a04620026c160201b60201c565b600160008154809291906001019190505550806004600073e950c23891e41e5bb3fe4a45dde62752a4bbf9fb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550667cff47cbe36a04820391506200224373ec1625f0be12b31d8edfdd165f7750ee4630a4756732d39d854f31cc20620026c160201b60201c565b600160008154809291906001019190505550806004600073ec1625f0be12b31d8edfdd165f7750ee4630a47573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506732d39d854f31cc2082039150620022e973ee9eafddcdfbffab6b9e989b71a13684090cdfaa68012490bed9cad921a0620026c160201b60201c565b600160008154809291906001019190505550806004600073ee9eafddcdfbffab6b9e989b71a13684090cdfaa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068012490bed9cad921a0820391506200238f73f82ffee7eda1dd212dd0d867e57aa174dc207d7e672c58db3923b721b0620026c160201b60201c565b600160008154809291906001019190505550806004600073f82ffee7eda1dd212dd0d867e57aa174dc207d7e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550672c58db3923b721b0820391506200243573f872ea3e3bc2d9efcb660de497a6f1c50e4ad25d680163c1ff1511c6a100620026c160201b60201c565b600160008154809291906001019190505550806004600073f872ea3e3bc2d9efcb660de497a6f1c50e4ad25d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550680163c1ff1511c6a10082039150620024db73fb04d99d7024bef7047cf6a16c4e33f48e1c49816718d9da1eea7a9920620026c160201b60201c565b600160008154809291906001019190505550806004600073fb04d99d7024bef7047cf6a16c4e33f48e1c498173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506718d9da1eea7a9920820391506200258073fc04ec649be75e2b9bfe15d49e385f65277103b4671e793bcf085cdc80620026c160201b60201c565b600160008154809291906001019190505550806004600073fc04ec649be75e2b9bfe15d49e385f65277103b473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550671e793bcf085cdc80820391506200262573ffe10be9b63a4005dd1e631ee6fca3f6d60242696730e25b03b13bb960620026c160201b60201c565b600160008154809291906001019190505550806004600073ffe10be9b63a4005dd1e631ee6fca3f6d602426973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506730e25b03b13bb9608203915081600c5403600381905550620026b93383620026c160201b60201c565b5050620029c2565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562002749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018062005ecf6026913960400191505060405180910390fd5b6200275d600083836200288560201b60201c565b62002779816007546200288a60201b62002afd1790919060201c565b600781905550620027d881600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200288a60201b62002afd1790919060201c565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b60008082840190508381101562002909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200295657805160ff191683800117855562002987565b8280016001018555821562002987579182015b828111156200298657825182559160200191906001019062002969565b5b5090506200299691906200299a565b5090565b620029bf91905b80821115620029bb576000816000905550600101620029a1565b5090565b90565b6134fd80620029d26000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a082311161010457806397c540a8116100a2578063be49457311610071578063be49457314610a0a578063dd62ed3e14610a62578063f07ae52f14610ada578063f19211db14610b36576101cf565b806397c540a81461088a578063a457c2d7146108e2578063a9059cbb14610948578063baedc445146109ae576101cf565b8063863843bc116100de578063863843bc1461074357806388f9e04f14610761578063893d20e8146107bd57806395d89b4114610807576101cf565b806370a082311461063757806371b766171461068f5780637851eca2146106eb576101cf565b80631b9e2fad11610171578063395093511161014b57806339509351146104fb57806347d8f55914610561578063664e43401461057f57806367cca592146105db576101cf565b80631b9e2fad146103f557806323b872dd14610451578063313ce567146104d7576101cf565b806306fdde03116101ad57806306fdde03146102aa578063095ea7b31461032d57806313af40351461039357806318160ddd146103d7576101cf565b806302640bdc146101d457806303d3d3ca1461023057806305ff91101461024e575b600080fd5b610216600480360360208110156101ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b92565b604051808215151515815260200191505060405180910390f35b610238610beb565b6040518082815260200191505060405180910390f35b6102906004803603602081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf5565b604051808215151515815260200191505060405180910390f35b6102b2610d81565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f25780820151818401526020810190506102d7565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103796004803603604081101561034357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e23565b604051808215151515815260200191505060405180910390f35b6103d5600480360360208110156103a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e41565b005b6103df610f2b565b6040518082815260200191505060405180910390f35b6104376004803603602081101561040b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f35565b604051808215151515815260200191505060405180910390f35b6104bd6004803603606081101561046757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fcb565b604051808215151515815260200191505060405180910390f35b6104df61117c565b604051808260ff1660ff16815260200191505060405180910390f35b6105476004803603604081101561051157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611193565b604051808215151515815260200191505060405180910390f35b610569611246565b6040518082815260200191505060405180910390f35b6105c16004803603602081101561059557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124f565b604051808215151515815260200191505060405180910390f35b61061d600480360360208110156105f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113cd565b604051808215151515815260200191505060405180910390f35b6106796004803603602081101561064d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115b4565b6040518082815260200191505060405180910390f35b6106d1600480360360208110156106a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611631565b604051808215151515815260200191505060405180910390f35b61072d6004803603602081101561070157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611754565b6040518082815260200191505060405180910390f35b61074b61179d565b6040518082815260200191505060405180910390f35b6107a36004803603602081101561077757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117a7565b604051808215151515815260200191505060405180910390f35b6107c5611808565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61080f611832565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561084f578082015181840152602081019050610834565b50505050905090810190601f16801561087c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108cc600480360360208110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118d4565b6040518082815260200191505060405180910390f35b61092e600480360360408110156108f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611937565b604051808215151515815260200191505060405180910390f35b6109946004803603604081101561095e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a04565b604051808215151515815260200191505060405180910390f35b6109f0600480360360208110156109c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb3565b604051808215151515815260200191505060405180910390f35b610a4c60048036036020811015610a2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d9a565b6040518082815260200191505060405180910390f35b610ac460048036036040811015610a7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de3565b6040518082815260200191505060405180910390f35b610b1c60048036036020811015610af057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e6a565b604051808215151515815260200191505060405180910390f35b610b7860048036036020811015610b4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff6565b604051808215151515815260200191505060405180910390f35b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b6000600354905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b610ca682611ff6565b610cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806132a26041913960600191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff0219169055505060019050919050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e195780601f10610dee57610100808354040283529160200191610e19565b820191906000526020600020905b815481529060010190602001808311610dfc57829003601f168201915b5050505050905090565b6000610e37610e3061204f565b8484612057565b6001905092915050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b80600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600754905090565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600080610fd78561224e565b90506000610fe48561224e565b9050610ff086866122bb565b1561116e5760008090506000859050600061100a89611d9a565b9050600061101789611d9a565b905085801561102c575061102a8a6117a7565b155b1561107157611059606461104b600b548b61243190919063ffffffff16565b6124b790919063ffffffff16565b935061106e848961250190919063ffffffff16565b92505b61107c8a8a8561254b565b15611169576000841115611120576110dc84600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250190919063ffffffff16565b600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61112c8a8a8888612624565b6111388a8787846127de565b61114388858461286e565b61115086868587866128e1565b61115a8a8a612953565b60019650505050505050611175565b505050505b6000925050505b9392505050565b6000600a60009054906101000a900460ff16905090565b600061123c6111a061204f565b8461123785600660006111b161204f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afd90919063ffffffff16565b612057565b6001905092915050565b60008054905090565b600061125a82610f35565b156112b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061333e6035913960400191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505060019050919050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b61147e82610b92565b156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260428152602001806132606042913960600191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505060019050919050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111801561160e575061160d836117a7565b5b156116275761161d8382612b85565b810191505061162c565b809150505b919050565b600061163c82610f35565b611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806133736031913960400191505060405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff0219169055505060019050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600254905090565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111801561180057508062093a804203115b915050919050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118ca5780601f1061189f576101008083540402835291602001916118ca565b820191906000526020600020905b8154815290600101906020018083116118ad57829003601f168201915b5050505050905090565b6000611930600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611922846115b4565b61250190919063ffffffff16565b9050919050565b60006119fa61194461204f565b846119f5856040518060600160405280602c81526020016133ef602c91396006600061196e61204f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c559092919063ffffffff16565b612057565b6001905092915050565b600080611a103361224e565b90506000611a1d8561224e565b9050611a2933866122bb565b15611ba657600080905060008590506000611a4333611d9a565b90506000611a5089611d9a565b9050858015611a655750611a63336117a7565b155b15611aaa57611a926064611a84600b548b61243190919063ffffffff16565b6124b790919063ffffffff16565b9350611aa7848961250190919063ffffffff16565b92505b611ab48984612d15565b15611ba1576000841115611b5857611b1484600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250190919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611b64338a8888612624565b611b70338787846127de565b611b7b88858461286e565b611b8886868587866128e1565b611b92338a612953565b60019650505050505050611bad565b505050505b6000925050505b92915050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b611c6482611ff6565b15611cba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806134836045913960600191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505060019050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b611f1b82610b92565b611f70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806131ca603e913960400191505060405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff0219169055505060019050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613235602b913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131a16029913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061225982612d33565b1580156122b45750600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061231e575061231d82612d33565b5b8061232e575061232d83610b92565b5b8061233e575061233d82611ff6565b5b806123d25750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff165b612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613447603c913960400191505060405180910390fd5b6001905092915050565b60008083141561244457600090506124b1565b600082840290508284828161245557fe5b04146124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133a46021913960400191505060405180910390fd5b809150505b92915050565b60006124f983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d46565b905092915050565b600061254383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c55565b905092915050565b6000612558848484612e0c565b6126198461256461204f565b612614856040518060600160405280602f81526020016132e3602f9139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006125ca61204f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c559092919063ffffffff16565b612057565b600190509392505050565b81801561267057506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15612715576126c9600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460005461250190919063ffffffff16565b6000819055506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80156127d8576000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600042905061278b8261277d83600054612afd90919063ffffffff16565b61250190919063ffffffff16565b60008190555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50505050565b82801561282a57506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1561284357600160008154809291906001900391905055505b8180156128505750600081145b15612868576001600081548092919060010191905055505b50505050565b808311156128c057600061288b828561250190919063ffffffff16565b90506128b4836128a68360025461250190919063ffffffff16565b612afd90919063ffffffff16565b600281905550506128dc565b6128d582600254612afd90919063ffffffff16565b6002819055505b505050565b600060035490506000849050828511156128f9578290505b86156129275761292484612916838561250190919063ffffffff16565b61250190919063ffffffff16565b91505b8515612943576129408583612afd90919063ffffffff16565b91505b8160038190555050505050505050565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16612af95760405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff0219169083151502179055509050505b5050565b600080828401905083811015612b7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080612b90613142565b90506000612b9e858361314f565b905060008054612bb96001548561243190919063ffffffff16565b039050612c4a670de0b6b3a7640000612c3c612c2b6002612c1d612bf087670de0b6b3a76400008a026124b790919063ffffffff16565b612c0f600354670de0b6b3a76400008e026124b790919063ffffffff16565b612afd90919063ffffffff16565b6124b790919063ffffffff16565b60025461243190919063ffffffff16565b6124b790919063ffffffff16565b935050505092915050565b6000838311158290612d02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cc7578082015181840152602081019050612cac565b50505050905090810190601f168015612cf45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000612d29612d2261204f565b8484612e0c565b6001905092915050565b600080823b905060008111915050919050565b60008083118290612df2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612db7578082015181840152602081019050612d9c565b50505050905090810190601f168015612de45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612dfe57fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061341b602c913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806133c5602a913960400191505060405180910390fd5b612f2383838361319b565b60008190506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000612f77866115b4565b90508184118015612f885750808411155b15612f91578192505b612ffd836040518060600160405280602d8152602001613208602d9139600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c559092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309284600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afd90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3505050505050565b600062093a804203905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548203905092915050565b50505056fe4a757374486f646c426173653a20617070726f766520746f20746865207a65726f20616464726573734a757374486f646c3a2061646472657373206973206e6f742070726573656e7420696e207468652073656e64657220657863657074696f6e73206c6973744a757374486f646c426173653a207472616e7366657220616d6f756e7420657863656564732062616c616e63654a757374486f646c426173653a20617070726f76652066726f6d20746865207a65726f20616464726573734a757374486f646c3a206164647265737320697320616c72656164792070726573656e7420696e207468652073656e64657220657863657074696f6e73206c6973744a757374486f646c3a2061646472657373206973206e6f742070726573656e7420696e2074686520726563697069656e7420657863657074696f6e73206c6973744a757374486f646c426173653a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654a757374486f646c3a206f6e6c79206f776e65722063616e20706572666f726d207468697320616374696f6e4a757374486f646c3a206164647265737320697320616c72656164792070726573656e7420696e207468652077686974656c6973744a757374486f646c3a2061646472657373206973206e6f742070726573656e7420696e207468652077686974656c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774a757374486f646c426173653a207472616e7366657220746f20746865207a65726f20616464726573734a757374486f646c426173653a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4a757374486f646c426173653a207472616e736665722066726f6d20746865207a65726f20616464726573734a757374486f646c3a20796f7520617265206e6f7420616c6c6f77656420746f2073656e6420746f6b656e7320746f207468617420616464726573734a757374486f646c3a206164647265737320697320616c72656164792070726573656e7420696e2074686520726563697069656e7420657863657074696f6e73206c697374a26469706673582212207a30ca3ffe5342532cbd16ec1a3bb372bb68962ff9f59da89deb721c66b26b6764736f6c634300060600334a757374486f646c426173653a206d696e7420746f20746865207a65726f2061646472657373

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a082311161010457806397c540a8116100a2578063be49457311610071578063be49457314610a0a578063dd62ed3e14610a62578063f07ae52f14610ada578063f19211db14610b36576101cf565b806397c540a81461088a578063a457c2d7146108e2578063a9059cbb14610948578063baedc445146109ae576101cf565b8063863843bc116100de578063863843bc1461074357806388f9e04f14610761578063893d20e8146107bd57806395d89b4114610807576101cf565b806370a082311461063757806371b766171461068f5780637851eca2146106eb576101cf565b80631b9e2fad11610171578063395093511161014b57806339509351146104fb57806347d8f55914610561578063664e43401461057f57806367cca592146105db576101cf565b80631b9e2fad146103f557806323b872dd14610451578063313ce567146104d7576101cf565b806306fdde03116101ad57806306fdde03146102aa578063095ea7b31461032d57806313af40351461039357806318160ddd146103d7576101cf565b806302640bdc146101d457806303d3d3ca1461023057806305ff91101461024e575b600080fd5b610216600480360360208110156101ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b92565b604051808215151515815260200191505060405180910390f35b610238610beb565b6040518082815260200191505060405180910390f35b6102906004803603602081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bf5565b604051808215151515815260200191505060405180910390f35b6102b2610d81565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f25780820151818401526020810190506102d7565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103796004803603604081101561034357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e23565b604051808215151515815260200191505060405180910390f35b6103d5600480360360208110156103a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e41565b005b6103df610f2b565b6040518082815260200191505060405180910390f35b6104376004803603602081101561040b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f35565b604051808215151515815260200191505060405180910390f35b6104bd6004803603606081101561046757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fcb565b604051808215151515815260200191505060405180910390f35b6104df61117c565b604051808260ff1660ff16815260200191505060405180910390f35b6105476004803603604081101561051157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611193565b604051808215151515815260200191505060405180910390f35b610569611246565b6040518082815260200191505060405180910390f35b6105c16004803603602081101561059557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124f565b604051808215151515815260200191505060405180910390f35b61061d600480360360208110156105f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113cd565b604051808215151515815260200191505060405180910390f35b6106796004803603602081101561064d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115b4565b6040518082815260200191505060405180910390f35b6106d1600480360360208110156106a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611631565b604051808215151515815260200191505060405180910390f35b61072d6004803603602081101561070157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611754565b6040518082815260200191505060405180910390f35b61074b61179d565b6040518082815260200191505060405180910390f35b6107a36004803603602081101561077757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117a7565b604051808215151515815260200191505060405180910390f35b6107c5611808565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61080f611832565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561084f578082015181840152602081019050610834565b50505050905090810190601f16801561087c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108cc600480360360208110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118d4565b6040518082815260200191505060405180910390f35b61092e600480360360408110156108f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611937565b604051808215151515815260200191505060405180910390f35b6109946004803603604081101561095e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a04565b604051808215151515815260200191505060405180910390f35b6109f0600480360360208110156109c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb3565b604051808215151515815260200191505060405180910390f35b610a4c60048036036020811015610a2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d9a565b6040518082815260200191505060405180910390f35b610ac460048036036040811015610a7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de3565b6040518082815260200191505060405180910390f35b610b1c60048036036020811015610af057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e6a565b604051808215151515815260200191505060405180910390f35b610b7860048036036020811015610b4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff6565b604051808215151515815260200191505060405180910390f35b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b6000600354905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b610ca682611ff6565b610cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806132a26041913960600191505060405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff0219169055505060019050919050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e195780601f10610dee57610100808354040283529160200191610e19565b820191906000526020600020905b815481529060010190602001808311610dfc57829003601f168201915b5050505050905090565b6000610e37610e3061204f565b8484612057565b6001905092915050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b80600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600754905090565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600080610fd78561224e565b90506000610fe48561224e565b9050610ff086866122bb565b1561116e5760008090506000859050600061100a89611d9a565b9050600061101789611d9a565b905085801561102c575061102a8a6117a7565b155b1561107157611059606461104b600b548b61243190919063ffffffff16565b6124b790919063ffffffff16565b935061106e848961250190919063ffffffff16565b92505b61107c8a8a8561254b565b15611169576000841115611120576110dc84600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250190919063ffffffff16565b600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61112c8a8a8888612624565b6111388a8787846127de565b61114388858461286e565b61115086868587866128e1565b61115a8a8a612953565b60019650505050505050611175565b505050505b6000925050505b9392505050565b6000600a60009054906101000a900460ff16905090565b600061123c6111a061204f565b8461123785600660006111b161204f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afd90919063ffffffff16565b612057565b6001905092915050565b60008054905090565b600061125a82610f35565b156112b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061333e6035913960400191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505060019050919050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b61147e82610b92565b156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260428152602001806132606042913960600191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505060019050919050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111801561160e575061160d836117a7565b5b156116275761161d8382612b85565b810191505061162c565b809150505b919050565b600061163c82610f35565b611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806133736031913960400191505060405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff0219169055505060019050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600254905090565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111801561180057508062093a804203115b915050919050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118ca5780601f1061189f576101008083540402835291602001916118ca565b820191906000526020600020905b8154815290600101906020018083116118ad57829003601f168201915b5050505050905090565b6000611930600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611922846115b4565b61250190919063ffffffff16565b9050919050565b60006119fa61194461204f565b846119f5856040518060600160405280602c81526020016133ef602c91396006600061196e61204f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c559092919063ffffffff16565b612057565b6001905092915050565b600080611a103361224e565b90506000611a1d8561224e565b9050611a2933866122bb565b15611ba657600080905060008590506000611a4333611d9a565b90506000611a5089611d9a565b9050858015611a655750611a63336117a7565b155b15611aaa57611a926064611a84600b548b61243190919063ffffffff16565b6124b790919063ffffffff16565b9350611aa7848961250190919063ffffffff16565b92505b611ab48984612d15565b15611ba1576000841115611b5857611b1484600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250190919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611b64338a8888612624565b611b70338787846127de565b611b7b88858461286e565b611b8886868587866128e1565b611b92338a612953565b60019650505050505050611bad565b505050505b6000925050505b92915050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b611c6482611ff6565b15611cba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806134836045913960600191505060405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505060019050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613312602c913960400191505060405180910390fd5b611f1b82610b92565b611f70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806131ca603e913960400191505060405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff0219169055505060019050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613235602b913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612163576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806131a16029913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061225982612d33565b1580156122b45750600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061231e575061231d82612d33565b5b8061232e575061232d83610b92565b5b8061233e575061233d82611ff6565b5b806123d25750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff165b612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613447603c913960400191505060405180910390fd5b6001905092915050565b60008083141561244457600090506124b1565b600082840290508284828161245557fe5b04146124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133a46021913960400191505060405180910390fd5b809150505b92915050565b60006124f983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d46565b905092915050565b600061254383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c55565b905092915050565b6000612558848484612e0c565b6126198461256461204f565b612614856040518060600160405280602f81526020016132e3602f9139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006125ca61204f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c559092919063ffffffff16565b612057565b600190509392505050565b81801561267057506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15612715576126c9600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460005461250190919063ffffffff16565b6000819055506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80156127d8576000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600042905061278b8261277d83600054612afd90919063ffffffff16565b61250190919063ffffffff16565b60008190555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50505050565b82801561282a57506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1561284357600160008154809291906001900391905055505b8180156128505750600081145b15612868576001600081548092919060010191905055505b50505050565b808311156128c057600061288b828561250190919063ffffffff16565b90506128b4836128a68360025461250190919063ffffffff16565b612afd90919063ffffffff16565b600281905550506128dc565b6128d582600254612afd90919063ffffffff16565b6002819055505b505050565b600060035490506000849050828511156128f9578290505b86156129275761292484612916838561250190919063ffffffff16565b61250190919063ffffffff16565b91505b8515612943576129408583612afd90919063ffffffff16565b91505b8160038190555050505050505050565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16612af95760405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160011515815250600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff0219169083151502179055509050505b5050565b600080828401905083811015612b7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080612b90613142565b90506000612b9e858361314f565b905060008054612bb96001548561243190919063ffffffff16565b039050612c4a670de0b6b3a7640000612c3c612c2b6002612c1d612bf087670de0b6b3a76400008a026124b790919063ffffffff16565b612c0f600354670de0b6b3a76400008e026124b790919063ffffffff16565b612afd90919063ffffffff16565b6124b790919063ffffffff16565b60025461243190919063ffffffff16565b6124b790919063ffffffff16565b935050505092915050565b6000838311158290612d02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cc7578082015181840152602081019050612cac565b50505050905090810190601f168015612cf45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000612d29612d2261204f565b8484612e0c565b6001905092915050565b600080823b905060008111915050919050565b60008083118290612df2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612db7578082015181840152602081019050612d9c565b50505050905090810190601f168015612de45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612dfe57fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061341b602c913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806133c5602a913960400191505060405180910390fd5b612f2383838361319b565b60008190506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000612f77866115b4565b90508184118015612f885750808411155b15612f91578192505b612ffd836040518060600160405280602d8152602001613208602d9139600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c559092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309284600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afd90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3505050505050565b600062093a804203905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548203905092915050565b50505056fe4a757374486f646c426173653a20617070726f766520746f20746865207a65726f20616464726573734a757374486f646c3a2061646472657373206973206e6f742070726573656e7420696e207468652073656e64657220657863657074696f6e73206c6973744a757374486f646c426173653a207472616e7366657220616d6f756e7420657863656564732062616c616e63654a757374486f646c426173653a20617070726f76652066726f6d20746865207a65726f20616464726573734a757374486f646c3a206164647265737320697320616c72656164792070726573656e7420696e207468652073656e64657220657863657074696f6e73206c6973744a757374486f646c3a2061646472657373206973206e6f742070726573656e7420696e2074686520726563697069656e7420657863657074696f6e73206c6973744a757374486f646c426173653a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654a757374486f646c3a206f6e6c79206f776e65722063616e20706572666f726d207468697320616374696f6e4a757374486f646c3a206164647265737320697320616c72656164792070726573656e7420696e207468652077686974656c6973744a757374486f646c3a2061646472657373206973206e6f742070726573656e7420696e207468652077686974656c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774a757374486f646c426173653a207472616e7366657220746f20746865207a65726f20616464726573734a757374486f646c426173653a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4a757374486f646c426173653a207472616e736665722066726f6d20746865207a65726f20616464726573734a757374486f646c3a20796f7520617265206e6f7420616c6c6f77656420746f2073656e6420746f6b656e7320746f207468617420616464726573734a757374486f646c3a206164647265737320697320616c72656164792070726573656e7420696e2074686520726563697069656e7420657863657074696f6e73206c697374a26469706673582212207a30ca3ffe5342532cbd16ec1a3bb372bb68962ff9f59da89deb721c66b26b6764736f6c63430006060033

Deployed Bytecode Sourcemap

22075:23007:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22075:23007:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;37348:131:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;37348:131:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16971:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38511:281;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38511:281:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16487:83;;;:::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;16487:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18454:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18454:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37251:89;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;37251:89:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16764:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38800:147;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38800:147:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40864:1326;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40864:1326:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16673:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18967:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18967:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17074:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38955:281;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38955:281:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37487:287;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;37487:287:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17193:310;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17193:310:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39244:263;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39244:263:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17782:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17782:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16872:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17909:195;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17909:195:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37162:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16578: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;16578:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17635:139;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17635:139:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19193:276;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;19193:276:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39515:1341;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39515:1341:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38204:299;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38204:299:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17511:116;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17511:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18295:151;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18295:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37782:269;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;37782:269:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38059:137;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38059:137:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37348:131;37414:4;37438:16;:26;37455:8;37438:26;;;;;;;;;;;;;;;:33;;;;;;;;;;;;37431:40;;37348:131;;;:::o;16971:95::-;17017:7;17044:14;;17037:21;;16971:95;:::o;38511:281::-;38590:4;22569:5;;;;;;;;;;;22555:19;;:10;:19;;;22547:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38615:30:::1;38636:8;38615:20;:30::i;:::-;38607:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38733:19;:29;38753:8;38733:29;;;;;;;;;;;;;;;;38726:36:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38780:4;38773:11;;38511:281:::0;;;:::o;16487:83::-;16524:13;16557:5;16550:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16487:83;:::o;18454:169::-;18537:4;18554:39;18563:12;:10;:12::i;:::-;18577:7;18586:6;18554:8;:39::i;:::-;18611:4;18604:11;;18454:169;;;;:::o;37251:89::-;22569:5;;;;;;;;;;;22555:19;;:10;:19;;;22547:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37324:8:::1;37316:5;;:16;;;;;;;;;;;;;;;;;;37251:89:::0;:::o;16764:100::-;16817:7;16844:12;;16837:19;;16764:100;:::o;38800:147::-;38868:4;38892:18;:30;38911:10;38892:30;;;;;;;;;;;;;;;:40;38923:8;38892:40;;;;;;;;;;;;;;;:47;;;;;;;;;;;;38885:54;;38800:147;;;:::o;40864:1326::-;40955:4;40972:17;40992:21;41007:5;40992:14;:21::i;:::-;40972:41;;41024:15;41042:19;41057:3;41042:14;:19::i;:::-;41024:37;;41076:26;41091:5;41098:3;41076:14;:26::i;:::-;41072:1088;;;41119:15;41137:1;41119:19;;41153:18;41174:6;41153:27;;41195:32;41230:20;41244:5;41230:13;:20::i;:::-;41195:55;;41265:30;41298:18;41312:3;41298:13;:18::i;:::-;41265:51;;41335:12;:42;;;;;41352:25;41371:5;41352:18;:25::i;:::-;41351:26;41335:42;41331:177;;;41408:33;41437:3;41408:24;41419:12;;41408:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41398:43;;41473:19;41484:7;41473:6;:10;;:19;;;;:::i;:::-;41460:32;;41331:177;41526:42;41545:5;41552:3;41557:10;41526:18;:42::i;:::-;41522:627;;;41603:1;41593:7;:11;41589:108;;;41648:29;41669:7;41648:9;:16;41658:5;41648:16;;;;;;;;;;;;;;;;:20;;:29;;;;:::i;:::-;41629:9;:16;41639:5;41629:16;;;;;;;;;;;;;;;:48;;;;41589:108;41715:50;41728:5;41735:3;41740:12;41754:10;41715:12;:50::i;:::-;41784:76;41804:5;41811:12;41825:10;41837:22;41784:19;:76::i;:::-;41879:61;41898:6;41906:7;41915:24;41879:18;:61::i;:::-;41959:93;41980:12;41994:10;42006;42018:7;42027:24;41959:20;:93::i;:::-;42071:32;42092:5;42099:3;42071:20;:32::i;:::-;42129:4;42122:11;;;;;;;;;;41522:627;41072:1088;;;;;42177:5;42170:12;;;;40864:1326;;;;;;:::o;16673:83::-;16714:5;16739:9;;;;;;;;;;;16732:16;;16673:83;:::o;18967:218::-;19055:4;19072:83;19081:12;:10;:12::i;:::-;19095:7;19104:50;19143:10;19104:11;:25;19116:12;:10;:12::i;:::-;19104:25;;;;;;;;;;;;;;;:34;19130:7;19104:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19072:8;:83::i;:::-;19173:4;19166:11;;18967:218;;;;:::o;17074:111::-;17128:7;17155:22;;17148:29;;17074:111;:::o;38955:281::-;39019:4;39045:29;39065:8;39045:19;:29::i;:::-;39044:30;39036:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39186:20;;;;;;;;39191:8;39186:20;;;;;;39201:4;39186:20;;;;;39143:18;:30;39162:10;39143:30;;;;;;;;;;;;;;;:40;39174:8;39143:40;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39224:4;39217:11;;38955:281;;;:::o;37487:287::-;37560:4;22569:5;;;;;;;;;;;22555:19;;:10;:19;;;22547:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37586:27:::1;37604:8;37586:17;:27::i;:::-;37585:28;37577:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37724:20;;;;;;;;37729:8;37724:20;;;;;;37739:4;37724:20;;;;::::0;37695:16:::1;:26;37712:8;37695:26;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37762:4;37755:11;;37487:287:::0;;;:::o;17193:310::-;17259:7;17279:15;17297:9;:18;17307:7;17297:18;;;;;;;;;;;;;;;;17279:36;;17340:1;17330:7;:11;:42;;;;;17345:27;17364:7;17345:18;:27::i;:::-;17330:42;17326:170;;;17406:31;17420:7;17429;17406:13;:31::i;:::-;17396:7;:41;17389:48;;;;;17326:170;17477:7;17470:14;;;17193:310;;;;:::o;39244:263::-;39311:4;39336:29;39356:8;39336:19;:29::i;:::-;39328:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39437:18;:30;39456:10;39437:30;;;;;;;;;;;;;;;:40;39468:8;39437:40;;;;;;;;;;;;;;;;39430:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39495:4;39488:11;;39244:263;;;:::o;17782:119::-;17841:7;17868:15;:25;17884:8;17868:25;;;;;;;;;;;;;;;;17861:32;;17782:119;;;:::o;16872:91::-;16916:7;16943:12;;16936:19;;16872:91;:::o;17909:195::-;17976:4;17993:16;18012:15;:25;18028:8;18012:25;;;;;;;;;;;;;;;;17993:44;;18066:1;18055:8;:12;:41;;;;;18088:8;18078:6;18072:3;:12;18071:25;18055:41;18048:48;;;17909:195;;;:::o;37162:81::-;37203:7;37230:5;;;;;;;;;;;37223:12;;37162:81;:::o;16578:87::-;16617:13;16650:7;16643:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16578:87;:::o;17635:139::-;17695:7;17722:44;17746:9;:19;17756:8;17746:19;;;;;;;;;;;;;;;;17722;17732:8;17722:9;:19::i;:::-;:23;;:44;;;;:::i;:::-;17715:51;;17635:139;;;:::o;19193:276::-;19286:4;19303:136;19312:12;:10;:12::i;:::-;19326:7;19335:103;19374:15;19335:103;;;;;;;;;;;;;;;;;:11;:25;19347:12;:10;:12::i;:::-;19335:25;;;;;;;;;;;;;;;:34;19361:7;19335:34;;;;;;;;;;;;;;;;:38;;:103;;;;;:::i;:::-;19303:8;:136::i;:::-;19457:4;19450:11;;19193:276;;;;:::o;39515:1341::-;39587:4;39604:17;39624:26;39639:10;39624:14;:26::i;:::-;39604:46;;39661:15;39679:19;39694:3;39679:14;:19::i;:::-;39661:37;;39713:31;39728:10;39740:3;39713:14;:31::i;:::-;39709:1117;;;39761:15;39779:1;39761:19;;39795:18;39816:6;39795:27;;39837:32;39872:25;39886:10;39872:13;:25::i;:::-;39837:60;;39912:30;39945:18;39959:3;39945:13;:18::i;:::-;39912:51;;39982:12;:47;;;;;39999:30;40018:10;39999:18;:30::i;:::-;39998:31;39982:47;39978:182;;;40060:33;40089:3;40060:24;40071:12;;40060:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40050:43;;40125:19;40136:7;40125:6;:10;;:19;;;;:::i;:::-;40112:32;;39978:182;40178:31;40193:3;40198:10;40178:14;:31::i;:::-;40174:641;;;40244:1;40234:7;:11;40230:118;;;40294:34;40320:7;40294:9;:21;40304:10;40294:21;;;;;;;;;;;;;;;;:25;;:34;;;;:::i;:::-;40270:9;:21;40280:10;40270:21;;;;;;;;;;;;;;;:58;;;;40230:118;40366:55;40379:10;40391:3;40396:12;40410:10;40366:12;:55::i;:::-;40440:81;40460:10;40472:12;40486:10;40498:22;40440:19;:81::i;:::-;40540:61;40559:6;40567:7;40576:24;40540:18;:61::i;:::-;40620:93;40641:12;40655:10;40667;40679:7;40688:24;40620:20;:93::i;:::-;40732:37;40753:10;40765:3;40732:20;:37::i;:::-;40795:4;40788:11;;;;;;;;;;40174:641;39709:1117;;;;;40843:5;40836:12;;;;39515:1341;;;;;:::o;38204:299::-;38280:4;22569:5;;;;;;;;;;;22555:19;;:10;:19;;;22547:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38306:30:::1;38327:8;38306:20;:30::i;:::-;38305:31;38297:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38453:20;;;;;;;;38458:8;38453:20;;;;;;38468:4;38453:20;;;;::::0;38421:19:::1;:29;38441:8;38421:29;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38491:4;38484:11;;38204:299:::0;;;:::o;17511:116::-;17573:7;17600:9;:19;17610:8;17600:19;;;;;;;;;;;;;;;;17593:26;;17511:116;;;:::o;18295:151::-;18384:7;18411:11;:18;18423:5;18411:18;;;;;;;;;;;;;;;:27;18430:7;18411:27;;;;;;;;;;;;;;;;18404:34;;18295:151;;;;:::o;37782:269::-;37858:4;22569:5;;;;;;;;;;;22555:19;;:10;:19;;;22547:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37883:27:::1;37901:8;37883:17;:27::i;:::-;37875:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37995:16;:26;38012:8;37995:26;;;;;;;;;;;;;;;;37988:33:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38039:4;38032:11;;37782:269:::0;;;:::o;38059:137::-;38128:4;38152:19;:29;38172:8;38152:29;;;;;;;;;;;;;;;:36;;;;;;;;;;;;38145:43;;38059:137;;;:::o;915:106::-;968:15;1003:10;996:17;;915:106;:::o;21445:360::-;21564:1;21547:19;;:5;:19;;;;21539:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21652:1;21633:21;;:7;:21;;;;21625:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21743:6;21713:11;:18;21725:5;21713:18;;;;;;;;;;;;;;;:27;21732:7;21713:27;;;;;;;;;;;;;;;:36;;;;21781:7;21765:32;;21774:5;21765:32;;;21790:6;21765:32;;;;;;;;;;;;;;;;;;21445:360;;;:::o;44756:139::-;44820:4;44845:21;44857:8;44845:11;:21::i;:::-;44844:22;:43;;;;;44882:5;;;;;;;;;;;44870:17;;:8;:17;;;;44844:43;44837:50;;44756:139;;;:::o;42198:416::-;42272:4;42321:5;;;;;;;;;;;42312:14;;:5;:14;;;:47;;;;42343:16;42355:3;42343:11;:16::i;:::-;42312:47;:88;;;;42376:24;42394:5;42376:17;:24::i;:::-;42312:88;:130;;;;42417:25;42438:3;42417:20;:25::i;:::-;42312:130;:184;;;;42459:18;:23;42478:3;42459:23;;;;;;;;;;;;;;;:30;42483:5;42459:30;;;;;;;;;;;;;;;:37;;;;;;;;;;;;42312:184;42289:295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42602:4;42595:11;;42198:416;;;;:::o;6419:471::-;6477:7;6727:1;6722;:6;6718:47;;;6752:1;6745:8;;;;6718:47;6777:9;6793:1;6789;:5;6777:17;;6822:1;6817;6813;:5;;;;;;:10;6805:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6881:1;6874:8;;;6419:471;;;;;:::o;7366:132::-;7424:7;7451:39;7455:1;7458;7451:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7444:46;;7366:132;;;;:::o;5529:136::-;5587:7;5614:43;5618:1;5621;5614:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5607:50;;5529:136;;;;:::o;18631:328::-;18737:4;18754:36;18764:6;18772:9;18783:6;18754:9;:36::i;:::-;18801:128;18810:6;18818:12;:10;:12::i;:::-;18832:96;18870:6;18832:96;;;;;;;;;;;;;;;;;:11;:19;18844:6;18832:19;;;;;;;;;;;;;;;:33;18852:12;:10;:12::i;:::-;18832:33;;;;;;;;;;;;;;;;:37;;:96;;;;;:::i;:::-;18801:8;:128::i;:::-;18947:4;18940:11;;18631:328;;;;;:::o;42833:577::-;42944:13;:38;;;;;42981:1;42961:9;:16;42971:5;42961:16;;;;;;;;;;;;;;;;:21;42944:38;42940:187;;;43024:50;43051:15;:22;43067:5;43051:22;;;;;;;;;;;;;;;;43024;;:26;;:50;;;;:::i;:::-;42999:22;:75;;;;43114:1;43089:15;:22;43105:5;43089:22;;;;;;;;;;;;;;;:26;;;;42940:187;43141:11;43137:266;;;43169:18;43190:15;:20;43206:3;43190:20;;;;;;;;;;;;;;;;43169:41;;43225:18;43246:3;43225:24;;43289:54;43332:10;43289:38;43316:10;43289:22;;:26;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;43264:22;:79;;;;43381:10;43358:15;:20;43374:3;43358:20;;;;;;;;;;;;;;;:33;;;;43137:266;;;42833:577;;;;:::o;43418:338::-;43556:13;:38;;;;;43593:1;43573:9;:16;43583:5;43573:16;;;;;;;;;;;;;;;;:21;43556:38;43552:91;;;43611:18;;:20;;;;;;;;;;;;;;43552:91;43657:11;:43;;;;;43699:1;43672:23;:28;43657:43;43653:96;;;43717:18;;:20;;;;;;;;;;;;;43653:96;43418:338;;;;:::o;43764:394::-;43893:25;43884:6;:34;43880:271;;;43935:18;43956:37;43967:25;43956:6;:10;;:37;;;;:::i;:::-;43935:58;;44023:42;44056:8;44023:28;44040:10;44023:12;;:16;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;44008:12;:57;;;;43880:271;;;;44113:26;44130:8;44113:12;;:16;;:26;;;;:::i;:::-;44098:12;:41;;;;43880:271;43764:394;;;:::o;44166:582::-;44322:18;44343:14;;44322:35;;44368:16;44387:6;44368:25;;44417;44408:6;:34;44404:103;;;44470:25;44459:36;;44404:103;44521:13;44517:97;;;44564:38;44593:8;44564:24;44579:8;44564:10;:14;;:24;;;;:::i;:::-;:28;;:38;;;;:::i;:::-;44551:51;;44517:97;44628:11;44624:79;;;44669:22;44684:6;44669:10;:14;;:22;;;;:::i;:::-;44656:35;;44624:79;44730:10;44713:14;:27;;;;44166:582;;;;;;;:::o;42622:203::-;42704:18;:25;42723:5;42704:25;;;;;;;;;;;;;;;:30;42730:3;42704:30;;;;;;;;;;;;;;;:37;;;;;;;;;;;;42699:119;;42791:15;;;;;;;;42796:3;42791:15;;;;;;42801:4;42791:15;;;;;42758:18;:25;42777:5;42758:25;;;;;;;;;;;;;;;:30;42784:3;42758:30;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42699:119;42622:203;;:::o;5065:181::-;5123:7;5143:9;5159:1;5155;:5;5143:17;;5184:1;5179;:6;;5171:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:1;5230:8;;;5065:181;;;;:::o;20992:445::-;21074:7;21094:19;21116:17;:15;:17::i;:::-;21094:39;;21144:16;21163:35;21176:8;21186:11;21163:12;:35::i;:::-;21144:54;;21209:21;21271:22;;21233:35;21249:18;;21233:11;:15;;:35;;;;:::i;:::-;:60;21209:84;;21311:118;21422:6;21311:106;21328:88;21414:1;21329:79;21371:36;21393:13;21381:6;21372:8;:15;21371:21;;:36;;;;:::i;:::-;21329:37;21351:14;;21339:6;21330:8;:15;21329:21;;:37;;;;:::i;:::-;:41;;:79;;;;:::i;:::-;21328:85;;:88;;;;:::i;:::-;21311:12;;:16;;:106;;;;:::i;:::-;:110;;:118;;;;:::i;:::-;21304:125;;;;;20992:445;;;;:::o;5968:192::-;6054:7;6087:1;6082;:6;;6090:12;6074: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;6074:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6114:9;6130:1;6126;:5;6114:17;;6151:1;6144:8;;;5968:192;;;;;:::o;18112:175::-;18198:4;18215:42;18225:12;:10;:12::i;:::-;18239:9;18250:6;18215:9;:42::i;:::-;18275:4;18268:11;;18112:175;;;;:::o;44903:176::-;44964:4;44981:12;45035:8;45023:21;45015:29;;45070:1;45063:4;:8;45056:15;;;44903:176;;;:::o;7994:278::-;8080:7;8112:1;8108;:5;8115:12;8100: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;8100:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8139:9;8155:1;8151;:5;;;;;;8139:17;;8263:1;8256:8;;;7994:278;;;;;:::o;19477:839::-;19601:1;19583:20;;:6;:20;;;;19575:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19692:1;19671:23;;:9;:23;;;;19663:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19754:47;19775:6;19783:9;19794:6;19754:20;:47::i;:::-;19814:25;19842:6;19814:34;;19859:19;19881:9;:17;19891:6;19881:17;;;;;;;;;;;;;;;;19859:39;;19909:20;19932:17;19942:6;19932:9;:17::i;:::-;19909:40;;19973:11;19964:6;:20;:46;;;;;19998:12;19988:6;:22;;19964:46;19960:110;;;20047:11;20027:31;;19960:110;20102:89;20124:17;20102:89;;;;;;;;;;;;;;;;;:9;:17;20112:6;20102:17;;;;;;;;;;;;;;;;:21;;:89;;;;;:::i;:::-;20082:9;:17;20092:6;20082:17;;;;;;;;;;;;;;;:109;;;;20225:32;20250:6;20225:9;:20;20235:9;20225:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;20202:9;:20;20212:9;20202:20;;;;;;;;;;;;;;;:55;;;;20290:9;20273:35;;20282:6;20273:35;;;20301:6;20273:35;;;;;;;;;;;;;;;;;;19477:839;;;;;;:::o;20717:99::-;20767:7;20801:6;20795:3;:12;20787:21;;20717:99;:::o;20824:160::-;20909:7;20951:15;:25;20967:8;20951:25;;;;;;;;;;;;;;;;20936:12;:40;20929:47;;20824:160;;;;:::o;21911:92::-;;;;:::o

Swarm Source

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