ETH Price: $3,362.43 (+0.44%)

Token

Elyssa AR ($ELY)
 

Overview

Max Total Supply

10,000,000 $ELY

Holders

1,321 (0.00%)

Market

Price

$0.00 @ 0.000001 ETH

Onchain Market Cap

$48,037.72

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,814.892178772183489264 $ELY

Value
$13.52 ( ~0.00402090209353352 Eth) [0.0281%]
0x165dd9ebfb4fa29295534732193de18b346e47a2
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Project Elyssa is a groundbreaking initiative aimed at redefining the augmented reality landscape.

Market

Volume (24H):$0.00
Market Capitalization:$0.00
Circulating Supply:0.00 $ELY
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ELY

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-19
*/

/**

Step into the Future with Project E L Y S S A!

Elyssa is a groundbreaking initiative that aims to revolutionize
DeSci, Digital Assets and Education through its innovative Augmented Reality applications.

Website: http://elyssa.io
Telegram: https://t.me/ElyssaAR
Twitter: https://twitter.com/ElyssaAR

 *  SourceUnit: /home/roholah/Desktop/Deploy-BSC-Token/contracts/Token.sol
 */

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.17;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

/**
 *  SourceUnit: /home/roholah/Desktop/Deploy-BSC-Token/contracts/Token.sol
 */

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @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 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) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 *  SourceUnit: /home/roholah/Desktop/Deploy-BSC-Token/contracts/Token.sol
 */

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

////import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/**
 *  SourceUnit: /home/roholah/Desktop/Deploy-BSC-Token/contracts/Token.sol
 */

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

////import "./IERC20.sol";
////import "./extensions/IERC20Metadata.sol";
////import "../../utils/Context.sol";

/**
 * @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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead 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, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override 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 this function is
     * overridden;
     *
     * 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 virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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:
     *
     * - `account` 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 += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

/**
 *  SourceUnit: /home/roholah/Desktop/Deploy-BSC-Token/contracts/Token.sol
 */

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 *  SourceUnit: /home/roholah/Desktop/Deploy-BSC-Token/contracts/Token.sol
 */

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

////import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 *  SourceUnit: /home/roholah/Desktop/Deploy-BSC-Token/contracts/Token.sol
 */

//SPDX-License-Identifier: MIT

////import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
////import "@openzeppelin/contracts/access/Ownable.sol";
////import "@openzeppelin/contracts/utils/math/SafeMath.sol";
////import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

interface DexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface DexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract ELY is ERC20, Ownable {
    struct Tax {
        uint256 marketingTax;
    }

    uint256 private constant _totalSupply = 1e7 * 1e18;

    //Router
    DexRouter public immutable uniswapRouter;
    address public immutable pairAddress;

    //Taxes
    Tax public buyTaxes = Tax(20);
    Tax public sellTaxes = Tax(40);
    Tax public transferTaxes = Tax(0);

    //Whitelisting from taxes/maxwallet/txlimit/etc
    mapping(address => bool) private whitelisted;

    //Anti-bot and limitations
    uint256 public startBlock = 0;
    uint256 public deadBlocks = 5;
    uint256 public maxWallet = _totalSupply * 2 / 100;
    mapping(address => bool) public isBlacklisted;

    //Swapping
    uint256 public swapTokensAtAmount = _totalSupply / 100000; //after 0.001% of total supply, swap them
    bool public swapAndLiquifyEnabled = true;
    bool public isSwapping = false;

    //Wallets
    address public marketingWallet = 0xAfE6B307562E3b90a649E423e4Cb17bfF3Df90ea;

    //Events
    event marketingWalletChanged(address indexed _trWallet);
    event SwapThresholdUpdated(uint256 indexed _newThreshold);
    event InternalSwapStatusUpdated(bool indexed _status);
    event Whitelist(address indexed _target, bool indexed _status);

    bool public tradingEnabled = false;

    constructor() ERC20("Elyssa AR", "$ELY") {
        uniswapRouter = DexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pairAddress = DexFactory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());

        whitelisted[msg.sender] = true;
        whitelisted[address(uniswapRouter)] = true;
        whitelisted[address(this)] = true;

        _mint(msg.sender, _totalSupply);
    }

    function setmarketingWallet(address _newmarketing) external onlyOwner {
        require(_newmarketing != address(0), "can not set marketing to dead wallet");
        marketingWallet = _newmarketing;
        emit marketingWalletChanged(_newmarketing);
    }

    function setSwapTokensAtAmount(uint256 _newAmount) external onlyOwner {
        require(
            _newAmount > 0 && _newAmount <= (_totalSupply * 1) / 100,
            "Minimum swap amount must be greater than 0 and less than 0.5% of total supply!"
        );
        swapTokensAtAmount = _newAmount;
        emit SwapThresholdUpdated(swapTokensAtAmount);
    }

    function toggleSwapping() external onlyOwner {
        swapAndLiquifyEnabled = (swapAndLiquifyEnabled) ? false : true;
    }

    function setWhitelistStatus(address _wallet, bool _status) external onlyOwner {
        whitelisted[_wallet] = _status;
        emit Whitelist(_wallet, _status);
    }

    function checkWhitelist(address _wallet) external view returns (bool) {
        return whitelisted[_wallet];
    }

    function blacklistAddress(address _target, bool _status) external onlyOwner {
        if (_status) {
            require(_target != pairAddress, "Can't blacklist liquidity pool");
            require(_target != address(this), "Can't blacklisted the token");
        }
        isBlacklisted[_target] = _status;
    }

    function blacklistAddresses(address[] memory _targets, bool[] memory _status) external onlyOwner {
        for (uint256 i = 0; i < _targets.length; i++) {
            if (_status[i]) {
                require(_targets[i] != pairAddress, "Can't blacklist liquidity pool");
                require(_targets[i] != address(this), "Can't blacklisted the token");
            }
            isBlacklisted[_targets[i]] = _status[i];
        }
    }

    function startTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        tradingEnabled = true;
        startBlock = block.number;
    }

    function updateBuyTax(uint256 marketingTax) external onlyOwner {
        require(marketingTax <= 10, "can't set buy tax over 10%");
        buyTaxes.marketingTax = marketingTax;
    }

    function updateSellTax(uint256 marketingTax) external onlyOwner {
        require(marketingTax <= 40, "can't set buy tax over 40%");
        sellTaxes.marketingTax = marketingTax;
    }

    // this function is reponsible for managing tax, if _from or _to is whitelisted, we simply return _amount and skip all the limitations
    function _takeTax(address _from, address _to, uint256 _amount) internal returns (uint256) {
        if (whitelisted[_from] || whitelisted[_to]) {
            return _amount;
        }

        require(!isBlacklisted[_from] && !isBlacklisted[_to], "You are blocked from buy/sell/transfers");

        require(tradingEnabled, "Trading not enabled yet!");

        uint256 totalTax = 0;
        if (_to == pairAddress) {
            totalTax = sellTaxes.marketingTax;
        } else if (_from == pairAddress) {
            totalTax = buyTaxes.marketingTax;
        }

        if (_to != pairAddress) {
            require(_amount + balanceOf(_to) <= maxWallet, "can't buy more than max wallet");
        }

        //if is a sniper, blacklist it, only works for 5 blocks after launch
        _antiBot(_from, _to);

        uint256 tax = 0;
        if (totalTax > 0) {
            tax = (_amount * totalTax) / 100;
            super._transfer(_from, address(this), tax);
        }
        return (_amount - tax);
    }

    function _transfer(address _from, address _to, uint256 _amount) internal virtual override {
        require(_from != address(0), "transfer from address zero");
        require(_to != address(0), "transfer to address zero");
        uint256 toTransfer = _takeTax(_from, _to, _amount);

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if (
            swapAndLiquifyEnabled && pairAddress == _to && canSwap && !whitelisted[_from] && !whitelisted[_to]
                && !isSwapping
        ) {
            isSwapping = true;
            internalSwap(swapTokensAtAmount);
            isSwapping = false;
        }
        super._transfer(_from, _to, toTransfer);
    }

    function internalSwap(uint256 swapAmount) internal {
        uint256 taxAmount = swapAmount;
        if (taxAmount == 0 || swapAmount == 0) {
            return;
        }
        swapToETH(balanceOf(address(this)));
        (bool success,) = marketingWallet.call{value: address(this).balance}("");
    }

    //swap balalce of the contract to ETH
    function swapToETH(uint256 _amount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), _amount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount, 0, path, address(this), block.timestamp
        );
    }

    //change dead block in range 0-5, can only be done before launch
    function adjustDeadBlock(uint256 db) external onlyOwner {
        require(!tradingEnabled, "This function is disabled after launch");
        require(db <= 5, "cant set deadblock count to more than 5");
        deadBlocks = db;
    }

    //removing all limits here, must be called by owner, removes max wallet and sets buy/sell tax to 5/5
    function removeLimits() external onlyOwner {
        maxWallet = _totalSupply;
        buyTaxes.marketingTax = 5;
        sellTaxes.marketingTax = 5;
    }

    //blacklist wallet if is in dead block, we don't want to blacklist liquidity pair, that would ruin everything
    function _antiBot(address from, address to) internal {
        if (block.number <= startBlock + deadBlocks) {
            if (from == pairAddress) {
                isBlacklisted[to] = true;
            }
            if (to == pairAddress) {
                isBlacklisted[from] = true;
            }
        }
    }

    //ETH got stuck? withdraw here
    function withdrawStuckETH() external onlyOwner {
        (bool success,) = address(msg.sender).call{value: address(this).balance}("");
        require(success, "transferring ETH failed");
    }

    //Tokens got stuck in the contract? withdraw them using this function
    function withdrawStuckTokens(address ERC20_token) external onlyOwner {
        bool success = IERC20(ERC20_token).transfer(msg.sender, IERC20(ERC20_token).balanceOf(address(this)));
        require(success, "trasfering tokens failed!");
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"bool","name":"_status","type":"bool"}],"name":"InternalSwapStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_newThreshold","type":"uint256"}],"name":"SwapThresholdUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"marketingWalletChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"db","type":"uint256"}],"name":"adjustDeadBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bool[]","name":"_status","type":"bool[]"}],"name":"blacklistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newmarketing","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSwapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract DexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ERC20_token","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

601460c0819052600655602860e081905260075561012060405260006101008190526008819055600a556005600b556064620000486a084595161401484a00000060026200042e565b6200005491906200044e565b600c5562000071620186a06a084595161401484a0000006200044e565b600e55600f80546001600160b81b03191675afe6b307562e3b90a649e423e4cb17bff3df90ea0001179055348015620000a957600080fd5b506040518060400160405280600981526020016822b63cb9b9b09020a960b91b8152506040518060400160405280600481526020016324454c5960e01b8152508160039081620000fa919062000515565b50600462000109828262000515565b5050506200012662000120620002f760201b60201c565b620002fb565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200017c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a29190620005e1565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002189190620005e1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c9190620005e1565b6001600160a01b0390811660a052336000818152600960205260408082208054600160ff199182168117909255608051909516835281832080548616821790553083529120805490931617909155620002f1906a084595161401484a0000006200034d565b62000629565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620003a85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620003bc919062000613565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000448576200044862000418565b92915050565b6000826200046c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200049c57607f821691505b602082108103620004bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041357600081815260208120601f850160051c81016020861015620004ec5750805b601f850160051c820191505b818110156200050d57828155600101620004f8565b505050505050565b81516001600160401b0381111562000531576200053162000471565b620005498162000542845462000487565b84620004c3565b602080601f831160018114620005815760008415620005685750858301515b600019600386901b1c1916600185901b1785556200050d565b600085815260208120601f198616915b82811015620005b25788860151825594840194600190910190840162000591565b5085821015620005d15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620005f457600080fd5b81516001600160a01b03811681146200060c57600080fd5b9392505050565b8082018082111562000448576200044862000418565b60805160a0516123946200069c600039600081816105fd01528181610b0b01528181611027015281816116080152818161186f015281816118b1015281816118ef01528181611c2d0152611c8a01526000818161050c01528181611d3f01528181611df80152611e3401526123946000f3fe6080604052600436106102555760003560e01c8063751039fc11610139578063cb963728116100b6578063f2fde38b1161007a578063f2fde38b14610709578063f5648a4f14610729578063f66895a31461073e578063f8b45b0514610755578063fabb0b4f1461076b578063fe575a871461078157600080fd5b8063cb9637281461067e578063d6342a4b1461069e578063dd62ed3e146106be578063e2f45605146106de578063ef586f71146106f457600080fd5b8063a457c2d7116100fd578063a457c2d7146105cb578063a8b08982146105eb578063a9059cbb1461061f578063afa4f3b21461063f578063b88631151461065f57600080fd5b8063751039fc1461054657806375f0a8741461055b578063864701a5146105815780638da5cb5b1461059857806395d89b41146105b657600080fd5b806339509351116101d25780634ada218b116101965780634ada218b146104575780635331803c146104785780635642fe5c1461048f57806370a08231146104af578063715018a6146104e5578063735de9f7146104fa57600080fd5b806339509351146103c7578063436d3340146103e7578063455a43961461040757806348cd4cb1146104275780634a74bb021461043d57600080fd5b80631950c218116102195780631950c2181461031d578063224611731461035657806323b872dd14610376578063293230b814610396578063313ce567146103ab57600080fd5b806306fdde0314610261578063095ea7b31461028c5780630c424284146102bc57806312185a39146102de57806318160ddd146102fe57600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b506102766107b1565b6040516102839190611ea0565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004611f03565b610843565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004611f3d565b61085d565b005b3480156102ea57600080fd5b506102dc6102f9366004611f76565b6108b9565b34801561030a57600080fd5b506002545b604051908152602001610283565b34801561032957600080fd5b506102ac610338366004611f8f565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561036257600080fd5b506102dc610371366004611f8f565b61091c565b34801561038257600080fd5b506102ac610391366004611fac565b6109da565b3480156103a257600080fd5b506102dc610a00565b3480156103b757600080fd5b5060405160128152602001610283565b3480156103d357600080fd5b506102ac6103e2366004611f03565b610a7b565b3480156103f357600080fd5b506102dc610402366004611f76565b610a9d565b34801561041357600080fd5b506102dc610422366004611f3d565b610afb565b34801561043357600080fd5b5061030f600a5481565b34801561044957600080fd5b50600f546102ac9060ff1681565b34801561046357600080fd5b50600f546102ac90600160b01b900460ff1681565b34801561048457600080fd5b5060085461030f9081565b34801561049b57600080fd5b506102dc6104aa366004611f76565b610c0d565b3480156104bb57600080fd5b5061030f6104ca366004611f8f565b6001600160a01b031660009081526020819052604090205490565b3480156104f157600080fd5b506102dc610ce4565b34801561050657600080fd5b5061052e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610283565b34801561055257600080fd5b506102dc610cf8565b34801561056757600080fd5b50600f5461052e906201000090046001600160a01b031681565b34801561058d57600080fd5b5060065461030f9081565b3480156105a457600080fd5b506005546001600160a01b031661052e565b3480156105c257600080fd5b50610276610d1b565b3480156105d757600080fd5b506102ac6105e6366004611f03565b610d2a565b3480156105f757600080fd5b5061052e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561062b57600080fd5b506102ac61063a366004611f03565b610db0565b34801561064b57600080fd5b506102dc61065a366004611f76565b610dbe565b34801561066b57600080fd5b50600f546102ac90610100900460ff1681565b34801561068a57600080fd5b506102dc610699366004611f8f565b610eb3565b3480156106aa57600080fd5b506102dc6106b93660046120cc565b610ff2565b3480156106ca57600080fd5b5061030f6106d936600461218e565b6111b2565b3480156106ea57600080fd5b5061030f600e5481565b34801561070057600080fd5b506102dc6111dd565b34801561071557600080fd5b506102dc610724366004611f8f565b61120c565b34801561073557600080fd5b506102dc611285565b34801561074a57600080fd5b5060075461030f9081565b34801561076157600080fd5b5061030f600c5481565b34801561077757600080fd5b5061030f600b5481565b34801561078d57600080fd5b506102ac61079c366004611f8f565b600d6020526000908152604090205460ff1681565b6060600380546107c0906121bc565b80601f01602080910402602001604051908101604052809291908181526020018280546107ec906121bc565b80156108395780601f1061080e57610100808354040283529160200191610839565b820191906000526020600020905b81548152906001019060200180831161081c57829003601f168201915b5050505050905090565b600033610851818585611325565b60019150505b92915050565b610865611449565b6001600160a01b038216600081815260096020526040808220805460ff191685151590811790915590519092917f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d91a35050565b6108c1611449565b60288111156109175760405162461bcd60e51b815260206004820152601a60248201527f63616e2774207365742062757920746178206f7665722034302500000000000060448201526064015b60405180910390fd5b600755565b610924611449565b6001600160a01b0381166109865760405162461bcd60e51b8152602060048201526024808201527f63616e206e6f7420736574206d61726b6574696e6720746f20646561642077616044820152631b1b195d60e21b606482015260840161090e565b600f805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517fd1a6f806ccf6e5a2241d358891af2601bbf89feaad0fb4a891c9fbde2933761990600090a250565b6000336109e88582856114a3565b6109f385858561151d565b60019150505b9392505050565b610a08611449565b600f54600160b01b900460ff1615610a625760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c6564000000000000000000604482015260640161090e565b600f805460ff60b01b1916600160b01b17905543600a55565b600033610851818585610a8e83836111b2565b610a98919061220c565b611325565b610aa5611449565b600a811115610af65760405162461bcd60e51b815260206004820152601a60248201527f63616e2774207365742062757920746178206f76657220313025000000000000604482015260640161090e565b600655565b610b03611449565b8015610be2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610b8a5760405162461bcd60e51b815260206004820152601e60248201527f43616e277420626c61636b6c697374206c697175696469747920706f6f6c0000604482015260640161090e565b306001600160a01b03831603610be25760405162461bcd60e51b815260206004820152601b60248201527f43616e277420626c61636b6c69737465642074686520746f6b656e0000000000604482015260640161090e565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610c15611449565b600f54600160b01b900460ff1615610c7e5760405162461bcd60e51b815260206004820152602660248201527f546869732066756e6374696f6e2069732064697361626c6564206166746572206044820152650d8c2eadcc6d60d31b606482015260840161090e565b6005811115610cdf5760405162461bcd60e51b815260206004820152602760248201527f63616e74207365742064656164626c6f636b20636f756e7420746f206d6f7265604482015266207468616e203560c81b606482015260840161090e565b600b55565b610cec611449565b610cf660006116d7565b565b610d00611449565b6a084595161401484a000000600c5560056006819055600755565b6060600480546107c0906121bc565b60003381610d3882866111b2565b905083811015610d985760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161090e565b610da58286868403611325565b506001949350505050565b60003361085181858561151d565b610dc6611449565b600081118015610df757506064610de96a084595161401484a000000600161221f565b610df39190612236565b8111155b610e805760405162461bcd60e51b815260206004820152604e60248201527f4d696e696d756d207377617020616d6f756e74206d757374206265206772656160448201527f746572207468616e203020616e64206c657373207468616e20302e3525206f6660648201526d20746f74616c20737570706c792160901b608482015260a40161090e565b600e81905560405181907f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690600090a250565b610ebb611449565b6040516370a0823160e01b81523060048201526000906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f309190612258565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190612271565b905080610fee5760405162461bcd60e51b815260206004820152601960248201527f74726173666572696e6720746f6b656e73206661696c65642100000000000000604482015260640161090e565b5050565b610ffa611449565b60005b82518110156111ad578181815181106110185761101861228e565b602002602001015115611139577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168382815181106110615761106161228e565b60200260200101516001600160a01b0316036110bf5760405162461bcd60e51b815260206004820152601e60248201527f43616e277420626c61636b6c697374206c697175696469747920706f6f6c0000604482015260640161090e565b306001600160a01b03168382815181106110db576110db61228e565b60200260200101516001600160a01b0316036111395760405162461bcd60e51b815260206004820152601b60248201527f43616e277420626c61636b6c69737465642074686520746f6b656e0000000000604482015260640161090e565b81818151811061114b5761114b61228e565b6020026020010151600d60008584815181106111695761116961228e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806111a5816122a4565b915050610ffd565b505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6111e5611449565b600f5460ff166111f65760016111f9565b60005b600f805460ff1916911515919091179055565b611214611449565b6001600160a01b0381166112795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090e565b611282816116d7565b50565b61128d611449565b604051600090339047908381818185875af1925050503d80600081146112cf576040519150601f19603f3d011682016040523d82523d6000602084013e6112d4565b606091505b50509050806112825760405162461bcd60e51b815260206004820152601760248201527f7472616e7366657272696e6720455448206661696c6564000000000000000000604482015260640161090e565b6001600160a01b0383166113875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090e565b6001600160a01b0382166113e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610cf65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090e565b60006114af84846111b2565b90506000198114611517578181101561150a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161090e565b6115178484848403611325565b50505050565b6001600160a01b0383166115735760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f000000000000604482015260640161090e565b6001600160a01b0382166115c95760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f0000000000000000604482015260640161090e565b60006115d6848484611729565b600e5430600090815260208190526040902054600f5492935010159060ff1680156116325750836001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316145b801561163b5750805b801561166057506001600160a01b03851660009081526009602052604090205460ff16155b801561168557506001600160a01b03841660009081526009602052604090205460ff16155b80156116995750600f54610100900460ff16155b156116c557600f805461ff001916610100179055600e546116b9906119e3565b600f805461ff00191690555b6116d0858584611a71565b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831660009081526009602052604081205460ff168061176857506001600160a01b03831660009081526009602052604090205460ff165b156117745750806109f9565b6001600160a01b0384166000908152600d602052604090205460ff161580156117b657506001600160a01b0383166000908152600d602052604090205460ff16155b6118125760405162461bcd60e51b815260206004820152602760248201527f596f752061726520626c6f636b65642066726f6d206275792f73656c6c2f7472604482015266616e736665727360c81b606482015260840161090e565b600f54600160b01b900460ff1661186b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f7420656e61626c656420796574210000000000000000604482015260640161090e565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036118af57506007546118ed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036118ed57506006545b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461199a57600c546001600160a01b03851660009081526020819052604090205461194c908561220c565b111561199a5760405162461bcd60e51b815260206004820152601e60248201527f63616e277420627579206d6f7265207468616e206d61782077616c6c65740000604482015260640161090e565b6119a48585611c15565b600081156119cf5760646119b8838661221f565b6119c29190612236565b90506119cf863083611a71565b6119d981856122bd565b9695505050505050565b808015806119ef575081155b156119f8575050565b30600090815260208190526040902054611a1190611ce8565b600f546040516000916201000090046001600160a01b03169047908381818185875af1925050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b505050505050565b6001600160a01b038316611ad55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161090e565b6001600160a01b038216611b375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161090e565b6001600160a01b03831660009081526020819052604090205481811015611baf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161090e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611517565b600b54600a54611c25919061220c565b4311610fee577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611c88576001600160a01b0381166000908152600d60205260409020805460ff191660011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610fee576001600160a01b0382166000908152600d60205260409020805460ff191660011790555050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d1d57611d1d61228e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf91906122d0565b81600181518110611dd257611dd261228e565b60200260200101906001600160a01b031690816001600160a01b031681525050611e1d307f000000000000000000000000000000000000000000000000000000000000000084611325565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611e729085906000908690309042906004016122ed565b600060405180830381600087803b158015611e8c57600080fd5b505af1158015611a69573d6000803e3d6000fd5b600060208083528351808285015260005b81811015611ecd57858101830151858201604001528201611eb1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461128257600080fd5b60008060408385031215611f1657600080fd5b8235611f2181611eee565b946020939093013593505050565b801515811461128257600080fd5b60008060408385031215611f5057600080fd5b8235611f5b81611eee565b91506020830135611f6b81611f2f565b809150509250929050565b600060208284031215611f8857600080fd5b5035919050565b600060208284031215611fa157600080fd5b81356109f981611eee565b600080600060608486031215611fc157600080fd5b8335611fcc81611eee565b92506020840135611fdc81611eee565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561202c5761202c611fed565b604052919050565b600067ffffffffffffffff82111561204e5761204e611fed565b5060051b60200190565b600082601f83011261206957600080fd5b8135602061207e61207983612034565b612003565b82815260059290921b8401810191818101908684111561209d57600080fd5b8286015b848110156120c15780356120b481611f2f565b83529183019183016120a1565b509695505050505050565b600080604083850312156120df57600080fd5b823567ffffffffffffffff808211156120f757600080fd5b818501915085601f83011261210b57600080fd5b8135602061211b61207983612034565b82815260059290921b8401810191818101908984111561213a57600080fd5b948201945b8386101561216157853561215281611eee565b8252948201949082019061213f565b9650508601359250508082111561217757600080fd5b5061218485828601612058565b9150509250929050565b600080604083850312156121a157600080fd5b82356121ac81611eee565b91506020830135611f6b81611eee565b600181811c908216806121d057607f821691505b6020821081036121f057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610857576108576121f6565b8082028115828204841417610857576108576121f6565b60008261225357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561226a57600080fd5b5051919050565b60006020828403121561228357600080fd5b81516109f981611f2f565b634e487b7160e01b600052603260045260246000fd5b6000600182016122b6576122b66121f6565b5060010190565b81810381811115610857576108576121f6565b6000602082840312156122e257600080fd5b81516109f981611eee565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561233d5784516001600160a01b031683529383019391830191600101612318565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122037f9ec93b6f83cc44ffafe48f21f9cd068e738519ede0b47e35f8d07a3b287ab64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102555760003560e01c8063751039fc11610139578063cb963728116100b6578063f2fde38b1161007a578063f2fde38b14610709578063f5648a4f14610729578063f66895a31461073e578063f8b45b0514610755578063fabb0b4f1461076b578063fe575a871461078157600080fd5b8063cb9637281461067e578063d6342a4b1461069e578063dd62ed3e146106be578063e2f45605146106de578063ef586f71146106f457600080fd5b8063a457c2d7116100fd578063a457c2d7146105cb578063a8b08982146105eb578063a9059cbb1461061f578063afa4f3b21461063f578063b88631151461065f57600080fd5b8063751039fc1461054657806375f0a8741461055b578063864701a5146105815780638da5cb5b1461059857806395d89b41146105b657600080fd5b806339509351116101d25780634ada218b116101965780634ada218b146104575780635331803c146104785780635642fe5c1461048f57806370a08231146104af578063715018a6146104e5578063735de9f7146104fa57600080fd5b806339509351146103c7578063436d3340146103e7578063455a43961461040757806348cd4cb1146104275780634a74bb021461043d57600080fd5b80631950c218116102195780631950c2181461031d578063224611731461035657806323b872dd14610376578063293230b814610396578063313ce567146103ab57600080fd5b806306fdde0314610261578063095ea7b31461028c5780630c424284146102bc57806312185a39146102de57806318160ddd146102fe57600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b506102766107b1565b6040516102839190611ea0565b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004611f03565b610843565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004611f3d565b61085d565b005b3480156102ea57600080fd5b506102dc6102f9366004611f76565b6108b9565b34801561030a57600080fd5b506002545b604051908152602001610283565b34801561032957600080fd5b506102ac610338366004611f8f565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561036257600080fd5b506102dc610371366004611f8f565b61091c565b34801561038257600080fd5b506102ac610391366004611fac565b6109da565b3480156103a257600080fd5b506102dc610a00565b3480156103b757600080fd5b5060405160128152602001610283565b3480156103d357600080fd5b506102ac6103e2366004611f03565b610a7b565b3480156103f357600080fd5b506102dc610402366004611f76565b610a9d565b34801561041357600080fd5b506102dc610422366004611f3d565b610afb565b34801561043357600080fd5b5061030f600a5481565b34801561044957600080fd5b50600f546102ac9060ff1681565b34801561046357600080fd5b50600f546102ac90600160b01b900460ff1681565b34801561048457600080fd5b5060085461030f9081565b34801561049b57600080fd5b506102dc6104aa366004611f76565b610c0d565b3480156104bb57600080fd5b5061030f6104ca366004611f8f565b6001600160a01b031660009081526020819052604090205490565b3480156104f157600080fd5b506102dc610ce4565b34801561050657600080fd5b5061052e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610283565b34801561055257600080fd5b506102dc610cf8565b34801561056757600080fd5b50600f5461052e906201000090046001600160a01b031681565b34801561058d57600080fd5b5060065461030f9081565b3480156105a457600080fd5b506005546001600160a01b031661052e565b3480156105c257600080fd5b50610276610d1b565b3480156105d757600080fd5b506102ac6105e6366004611f03565b610d2a565b3480156105f757600080fd5b5061052e7f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f81565b34801561062b57600080fd5b506102ac61063a366004611f03565b610db0565b34801561064b57600080fd5b506102dc61065a366004611f76565b610dbe565b34801561066b57600080fd5b50600f546102ac90610100900460ff1681565b34801561068a57600080fd5b506102dc610699366004611f8f565b610eb3565b3480156106aa57600080fd5b506102dc6106b93660046120cc565b610ff2565b3480156106ca57600080fd5b5061030f6106d936600461218e565b6111b2565b3480156106ea57600080fd5b5061030f600e5481565b34801561070057600080fd5b506102dc6111dd565b34801561071557600080fd5b506102dc610724366004611f8f565b61120c565b34801561073557600080fd5b506102dc611285565b34801561074a57600080fd5b5060075461030f9081565b34801561076157600080fd5b5061030f600c5481565b34801561077757600080fd5b5061030f600b5481565b34801561078d57600080fd5b506102ac61079c366004611f8f565b600d6020526000908152604090205460ff1681565b6060600380546107c0906121bc565b80601f01602080910402602001604051908101604052809291908181526020018280546107ec906121bc565b80156108395780601f1061080e57610100808354040283529160200191610839565b820191906000526020600020905b81548152906001019060200180831161081c57829003601f168201915b5050505050905090565b600033610851818585611325565b60019150505b92915050565b610865611449565b6001600160a01b038216600081815260096020526040808220805460ff191685151590811790915590519092917f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d91a35050565b6108c1611449565b60288111156109175760405162461bcd60e51b815260206004820152601a60248201527f63616e2774207365742062757920746178206f7665722034302500000000000060448201526064015b60405180910390fd5b600755565b610924611449565b6001600160a01b0381166109865760405162461bcd60e51b8152602060048201526024808201527f63616e206e6f7420736574206d61726b6574696e6720746f20646561642077616044820152631b1b195d60e21b606482015260840161090e565b600f805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517fd1a6f806ccf6e5a2241d358891af2601bbf89feaad0fb4a891c9fbde2933761990600090a250565b6000336109e88582856114a3565b6109f385858561151d565b60019150505b9392505050565b610a08611449565b600f54600160b01b900460ff1615610a625760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c6564000000000000000000604482015260640161090e565b600f805460ff60b01b1916600160b01b17905543600a55565b600033610851818585610a8e83836111b2565b610a98919061220c565b611325565b610aa5611449565b600a811115610af65760405162461bcd60e51b815260206004820152601a60248201527f63616e2774207365742062757920746178206f76657220313025000000000000604482015260640161090e565b600655565b610b03611449565b8015610be2577f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b0316826001600160a01b031603610b8a5760405162461bcd60e51b815260206004820152601e60248201527f43616e277420626c61636b6c697374206c697175696469747920706f6f6c0000604482015260640161090e565b306001600160a01b03831603610be25760405162461bcd60e51b815260206004820152601b60248201527f43616e277420626c61636b6c69737465642074686520746f6b656e0000000000604482015260640161090e565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610c15611449565b600f54600160b01b900460ff1615610c7e5760405162461bcd60e51b815260206004820152602660248201527f546869732066756e6374696f6e2069732064697361626c6564206166746572206044820152650d8c2eadcc6d60d31b606482015260840161090e565b6005811115610cdf5760405162461bcd60e51b815260206004820152602760248201527f63616e74207365742064656164626c6f636b20636f756e7420746f206d6f7265604482015266207468616e203560c81b606482015260840161090e565b600b55565b610cec611449565b610cf660006116d7565b565b610d00611449565b6a084595161401484a000000600c5560056006819055600755565b6060600480546107c0906121bc565b60003381610d3882866111b2565b905083811015610d985760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161090e565b610da58286868403611325565b506001949350505050565b60003361085181858561151d565b610dc6611449565b600081118015610df757506064610de96a084595161401484a000000600161221f565b610df39190612236565b8111155b610e805760405162461bcd60e51b815260206004820152604e60248201527f4d696e696d756d207377617020616d6f756e74206d757374206265206772656160448201527f746572207468616e203020616e64206c657373207468616e20302e3525206f6660648201526d20746f74616c20737570706c792160901b608482015260a40161090e565b600e81905560405181907f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690600090a250565b610ebb611449565b6040516370a0823160e01b81523060048201526000906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f309190612258565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190612271565b905080610fee5760405162461bcd60e51b815260206004820152601960248201527f74726173666572696e6720746f6b656e73206661696c65642100000000000000604482015260640161090e565b5050565b610ffa611449565b60005b82518110156111ad578181815181106110185761101861228e565b602002602001015115611139577f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b03168382815181106110615761106161228e565b60200260200101516001600160a01b0316036110bf5760405162461bcd60e51b815260206004820152601e60248201527f43616e277420626c61636b6c697374206c697175696469747920706f6f6c0000604482015260640161090e565b306001600160a01b03168382815181106110db576110db61228e565b60200260200101516001600160a01b0316036111395760405162461bcd60e51b815260206004820152601b60248201527f43616e277420626c61636b6c69737465642074686520746f6b656e0000000000604482015260640161090e565b81818151811061114b5761114b61228e565b6020026020010151600d60008584815181106111695761116961228e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806111a5816122a4565b915050610ffd565b505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6111e5611449565b600f5460ff166111f65760016111f9565b60005b600f805460ff1916911515919091179055565b611214611449565b6001600160a01b0381166112795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090e565b611282816116d7565b50565b61128d611449565b604051600090339047908381818185875af1925050503d80600081146112cf576040519150601f19603f3d011682016040523d82523d6000602084013e6112d4565b606091505b50509050806112825760405162461bcd60e51b815260206004820152601760248201527f7472616e7366657272696e6720455448206661696c6564000000000000000000604482015260640161090e565b6001600160a01b0383166113875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090e565b6001600160a01b0382166113e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610cf65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090e565b60006114af84846111b2565b90506000198114611517578181101561150a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161090e565b6115178484848403611325565b50505050565b6001600160a01b0383166115735760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f000000000000604482015260640161090e565b6001600160a01b0382166115c95760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f0000000000000000604482015260640161090e565b60006115d6848484611729565b600e5430600090815260208190526040902054600f5492935010159060ff1680156116325750836001600160a01b03167f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b0316145b801561163b5750805b801561166057506001600160a01b03851660009081526009602052604090205460ff16155b801561168557506001600160a01b03841660009081526009602052604090205460ff16155b80156116995750600f54610100900460ff16155b156116c557600f805461ff001916610100179055600e546116b9906119e3565b600f805461ff00191690555b6116d0858584611a71565b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831660009081526009602052604081205460ff168061176857506001600160a01b03831660009081526009602052604090205460ff165b156117745750806109f9565b6001600160a01b0384166000908152600d602052604090205460ff161580156117b657506001600160a01b0383166000908152600d602052604090205460ff16155b6118125760405162461bcd60e51b815260206004820152602760248201527f596f752061726520626c6f636b65642066726f6d206275792f73656c6c2f7472604482015266616e736665727360c81b606482015260840161090e565b600f54600160b01b900460ff1661186b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f7420656e61626c656420796574210000000000000000604482015260640161090e565b60007f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b0316846001600160a01b0316036118af57506007546118ed565b7f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b0316856001600160a01b0316036118ed57506006545b7f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b0316846001600160a01b03161461199a57600c546001600160a01b03851660009081526020819052604090205461194c908561220c565b111561199a5760405162461bcd60e51b815260206004820152601e60248201527f63616e277420627579206d6f7265207468616e206d61782077616c6c65740000604482015260640161090e565b6119a48585611c15565b600081156119cf5760646119b8838661221f565b6119c29190612236565b90506119cf863083611a71565b6119d981856122bd565b9695505050505050565b808015806119ef575081155b156119f8575050565b30600090815260208190526040902054611a1190611ce8565b600f546040516000916201000090046001600160a01b03169047908381818185875af1925050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b505050505050565b6001600160a01b038316611ad55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161090e565b6001600160a01b038216611b375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161090e565b6001600160a01b03831660009081526020819052604090205481811015611baf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161090e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611517565b600b54600a54611c25919061220c565b4311610fee577f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b0316826001600160a01b031603611c88576001600160a01b0381166000908152600d60205260409020805460ff191660011790555b7f000000000000000000000000eed363729bdb7f9d7b5fce5dbf8bd5cc4fc98f7f6001600160a01b0316816001600160a01b031603610fee576001600160a01b0382166000908152600d60205260409020805460ff191660011790555050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d1d57611d1d61228e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf91906122d0565b81600181518110611dd257611dd261228e565b60200260200101906001600160a01b031690816001600160a01b031681525050611e1d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611325565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611e729085906000908690309042906004016122ed565b600060405180830381600087803b158015611e8c57600080fd5b505af1158015611a69573d6000803e3d6000fd5b600060208083528351808285015260005b81811015611ecd57858101830151858201604001528201611eb1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461128257600080fd5b60008060408385031215611f1657600080fd5b8235611f2181611eee565b946020939093013593505050565b801515811461128257600080fd5b60008060408385031215611f5057600080fd5b8235611f5b81611eee565b91506020830135611f6b81611f2f565b809150509250929050565b600060208284031215611f8857600080fd5b5035919050565b600060208284031215611fa157600080fd5b81356109f981611eee565b600080600060608486031215611fc157600080fd5b8335611fcc81611eee565b92506020840135611fdc81611eee565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561202c5761202c611fed565b604052919050565b600067ffffffffffffffff82111561204e5761204e611fed565b5060051b60200190565b600082601f83011261206957600080fd5b8135602061207e61207983612034565b612003565b82815260059290921b8401810191818101908684111561209d57600080fd5b8286015b848110156120c15780356120b481611f2f565b83529183019183016120a1565b509695505050505050565b600080604083850312156120df57600080fd5b823567ffffffffffffffff808211156120f757600080fd5b818501915085601f83011261210b57600080fd5b8135602061211b61207983612034565b82815260059290921b8401810191818101908984111561213a57600080fd5b948201945b8386101561216157853561215281611eee565b8252948201949082019061213f565b9650508601359250508082111561217757600080fd5b5061218485828601612058565b9150509250929050565b600080604083850312156121a157600080fd5b82356121ac81611eee565b91506020830135611f6b81611eee565b600181811c908216806121d057607f821691505b6020821081036121f057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610857576108576121f6565b8082028115828204841417610857576108576121f6565b60008261225357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561226a57600080fd5b5051919050565b60006020828403121561228357600080fd5b81516109f981611f2f565b634e487b7160e01b600052603260045260246000fd5b6000600182016122b6576122b66121f6565b5060010190565b81810381811115610857576108576121f6565b6000602082840312156122e257600080fd5b81516109f981611eee565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561233d5784516001600160a01b031683529383019391830191600101612318565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122037f9ec93b6f83cc44ffafe48f21f9cd068e738519ede0b47e35f8d07a3b287ab64736f6c63430008110033

Deployed Bytecode Sourcemap

29279:8516:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7336:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9687:201;;;;;;;;;;-1:-1:-1;9687:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9687:201:0;1023:187:1;31819:170:0;;;;;;;;;;-1:-1:-1;31819:170:0;;;;;:::i;:::-;;:::i;:::-;;33289:188;;;;;;;;;;-1:-1:-1;33289:188:0;;;;;:::i;:::-;;:::i;8456:108::-;;;;;;;;;;-1:-1:-1;8544:12:0;;8456:108;;;2056:25:1;;;2044:2;2029:18;8456:108:0;1910:177:1;31997:116:0;;;;;;;;;;-1:-1:-1;31997:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;32085:20:0;32061:4;32085:20;;;:11;:20;;;;;;;;;31997:116;31038:260;;;;;;;;;;-1:-1:-1;31038:260:0;;;;;:::i;:::-;;:::i;10468:261::-;;;;;;;;;;-1:-1:-1;10468:261:0;;;;;:::i;:::-;;:::i;32906:181::-;;;;;;;;;;;;;:::i;8298:93::-;;;;;;;;;;-1:-1:-1;8298:93:0;;8381:2;2947:36:1;;2935:2;2920:18;8298:93:0;2805:184:1;11138:238:0;;;;;;;;;;-1:-1:-1;11138:238:0;;;;;:::i;:::-;;:::i;33095:186::-;;;;;;;;;;-1:-1:-1;33095:186:0;;;;;:::i;:::-;;:::i;32121:321::-;;;;;;;;;;-1:-1:-1;32121:321:0;;;;;:::i;:::-;;:::i;29806:29::-;;;;;;;;;;;;;;;;30110:40;;;;;;;;;;-1:-1:-1;30110:40:0;;;;;;;;30566:34;;;;;;;;;;-1:-1:-1;30566:34:0;;;;-1:-1:-1;;;30566:34:0;;;;;;29626:33;;;;;;;;;;-1:-1:-1;29626:33:0;;;;;;36230:237;;;;;;;;;;-1:-1:-1;36230:237:0;;;;;:::i;:::-;;:::i;8627:127::-;;;;;;;;;;-1:-1:-1;8627:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8728:18:0;8701:7;8728:18;;;;;;;;;;;;8627:127;27313:103;;;;;;;;;;;;;:::i;29448:40::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3176:32:1;;;3158:51;;3146:2;3131:18;29448:40:0;2994:221:1;36581:159:0;;;;;;;;;;;;;:::i;30211:75::-;;;;;;;;;;-1:-1:-1;30211:75:0;;;;;;;-1:-1:-1;;;;;30211:75:0;;;29553:29;;;;;;;;;;-1:-1:-1;29553:29:0;;;;;;26665:87;;;;;;;;;;-1:-1:-1;26738:6:0;;-1:-1:-1;;;;;26738:6:0;26665:87;;7555:104;;;;;;;;;;;;;:::i;11879:436::-;;;;;;;;;;-1:-1:-1;11879:436:0;;;;;:::i;:::-;;:::i;29495:36::-;;;;;;;;;;;;;;;8960:193;;;;;;;;;;-1:-1:-1;8960:193:0;;;;;:::i;:::-;;:::i;31306:371::-;;;;;;;;;;-1:-1:-1;31306:371:0;;;;;:::i;:::-;;:::i;30157:30::-;;;;;;;;;;-1:-1:-1;30157:30:0;;;;;;;;;;;37510:245;;;;;;;;;;-1:-1:-1;37510:245:0;;;;;:::i;:::-;;:::i;32450:448::-;;;;;;;;;;-1:-1:-1;32450:448:0;;;;;:::i;:::-;;:::i;9216:151::-;;;;;;;;;;-1:-1:-1;9216:151:0;;;;;:::i;:::-;;:::i;30004:57::-;;;;;;;;;;;;;;;;31685:126;;;;;;;;;;;;;:::i;27571:201::-;;;;;;;;;;-1:-1:-1;27571:201:0;;;;;:::i;:::-;;:::i;37231:196::-;;;;;;;;;;;;;:::i;29589:30::-;;;;;;;;;;-1:-1:-1;29589:30:0;;;;;;29878:49;;;;;;;;;;;;;;;;29842:29;;;;;;;;;;;;;;;;29934:45;;;;;;;;;;-1:-1:-1;29934:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7336:100;7390:13;7423:5;7416:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7336:100;:::o;9687:201::-;9770:4;4078:10;9826:32;4078:10;9842:7;9851:6;9826:8;:32::i;:::-;9876:4;9869:11;;;9687:201;;;;;:::o;31819:170::-;26551:13;:11;:13::i;:::-;-1:-1:-1;;;;;31908:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;:30;;-1:-1:-1;;31908:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31954:27;;31908:30;;:20;31954:27:::1;::::0;::::1;31819:170:::0;;:::o;33289:188::-;26551:13;:11;:13::i;:::-;33388:2:::1;33372:12;:18;;33364:57;;;::::0;-1:-1:-1;;;33364:57:0;;6958:2:1;33364:57:0::1;::::0;::::1;6940:21:1::0;6997:2;6977:18;;;6970:30;7036:28;7016:18;;;7009:56;7082:18;;33364:57:0::1;;;;;;;;;33432:9;:37:::0;33289:188::o;31038:260::-;26551:13;:11;:13::i;:::-;-1:-1:-1;;;;;31127:27:0;::::1;31119:76;;;::::0;-1:-1:-1;;;31119:76:0;;7313:2:1;31119:76:0::1;::::0;::::1;7295:21:1::0;7352:2;7332:18;;;7325:30;7391:34;7371:18;;;7364:62;-1:-1:-1;;;7442:18:1;;;7435:34;7486:19;;31119:76:0::1;7111:400:1::0;31119:76:0::1;31206:15;:31:::0;;-1:-1:-1;;;;;;31206:31:0::1;::::0;-1:-1:-1;;;;;31206:31:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;31253:37:::1;::::0;::::1;::::0;-1:-1:-1;;31253:37:0::1;31038:260:::0;:::o;10468:261::-;10565:4;4078:10;10623:38;10639:4;4078:10;10654:6;10623:15;:38::i;:::-;10672:27;10682:4;10688:2;10692:6;10672:9;:27::i;:::-;10717:4;10710:11;;;10468:261;;;;;;:::o;32906:181::-;26551:13;:11;:13::i;:::-;32969:14:::1;::::0;-1:-1:-1;;;32969:14:0;::::1;;;32968:15;32960:51;;;::::0;-1:-1:-1;;;32960:51:0;;7718:2:1;32960:51:0::1;::::0;::::1;7700:21:1::0;7757:2;7737:18;;;7730:30;7796:25;7776:18;;;7769:53;7839:18;;32960:51:0::1;7516:347:1::0;32960:51:0::1;33022:14;:21:::0;;-1:-1:-1;;;;33022:21:0::1;-1:-1:-1::0;;;33022:21:0::1;::::0;;33067:12:::1;33054:10;:25:::0;32906:181::o;11138:238::-;11226:4;4078:10;11282:64;4078:10;11298:7;11335:10;11307:25;4078:10;11298:7;11307:9;:25::i;:::-;:38;;;;:::i;:::-;11282:8;:64::i;33095:186::-;26551:13;:11;:13::i;:::-;33193:2:::1;33177:12;:18;;33169:57;;;::::0;-1:-1:-1;;;33169:57:0;;8332:2:1;33169:57:0::1;::::0;::::1;8314:21:1::0;8371:2;8351:18;;;8344:30;8410:28;8390:18;;;8383:56;8456:18;;33169:57:0::1;8130:350:1::0;33169:57:0::1;33237:8;:36:::0;33095:186::o;32121:321::-;26551:13;:11;:13::i;:::-;32212:7:::1;32208:184;;;32255:11;-1:-1:-1::0;;;;;32244:22:0::1;:7;-1:-1:-1::0;;;;;32244:22:0::1;::::0;32236:65:::1;;;::::0;-1:-1:-1;;;32236:65:0;;8687:2:1;32236:65:0::1;::::0;::::1;8669:21:1::0;8726:2;8706:18;;;8699:30;8765:32;8745:18;;;8738:60;8815:18;;32236:65:0::1;8485:354:1::0;32236:65:0::1;32343:4;-1:-1:-1::0;;;;;32324:24:0;::::1;::::0;32316:64:::1;;;::::0;-1:-1:-1;;;32316:64:0;;9046:2:1;32316:64:0::1;::::0;::::1;9028:21:1::0;9085:2;9065:18;;;9058:30;9124:29;9104:18;;;9097:57;9171:18;;32316:64:0::1;8844:351:1::0;32316:64:0::1;-1:-1:-1::0;;;;;32402:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:32;;-1:-1:-1;;32402:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32121:321::o;36230:237::-;26551:13;:11;:13::i;:::-;36306:14:::1;::::0;-1:-1:-1;;;36306:14:0;::::1;;;36305:15;36297:66;;;::::0;-1:-1:-1;;;36297:66:0;;9402:2:1;36297:66:0::1;::::0;::::1;9384:21:1::0;9441:2;9421:18;;;9414:30;9480:34;9460:18;;;9453:62;-1:-1:-1;;;9531:18:1;;;9524:36;9577:19;;36297:66:0::1;9200:402:1::0;36297:66:0::1;36388:1;36382:2;:7;;36374:59;;;::::0;-1:-1:-1;;;36374:59:0;;9809:2:1;36374:59:0::1;::::0;::::1;9791:21:1::0;9848:2;9828:18;;;9821:30;9887:34;9867:18;;;9860:62;-1:-1:-1;;;9938:18:1;;;9931:37;9985:19;;36374:59:0::1;9607:403:1::0;36374:59:0::1;36444:10;:15:::0;36230:237::o;27313:103::-;26551:13;:11;:13::i;:::-;27378:30:::1;27405:1;27378:18;:30::i;:::-;27313:103::o:0;36581:159::-;26551:13;:11;:13::i;:::-;29415:10:::1;36635:9;:24:::0;36694:1:::1;36670:8;:25:::0;;;36706:9:::1;:26:::0;36581:159::o;7555:104::-;7611:13;7644:7;7637:14;;;;;:::i;11879:436::-;11972:4;4078:10;11972:4;12055:25;4078:10;12072:7;12055:9;:25::i;:::-;12028:52;;12119:15;12099:16;:35;;12091:85;;;;-1:-1:-1;;;12091:85:0;;10217:2:1;12091:85:0;;;10199:21:1;10256:2;10236:18;;;10229:30;10295:34;10275:18;;;10268:62;-1:-1:-1;;;10346:18:1;;;10339:35;10391:19;;12091:85:0;10015:401:1;12091:85:0;12212:60;12221:5;12228:7;12256:15;12237:16;:34;12212:8;:60::i;:::-;-1:-1:-1;12303:4:0;;11879:436;-1:-1:-1;;;;11879:436:0:o;8960:193::-;9039:4;4078:10;9095:28;4078:10;9112:2;9116:6;9095:9;:28::i;31306:371::-;26551:13;:11;:13::i;:::-;31422:1:::1;31409:10;:14;:56;;;;-1:-1:-1::0;31462:3:0::1;31442:16;29415:10;31457:1;31442:16;:::i;:::-;31441:24;;;;:::i;:::-;31427:10;:38;;31409:56;31387:184;;;::::0;-1:-1:-1;;;31387:184:0;;11018:2:1;31387:184:0::1;::::0;::::1;11000:21:1::0;11057:2;11037:18;;;11030:30;11096:34;11076:18;;;11069:62;11167:34;11147:18;;;11140:62;-1:-1:-1;;;11218:19:1;;;11211:45;11273:19;;31387:184:0::1;10816:482:1::0;31387:184:0::1;31582:18;:31:::0;;;31629:40:::1;::::0;31603:10;;31629:40:::1;::::0;;;::::1;31306:371:::0;:::o;37510:245::-;26551:13;:11;:13::i;:::-;37646:44:::1;::::0;-1:-1:-1;;;37646:44:0;;37684:4:::1;37646:44;::::0;::::1;3158:51:1::0;37590:12:0::1;::::0;-1:-1:-1;;;;;37605:28:0;::::1;::::0;::::1;::::0;37634:10:::1;::::0;37605:28;;37646:29:::1;::::0;3131:18:1;;37646:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37605:86;::::0;-1:-1:-1;;;;;;37605:86:0::1;::::0;;;;;;-1:-1:-1;;;;;11684:32:1;;;37605:86:0::1;::::0;::::1;11666:51:1::0;11733:18;;;11726:34;11639:18;;37605:86:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37590:101;;37710:7;37702:45;;;::::0;-1:-1:-1;;;37702:45:0;;12223:2:1;37702:45:0::1;::::0;::::1;12205:21:1::0;12262:2;12242:18;;;12235:30;12301:27;12281:18;;;12274:55;12346:18;;37702:45:0::1;12021:349:1::0;37702:45:0::1;37579:176;37510:245:::0;:::o;32450:448::-;26551:13;:11;:13::i;:::-;32563:9:::1;32558:333;32582:8;:15;32578:1;:19;32558:333;;;32623:7;32631:1;32623:10;;;;;;;;:::i;:::-;;;;;;;32619:207;;;32677:11;-1:-1:-1::0;;;;;32662:26:0::1;:8;32671:1;32662:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;32662:26:0::1;::::0;32654:69:::1;;;::::0;-1:-1:-1;;;32654:69:0;;8687:2:1;32654:69:0::1;::::0;::::1;8669:21:1::0;8726:2;8706:18;;;8699:30;8765:32;8745:18;;;8738:60;8815:18;;32654:69:0::1;8485:354:1::0;32654:69:0::1;32773:4;-1:-1:-1::0;;;;;32750:28:0::1;:8;32759:1;32750:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;32750:28:0::1;::::0;32742:68:::1;;;::::0;-1:-1:-1;;;32742:68:0;;9046:2:1;32742:68:0::1;::::0;::::1;9028:21:1::0;9085:2;9065:18;;;9058:30;9124:29;9104:18;;;9097:57;9171:18;;32742:68:0::1;8844:351:1::0;32742:68:0::1;32869:7;32877:1;32869:10;;;;;;;;:::i;:::-;;;;;;;32840:13;:26;32854:8;32863:1;32854:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32840:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32840:26:0;:39;;-1:-1:-1;;32840:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32599:3;::::1;::::0;::::1;:::i;:::-;;;;32558:333;;;;32450:448:::0;;:::o;9216:151::-;-1:-1:-1;;;;;9332:18:0;;;9305:7;9332:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9216:151::o;31685:126::-;26551:13;:11;:13::i;:::-;31766:21:::1;::::0;::::1;;31765:38;;31799:4;31765:38;;;31791:5;31765:38;31741:21;:62:::0;;-1:-1:-1;;31741:62:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31685:126::o;27571:201::-;26551:13;:11;:13::i;:::-;-1:-1:-1;;;;;27660:22:0;::::1;27652:73;;;::::0;-1:-1:-1;;;27652:73:0;;12849:2:1;27652:73:0::1;::::0;::::1;12831:21:1::0;12888:2;12868:18;;;12861:30;12927:34;12907:18;;;12900:62;-1:-1:-1;;;12978:18:1;;;12971:36;13024:19;;27652:73:0::1;12647:402:1::0;27652:73:0::1;27736:28;27755:8;27736:18;:28::i;:::-;27571:201:::0;:::o;37231:196::-;26551:13;:11;:13::i;:::-;37307:58:::1;::::0;37290:12:::1;::::0;37315:10:::1;::::0;37339:21:::1;::::0;37290:12;37307:58;37290:12;37307:58;37339:21;37315:10;37307:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37289:76;;;37384:7;37376:43;;;::::0;-1:-1:-1;;;37376:43:0;;13466:2:1;37376:43:0::1;::::0;::::1;13448:21:1::0;13505:2;13485:18;;;13478:30;13544:25;13524:18;;;13517:53;13587:18;;37376:43:0::1;13264:347:1::0;15880:346:0;-1:-1:-1;;;;;15982:19:0;;15974:68;;;;-1:-1:-1;;;15974:68:0;;13818:2:1;15974:68:0;;;13800:21:1;13857:2;13837:18;;;13830:30;13896:34;13876:18;;;13869:62;-1:-1:-1;;;13947:18:1;;;13940:34;13991:19;;15974:68:0;13616:400:1;15974:68:0;-1:-1:-1;;;;;16061:21:0;;16053:68;;;;-1:-1:-1;;;16053:68:0;;14223:2:1;16053:68:0;;;14205:21:1;14262:2;14242:18;;;14235:30;14301:34;14281:18;;;14274:62;-1:-1:-1;;;14352:18:1;;;14345:32;14394:19;;16053:68:0;14021:398:1;16053:68:0;-1:-1:-1;;;;;16134:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16186:32;;2056:25:1;;;16186:32:0;;2029:18:1;16186:32:0;;;;;;;15880:346;;;:::o;26830:132::-;26738:6;;-1:-1:-1;;;;;26738:6:0;4078:10;26894:23;26886:68;;;;-1:-1:-1;;;26886:68:0;;14626:2:1;26886:68:0;;;14608:21:1;;;14645:18;;;14638:30;14704:34;14684:18;;;14677:62;14756:18;;26886:68:0;14424:356:1;16517:419:0;16618:24;16645:25;16655:5;16662:7;16645:9;:25::i;:::-;16618:52;;-1:-1:-1;;16685:16:0;:37;16681:248;;16767:6;16747:16;:26;;16739:68;;;;-1:-1:-1;;;16739:68:0;;14987:2:1;16739:68:0;;;14969:21:1;15026:2;15006:18;;;14999:30;15065:31;15045:18;;;15038:59;15114:18;;16739:68:0;14785:353:1;16739:68:0;16851:51;16860:5;16867:7;16895:6;16876:16;:25;16851:8;:51::i;:::-;16607:329;16517:419;;;:::o;34676:711::-;-1:-1:-1;;;;;34785:19:0;;34777:58;;;;-1:-1:-1;;;34777:58:0;;15345:2:1;34777:58:0;;;15327:21:1;15384:2;15364:18;;;15357:30;15423:28;15403:18;;;15396:56;15469:18;;34777:58:0;15143:350:1;34777:58:0;-1:-1:-1;;;;;34854:17:0;;34846:54;;;;-1:-1:-1;;;34846:54:0;;15700:2:1;34846:54:0;;;15682:21:1;15739:2;15719:18;;;15712:30;15778:26;15758:18;;;15751:54;15822:18;;34846:54:0;15498:348:1;34846:54:0;34911:18;34932:29;34941:5;34948:3;34953:7;34932:8;:29::i;:::-;35017:18;;35007:4;34974:12;8728:18;;;;;;;;;;;35064:21;;34911:50;;-1:-1:-1;;34989:46:0;;35064:21;;:43;;;;;35104:3;-1:-1:-1;;;;;35089:18:0;:11;-1:-1:-1;;;;;35089:18:0;;35064:43;:54;;;;;35111:7;35064:54;:77;;;;-1:-1:-1;;;;;;35123:18:0;;;;;;:11;:18;;;;;;;;35122:19;35064:77;:98;;;;-1:-1:-1;;;;;;35146:16:0;;;;;;:11;:16;;;;;;;;35145:17;35064:98;:130;;;;-1:-1:-1;35184:10:0;;;;;;;35183:11;35064:130;35046:284;;;35221:10;:17;;-1:-1:-1;;35221:17:0;;;;;35266:18;;35253:32;;:12;:32::i;:::-;35300:10;:18;;-1:-1:-1;;35300:18:0;;;35046:284;35340:39;35356:5;35363:3;35368:10;35340:15;:39::i;:::-;34766:621;;34676:711;;;:::o;27932:191::-;28025:6;;;-1:-1:-1;;;;;28042:17:0;;;-1:-1:-1;;;;;;28042:17:0;;;;;;;28075:40;;28025:6;;;28042:17;28025:6;;28075:40;;28006:16;;28075:40;27995:128;27932:191;:::o;33625:1043::-;-1:-1:-1;;;;;33730:18:0;;33706:7;33730:18;;;:11;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;33752:16:0;;;;;;:11;:16;;;;;;;;33730:38;33726:85;;;-1:-1:-1;33792:7:0;33785:14;;33726:85;-1:-1:-1;;;;;33832:20:0;;;;;;:13;:20;;;;;;;;33831:21;:44;;;;-1:-1:-1;;;;;;33857:18:0;;;;;;:13;:18;;;;;;;;33856:19;33831:44;33823:96;;;;-1:-1:-1;;;33823:96:0;;16053:2:1;33823:96:0;;;16035:21:1;16092:2;16072:18;;;16065:30;16131:34;16111:18;;;16104:62;-1:-1:-1;;;16182:18:1;;;16175:37;16229:19;;33823:96:0;15851:403:1;33823:96:0;33940:14;;-1:-1:-1;;;33940:14:0;;;;33932:51;;;;-1:-1:-1;;;33932:51:0;;16461:2:1;33932:51:0;;;16443:21:1;16500:2;16480:18;;;16473:30;16539:26;16519:18;;;16512:54;16583:18;;33932:51:0;16259:348:1;33932:51:0;33996:16;34038:11;-1:-1:-1;;;;;34031:18:0;:3;-1:-1:-1;;;;;34031:18:0;;34027:175;;-1:-1:-1;34077:9:0;:22;34027:175;;;34130:11;-1:-1:-1;;;;;34121:20:0;:5;-1:-1:-1;;;;;34121:20:0;;34117:85;;-1:-1:-1;34169:8:0;:21;34117:85;34225:11;-1:-1:-1;;;;;34218:18:0;:3;-1:-1:-1;;;;;34218:18:0;;34214:131;;34289:9;;-1:-1:-1;;;;;8728:18:0;;8701:7;8728:18;;;;;;;;;;;34261:24;;:7;:24;:::i;:::-;:37;;34253:80;;;;-1:-1:-1;;;34253:80:0;;16814:2:1;34253:80:0;;;16796:21:1;16853:2;16833:18;;;16826:30;16892:32;16872:18;;;16865:60;16942:18;;34253:80:0;16612:354:1;34253:80:0;34435:20;34444:5;34451:3;34435:8;:20::i;:::-;34468:11;34498:12;;34494:134;;34556:3;34534:18;34544:8;34534:7;:18;:::i;:::-;34533:26;;;;:::i;:::-;34527:32;;34574:42;34590:5;34605:4;34612:3;34574:15;:42::i;:::-;34646:13;34656:3;34646:7;:13;:::i;:::-;34638:22;33625:1043;-1:-1:-1;;;;;;33625:1043:0:o;35395:311::-;35477:10;35502:14;;;:33;;-1:-1:-1;35520:15:0;;35502:33;35498:72;;;35552:7;35395:311;:::o;35498:72::-;35608:4;8701:7;8728:18;;;;;;;;;;;35580:35;;:9;:35::i;:::-;35644:15;;:54;;35627:12;;35644:15;;;-1:-1:-1;;;;;35644:15:0;;35672:21;;35627:12;35644:54;35627:12;35644:54;35672:21;35644:15;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35395:311:0:o;12785:806::-;-1:-1:-1;;;;;12882:18:0;;12874:68;;;;-1:-1:-1;;;12874:68:0;;17306:2:1;12874:68:0;;;17288:21:1;17345:2;17325:18;;;17318:30;17384:34;17364:18;;;17357:62;-1:-1:-1;;;17435:18:1;;;17428:35;17480:19;;12874:68:0;17104:401:1;12874:68:0;-1:-1:-1;;;;;12961:16:0;;12953:64;;;;-1:-1:-1;;;12953:64:0;;17712:2:1;12953:64:0;;;17694:21:1;17751:2;17731:18;;;17724:30;17790:34;17770:18;;;17763:62;-1:-1:-1;;;17841:18:1;;;17834:33;17884:19;;12953:64:0;17510:399:1;12953:64:0;-1:-1:-1;;;;;13103:15:0;;13081:19;13103:15;;;;;;;;;;;13137:21;;;;13129:72;;;;-1:-1:-1;;;13129:72:0;;18116:2:1;13129:72:0;;;18098:21:1;18155:2;18135:18;;;18128:30;18194:34;18174:18;;;18167:62;-1:-1:-1;;;18245:18:1;;;18238:36;18291:19;;13129:72:0;17914:402:1;13129:72:0;-1:-1:-1;;;;;13237:15:0;;;:9;:15;;;;;;;;;;;13255:20;;;13237:38;;13455:13;;;;;;;;;;:23;;;;;;13507:26;;2056:25:1;;;13455:13:0;;13507:26;;2029:18:1;13507:26:0;;;;;;;13546:37;32450:448;36863:324;36960:10;;36947;;:23;;;;:::i;:::-;36931:12;:39;36927:253;;36999:11;-1:-1:-1;;;;;36991:19:0;:4;-1:-1:-1;;;;;36991:19:0;;36987:84;;-1:-1:-1;;;;;37031:17:0;;;;;;:13;:17;;;;;:24;;-1:-1:-1;;37031:24:0;37051:4;37031:24;;;36987:84;37095:11;-1:-1:-1;;;;;37089:17:0;:2;-1:-1:-1;;;;;37089:17:0;;37085:84;;-1:-1:-1;;;;;37127:19:0;;;;;;:13;:19;;;;;:26;;-1:-1:-1;;37127:26:0;37149:4;37127:26;;;36863:324;;:::o;35757:395::-;35837:16;;;35851:1;35837:16;;;;;;;;35813:21;;35837:16;;;;;;;;;;-1:-1:-1;35837:16:0;35813:40;;35882:4;35864;35869:1;35864:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;35864:23:0;;;-1:-1:-1;;;;;35864:23:0;;;;;35908:13;-1:-1:-1;;;;;35908:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35898:4;35903:1;35898:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;35898:30:0;;;-1:-1:-1;;;;;35898:30:0;;;;;35939:56;35956:4;35971:13;35987:7;35939:8;:56::i;:::-;36006:138;;-1:-1:-1;;;36006:138:0;;-1:-1:-1;;;;;36006:13:0;:64;;;;:138;;36085:7;;36094:1;;36097:4;;36111;;36118:15;;36006:138;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:382;1403:6;1411;1464:2;1452:9;1443:7;1439:23;1435:32;1432:52;;;1480:1;1477;1470:12;1432:52;1519:9;1506:23;1538:31;1563:5;1538:31;:::i;:::-;1588:5;-1:-1:-1;1645:2:1;1630:18;;1617:32;1658:30;1617:32;1658:30;:::i;:::-;1707:7;1697:17;;;1338:382;;;;;:::o;1725:180::-;1784:6;1837:2;1825:9;1816:7;1812:23;1808:32;1805:52;;;1853:1;1850;1843:12;1805:52;-1:-1:-1;1876:23:1;;1725:180;-1:-1:-1;1725:180:1:o;2092:247::-;2151:6;2204:2;2192:9;2183:7;2179:23;2175:32;2172:52;;;2220:1;2217;2210:12;2172:52;2259:9;2246:23;2278:31;2303:5;2278:31;:::i;2344:456::-;2421:6;2429;2437;2490:2;2478:9;2469:7;2465:23;2461:32;2458:52;;;2506:1;2503;2496:12;2458:52;2545:9;2532:23;2564:31;2589:5;2564:31;:::i;:::-;2614:5;-1:-1:-1;2671:2:1;2656:18;;2643:32;2684:33;2643:32;2684:33;:::i;:::-;2344:456;;2736:7;;-1:-1:-1;;;2790:2:1;2775:18;;;;2762:32;;2344:456::o;3428:127::-;3489:10;3484:3;3480:20;3477:1;3470:31;3520:4;3517:1;3510:15;3544:4;3541:1;3534:15;3560:275;3631:2;3625:9;3696:2;3677:13;;-1:-1:-1;;3673:27:1;3661:40;;3731:18;3716:34;;3752:22;;;3713:62;3710:88;;;3778:18;;:::i;:::-;3814:2;3807:22;3560:275;;-1:-1:-1;3560:275:1:o;3840:183::-;3900:4;3933:18;3925:6;3922:30;3919:56;;;3955:18;;:::i;:::-;-1:-1:-1;4000:1:1;3996:14;4012:4;3992:25;;3840:183::o;4028:731::-;4079:5;4132:3;4125:4;4117:6;4113:17;4109:27;4099:55;;4150:1;4147;4140:12;4099:55;4186:6;4173:20;4212:4;4236:60;4252:43;4292:2;4252:43;:::i;:::-;4236:60;:::i;:::-;4330:15;;;4416:1;4412:10;;;;4400:23;;4396:32;;;4361:12;;;;4440:15;;;4437:35;;;4468:1;4465;4458:12;4437:35;4504:2;4496:6;4492:15;4516:214;4532:6;4527:3;4524:15;4516:214;;;4612:3;4599:17;4629:28;4651:5;4629:28;:::i;:::-;4670:18;;4708:12;;;;4549;;4516:214;;;-1:-1:-1;4748:5:1;4028:731;-1:-1:-1;;;;;;4028:731:1:o;4764:1209::-;4879:6;4887;4940:2;4928:9;4919:7;4915:23;4911:32;4908:52;;;4956:1;4953;4946:12;4908:52;4996:9;4983:23;5025:18;5066:2;5058:6;5055:14;5052:34;;;5082:1;5079;5072:12;5052:34;5120:6;5109:9;5105:22;5095:32;;5165:7;5158:4;5154:2;5150:13;5146:27;5136:55;;5187:1;5184;5177:12;5136:55;5223:2;5210:16;5245:4;5269:60;5285:43;5325:2;5285:43;:::i;5269:60::-;5363:15;;;5445:1;5441:10;;;;5433:19;;5429:28;;;5394:12;;;;5469:19;;;5466:39;;;5501:1;5498;5491:12;5466:39;5525:11;;;;5545:217;5561:6;5556:3;5553:15;5545:217;;;5641:3;5628:17;5658:31;5683:5;5658:31;:::i;:::-;5702:18;;5578:12;;;;5740;;;;5545:217;;;5781:5;-1:-1:-1;;5824:18:1;;5811:32;;-1:-1:-1;;5855:16:1;;;5852:36;;;5884:1;5881;5874:12;5852:36;;5907:60;5959:7;5948:8;5937:9;5933:24;5907:60;:::i;:::-;5897:70;;;4764:1209;;;;;:::o;5978:388::-;6046:6;6054;6107:2;6095:9;6086:7;6082:23;6078:32;6075:52;;;6123:1;6120;6113:12;6075:52;6162:9;6149:23;6181:31;6206:5;6181:31;:::i;:::-;6231:5;-1:-1:-1;6288:2:1;6273:18;;6260:32;6301:33;6260:32;6301:33;:::i;6371:380::-;6450:1;6446:12;;;;6493;;;6514:61;;6568:4;6560:6;6556:17;6546:27;;6514:61;6621:2;6613:6;6610:14;6590:18;6587:38;6584:161;;6667:10;6662:3;6658:20;6655:1;6648:31;6702:4;6699:1;6692:15;6730:4;6727:1;6720:15;6584:161;;6371:380;;;:::o;7868:127::-;7929:10;7924:3;7920:20;7917:1;7910:31;7960:4;7957:1;7950:15;7984:4;7981:1;7974:15;8000:125;8065:9;;;8086:10;;;8083:36;;;8099:18;;:::i;10421:168::-;10494:9;;;10525;;10542:15;;;10536:22;;10522:37;10512:71;;10563:18;;:::i;10594:217::-;10634:1;10660;10650:132;;10704:10;10699:3;10695:20;10692:1;10685:31;10739:4;10736:1;10729:15;10767:4;10764:1;10757:15;10650:132;-1:-1:-1;10796:9:1;;10594:217::o;11303:184::-;11373:6;11426:2;11414:9;11405:7;11401:23;11397:32;11394:52;;;11442:1;11439;11432:12;11394:52;-1:-1:-1;11465:16:1;;11303:184;-1:-1:-1;11303:184:1:o;11771:245::-;11838:6;11891:2;11879:9;11870:7;11866:23;11862:32;11859:52;;;11907:1;11904;11897:12;11859:52;11939:9;11933:16;11958:28;11980:5;11958:28;:::i;12375:127::-;12436:10;12431:3;12427:20;12424:1;12417:31;12467:4;12464:1;12457:15;12491:4;12488:1;12481:15;12507:135;12546:3;12567:17;;;12564:43;;12587:18;;:::i;:::-;-1:-1:-1;12634:1:1;12623:13;;12507:135::o;16971:128::-;17038:9;;;17059:11;;;17056:37;;;17073:18;;:::i;18321:251::-;18391:6;18444:2;18432:9;18423:7;18419:23;18415:32;18412:52;;;18460:1;18457;18450:12;18412:52;18492:9;18486:16;18511:31;18536:5;18511:31;:::i;18577:980::-;18839:4;18887:3;18876:9;18872:19;18918:6;18907:9;18900:25;18944:2;18982:6;18977:2;18966:9;18962:18;18955:34;19025:3;19020:2;19009:9;19005:18;18998:31;19049:6;19084;19078:13;19115:6;19107;19100:22;19153:3;19142:9;19138:19;19131:26;;19192:2;19184:6;19180:15;19166:29;;19213:1;19223:195;19237:6;19234:1;19231:13;19223:195;;;19302:13;;-1:-1:-1;;;;;19298:39:1;19286:52;;19393:15;;;;19358:12;;;;19334:1;19252:9;19223:195;;;-1:-1:-1;;;;;;;19474:32:1;;;;19469:2;19454:18;;19447:60;-1:-1:-1;;;19538:3:1;19523:19;19516:35;19435:3;18577:980;-1:-1:-1;;;18577:980:1:o

Swarm Source

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