ETH Price: $2,894.85 (-5.05%)
Gas: 4 Gwei

Token

Shill (PoSH)
 

Overview

Max Total Supply

951,658,245.356361275973392277 PoSH

Holders

149 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
249,597.72524626390528149 PoSH

Value
$0.00
0xef6e9106d0ca5bf94286d73cf22a2a940ce7b440
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Proof of Shill or PoSH concept: a staking mechanism activated by the growth of the community.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
StakingToken

Compiler Version
v0.6.5+commit.f956cc89

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-17
*/

pragma solidity ^0.6.5;


// SPDX-License-Identifier: MIT
/*
 * @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;
    }
}


/**
 * @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);
}


/**
 * @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;
    }
}

/**
 * @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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @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);
            }
        }
    }
}

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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

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

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

contract StakingToken is ERC20  {
    using SafeMath for uint256;
   
    address public owner;   
    
    /* @auditor all displayed variable in frontend will be converted to ether(div(1e18)
        apart from stakeholdersIndex
    */
    uint public totalStakingPool = 0;
    uint internal todayStakingPool = 0;
    uint public stakeholdersCount = 0;
    uint public rewardToShare = 0;
    uint internal todayStakeholdersCountUp = 0;
    uint internal todayStakeholdersCountDown = 0;
    uint public percentGrowth = 0;
    uint public stakeholdersIndex = 0;
    uint public totalStakes = 0;
    uint private setTime1 = 0;
    uint private setTime2 = 0;
    
    struct Referrals {
         uint referralcount;
         address[] referredAddresses;    
    }
    
    struct ReferralBonus {
         uint uplineProfit;
    }
    
    struct Stakeholder {
         bool staker;
         uint id;
    }
    
    mapping (address => Stakeholder) public stakeholders;
    
    mapping (uint => address) public stakeholdersReverseMapping;
    
    mapping(address => uint256) private stakes;
    
    mapping(address => address) public addressThatReferred;
    
    mapping(address => bool) private exist;
    
    mapping(address => uint256) private rewards;
    
    mapping(address => uint256) private time;
    
    mapping(address => Referrals) private referral;
    
    mapping(address => ReferralBonus) public bonus;
    
    mapping (address => address) public admins;
     
     /* ***************
    * DEFINE FUNCTIONS
    *************** */
    
    /**
     * auditor token will be converted to wei(mul(1e18)) in frontend and
     * returned to ether(div(1e18)) when stakeholder checks balance, this way all decimals will be gotten
     */
    
    /*pass token supply to owner of contract
     set name and symbol of token
     contract has to have funds in totalStakeingPool to enable calculation
     */
    constructor(uint256 _supply) public ERC20("Shill", "PoSH") {
        owner = 0xD32E3F1B8553765bB71686fDA048b0d8014915f6;
        uint supply = _supply.mul(1e18);
        _mint(owner, supply); 
        
        //to ensure funds are in pool, to be determined by owner and stakeholdersCount is above 0 
        createStake(1000000000000000000000,0x0000000000000000000000000000000000000000);
        totalStakingPool = 50000000000000000000000000;
        admins[owner] = owner;
        admins[0x3B780730D4cF544B7080dEf91Ce2bC084D0Bd33F] = 0x3B780730D4cF544B7080dEf91Ce2bC084D0Bd33F;
        admins[0xabcd812CD592B827522606251e0634564Dd822c1] = 0xabcd812CD592B827522606251e0634564Dd822c1;
        admins[0x77d39a0b0a687af5971Fd07A3117384F47663a0A] = 0x77d39a0b0a687af5971Fd07A3117384F47663a0A;
        addTodayCount();
        addPool();
        
    }
    
    modifier onlyAdmin() {
         require(msg.sender == admins[msg.sender], 'Only admins is allowed to call this function');
         _;
    }
    
    // 1. Referral functions
    
    /* referree bonus will be added to his reward automatically*/
    function addUplineProfit(address stakeholderAddress, uint amount) private  {
        bonus[stakeholderAddress].uplineProfit =  bonus[stakeholderAddress].uplineProfit.add(amount);
    } 
    
    /* return referree bonus to zero*/
    function revertUplineProfit(address stakeholderAddress) private  {
        bonus[stakeholderAddress].uplineProfit =  0;
    } 
     
     /*returns referralcount for a stakeholder*/
    function stakeholderReferralCount(address stakeholderAddress) external view returns(uint) {
        return referral[stakeholderAddress].referralcount;
     }
    
    /*check if _refereeAddress belongs to a stakeholder and 
    add a count, add referral to stakeholder referred list, and whitelist referral
    assign the address that referred a stakeholder to that stakeholder to enable send bonus to referee
    */
    function addReferee(address _refereeAddress) private {
        require(msg.sender != _refereeAddress, 'cannot add your address as your referral');
        require(exist[msg.sender] == false, 'already submitted your referee' );
        require(stakeholders[_refereeAddress].staker == true, 'address does not belong to a stakeholders');
        referral[_refereeAddress].referralcount =  referral[_refereeAddress].referralcount.add(1);   
        referral[_refereeAddress].referredAddresses.push(msg.sender);
        addressThatReferred[msg.sender] = _refereeAddress;
        exist[msg.sender] = true;
    }
    
    /*returns stakeholders Referred List
    */
     function stakeholdersReferredList(address stakeholderAddress) view external returns(address[] memory){
       return (referral[stakeholderAddress].referredAddresses);
    }
    
    // 2. Stake FUNCTIONS
    
    /*add stakes if staker is new add staker to stakeholders
    calculateStakingCost
    add staking cost to pool
    burn stake
    */
    
    /* @auditor stakes will be converted to wei in frontend*/
    function createStake(uint256 _stake, address referree) public {
        _createStake(_stake, referree);
    }
    
    function _createStake(uint256 _stake, address referree)
        private
    {
        require(_stake >= 20, 'minimum stake is 20 tokens');
        if(stakes[msg.sender] == 0){
            addStakeholder(msg.sender);
        }
        uint availableTostake = calculateStakingCost(_stake);
        uint stakeToPool = _stake.sub(availableTostake);
        todayStakingPool = todayStakingPool.add(stakeToPool);
        stakes[msg.sender] = stakes[msg.sender].add(availableTostake);
        totalStakes = totalStakes.add(availableTostake);
        _burn(msg.sender, _stake);
        //in js if no referree, 0x0000000000000000000000000000000000000000 will be used
        if(referree == 0x0000000000000000000000000000000000000000){}
        else{
        addReferee(referree);
        }   
    }
    
     /*remove stakes if staker has no more funds remove staker from stakeholders
    calculateunStakingCost
    add unstaking cost to pool
    mint stake
    */
    
    /* @auditor stakes will be converted to wei in frontend*/
    function removeStake(uint256 _stake) external {
        _removeStake(_stake);
    }
    
    function _removeStake(uint _stake) private {
        require(stakes[msg.sender] > 0, 'stakes must be above 0');
        stakes[msg.sender] = stakes[msg.sender].sub(_stake);
         if(stakes[msg.sender] == 0){
             removeStakeholder(msg.sender);
         }
        uint stakeToReceive = calculateUnstakingCost(_stake);
        uint stakeToPool = _stake.sub(stakeToReceive);
        todayStakingPool = todayStakingPool.add(stakeToPool);
        totalStakes = totalStakes.sub(_stake);
        _mint(msg.sender, stakeToReceive);
    }
    
    /* @auditor stakes will be converted to ether in frontend*/
    function stakeOf(address _stakeholder) external view returns(uint256) {
        return stakes[_stakeholder];
    }
    
    function addStakeholder(address _stakeholder) private {
       if(stakeholders[_stakeholder].staker == false) {
       stakeholders[_stakeholder].staker = true;    
       stakeholders[_stakeholder].id = stakeholdersIndex;
       stakeholdersReverseMapping[stakeholdersIndex] = _stakeholder;
       stakeholdersIndex = stakeholdersIndex.add(1);
       todayStakeholdersCountUp = todayStakeholdersCountUp.add(1);
      }
    }
   
    function removeStakeholder(address _stakeholder) private  {
        if (stakeholders[_stakeholder].staker = true) {
            // get id of the stakeholders to be deleted
            uint swappableId = stakeholders[_stakeholder].id;
            
            // swap the stakeholders info and update admins mapping
            // get the last stakeholdersReverseMapping address for swapping
            address swappableAddress = stakeholdersReverseMapping[stakeholdersIndex -1];
            
            // swap the stakeholdersReverseMapping and then reduce stakeholder index
            stakeholdersReverseMapping[swappableId] = stakeholdersReverseMapping[stakeholdersIndex - 1];
            
            // also remap the stakeholder id
            stakeholders[swappableAddress].id = swappableId;
            
            // delete and reduce admin index 
            delete(stakeholders[_stakeholder]);
            delete(stakeholdersReverseMapping[stakeholdersIndex - 1]);
            stakeholdersIndex = stakeholdersIndex.sub(1);
            todayStakeholdersCountDown = todayStakeholdersCountDown.add(1);
        }
    }
    
    // 4. Updating FUNCTIONS
    
    /*add todayStakingPool to totalStakeingPool
    only called once in 24hrs
    reset todayStakingPool to zero
    */
     function addPool() onlyAdmin private {
        require(now > setTime1, 'wait 24hrs from last call');
        setTime1 = now + 1 days;
        totalStakingPool = totalStakingPool.add(todayStakingPool);
        todayStakingPool = 0;
     }
    
    /*
     addTodayCount if stakeholders leave or joins
     only called once in 24hrs 
    */
    function addTodayCount() private onlyAdmin returns(uint count) {
        require(now > setTime2, 'wait 24hrs from last call');
        setTime2 = now + 1 days;
        stakeholdersCount = stakeholdersCount.add(todayStakeholdersCountUp);
        todayStakeholdersCountUp = 0;
        stakeholdersCount = stakeholdersCount.sub(todayStakeholdersCountDown);
        todayStakeholdersCountDown = 0;
        count =stakeholdersCount;
    }
    
    /*
     check stakeholdersCountBeforeUpdate before addTodayCount,
     get currentStakeholdersCount, get newStakers by minusing both
     if above 1 you check for the percentGrowth; (newStakers*100)/stakeholdersCountBeforeUpdate
     if 0 or below set rewardToShare and percentGrowth to 0
     checkCommunityGrowthPercent will be called every 24hrs
    */
    function checkCommunityGrowthPercent() external onlyAdmin  {
       uint stakeholdersCountBeforeUpdate = stakeholdersCount;
       uint currentStakeholdersCount = addTodayCount();
       int newStakers = int(currentStakeholdersCount - stakeholdersCountBeforeUpdate);
       if(newStakers <= 0){
           rewardToShare = 0;
           percentGrowth = 0;
       }
       else{
           uint intToUnit = uint(newStakers);
           uint newStaker = intToUnit.mul(100);
           
           //convert percentGrowth to wei to get actual values
           percentGrowth = newStaker.mul(1e18).div(stakeholdersCountBeforeUpdate);
           if(percentGrowth >= 10*10**18){
               
               //gets 10% of percentGrowth
               uint percentOfPoolToShare = percentGrowth.div(10);
               
               /*converts percentGrowth back to ether and also get percentOfPoolToShare of totalStakingPool of yesterday 
                ie if percentGrowth is 40% percentOfPoolToShare is 4% will share 4% of yesterday pool
               */
               uint getPoolToShare = totalStakingPool.mul(percentOfPoolToShare).div(1e20);
               totalStakingPool = totalStakingPool.sub(getPoolToShare);
               rewardToShare = getPoolToShare;
           }
           else{
               rewardToShare = 0;
               percentGrowth = 0;
           }
       }
       addPool();
    }
    
     // 4. Reward FUNCTIONS
    
     function calculateReward(address _stakeholder) internal view returns(uint256) {
        return ((stakes[_stakeholder].mul(rewardToShare)).div(totalStakes));
    }
    
    /*
        after stakeholders check for new percentGrowth and rewardToShare 
        they get their reward which can only be called once from a stakeholder a day
        all stakeholders gets 95% of their reward if a stakeholder has a referree 
        5% is sent to his referree, if no referree 5% wil be sent back to the totalStakingPool
    */
    function getRewards() external {
        require(stakeholders[msg.sender].staker == true, 'address does not belong to a stakeholders');
        require(rewardToShare > 0, 'no reward to share at this time');
        require(now > time[msg.sender], 'can only call this function once per day');
        time[msg.sender] = now + 1 days;
        uint256 reward = calculateReward(msg.sender);
        if(exist[msg.sender]){
            uint removeFromReward = reward.mul(5).div(100);
            uint userRewardAfterUpLineBonus = reward.sub(removeFromReward);
            address addr = addressThatReferred[msg.sender];
            addUplineProfit(addr, removeFromReward);
            rewards[msg.sender] = rewards[msg.sender].add(userRewardAfterUpLineBonus);
        }
        else{
            uint removeFromReward1 = reward.mul(5).div(100);
            totalStakingPool = totalStakingPool.add(removeFromReward1);
            uint userReward = reward.sub(removeFromReward1);
            rewards[msg.sender] = rewards[msg.sender].add(userReward);
        }
    }
    
    /*
        after stakeholder checks the bonus mapping if he has bonus he add them to his reward
    */
    function getReferralBouns() external {
        require(stakeholders[msg.sender].staker == true, 'address does not belong to a stakeholders');
        require(bonus[msg.sender].uplineProfit > 0, 'you do not have any bonus');
        uint bonusToGet = bonus[msg.sender].uplineProfit;
        rewards[msg.sender] = rewards[msg.sender].add(bonusToGet);
        revertUplineProfit(msg.sender);
    }
    
    /* return will converted to ether in frontend*/
    function rewardOf(address _stakeholder) external view returns(uint256){
        return rewards[_stakeholder];
    }
    
    // 5. Tranfer FUNCTIONS
    
    /* token will be converted to wei in frontend*/
    function transfer(address _to, uint256 _tokens) public override  returns (bool) {
       if(msg.sender == admins[msg.sender]){
              _transfer(msg.sender, _to, _tokens);  
          }
        else{
            uint toSend = transferFee(msg.sender, _tokens);
            _transfer(msg.sender, _to, toSend);
           }
        return true;
    }
    
    function bulkTransfer(address[] calldata _receivers, uint256[] calldata _tokens) external returns (bool) {
        require(_receivers.length == _tokens.length);
        uint toSend;
        for (uint256 i = 0; i < _receivers.length; i++) {
            if(msg.sender == admins[msg.sender]){
              _transfer(msg.sender, _receivers[i], _tokens[i].mul(1e18));  
            }
            else{
             toSend = transferFee(msg.sender, _tokens[i]);
            _transfer(msg.sender, _receivers[i], toSend);
            }
        }
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 _tokens) public override returns (bool)  {
        if(sender == admins[msg.sender]){
              _transfer(sender, recipient, _tokens);  
        }
        else{
           uint  toSend = transferFee(sender, _tokens);
           _transfer(sender, recipient, toSend);
        }
        _approve(sender, _msgSender(),allowance(sender,msg.sender).sub(_tokens, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    
    // 6. Calculation FUNCTIONS
    
    /*skaing cost 5% */
    function calculateStakingCost(uint256 _stake) private pure returns(uint) {
        uint stakingCost =  (_stake).mul(5);
        uint percent = stakingCost.div(100);
        uint availableForstake = _stake.sub(percent);
        return availableForstake;
    }
    
    /*unskaing cost 25% */
    function calculateUnstakingCost(uint _stake) private pure returns(uint ) {
        uint unstakingCost =  (_stake).mul(25);
        uint percent = unstakingCost.div(100);
        uint stakeReceived = _stake.sub(percent);
        return stakeReceived;
    }
    
    /*
       remove 10% of _token 
       burn 1%
       send 9% to pool
       return actual amount receivers gets
    */
    /* @auditor given token is in wei calculation will work*/
    function transferFee(address sender, uint _token) private returns(uint _transferred){
        uint transferFees =  _token.div(10);
        uint burn = transferFees.div(10);
        uint addToPool = transferFees.sub(burn);
        todayStakingPool = todayStakingPool.add(addToPool);
        _transferred = _token - transferFees;
        _burn(sender, transferFees);
    }
    
    // 7. Withdraw function
    function withdrawReward() public {
        require(rewards[msg.sender] > 0, 'reward balance must be above 0');
        require(stakeholders[msg.sender].staker == true, 'address does not belong to a stakeholders');
        require(percentGrowth >= 10*10**18,'withdraw disabled');
        uint256 reward = rewards[msg.sender];
        rewards[msg.sender] = 0;
        _mint(msg.sender, reward);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"","type":"address"}],"name":"addressThatReferred","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bonus","outputs":[{"internalType":"uint256","name":"uplineProfit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_receivers","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"bulkTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkCommunityGrowthPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stake","type":"uint256"},{"internalType":"address","name":"referree","type":"address"}],"name":"createStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReferralBouns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentGrowth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stake","type":"uint256"}],"name":"removeStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakeholder","type":"address"}],"name":"rewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stakeholder","type":"address"}],"name":"stakeOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakeholderAddress","type":"address"}],"name":"stakeholderReferralCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeholders","outputs":[{"internalType":"bool","name":"staker","type":"bool"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeholdersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeholdersIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakeholderAddress","type":"address"}],"name":"stakeholdersReferredList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeholdersReverseMapping","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakingPool","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":"_tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawReward","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006006556000600755600060085560006009556000600a556000600b556000600c556000600d556000600e556000600f5560006010553480156200004857600080fd5b5060405162005b8438038062005b84833981810160405260208110156200006e57600080fd5b81019080805190602001909291905050506040518060400160405280600581526020017f5368696c6c0000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f506f534800000000000000000000000000000000000000000000000000000000815250816003908051906020019062000103929190620017e2565b5080600490805190602001906200011c929190620017e2565b506012600560006101000a81548160ff021916908360ff160217905550505073d32e3f1b8553765bb71686fda048b0d8014915f6600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000620001b4670de0b6b3a764000083620004f560201b620022bd1790919060201c565b9050620001ea600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200058060201b60201c565b62000206683635c9adc5dea0000060006200075e60201b60201c565b6a295be96e64066972000000600681905550600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733b780730d4cf544b7080def91ce2bc084d0bd33f601a6000733b780730d4cf544b7080def91ce2bc084d0bd33f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073abcd812cd592b827522606251e0634564dd822c1601a600073abcd812cd592b827522606251e0634564dd822c173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507377d39a0b0a687af5971fd07a3117384f47663a0a601a60007377d39a0b0a687af5971fd07a3117384f47663a0a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004dc6200077460201b60201c565b50620004ed6200093f60201b60201c565b505062001891565b6000808314156200050a57600090506200057a565b60008284029050828482816200051c57fe5b041462000575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062005b166021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620006386000838362000ad660201b60201c565b620006548160025462000adb60201b620024761790919060201c565b600281905550620006b2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000adb60201b620024761790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b62000770828262000b6460201b60201c565b5050565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018062005b37602c913960400191505060405180910390fd5b6010544211620008d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f776169742032346872732066726f6d206c6173742063616c6c0000000000000081525060200191505060405180910390fd5b620151804201601081905550620008fd600a5460085462000adb60201b620024761790919060201c565b6008819055506000600a8190555062000929600b5460085462000db060201b6200238d1790919060201c565b6008819055506000600b81905550600854905090565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018062005b37602c913960400191505060405180910390fd5b600f54421162000a9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f776169742032346872732066726f6d206c6173742063616c6c0000000000000081525060200191505060405180910390fd5b620151804201600f8190555062000ac660075460065462000adb60201b620024761790919060201c565b6006819055506000600781905550565b505050565b60008082840190508381101562000b5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b601482101562000bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d696e696d756d207374616b6520697320323020746f6b656e7300000000000081525060200191505060405180910390fd5b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141562000c375762000c363362000e0260201b60201c565b5b600062000c4a8362000fa160201b60201c565b9050600062000c68828562000db060201b6200238d1790919060201c565b905062000c868160075462000adb60201b620024761790919060201c565b60078190555062000ce582601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000adb60201b620024761790919060201c565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000d4482600e5462000adb60201b620024761790919060201c565b600e8190555062000d5c33856200100960201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000d985762000daa565b62000da983620011e660201b60201c565b5b50505050565b600062000dfa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200160160201b60201c565b905092915050565b60001515601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515141562000f9e576001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600d54601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508060126000600d54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000f746001600d5462000adb60201b620024761790919060201c565b600d8190555062000f976001600a5462000adb60201b620024761790919060201c565b600a819055505b50565b60008062000fbf600584620004f560201b620022bd1790919060201c565b9050600062000fde606483620016c560201b620023431790919060201c565b9050600062000ffc828662000db060201b6200238d1790919060201c565b9050809350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062005b636021913960400191505060405180910390fd5b620010a58260008362000ad660201b60201c565b620011188160405180606001604052806022815260200162005aa3602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200160160201b62002a39179092919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620011768160025462000db060201b6200238d1790919060201c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018062005aee6028913960400191505060405180910390fd5b60001515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151462001334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f616c7265616479207375626d697474656420796f75722072656665726565000081525060200191505060405180910390fd5b60011515601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514620013e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018062005ac56029913960400191505060405180910390fd5b6200143f6001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015462000adb60201b620024761790919060201c565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000838311158290620016b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200167657808201518184015260208101905062001659565b50505050905090810190601f168015620016a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60006200170f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200171760201b60201c565b905092915050565b60008083118290620017c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200178b5780820151818401526020810190506200176e565b50505050905090810190601f168015620017b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620017d457fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200182557805160ff191683800117855562001856565b8280016001018555821562001856579182015b828111156200185557825182559160200191906001019062001838565b5b50905062001865919062001869565b5090565b6200188e91905b808211156200188a57600081600090555060010162001870565b5090565b90565b61420280620018a16000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a457c2d7116100ad578063c07cfca91161007c578063c07cfca914610b06578063c885bc5814610b69578063d8cb4aa314610b73578063dd62ed3e14610bcb578063e96e27bf14610c4357610206565b8063a457c2d7146109ae578063a9059cbb14610a14578063b01d4daf14610a7a578063bf9befb114610ae857610206565b80638da5cb5b116100e95780638da5cb5b146108a9578063939624ab146108f357806395d89b41146109215780639f39870a146109a457610206565b806370a08231146107a5578063737a454b146107fd57806378ca5e871461081b5780638159122f1461089f57610206565b8063313ce5671161019d578063426233601161016c57806342623360146105c4578063429b62e51461061c5780635284d405146106a057806364687d67146106be5780636ffac6011461070c57610206565b8063313ce567146104fe57806339509351146105225780633c9e19cd146105885780633d20ec5f146105a657610206565b806318160ddd116101d957806318160ddd146103e45780631d62ebd9146104025780631f150b251461045a57806323b872dd1461047857610206565b80630572b0cc1461020b57806306fdde0314610215578063095ea7b314610298578063153a1f3e146102fe575b600080fd5b610213610c9b565b005b61021d611143565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025d578082015181840152602081019050610242565b50505050905090810190601f16801561028a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e4600480360360408110156102ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111e5565b604051808215151515815260200191505060405180910390f35b6103ca6004803603604081101561031457600080fd5b810190808035906020019064010000000081111561033157600080fd5b82018360208201111561034357600080fd5b8035906020019184602083028401116401000000008311171561036557600080fd5b90919293919293908035906020019064010000000081111561038657600080fd5b82018360208201111561039857600080fd5b803590602001918460208302840111640100000000831117156103ba57600080fd5b9091929391929390505050611203565b604051808215151515815260200191505060405180910390f35b6103ec61138e565b6040518082815260200191505060405180910390f35b6104446004803603602081101561041857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611398565b6040518082815260200191505060405180910390f35b6104626113e1565b6040518082815260200191505060405180910390f35b6104e46004803603606081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113e7565b604051808215151515815260200191505060405180910390f35b6105066114f9565b604051808260ff1660ff16815260200191505060405180910390f35b61056e6004803603604081101561053857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611510565b604051808215151515815260200191505060405180910390f35b6105906115c3565b6040518082815260200191505060405180910390f35b6105ae6115c9565b6040518082815260200191505060405180910390f35b610606600480360360208110156105da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115cf565b6040518082815260200191505060405180910390f35b61065e6004803603602081101561063257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611618565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106a861164b565b6040518082815260200191505060405180910390f35b61070a600480360360408110156106d457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611651565b005b61074e6004803603602081101561072257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610791578082015181840152602081019050610776565b505050509050019250505060405180910390f35b6107e7600480360360208110156107bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061172f565b6040518082815260200191505060405180910390f35b610805611777565b6040518082815260200191505060405180910390f35b61085d6004803603602081101561083157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061177d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108a76117b0565b005b6108b16119c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61091f6004803603602081101561090957600080fd5b81019080803590602001909291905050506119e9565b005b6109296119f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561096957808201518184015260208101905061094e565b50505050905090810190601f1680156109965780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109ac611a97565b005b6109fa600480360360408110156109c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ce3565b604051808215151515815260200191505060405180910390f35b610a6060048036036040811015610a2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611db0565b604051808215151515815260200191505060405180910390f35b610aa660048036036020811015610a9057600080fd5b8101908080359060200190929190505050611e7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610af0611ead565b6040518082815260200191505060405180910390f35b610b4860048036036020811015610b1c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eb3565b60405180831515151581526020018281526020019250505060405180910390f35b610b71611ee4565b005b610bb560048036036020811015610b8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061215b565b6040518082815260200191505060405180910390f35b610c2d60048036036040811015610be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612179565b6040518082815260200191505060405180910390f35b610c8560048036036020811015610c5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612200565b6040518082815260200191505060405180910390f35b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514610d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b600060095411610dbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6e6f2072657761726420746f20736861726520617420746869732074696d650081525060200191505060405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544211610e56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806140796028913960400191505060405180910390fd5b620151804201601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610eaa3361224c565b9050601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561104b576000610f276064610f196005856122bd90919063ffffffff16565b61234390919063ffffffff16565b90506000610f3e828461238d90919063ffffffff16565b90506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610fae81846123d7565b61100082601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050611140565b600061107460646110666005856122bd90919063ffffffff16565b61234390919063ffffffff16565b905061108b8160065461247690919063ffffffff16565b60068190555060006110a6828461238d90919063ffffffff16565b90506110fa81601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b5050505050905090565b60006111f96111f26124fe565b8484612506565b6001905092915050565b600082829050858590501461121757600080fd5b600080600090505b8686905081101561138057601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156113215761131c338888848181106112cd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16611317670de0b6b3a764000089898781811061130257fe5b905060200201356122bd90919063ffffffff16565b6126fd565b611373565b61133d3386868481811061133157fe5b905060200201356129be565b91506113723388888481811061134f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16846126fd565b5b808060010191505061121f565b506001915050949350505050565b6000600254905090565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561148c576114878484846126fd565b6114a7565b600061149885846129be565b90506114a58585836126fd565b505b6114ee846114b36124fe565b6114e9856040518060600160405280602881526020016140ea602891396114da8a33612179565b612a399092919063ffffffff16565b612506565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006115b961151d6124fe565b846115b4856001600061152e6124fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b612506565b6001905092915050565b60095481565b60065481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61165b8282612af9565b5050565b6060601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561172357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116d9575b50505050509050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614112602c913960400191505060405180910390fd5b6000600854905060006118a4612d05565b905060008282039050600081136118ca5760006009819055506000600c819055506119b6565b600081905060006118e56064836122bd90919063ffffffff16565b905061191485611906670de0b6b3a7640000846122bd90919063ffffffff16565b61234390919063ffffffff16565b600c81905550678ac7230489e80000600c54106119a2576000611943600a600c5461234390919063ffffffff16565b9050600061197768056bc75e2d63100000611969846006546122bd90919063ffffffff16565b61234390919063ffffffff16565b905061198e8160065461238d90919063ffffffff16565b6006819055508060098190555050506119b3565b60006009819055506000600c819055505b50505b6119be612ebf565b505050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119f28161304c565b50565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a8d5780601f10611a6257610100808354040283529160200191611a8d565b820191906000526020600020905b815481529060010190602001808311611a7057829003601f168201915b5050505050905090565b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514611b43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f796f7520646f206e6f74206861766520616e7920626f6e75730000000000000081525060200191505060405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050611c9481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ce033613251565b50565b6000611da6611cf06124fe565b84611da1856040518060600160405280602581526020016141a86025913960016000611d1a6124fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a399092919063ffffffff16565b612506565b6001905092915050565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611e5557611e503384846126fd565b611e70565b6000611e6133846129be565b9050611e6e3385836126fd565b505b6001905092915050565b60126020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60116020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f7265776172642062616c616e6365206d7573742062652061626f76652030000081525060200191505060405180910390fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b678ac7230489e80000600c5410156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f77697468647261772064697361626c656400000000000000000000000000000081525060200191505060405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612158338261329c565b50565b60196020528060005260406000206000915090508060000154905081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60006122b6600e546122a8600954601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122bd90919063ffffffff16565b61234390919063ffffffff16565b9050919050565b6000808314156122d0576000905061233d565b60008284029050828482816122e157fe5b0414612338576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140c96021913960400191505060405180910390fd5b809150505b92915050565b600061238583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613463565b905092915050565b60006123cf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a39565b905092915050565b61242c81601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461247690919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505050565b6000808284019050838110156124f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561258c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806141846024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140086022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061415f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613fc36023913960400191505060405180910390fd5b612814838383613529565b61287f81604051806060016040528060268152602001614053602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a399092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612912816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000806129d5600a8461234390919063ffffffff16565b905060006129ed600a8361234390919063ffffffff16565b90506000612a04828461238d90919063ffffffff16565b9050612a1b8160075461247690919063ffffffff16565b6007819055508285039350612a30868461352e565b50505092915050565b6000838311158290612ae6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612aab578082015181840152602081019050612a90565b50505050905090810190601f168015612ad85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6014821015612b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d696e696d756d207374616b6520697320323020746f6b656e7300000000000081525060200191505060405180910390fd5b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612bc257612bc1336136f2565b5b6000612bcd83613882565b90506000612be4828561238d90919063ffffffff16565b9050612bfb8160075461247690919063ffffffff16565b600781905550612c5382601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cab82600e5461247690919063ffffffff16565b600e81905550612cbb338561352e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf557612cff565b612cfe836138d5565b5b50505050565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614112602c913960400191505060405180910390fd5b6010544211612e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f776169742032346872732066726f6d206c6173742063616c6c0000000000000081525060200191505060405180910390fd5b620151804201601081905550612e84600a5460085461247690919063ffffffff16565b6008819055506000600a81905550612ea9600b5460085461238d90919063ffffffff16565b6008819055506000600b81905550600854905090565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614112602c913960400191505060405180910390fd5b600f544211613019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f776169742032346872732066726f6d206c6173742063616c6c0000000000000081525060200191505060405180910390fd5b620151804201600f8190555061303c60075460065461247690919063ffffffff16565b6006819055506000600781905550565b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411613101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7374616b6573206d7573742062652061626f766520300000000000000000000081525060200191505060405180910390fd5b61315381601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461238d90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156131e8576131e733613ce4565b5b60006131f382613f6f565b9050600061320a828461238d90919063ffffffff16565b90506132218160075461247690919063ffffffff16565b60078190555061323c83600e5461238d90919063ffffffff16565b600e8190555061324c338361329c565b505050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61334b60008383613529565b6133608160025461247690919063ffffffff16565b6002819055506133b7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808311829061350f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134d45780820151818401526020810190506134b9565b50505050905090810190601f1680156135015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161351b57fe5b049050809150509392505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061413e6021913960400191505060405180910390fd5b6135c082600083613529565b61362b81604051806060016040528060228152602001613fe6602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a399092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136828160025461238d90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60001515601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515141561387f576001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600d54601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508060126000600d54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061385c6001600d5461247690919063ffffffff16565b600d819055506138786001600a5461247690919063ffffffff16565b600a819055505b50565b6000806138996005846122bd90919063ffffffff16565b905060006138b160648361234390919063ffffffff16565b905060006138c8828661238d90919063ffffffff16565b9050809350505050919050565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561395a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806140a16028913960400191505060405180910390fd5b60001515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613a20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f616c7265616479207375626d697474656420796f75722072656665726565000081525060200191505060405180910390fd5b60011515601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514613acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b613b226001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461247690919063ffffffff16565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905515613f6c576000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000601260006001600d5403815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050601260006001600d5403815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff021916905560018201600090555050601260006001600d5403815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055613f476001600d5461238d90919063ffffffff16565b600d81905550613f636001600b5461247690919063ffffffff16565b600b8190555050505b50565b600080613f866019846122bd90919063ffffffff16565b90506000613f9e60648361234390919063ffffffff16565b90506000613fb5828661238d90919063ffffffff16565b905080935050505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f20616464726573736164647265737320646f6573206e6f742062656c6f6e6720746f2061207374616b65686f6c6465727345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636563616e206f6e6c792063616c6c20746869732066756e6374696f6e206f6e6365207065722064617963616e6e6f742061646420796f7572206164647265737320617320796f757220726566657272616c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f6e6c792061646d696e7320697320616c6c6f77656420746f2063616c6c20746869732066756e6374696f6e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122033d14cc808536ad9bced2770eb12cbe6f257ac28eb4515db2bacdcef230290a464736f6c6343000605003345524332303a206275726e20616d6f756e7420657863656564732062616c616e63656164647265737320646f6573206e6f742062656c6f6e6720746f2061207374616b65686f6c6465727363616e6e6f742061646420796f7572206164647265737320617320796f757220726566657272616c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c792061646d696e7320697320616c6c6f77656420746f2063616c6c20746869732066756e6374696f6e45524332303a206275726e2066726f6d20746865207a65726f20616464726573730000000000000000000000000000000000000000000000000000000077359400

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a457c2d7116100ad578063c07cfca91161007c578063c07cfca914610b06578063c885bc5814610b69578063d8cb4aa314610b73578063dd62ed3e14610bcb578063e96e27bf14610c4357610206565b8063a457c2d7146109ae578063a9059cbb14610a14578063b01d4daf14610a7a578063bf9befb114610ae857610206565b80638da5cb5b116100e95780638da5cb5b146108a9578063939624ab146108f357806395d89b41146109215780639f39870a146109a457610206565b806370a08231146107a5578063737a454b146107fd57806378ca5e871461081b5780638159122f1461089f57610206565b8063313ce5671161019d578063426233601161016c57806342623360146105c4578063429b62e51461061c5780635284d405146106a057806364687d67146106be5780636ffac6011461070c57610206565b8063313ce567146104fe57806339509351146105225780633c9e19cd146105885780633d20ec5f146105a657610206565b806318160ddd116101d957806318160ddd146103e45780631d62ebd9146104025780631f150b251461045a57806323b872dd1461047857610206565b80630572b0cc1461020b57806306fdde0314610215578063095ea7b314610298578063153a1f3e146102fe575b600080fd5b610213610c9b565b005b61021d611143565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025d578082015181840152602081019050610242565b50505050905090810190601f16801561028a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e4600480360360408110156102ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111e5565b604051808215151515815260200191505060405180910390f35b6103ca6004803603604081101561031457600080fd5b810190808035906020019064010000000081111561033157600080fd5b82018360208201111561034357600080fd5b8035906020019184602083028401116401000000008311171561036557600080fd5b90919293919293908035906020019064010000000081111561038657600080fd5b82018360208201111561039857600080fd5b803590602001918460208302840111640100000000831117156103ba57600080fd5b9091929391929390505050611203565b604051808215151515815260200191505060405180910390f35b6103ec61138e565b6040518082815260200191505060405180910390f35b6104446004803603602081101561041857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611398565b6040518082815260200191505060405180910390f35b6104626113e1565b6040518082815260200191505060405180910390f35b6104e46004803603606081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113e7565b604051808215151515815260200191505060405180910390f35b6105066114f9565b604051808260ff1660ff16815260200191505060405180910390f35b61056e6004803603604081101561053857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611510565b604051808215151515815260200191505060405180910390f35b6105906115c3565b6040518082815260200191505060405180910390f35b6105ae6115c9565b6040518082815260200191505060405180910390f35b610606600480360360208110156105da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115cf565b6040518082815260200191505060405180910390f35b61065e6004803603602081101561063257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611618565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106a861164b565b6040518082815260200191505060405180910390f35b61070a600480360360408110156106d457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611651565b005b61074e6004803603602081101561072257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610791578082015181840152602081019050610776565b505050509050019250505060405180910390f35b6107e7600480360360208110156107bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061172f565b6040518082815260200191505060405180910390f35b610805611777565b6040518082815260200191505060405180910390f35b61085d6004803603602081101561083157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061177d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108a76117b0565b005b6108b16119c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61091f6004803603602081101561090957600080fd5b81019080803590602001909291905050506119e9565b005b6109296119f5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561096957808201518184015260208101905061094e565b50505050905090810190601f1680156109965780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109ac611a97565b005b6109fa600480360360408110156109c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ce3565b604051808215151515815260200191505060405180910390f35b610a6060048036036040811015610a2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611db0565b604051808215151515815260200191505060405180910390f35b610aa660048036036020811015610a9057600080fd5b8101908080359060200190929190505050611e7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610af0611ead565b6040518082815260200191505060405180910390f35b610b4860048036036020811015610b1c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eb3565b60405180831515151581526020018281526020019250505060405180910390f35b610b71611ee4565b005b610bb560048036036020811015610b8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061215b565b6040518082815260200191505060405180910390f35b610c2d60048036036040811015610be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612179565b6040518082815260200191505060405180910390f35b610c8560048036036020811015610c5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612200565b6040518082815260200191505060405180910390f35b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514610d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b600060095411610dbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6e6f2072657761726420746f20736861726520617420746869732074696d650081525060200191505060405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544211610e56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806140796028913960400191505060405180910390fd5b620151804201601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610eaa3361224c565b9050601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561104b576000610f276064610f196005856122bd90919063ffffffff16565b61234390919063ffffffff16565b90506000610f3e828461238d90919063ffffffff16565b90506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610fae81846123d7565b61100082601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050611140565b600061107460646110666005856122bd90919063ffffffff16565b61234390919063ffffffff16565b905061108b8160065461247690919063ffffffff16565b60068190555060006110a6828461238d90919063ffffffff16565b90506110fa81601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b5050505050905090565b60006111f96111f26124fe565b8484612506565b6001905092915050565b600082829050858590501461121757600080fd5b600080600090505b8686905081101561138057601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156113215761131c338888848181106112cd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16611317670de0b6b3a764000089898781811061130257fe5b905060200201356122bd90919063ffffffff16565b6126fd565b611373565b61133d3386868481811061133157fe5b905060200201356129be565b91506113723388888481811061134f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16846126fd565b5b808060010191505061121f565b506001915050949350505050565b6000600254905090565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561148c576114878484846126fd565b6114a7565b600061149885846129be565b90506114a58585836126fd565b505b6114ee846114b36124fe565b6114e9856040518060600160405280602881526020016140ea602891396114da8a33612179565b612a399092919063ffffffff16565b612506565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006115b961151d6124fe565b846115b4856001600061152e6124fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b612506565b6001905092915050565b60095481565b60065481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61165b8282612af9565b5050565b6060601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561172357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116d9575b50505050509050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614112602c913960400191505060405180910390fd5b6000600854905060006118a4612d05565b905060008282039050600081136118ca5760006009819055506000600c819055506119b6565b600081905060006118e56064836122bd90919063ffffffff16565b905061191485611906670de0b6b3a7640000846122bd90919063ffffffff16565b61234390919063ffffffff16565b600c81905550678ac7230489e80000600c54106119a2576000611943600a600c5461234390919063ffffffff16565b9050600061197768056bc75e2d63100000611969846006546122bd90919063ffffffff16565b61234390919063ffffffff16565b905061198e8160065461238d90919063ffffffff16565b6006819055508060098190555050506119b3565b60006009819055506000600c819055505b50505b6119be612ebf565b505050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119f28161304c565b50565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a8d5780601f10611a6257610100808354040283529160200191611a8d565b820191906000526020600020905b815481529060010190602001808311611a7057829003601f168201915b5050505050905090565b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514611b43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f796f7520646f206e6f74206861766520616e7920626f6e75730000000000000081525060200191505060405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050611c9481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ce033613251565b50565b6000611da6611cf06124fe565b84611da1856040518060600160405280602581526020016141a86025913960016000611d1a6124fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a399092919063ffffffff16565b612506565b6001905092915050565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611e5557611e503384846126fd565b611e70565b6000611e6133846129be565b9050611e6e3385836126fd565b505b6001905092915050565b60126020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60116020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f7265776172642062616c616e6365206d7573742062652061626f76652030000081525060200191505060405180910390fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b678ac7230489e80000600c5410156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f77697468647261772064697361626c656400000000000000000000000000000081525060200191505060405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612158338261329c565b50565b60196020528060005260406000206000915090508060000154905081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60006122b6600e546122a8600954601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122bd90919063ffffffff16565b61234390919063ffffffff16565b9050919050565b6000808314156122d0576000905061233d565b60008284029050828482816122e157fe5b0414612338576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140c96021913960400191505060405180910390fd5b809150505b92915050565b600061238583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613463565b905092915050565b60006123cf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a39565b905092915050565b61242c81601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461247690919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505050565b6000808284019050838110156124f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561258c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806141846024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140086022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061415f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613fc36023913960400191505060405180910390fd5b612814838383613529565b61287f81604051806060016040528060268152602001614053602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a399092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612912816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000806129d5600a8461234390919063ffffffff16565b905060006129ed600a8361234390919063ffffffff16565b90506000612a04828461238d90919063ffffffff16565b9050612a1b8160075461247690919063ffffffff16565b6007819055508285039350612a30868461352e565b50505092915050565b6000838311158290612ae6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612aab578082015181840152602081019050612a90565b50505050905090810190601f168015612ad85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6014821015612b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d696e696d756d207374616b6520697320323020746f6b656e7300000000000081525060200191505060405180910390fd5b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612bc257612bc1336136f2565b5b6000612bcd83613882565b90506000612be4828561238d90919063ffffffff16565b9050612bfb8160075461247690919063ffffffff16565b600781905550612c5382601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cab82600e5461247690919063ffffffff16565b600e81905550612cbb338561352e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf557612cff565b612cfe836138d5565b5b50505050565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614112602c913960400191505060405180910390fd5b6010544211612e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f776169742032346872732066726f6d206c6173742063616c6c0000000000000081525060200191505060405180910390fd5b620151804201601081905550612e84600a5460085461247690919063ffffffff16565b6008819055506000600a81905550612ea9600b5460085461238d90919063ffffffff16565b6008819055506000600b81905550600854905090565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614112602c913960400191505060405180910390fd5b600f544211613019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f776169742032346872732066726f6d206c6173742063616c6c0000000000000081525060200191505060405180910390fd5b620151804201600f8190555061303c60075460065461247690919063ffffffff16565b6006819055506000600781905550565b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411613101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f7374616b6573206d7573742062652061626f766520300000000000000000000081525060200191505060405180910390fd5b61315381601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461238d90919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156131e8576131e733613ce4565b5b60006131f382613f6f565b9050600061320a828461238d90919063ffffffff16565b90506132218160075461247690919063ffffffff16565b60078190555061323c83600e5461238d90919063ffffffff16565b600e8190555061324c338361329c565b505050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61334b60008383613529565b6133608160025461247690919063ffffffff16565b6002819055506133b7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808311829061350f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134d45780820151818401526020810190506134b9565b50505050905090810190601f1680156135015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161351b57fe5b049050809150509392505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061413e6021913960400191505060405180910390fd5b6135c082600083613529565b61362b81604051806060016040528060228152602001613fe6602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a399092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136828160025461238d90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60001515601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515141561387f576001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600d54601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508060126000600d54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061385c6001600d5461247690919063ffffffff16565b600d819055506138786001600a5461247690919063ffffffff16565b600a819055505b50565b6000806138996005846122bd90919063ffffffff16565b905060006138b160648361234390919063ffffffff16565b905060006138c8828661238d90919063ffffffff16565b9050809350505050919050565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561395a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806140a16028913960400191505060405180910390fd5b60001515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613a20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f616c7265616479207375626d697474656420796f75722072656665726565000081525060200191505060405180910390fd5b60011515601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151514613acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061402a6029913960400191505060405180910390fd5b613b226001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461247690919063ffffffff16565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905515613f6c576000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000601260006001600d5403815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050601260006001600d5403815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff021916905560018201600090555050601260006001600d5403815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055613f476001600d5461238d90919063ffffffff16565b600d81905550613f636001600b5461247690919063ffffffff16565b600b8190555050505b50565b600080613f866019846122bd90919063ffffffff16565b90506000613f9e60648361234390919063ffffffff16565b90506000613fb5828661238d90919063ffffffff16565b905080935050505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f20616464726573736164647265737320646f6573206e6f742062656c6f6e6720746f2061207374616b65686f6c6465727345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636563616e206f6e6c792063616c6c20746869732066756e6374696f6e206f6e6365207065722064617963616e6e6f742061646420796f7572206164647265737320617320796f757220726566657272616c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f6e6c792061646d696e7320697320616c6c6f77656420746f2063616c6c20746869732066756e6374696f6e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122033d14cc808536ad9bced2770eb12cbe6f257ac28eb4515db2bacdcef230290a464736f6c63430006050033

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

0000000000000000000000000000000000000000000000000000000077359400

-----Decoded View---------------
Arg [0] : _supply (uint256): 2000000000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000077359400


Deployed Bytecode Sourcemap

26051:17099:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26051:17099:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;38129:1077:0;;;:::i;:::-;;17234: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;17234:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19340:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;19340:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40384:578;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40384:578:0;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;40384:578:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40384:578:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40384:578:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;40384:578:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40384:578:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40384:578:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18309:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39793:117;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39793:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26555:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40974:506;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40974:506:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18161:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20713:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;20713:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26419:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26299:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33039:116;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33039:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27533:42;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27533:42:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26591:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31137:111;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31137:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30707:174;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30707:174:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;30707:174:0;;;;;;;;;;;;;;;;;18472:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18472:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26379:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27188:54;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27188:54:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36108:1440;;;:::i;:::-;;26128:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32314:85;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32314:85:0;;;;;;;;;;;;;;;;;:::i;:::-;;17436: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;17436:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39328:400;;;:::i;:::-;;21434:269;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;21434:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40010:362;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40010:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27061:59;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27061:59:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26631:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26996:52;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;26996:52:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42742:405;;;:::i;:::-;;27474:46;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27474:46:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19042:151;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;19042:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29602:159;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29602:159:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38129:1077;38214:4;38179:39;;:12;:24;38192:10;38179:24;;;;;;;;;;;;;;;:31;;;;;;;;;;;;:39;;;38171:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38299:1;38283:13;;:17;38275:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38361:4;:16;38366:10;38361:16;;;;;;;;;;;;;;;;38355:3;:22;38347:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38458:6;38452:3;:12;38433:4;:16;38438:10;38433:16;;;;;;;;;;;;;;;:31;;;;38475:14;38492:27;38508:10;38492:15;:27::i;:::-;38475:44;;38533:5;:17;38539:10;38533:17;;;;;;;;;;;;;;;;;;;;;;;;;38530:669;;;38566:21;38590:22;38608:3;38590:13;38601:1;38590:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;38566:46;;38627:31;38661:28;38672:16;38661:6;:10;;:28;;;;:::i;:::-;38627:62;;38704:12;38719:19;:31;38739:10;38719:31;;;;;;;;;;;;;;;;;;;;;;;;;38704:46;;38765:39;38781:4;38787:16;38765:15;:39::i;:::-;38841:51;38865:26;38841:7;:19;38849:10;38841:19;;;;;;;;;;;;;;;;:23;;:51;;;;:::i;:::-;38819:7;:19;38827:10;38819:19;;;;;;;;;;;;;;;:73;;;;38530:669;;;;;;38933:22;38958;38976:3;38958:13;38969:1;38958:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;38933:47;;39014:39;39035:17;39014:16;;:20;;:39;;;;:::i;:::-;38995:16;:58;;;;39068:15;39086:29;39097:17;39086:6;:10;;:29;;;;:::i;:::-;39068:47;;39152:35;39176:10;39152:7;:19;39160:10;39152:19;;;;;;;;;;;;;;;;:23;;:35;;;;:::i;:::-;39130:7;:19;39138:10;39130:19;;;;;;;;;;;;;;;:57;;;;38530:669;;;38129:1077;:::o;17234:83::-;17271:13;17304:5;17297:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17234:83;:::o;19340:169::-;19423:4;19440:39;19449:12;:10;:12::i;:::-;19463:7;19472:6;19440:8;:39::i;:::-;19497:4;19490:11;;19340:169;;;;:::o;40384:578::-;40483:4;40529:7;;:14;;40508:10;;:17;;:35;40500:44;;12:1:-1;9;2:12;40500:44:0;40555:11;40582:9;40594:1;40582:13;;40577:356;40601:10;;:17;;40597:1;:21;40577:356;;;40657:6;:18;40664:10;40657:18;;;;;;;;;;;;;;;;;;;;;;;;;40643:32;;:10;:32;;;40640:282;;;40693:58;40703:10;40715;;40726:1;40715:13;;;;;;;;;;;;;;;40730:20;40745:4;40730:7;;40738:1;40730:10;;;;;;;;;;;;;:14;;:20;;;;:::i;:::-;40693:9;:58::i;:::-;40640:282;;;40812:35;40824:10;40836:7;;40844:1;40836:10;;;;;;;;;;;;;40812:11;:35::i;:::-;40803:44;;40862;40872:10;40884;;40895:1;40884:13;;;;;;;;;;;;;;;40899:6;40862:9;:44::i;:::-;40640:282;40620:3;;;;;;;40577:356;;;;40950:4;40943:11;;;40384:578;;;;;;:::o;18309:100::-;18362:7;18389:12;;18382:19;;18309:100;:::o;39793:117::-;39855:7;39881;:21;39889:12;39881:21;;;;;;;;;;;;;;;;39874:28;;39793:117;;;:::o;26555:29::-;;;;:::o;40974:506::-;41073:4;41104:6;:18;41111:10;41104:18;;;;;;;;;;;;;;;;;;;;;;;;;41094:28;;:6;:28;;;41091:233;;;41140:37;41150:6;41158:9;41169:7;41140:9;:37::i;:::-;41091:233;;;41219:12;41234:28;41246:6;41254:7;41234:11;:28::i;:::-;41219:43;;41276:36;41286:6;41294:9;41305:6;41276:9;:36::i;:::-;41091:233;;41334:116;41343:6;41351:12;:10;:12::i;:::-;41364:85;41397:7;41364:85;;;;;;;;;;;;;;;;;:28;41374:6;41381:10;41364:9;:28::i;:::-;:32;;:85;;;;;:::i;:::-;41334:8;:116::i;:::-;41468:4;41461:11;;40974:506;;;;;:::o;18161:83::-;18202:5;18227:9;;;;;;;;;;;18220:16;;18161:83;:::o;20713:218::-;20801:4;20818:83;20827:12;:10;:12::i;:::-;20841:7;20850:50;20889:10;20850:11;:25;20862:12;:10;:12::i;:::-;20850:25;;;;;;;;;;;;;;;:34;20876:7;20850:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20818:8;:83::i;:::-;20919:4;20912:11;;20713:218;;;;:::o;26419:29::-;;;;:::o;26299:32::-;;;;:::o;33039:116::-;33100:7;33127:6;:20;33134:12;33127:20;;;;;;;;;;;;;;;;33120:27;;33039:116;;;:::o;27533:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;26591:33::-;;;;:::o;31137:111::-;31210:30;31223:6;31231:8;31210:12;:30::i;:::-;31137:111;;:::o;30707:174::-;30791:16;30826:8;:28;30835:18;30826:28;;;;;;;;;;;;;;;:46;;30818:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30707:174;;;:::o;18472:119::-;18538:7;18565:9;:18;18575:7;18565:18;;;;;;;;;;;;;;;;18558:25;;18472:119;;;:::o;26379:33::-;;;;:::o;27188:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;36108:1440::-;28969:6;:18;28976:10;28969:18;;;;;;;;;;;;;;;;;;;;;;;;;28955:32;;:10;:32;;;28947:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36177:34:::1;36214:17;;36177:54;;36241:29;36273:15;:13;:15::i;:::-;36241:47;;36298:14;36346:29;36319:24;:56;36298:78;;36403:1;36389:10;:15;36386:1136;;36435:1;36419:13;:17;;;;36466:1;36450:13;:17;;;;36386:1136;;;36505:14;36527:10;36505:33;;36552:14;36569:18;36583:3;36569:9;:13;;:18;;;;:::i;:::-;36552:35;;36694:54;36718:29;36694:19;36708:4;36694:9;:13;;:19;;;;:::i;:::-;:23;;:54;;;;:::i;:::-;36678:13;:70;;;;36782:9;36765:13;;:26;36762:750;;36871:25;36899:21;36917:2;36899:13;;:17;;:21;;;;:::i;:::-;36871:49;;37200:19;37222:52;37269:4;37222:42;37243:20;37222:16;;:20;;:42;;;;:::i;:::-;:46;;:52;;;;:::i;:::-;37200:74;;37311:36;37332:14;37311:16;;:20;;:36;;;;:::i;:::-;37292:16;:55;;;;37381:14;37365:13;:30;;;;36762:750;;;;;37461:1;37445:13;:17;;;;37496:1;37480:13;:17;;;;36762:750;36386:1136;;;37531:9;:7;:9::i;:::-;29048:1;;;36108:1440::o:0;26128:20::-;;;;;;;;;;;;;:::o;32314:85::-;32371:20;32384:6;32371:12;:20::i;:::-;32314:85;:::o;17436:87::-;17475:13;17508:7;17501:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17436:87;:::o;39328:400::-;39419:4;39384:39;;:12;:24;39397:10;39384:24;;;;;;;;;;;;;;;:31;;;;;;;;;;;;:39;;;39376:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39521:1;39488:5;:17;39494:10;39488:17;;;;;;;;;;;;;;;:30;;;:34;39480:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39563:15;39581:5;:17;39587:10;39581:17;;;;;;;;;;;;;;;:30;;;39563:48;;39644:35;39668:10;39644:7;:19;39652:10;39644:19;;;;;;;;;;;;;;;;:23;;:35;;;;:::i;:::-;39622:7;:19;39630:10;39622:19;;;;;;;;;;;;;;;:57;;;;39690:30;39709:10;39690:18;:30::i;:::-;39328:400;:::o;21434:269::-;21527:4;21544:129;21553:12;:10;:12::i;:::-;21567:7;21576:96;21615:15;21576:96;;;;;;;;;;;;;;;;;:11;:25;21588:12;:10;:12::i;:::-;21576:25;;;;;;;;;;;;;;;:34;21602:7;21576:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21544:8;:129::i;:::-;21691:4;21684:11;;21434:269;;;;:::o;40010:362::-;40084:4;40117:6;:18;40124:10;40117:18;;;;;;;;;;;;;;;;;;;;;;;;;40103:32;;:10;:32;;;40100:243;;;40153:35;40163:10;40175:3;40180:7;40153:9;:35::i;:::-;40100:243;;;40233:11;40247:32;40259:10;40271:7;40247:11;:32::i;:::-;40233:46;;40294:34;40304:10;40316:3;40321:6;40294:9;:34::i;:::-;40100:243;;40360:4;40353:11;;40010:362;;;;:::o;27061:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;26631:27::-;;;;:::o;26996:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42742:405::-;42816:1;42794:7;:19;42802:10;42794:19;;;;;;;;;;;;;;;;:23;42786:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42906:4;42871:39;;:12;:24;42884:10;42871:24;;;;;;;;;;;;;;;:31;;;;;;;;;;;;:39;;;42863:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42992:9;42975:13;;:26;;42967:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43033:14;43050:7;:19;43058:10;43050:19;;;;;;;;;;;;;;;;43033:36;;43102:1;43080:7;:19;43088:10;43080:19;;;;;;;;;;;;;;;:23;;;;43114:25;43120:10;43132:6;43114:5;:25::i;:::-;42742:405;:::o;27474:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;19042:151::-;19131:7;19158:11;:18;19170:5;19158:18;;;;;;;;;;;;;;;:27;19177:7;19158:27;;;;;;;;;;;;;;;;19151:34;;19042:151;;;;:::o;29602:159::-;29686:4;29710:8;:28;29719:18;29710:28;;;;;;;;;;;;;;;:42;;;29703:49;;29602:159;;;:::o;37596:164::-;37665:7;37693:58;37739:11;;37694:39;37719:13;;37694:6;:20;37701:12;37694:20;;;;;;;;;;;;;;;;:24;;:39;;;;:::i;:::-;37693:45;;:58;;;;:::i;:::-;37685:67;;37596:164;;;:::o;5876:471::-;5934:7;6184:1;6179;:6;6175:47;;;6209:1;6202:8;;;;6175:47;6234:9;6250:1;6246;:5;6234:17;;6279:1;6274;6270;:5;;;;;;:10;6262:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6338:1;6331:8;;;5876:471;;;;;:::o;6823:132::-;6881:7;6908:39;6912:1;6915;6908:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6901:46;;6823:132;;;;:::o;4986:136::-;5044:7;5071:43;5075:1;5078;5071:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5064:50;;4986:136;;;;:::o;29172:186::-;29300:50;29343:6;29300:5;:25;29306:18;29300:25;;;;;;;;;;;;;;;:38;;;:42;;:50;;;;:::i;:::-;29258:5;:25;29264:18;29258:25;;;;;;;;;;;;;;;:38;;:92;;;;29172:186;;:::o;4522:181::-;4580:7;4600:9;4616:1;4612;:5;4600:17;;4641:1;4636;:6;;4628:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4694:1;4687:8;;;4522:181;;;;:::o;605:106::-;658:15;693:10;686:17;;605:106;:::o;24581:346::-;24700:1;24683:19;;:5;:19;;;;24675:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24781:1;24762:21;;:7;:21;;;;24754:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24865:6;24835:11;:18;24847:5;24835:18;;;;;;;;;;;;;;;:27;24854:7;24835:27;;;;;;;;;;;;;;;:36;;;;24903:7;24887:32;;24896:5;24887:32;;;24912:6;24887:32;;;;;;;;;;;;;;;;;;24581:346;;;:::o;22193:539::-;22317:1;22299:20;;:6;:20;;;;22291:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22401:1;22380:23;;:9;:23;;;;22372:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22456:47;22477:6;22485:9;22496:6;22456:20;:47::i;:::-;22536:71;22558:6;22536:71;;;;;;;;;;;;;;;;;:9;:17;22546:6;22536:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22516:9;:17;22526:6;22516:17;;;;;;;;;;;;;;;:91;;;;22641:32;22666:6;22641:9;:20;22651:9;22641:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22618:9;:20;22628:9;22618:20;;;;;;;;;;;;;;;:55;;;;22706:9;22689:35;;22698:6;22689:35;;;22717:6;22689:35;;;;;;;;;;;;;;;;;;22193:539;;;:::o;42324:377::-;42390:17;42419;42440:14;42451:2;42440:6;:10;;:14;;;;:::i;:::-;42419:35;;42465:9;42477:20;42494:2;42477:12;:16;;:20;;;;:::i;:::-;42465:32;;42508:14;42525:22;42542:4;42525:12;:16;;:22;;;;:::i;:::-;42508:39;;42577:31;42598:9;42577:16;;:20;;:31;;;;:::i;:::-;42558:16;:50;;;;42643:12;42634:6;:21;42619:36;;42666:27;42672:6;42680:12;42666:5;:27::i;:::-;42324:377;;;;;;;:::o;5425:192::-;5511:7;5544:1;5539;:6;;5547:12;5531: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;5531:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5571:9;5587:1;5583;:5;5571:17;;5608:1;5601:8;;;5425:192;;;;;:::o;31260:807::-;31367:2;31357:6;:12;;31349:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31436:1;31414:6;:18;31421:10;31414:18;;;;;;;;;;;;;;;;:23;31411:80;;;31453:26;31468:10;31453:14;:26::i;:::-;31411:80;31501:21;31525:28;31546:6;31525:20;:28::i;:::-;31501:52;;31564:16;31583:28;31594:16;31583:6;:10;;:28;;;;:::i;:::-;31564:47;;31641:33;31662:11;31641:16;;:20;;:33;;;;:::i;:::-;31622:16;:52;;;;31706:40;31729:16;31706:6;:18;31713:10;31706:18;;;;;;;;;;;;;;;;:22;;:40;;;;:::i;:::-;31685:6;:18;31692:10;31685:18;;;;;;;;;;;;;;;:61;;;;31771:33;31787:16;31771:11;;:15;;:33;;;;:::i;:::-;31757:11;:47;;;;31815:25;31821:10;31833:6;31815:5;:25::i;:::-;31955:42;31943:54;;:8;:54;;;31940:117;;;;;;32025:20;32036:8;32025:10;:20::i;:::-;31940:117;31260:807;;;;:::o;35288:441::-;35339:10;28969:6;:18;28976:10;28969:18;;;;;;;;;;;;;;;;;;;;;;;;;28955:32;;:10;:32;;;28947:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35376:8:::1;;35370:3;:14;35362:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35442:6;35436:3;:12;35425:8;:23;;;;35479:47;35501:24;;35479:17;;:21;;:47;;;;:::i;:::-;35459:17;:67;;;;35564:1;35537:24;:28;;;;35596:49;35618:26;;35596:17;;:21;;:49;;;;:::i;:::-;35576:17;:69;;;;35685:1;35656:26;:30;;;;35704:17;;35697:24;;35288:441:::0;:::o;34934:242::-;28969:6;:18;28976:10;28969:18;;;;;;;;;;;;;;;;;;;;;;;;;28955:32;;:10;:32;;;28947:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34996:8:::1;;34990:3;:14;34982:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35062:6;35056:3;:12;35045:8;:23;;;;35098:38;35119:16;;35098;;:20;;:38;;;;:::i;:::-;35079:16;:57;;;;35166:1;35147:16;:20;;;;34934:242::o:0;32411:551::-;32494:1;32473:6;:18;32480:10;32473:18;;;;;;;;;;;;;;;;:22;32465:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32554:30;32577:6;32554;:18;32561:10;32554:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;32533:6;:18;32540:10;32533:18;;;;;;;;;;;;;;;:51;;;;32621:1;32599:6;:18;32606:10;32599:18;;;;;;;;;;;;;;;;:23;32596:85;;;32639:29;32657:10;32639:17;:29::i;:::-;32596:85;32691:19;32713:30;32736:6;32713:22;:30::i;:::-;32691:52;;32754:16;32773:26;32784:14;32773:6;:10;;:26;;;;:::i;:::-;32754:45;;32829:33;32850:11;32829:16;;:20;;:33;;;;:::i;:::-;32810:16;:52;;;;32887:23;32903:6;32887:11;;:15;;:23;;;;:::i;:::-;32873:11;:37;;;;32921:33;32927:10;32939:14;32921:5;:33::i;:::-;32411:551;;;:::o;29411:127::-;29529:1;29487:5;:25;29493:18;29487:25;;;;;;;;;;;;;;;:38;;:43;;;;29411:127;:::o;23013:378::-;23116:1;23097:21;;:7;:21;;;;23089:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23167:49;23196:1;23200:7;23209:6;23167:20;:49::i;:::-;23244:24;23261:6;23244:12;;:16;;:24;;;;:::i;:::-;23229:12;:39;;;;23300:30;23323:6;23300:9;:18;23310:7;23300:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;23279:9;:18;23289:7;23279:18;;;;;;;;;;;;;;;:51;;;;23367:7;23346:37;;23363:1;23346:37;;;23376:6;23346:37;;;;;;;;;;;;;;;;;;23013:378;;:::o;7451:278::-;7537:7;7569:1;7565;:5;7572:12;7557: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;7557:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7596:9;7612:1;7608;:5;;;;;;7596:17;;7720:1;7713:8;;;7451:278;;;;;:::o;25952:92::-;;;;:::o;23723:418::-;23826:1;23807:21;;:7;:21;;;;23799:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23879:49;23900:7;23917:1;23921:6;23879:20;:49::i;:::-;23962:68;23985:6;23962:68;;;;;;;;;;;;;;;;;:9;:18;23972:7;23962:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;23941:9;:18;23951:7;23941:18;;;;;;;;;;;;;;;:89;;;;24056:24;24073:6;24056:12;;:16;;:24;;;;:::i;:::-;24041:12;:39;;;;24122:1;24096:37;;24105:7;24096:37;;;24126:6;24096:37;;;;;;;;;;;;;;;;;;23723:418;;:::o;33167:433::-;33271:5;33234:42;;:12;:26;33247:12;33234:26;;;;;;;;;;;;;;;:33;;;;;;;;;;;;:42;;;33231:362;;;33324:4;33288:12;:26;33301:12;33288:26;;;;;;;;;;;;;;;:33;;;:40;;;;;;;;;;;;;;;;;;33374:17;;33342:12;:26;33355:12;33342:26;;;;;;;;;;;;;;;:29;;:49;;;;33449:12;33401:26;:45;33428:17;;33401:45;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;33491:24;33513:1;33491:17;;:21;;:24;;;;:::i;:::-;33471:17;:44;;;;33552:31;33581:1;33552:24;;:28;;:31;;;;:::i;:::-;33525:24;:58;;;;33231:362;33167:433;:::o;41556:263::-;41623:4;41640:16;41660:15;41673:1;41661:6;41660:12;;:15;;;;:::i;:::-;41640:35;;41686:12;41701:20;41717:3;41701:11;:15;;:20;;;;:::i;:::-;41686:35;;41732:22;41757:19;41768:7;41757:6;:10;;:19;;;;:::i;:::-;41732:44;;41794:17;41787:24;;;;;41556:263;;;:::o;30031:613::-;30117:15;30103:29;;:10;:29;;;;30095:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30217:5;30196:26;;:5;:17;30202:10;30196:17;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;30188:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30317:4;30277:44;;:12;:29;30290:15;30277:29;;;;;;;;;;;;;;;:36;;;;;;;;;;;;:44;;;30269:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30421:46;30465:1;30421:8;:25;30430:15;30421:25;;;;;;;;;;;;;;;:39;;;:43;;:46;;;;:::i;:::-;30378:8;:25;30387:15;30378:25;;;;;;;;;;;;;;;:39;;:89;;;;30481:8;:25;30490:15;30481:25;;;;;;;;;;;;;;;:43;;30530:10;30481:60;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;30481:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30586:15;30552:19;:31;30572:10;30552:31;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;30632:4;30612:5;:17;30618:10;30612:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;30031:613;:::o;33611:1150::-;33720:4;33684:12;:26;33697:12;33684:26;;;;;;;;;;;;;;;:33;;;:40;;;;;;;;;;;;;;;;;33680:1074;;;33798:16;33817:12;:26;33830:12;33817:26;;;;;;;;;;;;;;;:29;;;33798:48;;34021:24;34048:26;:48;34094:1;34075:17;;:20;34048:48;;;;;;;;;;;;;;;;;;;;;34021:75;;34253:26;:49;34300:1;34280:17;;:21;34253:49;;;;;;;;;;;;;;;;;;;;;34211:26;:39;34238:11;34211:39;;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;34413:11;34377:12;:30;34390:16;34377:30;;;;;;;;;;;;;;;:33;;:47;;;;34507:12;:26;34520:12;34507:26;;;;;;;;;;;;;;;;34500:34;;;;;;;;;;;;;;;;;;;;;;;34556:26;:49;34603:1;34583:17;;:21;34556:49;;;;;;;;;;;;34549:57;;;;;;;;;;;34641:24;34663:1;34641:17;;:21;;:24;;;;:::i;:::-;34621:17;:44;;;;34709:33;34740:1;34709:26;;:30;;:33;;;;:::i;:::-;34680:26;:62;;;;33680:1074;;;33611:1150;:::o;41859:260::-;41925:4;41943:18;41965:16;41978:2;41966:6;41965:12;;:16;;;;:::i;:::-;41943:38;;41992:12;42007:22;42025:3;42007:13;:17;;:22;;;;:::i;:::-;41992:37;;42040:18;42061:19;42072:7;42061:6;:10;;:19;;;;:::i;:::-;42040:40;;42098:13;42091:20;;;;;41859:260;;;:::o

Swarm Source

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