ETH Price: $2,881.98 (-1.60%)
 

Overview

Max Total Supply

10,000,000 ARTA

Holders

6

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ARTA

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2024-11-28
*/

// arta.my
// x.com/artaagi


pragma solidity ^0.8.17;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

    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);
    }

    contract ERC20 is Context, IERC20, IERC20Metadata {
        using SafeMath for uint256;

        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:
         *
         * - `recipient` cannot be the zero address.
         * - the caller must have a balance of at least `amount`.
         */
        function transfer(
            address recipient,
            uint256 amount
        ) public virtual override returns (bool) {
            _transfer(_msgSender(), recipient, amount);
            return true;
        }

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

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

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

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

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

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

            _beforeTokenTransfer(sender, recipient, amount);

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

        /** @dev Creates `amount` tokens and assigns them to `account`, increasing
         * the total supply.
         *
         * Emits a {Transfer} event with `from` set to the zero address.
         *
         * Requirements:
         *
         * - `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 = _totalSupply.add(amount);
            _balances[account] = _balances[account].add(amount);
            emit Transfer(address(0), account, amount);
        }

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

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

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

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

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

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

    library SafeMath {
        /**
         * @dev Returns the addition of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `+` operator.
         *
         * Requirements:
         *
         * - Addition cannot overflow.
         */
        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            uint256 c = a + b;
            require(c >= a, "SafeMath: addition overflow");

            return c;
        }

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

        /**
         * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
         * overflow (when the result is negative).
         *
         * Counterpart to Solidity's `-` operator.
         *
         * Requirements:
         *
         * - Subtraction cannot overflow.
         */
        function sub(
            uint256 a,
            uint256 b,
            string memory errorMessage
        ) internal pure returns (uint256) {
            require(b <= a, errorMessage);
            uint256 c = a - b;

            return c;
        }

        /**
         * @dev Returns the multiplication of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `*` operator.
         *
         * Requirements:
         *
         * - Multiplication cannot overflow.
         */
        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) {
                return 0;
            }

            uint256 c = a * b;
            require(c / a == b, "SafeMath: multiplication overflow");

            return c;
        }

        /**
         * @dev Returns the integer division of two unsigned integers. Reverts on
         * division by zero. The result is rounded towards zero.
         *
         * Counterpart to Solidity's `/` operator. Note: this function uses a
         * `revert` opcode (which leaves remaining gas untouched) while Solidity
         * uses an invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            return div(a, b, "SafeMath: division by zero");
        }

        /**
         * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
         * division by zero. The result is rounded towards zero.
         *
         * Counterpart to Solidity's `/` operator. Note: this function uses a
         * `revert` opcode (which leaves remaining gas untouched) while Solidity
         * uses an invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function div(
            uint256 a,
            uint256 b,
            string memory errorMessage
        ) internal pure returns (uint256) {
            require(b > 0, errorMessage);
            uint256 c = a / b;
            // assert(a == b * c + a % b); // There is no case in which this doesn't hold

            return c;
        }

        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * Reverts when dividing by zero.
         *
         * Counterpart to Solidity's `%` operator. This function uses a `revert`
         * opcode (which leaves remaining gas untouched) while Solidity uses an
         * invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return mod(a, b, "SafeMath: modulo by zero");
        }

        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * Reverts with custom message when dividing by zero.
         *
         * Counterpart to Solidity's `%` operator. This function uses a `revert`
         * opcode (which leaves remaining gas untouched) while Solidity uses an
         * invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         *
         * - The divisor cannot be zero.
         */
        function mod(
            uint256 a,
            uint256 b,
            string memory errorMessage
        ) internal pure returns (uint256) {
            require(b != 0, errorMessage);
            return a % b;
        }
    }

    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() {
            address msgSender = _msgSender();
            _owner = msgSender;
            emit OwnershipTransferred(address(0), msgSender);
        }

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

        /**
         * @dev Throws if called by any account other than the owner.
         */
        modifier onlyOwner() {
            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 {
            emit OwnershipTransferred(_owner, address(0));
            _owner = 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"
            );
            emit OwnershipTransferred(_owner, newOwner);
            _owner = newOwner;
        }
    }

    library SafeMathInt {
        int256 private constant MIN_INT256 = int256(1) << 255;
        int256 private constant MAX_INT256 = ~(int256(1) << 255);

        /**
         * @dev Multiplies two int256 variables and fails on overflow.
         */
        function mul(int256 a, int256 b) internal pure returns (int256) {
            int256 c = a * b;

            // Detect overflow when multiplying MIN_INT256 with -1
            require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
            require((b == 0) || (c / b == a));
            return c;
        }

        /**
         * @dev Division of two int256 variables and fails on overflow.
         */
        function div(int256 a, int256 b) internal pure returns (int256) {
            // Prevent overflow when dividing MIN_INT256 by -1
            require(b != -1 || a != MIN_INT256);

            // Solidity already throws when dividing by 0.
            return a / b;
        }

        /**
         * @dev Subtracts two int256 variables and fails on overflow.
         */
        function sub(int256 a, int256 b) internal pure returns (int256) {
            int256 c = a - b;
            require((b >= 0 && c <= a) || (b < 0 && c > a));
            return c;
        }

        /**
         * @dev Adds two int256 variables and fails on overflow.
         */
        function add(int256 a, int256 b) internal pure returns (int256) {
            int256 c = a + b;
            require((b >= 0 && c >= a) || (b < 0 && c < a));
            return c;
        }

        /**
         * @dev Converts to absolute value, and fails on overflow.
         */
        function abs(int256 a) internal pure returns (int256) {
            require(a != MIN_INT256);
            return a < 0 ? -a : a;
        }

        function toUint256Safe(int256 a) internal pure returns (uint256) {
            require(a >= 0);
            return uint256(a);
        }
    }

    library SafeMathUint {
        function toInt256Safe(uint256 a) internal pure returns (int256) {
            int256 b = int256(a);
            require(b >= 0);
            return b;
        }
    }

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

        function WETH() external pure returns (address);

        function addLiquidity(
            address tokenA,
            address tokenB,
            uint amountADesired,
            uint amountBDesired,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB, uint liquidity);

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

        function removeLiquidity(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB);

        function removeLiquidityETH(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountToken, uint amountETH);

        function removeLiquidityWithPermit(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline,
            bool approveMax,
            uint8 v,
            bytes32 r,
            bytes32 s
        ) external returns (uint amountA, uint amountB);

        function removeLiquidityETHWithPermit(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline,
            bool approveMax,
            uint8 v,
            bytes32 r,
            bytes32 s
        ) external returns (uint amountToken, uint amountETH);

        function swapExactTokensForTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);

        function swapTokensForExactTokens(
            uint amountOut,
            uint amountInMax,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);

        function swapExactETHForTokens(
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external payable returns (uint[] memory amounts);

        function swapTokensForExactETH(
            uint amountOut,
            uint amountInMax,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);

        function swapExactTokensForETH(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);

        function swapETHForExactTokens(
            uint amountOut,
            address[] calldata path,
            address to,
            uint deadline
        ) external payable returns (uint[] memory amounts);

        function quote(
            uint amountA,
            uint reserveA,
            uint reserveB
        ) external pure returns (uint amountB);

        function getAmountOut(
            uint amountIn,
            uint reserveIn,
            uint reserveOut
        ) external pure returns (uint amountOut);

        function getAmountIn(
            uint amountOut,
            uint reserveIn,
            uint reserveOut
        ) external pure returns (uint amountIn);

        function getAmountsOut(
            uint amountIn,
            address[] calldata path
        ) external view returns (uint[] memory amounts);

        function getAmountsIn(
            uint amountOut,
            address[] calldata path
        ) external view returns (uint[] memory amounts);
    }

    interface IUniswapV2Router02 is IUniswapV2Router01 {
        function removeLiquidityETHSupportingFeeOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountETH);

        function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline,
            bool approveMax,
            uint8 v,
            bytes32 r,
            bytes32 s
        ) external returns (uint amountETH);

        function swapExactTokensForTokensSupportingFeeOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;

        function swapExactETHForTokensSupportingFeeOnTransferTokens(
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external payable;

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

contract ARTA is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Seller Map
    mapping(address => uint256) private _holderFirstBuyTimestamp;

    // Blacklist Map
    mapping(address => bool) private _blacklist;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMktingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public earlySellLiquidityFee;
    uint256 public earlysellMktingFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // block number of opened trading
    uint256 launchedAt;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(unicode"Arta", unicode"ARTA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // #################################################################
        marketingWallet = address(0xcad8f157cAc3eBd2330C25E8847C9838f5727ce1); // set as marketing wallet
        devWallet = address(0xcad8f157cAc3eBd2330C25E8847C9838f5727ce1); // set as dev wallet
        // #################################################################

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMktingFee = 20;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlysellMktingFee = 0;

        uint256 totalSupply = 1 * 1e7 * 1e18;

        maxTransactionAmount = (totalSupply * 20) / 1000; // 2% maxtransaction
        maxWallet = (totalSupply * 20) / 1000; // 2% maxwallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapwallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMktingFee = _sellMktingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMktingFee + sellLiquidityFee + sellDevFee;

        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlysellMktingFee = _earlysellMktingFee;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function setEarlySellTax(bool onoff) external onlyOwner {
        enableEarlySellTax = onoff;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 15) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.5%"
        );
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _earlySellLiquidityFee,
        uint256 _earlysellMktingFee
    ) external onlyOwner {
        sellMktingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlysellMktingFee = _earlysellMktingFee;
        sellTotalFees = sellMktingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return _blacklist[account];
    }

    function blacklistAccounts(
        address[] memory accounts,
        bool isBlacklisted
    ) public onlyOwner {
        require(accounts.length > 0, "Accounts list cannot be empty.");
        for (uint256 i = 0; i < accounts.length; i++) {
            _blacklist[accounts[i]] = isBlacklisted;
        }
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            !_blacklist[to] && !_blacklist[from],
            "You have been blacklisted from transfering tokens"
        );
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        // anti bot logic
        if (
            block.number <= (launchedAt + 0) &&
            to != uniswapV2Pair &&
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) {
            _blacklist[to] = false;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMktingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

API
[{"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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlysellMktingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMktingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlysellMktingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805463ffffffff19166301000001179055600f805460ff1916600117905534801561002f575f80fd5b50604051806040016040528060048152602001634172746160e01b815250604051806040016040528060048152602001634152544160e01b81525081600390816100799190610739565b5060046100868282610739565b5050505f6100986103e960201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506006805473cad8f157cac3ebd2330c25e8847c9838f5727ce16001600160a01b03199182168117909255600780549091169091179055737a250d5630b4cf539739df2c5dacb4c659f2488d61013b8160016103ed565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610183573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a791906107f3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021691906107f3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610260573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028491906107f3565b6001600160a01b031660a081905261029d9060016103ed565b60a0516102ab906001610463565b60145f8082818080806a084595161401484a0000006103e86102cd828861082d565b6102d79190610844565b6008556103e86102e882601461082d565b6102f29190610844565b600a5561271061030382600561082d565b61030d9190610844565b6009556011899055601288905560138790558661032a898b610863565b6103349190610863565b601055601586905560168590556017849055836103518688610863565b61035b9190610863565b6014556018839055601982905561038461037d6005546001600160a01b031690565b60016104b5565b61038f3060016104b5565b61039c61dead60016104b5565b6103b86103b16005546001600160a01b031690565b60016103ed565b6103c33060016103ed565b6103d061dead60016103ed565b6103da338261055a565b50505050505050505050610876565b3390565b6005546001600160a01b031633146104395760405162461bcd60e51b815260206004820181905260248201525f8051602061363783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146104fc5760405162461bcd60e51b815260206004820181905260248201525f805160206136378339815191526044820152606401610430565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166105b05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610430565b6002546105bd908261063b565b6002556001600160a01b0382165f908152602081905260409020546105e2908261063b565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f806106478385610863565b9050838110156106995760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610430565b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806106ca57607f821691505b6020821081036106e857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561063657805f5260205f20601f840160051c810160208510156107135750805b601f840160051c820191505b81811015610732575f815560010161071f565b5050505050565b81516001600160401b03811115610752576107526106a2565b6107668161076084546106b6565b846106ee565b6020601f821160018114610798575f83156107815750848201515b5f19600385901b1c1916600184901b178455610732565b5f84815260208120601f198516915b828110156107c757878501518255602094850194600190920191016107a7565b50848210156107e457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610803575f80fd5b81516001600160a01b0381168114610699575f80fd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761069c5761069c610819565b5f8261085e57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561069c5761069c610819565b60805160a051612d6f6108c85f395f818161054e01528181610fc401528181611a950152611dec01525f818161042201528181611a570152818161266a01528181612721015261275d0152612d6f5ff3fe60806040526004361061037f575f3560e01c80638ea5220f116101d3578063c0246668116100fd578063e2f456051161009d578063f63743421161006d578063f637434214610a29578063f8b45b0514610a3e578063fe575a8714610a53578063ff935af614610a8a575f80fd5b8063e2f45605146109cc578063e884f260146109e1578063f11a24d3146109f5578063f2fde38b14610a0a575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe41461093f578063d257b34f14610954578063d85ba06314610973578063dd62ed3e14610988575f80fd5b8063c0246668146108e8578063c18bc19514610907578063c876d0b914610926575f80fd5b8063a0d82dc511610173578063a9059cbb11610143578063a9059cbb1461085f578063aacebbe31461087e578063b62496f51461089d578063bbc0c742146108ca575f80fd5b8063a0d82dc5146107ec578063a265777814610801578063a457c2d714610820578063a4d15b641461083f575f80fd5b80639a7a23d6116101ae5780639a7a23d6146107845780639c3b4fdc146107a35780639ccf6e21146107b85780639fccce32146107d7575f80fd5b80638ea5220f14610732578063924de9b71461075157806395d89b4114610770575f80fd5b80634fbee193116102b45780637571336a116102545780638095d564116102245780638095d564146106cd57806387d7f52a146106ec5780638a8c523c146107015780638da5cb5b14610715575f80fd5b80637571336a1461066557806375f0a8741461068457806379998c42146106a35780637bce5a04146106b8575f80fd5b80636ddd17131161028f5780636ddd1713146105ea57806370a0823114610609578063715018a61461063d578063751039fc14610651575f80fd5b80634fbee19314610589578063541a43cf146105c05780636a486a8e146105d5575f80fd5b80631f3fed8f1161031f578063313ce567116102fa578063313ce56714610503578063395093511461051e57806349bd5a5e1461053d5780634a62bb6514610570575f80fd5b80631f3fed8f146104b0578063203e727e146104c557806323b872dd146104e4575f80fd5b80631694505e1161035a5780631694505e1461041157806318160ddd1461045c5780631816467f1461047a5780631a8145bb1461049b575f80fd5b806306fdde031461038a578063095ea7b3146103b457806310d5de53146103e3575f80fd5b3661038657005b5f80fd5b348015610395575f80fd5b5061039e610aa9565b6040516103ab91906127f7565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce36600461284e565b610b39565b60405190151581526020016103ab565b3480156103ee575f80fd5b506103d36103fd366004612878565b601f6020525f908152604090205460ff1681565b34801561041c575f80fd5b506104447f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ab565b348015610467575f80fd5b506002545b6040519081526020016103ab565b348015610485575f80fd5b50610499610494366004612878565b610b4f565b005b3480156104a6575f80fd5b5061046c601b5481565b3480156104bb575f80fd5b5061046c601a5481565b3480156104d0575f80fd5b506104996104df366004612893565b610bde565b3480156104ef575f80fd5b506103d36104fe3660046128aa565b610cbb565b34801561050e575f80fd5b50604051601281526020016103ab565b348015610529575f80fd5b506103d361053836600461284e565b610d22565b348015610548575f80fd5b506104447f000000000000000000000000000000000000000000000000000000000000000081565b34801561057b575f80fd5b50600b546103d39060ff1681565b348015610594575f80fd5b506103d36105a3366004612878565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105cb575f80fd5b5061046c60185481565b3480156105e0575f80fd5b5061046c60145481565b3480156105f5575f80fd5b50600b546103d39062010000900460ff1681565b348015610614575f80fd5b5061046c610623366004612878565b6001600160a01b03165f9081526020819052604090205490565b348015610648575f80fd5b50610499610d57565b34801561065c575f80fd5b506103d3610dca565b348015610670575f80fd5b5061049961067f3660046128f7565b610e06565b34801561068f575f80fd5b50600654610444906001600160a01b031681565b3480156106ae575f80fd5b5061046c60195481565b3480156106c3575f80fd5b5061046c60115481565b3480156106d8575f80fd5b506104996106e736600461292a565b610e5a565b3480156106f7575f80fd5b5061046c60155481565b34801561070c575f80fd5b50610499610f02565b348015610720575f80fd5b506005546001600160a01b0316610444565b34801561073d575f80fd5b50600754610444906001600160a01b031681565b34801561075c575f80fd5b5061049961076b366004612953565b610f43565b34801561077b575f80fd5b5061039e610f89565b34801561078f575f80fd5b5061049961079e3660046128f7565b610f98565b3480156107ae575f80fd5b5061046c60135481565b3480156107c3575f80fd5b506104996107d2366004612980565b611077565b3480156107e2575f80fd5b5061046c601c5481565b3480156107f7575f80fd5b5061046c60175481565b34801561080c575f80fd5b5061049961081b366004612953565b61114b565b34801561082b575f80fd5b506103d361083a36600461284e565b611193565b34801561084a575f80fd5b50600b546103d3906301000000900460ff1681565b34801561086a575f80fd5b506103d361087936600461284e565b6111e0565b348015610889575f80fd5b50610499610898366004612878565b6111ec565b3480156108a8575f80fd5b506103d36108b7366004612878565b602080525f908152604090205460ff1681565b3480156108d5575f80fd5b50600b546103d390610100900460ff1681565b3480156108f3575f80fd5b506104996109023660046128f7565b611272565b348015610912575f80fd5b50610499610921366004612893565b6112fa565b348015610931575f80fd5b50600f546103d39060ff1681565b34801561094a575f80fd5b5061046c60085481565b34801561095f575f80fd5b506103d361096e366004612893565b6113cb565b34801561097e575f80fd5b5061046c60105481565b348015610993575f80fd5b5061046c6109a2366004612a54565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156109d7575f80fd5b5061046c60095481565b3480156109ec575f80fd5b506103d3611521565b348015610a00575f80fd5b5061046c60125481565b348015610a15575f80fd5b50610499610a24366004612878565b61155d565b348015610a34575f80fd5b5061046c60165481565b348015610a49575f80fd5b5061046c600a5481565b348015610a5e575f80fd5b506103d3610a6d366004612878565b6001600160a01b03165f908152600e602052604090205460ff1690565b348015610a95575f80fd5b50610499610aa4366004612a8b565b611647565b606060038054610ab890612ac2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae490612ac2565b8015610b2f5780601f10610b0657610100808354040283529160200191610b2f565b820191905f5260205f20905b815481529060010190602001808311610b1257829003601f168201915b5050505050905090565b5f610b453384846116fb565b5060015b92915050565b6005546001600160a01b03163314610b825760405162461bcd60e51b8152600401610b7990612afa565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c085760405162461bcd60e51b8152600401610b7990612afa565b670de0b6b3a76400006103e8610c1d60025490565b610c28906005612b43565b610c329190612b5a565b610c3c9190612b5a565b811015610ca35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610b79565b610cb581670de0b6b3a7640000612b43565b60085550565b5f610cc784848461181f565b610d188433610d1385604051806060016040528060288152602001612ced602891396001600160a01b038a165f908152600160209081526040808320338452909152902054919061218f565b6116fb565b5060019392505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b45918590610d1390866121c7565b6005546001600160a01b03163314610d815760405162461bcd60e51b8152600401610b7990612afa565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b03163314610df65760405162461bcd60e51b8152600401610b7990612afa565b50600b805460ff19169055600190565b6005546001600160a01b03163314610e305760405162461bcd60e51b8152600401610b7990612afa565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e845760405162461bcd60e51b8152600401610b7990612afa565b60118390556012829055601381905580610e9e8385612b79565b610ea89190612b79565b601081905560321015610efd5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c6573730000006044820152606401610b79565b505050565b6005546001600160a01b03163314610f2c5760405162461bcd60e51b8152600401610b7990612afa565b600b805462ffff0019166201010017905543601d55565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610b7990612afa565b600b8054911515620100000262ff000019909216919091179055565b606060048054610ab890612ac2565b6005546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610b7990612afa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110695760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b79565b611073828261222c565b5050565b6005546001600160a01b031633146110a15760405162461bcd60e51b8152600401610b7990612afa565b5f8251116110f15760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e00006044820152606401610b79565b5f5b8251811015610efd5781600e5f85848151811061111257611112612b8c565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016110f3565b6005546001600160a01b031633146111755760405162461bcd60e51b8152600401610b7990612afa565b600b805491151563010000000263ff00000019909216919091179055565b5f610b453384610d1385604051806060016040528060258152602001612d1560259139335f9081526001602090815260408083206001600160a01b038d168452909152902054919061218f565b5f610b4533848461181f565b6005546001600160a01b031633146112165760405162461bcd60e51b8152600401610b7990612afa565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461129c5760405162461bcd60e51b8152600401610b7990612afa565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113245760405162461bcd60e51b8152600401610b7990612afa565b670de0b6b3a76400006103e861133960025490565b61134490600f612b43565b61134e9190612b5a565b6113589190612b5a565b8110156113b35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610b79565b6113c581670de0b6b3a7640000612b43565b600a5550565b6005545f906001600160a01b031633146113f75760405162461bcd60e51b8152600401610b7990612afa565b620186a061140460025490565b61140f906001612b43565b6114199190612b5a565b8210156114865760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b79565b6103e861149260025490565b61149d906005612b43565b6114a79190612b5a565b8211156115135760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b79565b50600981905560015b919050565b6005545f906001600160a01b0316331461154d5760405162461bcd60e51b8152600401610b7990612afa565b50600f805460ff19169055600190565b6005546001600160a01b031633146115875760405162461bcd60e51b8152600401610b7990612afa565b6001600160a01b0381166115ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b79565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116715760405162461bcd60e51b8152600401610b7990612afa565b60158590556016849055601783905560188290556019819055826116958587612b79565b61169f9190612b79565b6014819055606310156116f45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610b79565b5050505050565b6001600160a01b03831661175d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b79565b6001600160a01b0382166117be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b79565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118455760405162461bcd60e51b8152600401610b7990612ba0565b6001600160a01b03821661186b5760405162461bcd60e51b8152600401610b7990612be5565b6001600160a01b0382165f908152600e602052604090205460ff161580156118ab57506001600160a01b0383165f908152600e602052604090205460ff16155b6119115760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610b79565b805f0361192357610efd83835f61227e565b600b5460ff1615611dd3576005546001600160a01b0384811691161480159061195a57506005546001600160a01b03838116911614155b801561196e57506001600160a01b03821615155b801561198557506001600160a01b03821661dead14155b801561199b5750600554600160a01b900460ff16155b15611dd357600b54610100900460ff16611a31576001600160a01b0383165f908152601e602052604090205460ff16806119ec57506001600160a01b0382165f908152601e602052604090205460ff165b611a315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b79565b600f5460ff1615611b76576005546001600160a01b03838116911614801590611a8c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611aca57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611b7657325f908152600c60205260409020544311611b645760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b79565b325f908152600c602052604090204390555b6001600160a01b0383165f90815260208052604090205460ff168015611bb457506001600160a01b0382165f908152601f602052604090205460ff16155b15611c9757600854811115611c295760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b79565b600a546001600160a01b0383165f90815260208190526040902054611c4e9083612b79565b1115611c925760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b79565b611dd3565b6001600160a01b0382165f90815260208052604090205460ff168015611cd557506001600160a01b0383165f908152601f602052604090205460ff16155b15611d4b57600854811115611c925760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b79565b6001600160a01b0382165f908152601f602052604090205460ff16611dd357600a546001600160a01b0383165f90815260208190526040902054611d8f9083612b79565b1115611dd35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b79565b601d54611de0905f612b79565b4311158015611e2157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611e4a57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611e6f576001600160a01b0382165f908152600e60205260409020805460ff191690555b305f9081526020819052604090205460095481108015908190611e9a5750600b5462010000900460ff165b8015611eb05750600554600160a01b900460ff16155b8015611ed357506001600160a01b0385165f90815260208052604090205460ff16155b8015611ef757506001600160a01b0385165f908152601e602052604090205460ff16155b8015611f1b57506001600160a01b0384165f908152601e602052604090205460ff16155b15611f49576005805460ff60a01b1916600160a01b179055611f3b612384565b6005805460ff60a01b191690555b6005546001600160a01b0386165f908152601e602052604090205460ff600160a01b909204821615911680611f9557506001600160a01b0385165f908152601e602052604090205460ff165b15611f9d57505f5b5f811561217b576001600160a01b0386165f90815260208052604090205460ff168015611fcb57505f601454115b1561208657611ff06064611fea6014548861251590919063ffffffff16565b90612593565b9050601454601654826120039190612b43565b61200d9190612b5a565b601b5f82825461201d9190612b79565b90915550506014546017546120329083612b43565b61203c9190612b5a565b601c5f82825461204c9190612b79565b90915550506014546015546120619083612b43565b61206b9190612b5a565b601a5f82825461207b9190612b79565b9091555061215d9050565b6001600160a01b0387165f90815260208052604090205460ff1680156120ad57505f601054115b1561215d576120cc6064611fea6010548861251590919063ffffffff16565b9050601054601254826120df9190612b43565b6120e99190612b5a565b601b5f8282546120f99190612b79565b909155505060105460135461210e9083612b43565b6121189190612b5a565b601c5f8282546121289190612b79565b909155505060105460115461213d9083612b43565b6121479190612b5a565b601a5f8282546121579190612b79565b90915550505b801561216e5761216e87308361227e565b6121788186612c28565b94505b61218687878761227e565b50505050505050565b5f81848411156121b25760405162461bcd60e51b8152600401610b7991906127f7565b505f6121be8486612c28565b95945050505050565b5f806121d38385612b79565b9050838110156122255760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b79565b9392505050565b6001600160a01b0382165f818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122a45760405162461bcd60e51b8152600401610b7990612ba0565b6001600160a01b0382166122ca5760405162461bcd60e51b8152600401610b7990612be5565b61230681604051806060016040528060268152602001612cc7602691396001600160a01b0386165f90815260208190526040902054919061218f565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461233490826121c7565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611812565b305f9081526020819052604081205490505f601c54601a54601b546123a99190612b79565b6123b39190612b79565b90505f8215806123c1575081155b156123cb57505050565b6009546123d9906014612b43565b8311156123f1576009546123ee906014612b43565b92505b5f600283601b54866124039190612b43565b61240d9190612b5a565b6124179190612b5a565b90505f61242485836125d4565b90504761243082612615565b5f61243b47836125d4565b90505f61245787611fea601c548561251590919063ffffffff16565b5f601b819055601a819055601c8190556007546040519293506001600160a01b031691839181818185875af1925050503d805f81146124b1576040519150601f19603f3d011682016040523d82523d5f602084013e6124b6565b606091505b50506006546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114612503576040519150601f19603f3d011682016040523d82523d5f602084013e612508565b606091505b5050505050505050505050565b5f825f0361252457505f610b49565b5f61252f8385612b43565b90508261253c8583612b5a565b146122255760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b79565b5f61222583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127cb565b5f61222583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061218f565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061264857612648612b8c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e89190612c3b565b816001815181106126fb576126fb612b8c565b60200260200101906001600160a01b031690816001600160a01b031681525050612746307f0000000000000000000000000000000000000000000000000000000000000000846116fb565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061279a9085905f90869030904290600401612c56565b5f604051808303815f87803b1580156127b1575f80fd5b505af11580156127c3573d5f803e3d5ffd5b505050505050565b5f81836127eb5760405162461bcd60e51b8152600401610b7991906127f7565b505f6121be8486612b5a565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114612840575f80fd5b50565b803561151c8161282c565b5f806040838503121561285f575f80fd5b823561286a8161282c565b946020939093013593505050565b5f60208284031215612888575f80fd5b81356122258161282c565b5f602082840312156128a3575f80fd5b5035919050565b5f805f606084860312156128bc575f80fd5b83356128c78161282c565b925060208401356128d78161282c565b929592945050506040919091013590565b8035801515811461151c575f80fd5b5f8060408385031215612908575f80fd5b82356129138161282c565b9150612921602084016128e8565b90509250929050565b5f805f6060848603121561293c575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612963575f80fd5b612225826128e8565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612991575f80fd5b823567ffffffffffffffff8111156129a7575f80fd5b8301601f810185136129b7575f80fd5b803567ffffffffffffffff8111156129d1576129d161296c565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156129fe576129fe61296c565b604052918252602081840181019290810188841115612a1b575f80fd5b6020850194505b83851015612a4157612a3385612843565b815260209485019401612a22565b50945061292192505050602084016128e8565b5f8060408385031215612a65575f80fd5b8235612a708161282c565b91506020830135612a808161282c565b809150509250929050565b5f805f805f60a08688031215612a9f575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c90821680612ad657607f821691505b602082108103612af457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b4957610b49612b2f565b5f82612b7457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b4957610b49612b2f565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b4957610b49612b2f565b5f60208284031215612c4b575f80fd5b81516122258161282c565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612ca65783516001600160a01b0316835260209384019390920191600101612c7f565b50506001600160a01b03959095166060840152505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e54ca8d5ac64997e1a65b8297cb437bc2c5ec972ccb59ec81b9882f865bbefdb64736f6c634300081a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061037f575f3560e01c80638ea5220f116101d3578063c0246668116100fd578063e2f456051161009d578063f63743421161006d578063f637434214610a29578063f8b45b0514610a3e578063fe575a8714610a53578063ff935af614610a8a575f80fd5b8063e2f45605146109cc578063e884f260146109e1578063f11a24d3146109f5578063f2fde38b14610a0a575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe41461093f578063d257b34f14610954578063d85ba06314610973578063dd62ed3e14610988575f80fd5b8063c0246668146108e8578063c18bc19514610907578063c876d0b914610926575f80fd5b8063a0d82dc511610173578063a9059cbb11610143578063a9059cbb1461085f578063aacebbe31461087e578063b62496f51461089d578063bbc0c742146108ca575f80fd5b8063a0d82dc5146107ec578063a265777814610801578063a457c2d714610820578063a4d15b641461083f575f80fd5b80639a7a23d6116101ae5780639a7a23d6146107845780639c3b4fdc146107a35780639ccf6e21146107b85780639fccce32146107d7575f80fd5b80638ea5220f14610732578063924de9b71461075157806395d89b4114610770575f80fd5b80634fbee193116102b45780637571336a116102545780638095d564116102245780638095d564146106cd57806387d7f52a146106ec5780638a8c523c146107015780638da5cb5b14610715575f80fd5b80637571336a1461066557806375f0a8741461068457806379998c42146106a35780637bce5a04146106b8575f80fd5b80636ddd17131161028f5780636ddd1713146105ea57806370a0823114610609578063715018a61461063d578063751039fc14610651575f80fd5b80634fbee19314610589578063541a43cf146105c05780636a486a8e146105d5575f80fd5b80631f3fed8f1161031f578063313ce567116102fa578063313ce56714610503578063395093511461051e57806349bd5a5e1461053d5780634a62bb6514610570575f80fd5b80631f3fed8f146104b0578063203e727e146104c557806323b872dd146104e4575f80fd5b80631694505e1161035a5780631694505e1461041157806318160ddd1461045c5780631816467f1461047a5780631a8145bb1461049b575f80fd5b806306fdde031461038a578063095ea7b3146103b457806310d5de53146103e3575f80fd5b3661038657005b5f80fd5b348015610395575f80fd5b5061039e610aa9565b6040516103ab91906127f7565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce36600461284e565b610b39565b60405190151581526020016103ab565b3480156103ee575f80fd5b506103d36103fd366004612878565b601f6020525f908152604090205460ff1681565b34801561041c575f80fd5b506104447f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ab565b348015610467575f80fd5b506002545b6040519081526020016103ab565b348015610485575f80fd5b50610499610494366004612878565b610b4f565b005b3480156104a6575f80fd5b5061046c601b5481565b3480156104bb575f80fd5b5061046c601a5481565b3480156104d0575f80fd5b506104996104df366004612893565b610bde565b3480156104ef575f80fd5b506103d36104fe3660046128aa565b610cbb565b34801561050e575f80fd5b50604051601281526020016103ab565b348015610529575f80fd5b506103d361053836600461284e565b610d22565b348015610548575f80fd5b506104447f000000000000000000000000cc297bf3e27e4fa9fbb312972158e12c547b258281565b34801561057b575f80fd5b50600b546103d39060ff1681565b348015610594575f80fd5b506103d36105a3366004612878565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105cb575f80fd5b5061046c60185481565b3480156105e0575f80fd5b5061046c60145481565b3480156105f5575f80fd5b50600b546103d39062010000900460ff1681565b348015610614575f80fd5b5061046c610623366004612878565b6001600160a01b03165f9081526020819052604090205490565b348015610648575f80fd5b50610499610d57565b34801561065c575f80fd5b506103d3610dca565b348015610670575f80fd5b5061049961067f3660046128f7565b610e06565b34801561068f575f80fd5b50600654610444906001600160a01b031681565b3480156106ae575f80fd5b5061046c60195481565b3480156106c3575f80fd5b5061046c60115481565b3480156106d8575f80fd5b506104996106e736600461292a565b610e5a565b3480156106f7575f80fd5b5061046c60155481565b34801561070c575f80fd5b50610499610f02565b348015610720575f80fd5b506005546001600160a01b0316610444565b34801561073d575f80fd5b50600754610444906001600160a01b031681565b34801561075c575f80fd5b5061049961076b366004612953565b610f43565b34801561077b575f80fd5b5061039e610f89565b34801561078f575f80fd5b5061049961079e3660046128f7565b610f98565b3480156107ae575f80fd5b5061046c60135481565b3480156107c3575f80fd5b506104996107d2366004612980565b611077565b3480156107e2575f80fd5b5061046c601c5481565b3480156107f7575f80fd5b5061046c60175481565b34801561080c575f80fd5b5061049961081b366004612953565b61114b565b34801561082b575f80fd5b506103d361083a36600461284e565b611193565b34801561084a575f80fd5b50600b546103d3906301000000900460ff1681565b34801561086a575f80fd5b506103d361087936600461284e565b6111e0565b348015610889575f80fd5b50610499610898366004612878565b6111ec565b3480156108a8575f80fd5b506103d36108b7366004612878565b602080525f908152604090205460ff1681565b3480156108d5575f80fd5b50600b546103d390610100900460ff1681565b3480156108f3575f80fd5b506104996109023660046128f7565b611272565b348015610912575f80fd5b50610499610921366004612893565b6112fa565b348015610931575f80fd5b50600f546103d39060ff1681565b34801561094a575f80fd5b5061046c60085481565b34801561095f575f80fd5b506103d361096e366004612893565b6113cb565b34801561097e575f80fd5b5061046c60105481565b348015610993575f80fd5b5061046c6109a2366004612a54565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156109d7575f80fd5b5061046c60095481565b3480156109ec575f80fd5b506103d3611521565b348015610a00575f80fd5b5061046c60125481565b348015610a15575f80fd5b50610499610a24366004612878565b61155d565b348015610a34575f80fd5b5061046c60165481565b348015610a49575f80fd5b5061046c600a5481565b348015610a5e575f80fd5b506103d3610a6d366004612878565b6001600160a01b03165f908152600e602052604090205460ff1690565b348015610a95575f80fd5b50610499610aa4366004612a8b565b611647565b606060038054610ab890612ac2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae490612ac2565b8015610b2f5780601f10610b0657610100808354040283529160200191610b2f565b820191905f5260205f20905b815481529060010190602001808311610b1257829003601f168201915b5050505050905090565b5f610b453384846116fb565b5060015b92915050565b6005546001600160a01b03163314610b825760405162461bcd60e51b8152600401610b7990612afa565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c085760405162461bcd60e51b8152600401610b7990612afa565b670de0b6b3a76400006103e8610c1d60025490565b610c28906005612b43565b610c329190612b5a565b610c3c9190612b5a565b811015610ca35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610b79565b610cb581670de0b6b3a7640000612b43565b60085550565b5f610cc784848461181f565b610d188433610d1385604051806060016040528060288152602001612ced602891396001600160a01b038a165f908152600160209081526040808320338452909152902054919061218f565b6116fb565b5060019392505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b45918590610d1390866121c7565b6005546001600160a01b03163314610d815760405162461bcd60e51b8152600401610b7990612afa565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b03163314610df65760405162461bcd60e51b8152600401610b7990612afa565b50600b805460ff19169055600190565b6005546001600160a01b03163314610e305760405162461bcd60e51b8152600401610b7990612afa565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e845760405162461bcd60e51b8152600401610b7990612afa565b60118390556012829055601381905580610e9e8385612b79565b610ea89190612b79565b601081905560321015610efd5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c6573730000006044820152606401610b79565b505050565b6005546001600160a01b03163314610f2c5760405162461bcd60e51b8152600401610b7990612afa565b600b805462ffff0019166201010017905543601d55565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610b7990612afa565b600b8054911515620100000262ff000019909216919091179055565b606060048054610ab890612ac2565b6005546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610b7990612afa565b7f000000000000000000000000cc297bf3e27e4fa9fbb312972158e12c547b25826001600160a01b0316826001600160a01b0316036110695760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b79565b611073828261222c565b5050565b6005546001600160a01b031633146110a15760405162461bcd60e51b8152600401610b7990612afa565b5f8251116110f15760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e00006044820152606401610b79565b5f5b8251811015610efd5781600e5f85848151811061111257611112612b8c565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016110f3565b6005546001600160a01b031633146111755760405162461bcd60e51b8152600401610b7990612afa565b600b805491151563010000000263ff00000019909216919091179055565b5f610b453384610d1385604051806060016040528060258152602001612d1560259139335f9081526001602090815260408083206001600160a01b038d168452909152902054919061218f565b5f610b4533848461181f565b6005546001600160a01b031633146112165760405162461bcd60e51b8152600401610b7990612afa565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461129c5760405162461bcd60e51b8152600401610b7990612afa565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113245760405162461bcd60e51b8152600401610b7990612afa565b670de0b6b3a76400006103e861133960025490565b61134490600f612b43565b61134e9190612b5a565b6113589190612b5a565b8110156113b35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610b79565b6113c581670de0b6b3a7640000612b43565b600a5550565b6005545f906001600160a01b031633146113f75760405162461bcd60e51b8152600401610b7990612afa565b620186a061140460025490565b61140f906001612b43565b6114199190612b5a565b8210156114865760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b79565b6103e861149260025490565b61149d906005612b43565b6114a79190612b5a565b8211156115135760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b79565b50600981905560015b919050565b6005545f906001600160a01b0316331461154d5760405162461bcd60e51b8152600401610b7990612afa565b50600f805460ff19169055600190565b6005546001600160a01b031633146115875760405162461bcd60e51b8152600401610b7990612afa565b6001600160a01b0381166115ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b79565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116715760405162461bcd60e51b8152600401610b7990612afa565b60158590556016849055601783905560188290556019819055826116958587612b79565b61169f9190612b79565b6014819055606310156116f45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610b79565b5050505050565b6001600160a01b03831661175d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b79565b6001600160a01b0382166117be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b79565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118455760405162461bcd60e51b8152600401610b7990612ba0565b6001600160a01b03821661186b5760405162461bcd60e51b8152600401610b7990612be5565b6001600160a01b0382165f908152600e602052604090205460ff161580156118ab57506001600160a01b0383165f908152600e602052604090205460ff16155b6119115760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610b79565b805f0361192357610efd83835f61227e565b600b5460ff1615611dd3576005546001600160a01b0384811691161480159061195a57506005546001600160a01b03838116911614155b801561196e57506001600160a01b03821615155b801561198557506001600160a01b03821661dead14155b801561199b5750600554600160a01b900460ff16155b15611dd357600b54610100900460ff16611a31576001600160a01b0383165f908152601e602052604090205460ff16806119ec57506001600160a01b0382165f908152601e602052604090205460ff165b611a315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b79565b600f5460ff1615611b76576005546001600160a01b03838116911614801590611a8c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611aca57507f000000000000000000000000cc297bf3e27e4fa9fbb312972158e12c547b25826001600160a01b0316826001600160a01b031614155b15611b7657325f908152600c60205260409020544311611b645760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b79565b325f908152600c602052604090204390555b6001600160a01b0383165f90815260208052604090205460ff168015611bb457506001600160a01b0382165f908152601f602052604090205460ff16155b15611c9757600854811115611c295760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b79565b600a546001600160a01b0383165f90815260208190526040902054611c4e9083612b79565b1115611c925760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b79565b611dd3565b6001600160a01b0382165f90815260208052604090205460ff168015611cd557506001600160a01b0383165f908152601f602052604090205460ff16155b15611d4b57600854811115611c925760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b79565b6001600160a01b0382165f908152601f602052604090205460ff16611dd357600a546001600160a01b0383165f90815260208190526040902054611d8f9083612b79565b1115611dd35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b79565b601d54611de0905f612b79565b4311158015611e2157507f000000000000000000000000cc297bf3e27e4fa9fbb312972158e12c547b25826001600160a01b0316826001600160a01b031614155b8015611e4a57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611e6f576001600160a01b0382165f908152600e60205260409020805460ff191690555b305f9081526020819052604090205460095481108015908190611e9a5750600b5462010000900460ff165b8015611eb05750600554600160a01b900460ff16155b8015611ed357506001600160a01b0385165f90815260208052604090205460ff16155b8015611ef757506001600160a01b0385165f908152601e602052604090205460ff16155b8015611f1b57506001600160a01b0384165f908152601e602052604090205460ff16155b15611f49576005805460ff60a01b1916600160a01b179055611f3b612384565b6005805460ff60a01b191690555b6005546001600160a01b0386165f908152601e602052604090205460ff600160a01b909204821615911680611f9557506001600160a01b0385165f908152601e602052604090205460ff165b15611f9d57505f5b5f811561217b576001600160a01b0386165f90815260208052604090205460ff168015611fcb57505f601454115b1561208657611ff06064611fea6014548861251590919063ffffffff16565b90612593565b9050601454601654826120039190612b43565b61200d9190612b5a565b601b5f82825461201d9190612b79565b90915550506014546017546120329083612b43565b61203c9190612b5a565b601c5f82825461204c9190612b79565b90915550506014546015546120619083612b43565b61206b9190612b5a565b601a5f82825461207b9190612b79565b9091555061215d9050565b6001600160a01b0387165f90815260208052604090205460ff1680156120ad57505f601054115b1561215d576120cc6064611fea6010548861251590919063ffffffff16565b9050601054601254826120df9190612b43565b6120e99190612b5a565b601b5f8282546120f99190612b79565b909155505060105460135461210e9083612b43565b6121189190612b5a565b601c5f8282546121289190612b79565b909155505060105460115461213d9083612b43565b6121479190612b5a565b601a5f8282546121579190612b79565b90915550505b801561216e5761216e87308361227e565b6121788186612c28565b94505b61218687878761227e565b50505050505050565b5f81848411156121b25760405162461bcd60e51b8152600401610b7991906127f7565b505f6121be8486612c28565b95945050505050565b5f806121d38385612b79565b9050838110156122255760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b79565b9392505050565b6001600160a01b0382165f818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122a45760405162461bcd60e51b8152600401610b7990612ba0565b6001600160a01b0382166122ca5760405162461bcd60e51b8152600401610b7990612be5565b61230681604051806060016040528060268152602001612cc7602691396001600160a01b0386165f90815260208190526040902054919061218f565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461233490826121c7565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611812565b305f9081526020819052604081205490505f601c54601a54601b546123a99190612b79565b6123b39190612b79565b90505f8215806123c1575081155b156123cb57505050565b6009546123d9906014612b43565b8311156123f1576009546123ee906014612b43565b92505b5f600283601b54866124039190612b43565b61240d9190612b5a565b6124179190612b5a565b90505f61242485836125d4565b90504761243082612615565b5f61243b47836125d4565b90505f61245787611fea601c548561251590919063ffffffff16565b5f601b819055601a819055601c8190556007546040519293506001600160a01b031691839181818185875af1925050503d805f81146124b1576040519150601f19603f3d011682016040523d82523d5f602084013e6124b6565b606091505b50506006546040519197506001600160a01b03169047905f81818185875af1925050503d805f8114612503576040519150601f19603f3d011682016040523d82523d5f602084013e612508565b606091505b5050505050505050505050565b5f825f0361252457505f610b49565b5f61252f8385612b43565b90508261253c8583612b5a565b146122255760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b79565b5f61222583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127cb565b5f61222583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061218f565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061264857612648612b8c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e89190612c3b565b816001815181106126fb576126fb612b8c565b60200260200101906001600160a01b031690816001600160a01b031681525050612746307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116fb565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061279a9085905f90869030904290600401612c56565b5f604051808303815f87803b1580156127b1575f80fd5b505af11580156127c3573d5f803e3d5ffd5b505050505050565b5f81836127eb5760405162461bcd60e51b8152600401610b7991906127f7565b505f6121be8486612b5a565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114612840575f80fd5b50565b803561151c8161282c565b5f806040838503121561285f575f80fd5b823561286a8161282c565b946020939093013593505050565b5f60208284031215612888575f80fd5b81356122258161282c565b5f602082840312156128a3575f80fd5b5035919050565b5f805f606084860312156128bc575f80fd5b83356128c78161282c565b925060208401356128d78161282c565b929592945050506040919091013590565b8035801515811461151c575f80fd5b5f8060408385031215612908575f80fd5b82356129138161282c565b9150612921602084016128e8565b90509250929050565b5f805f6060848603121561293c575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612963575f80fd5b612225826128e8565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612991575f80fd5b823567ffffffffffffffff8111156129a7575f80fd5b8301601f810185136129b7575f80fd5b803567ffffffffffffffff8111156129d1576129d161296c565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156129fe576129fe61296c565b604052918252602081840181019290810188841115612a1b575f80fd5b6020850194505b83851015612a4157612a3385612843565b815260209485019401612a22565b50945061292192505050602084016128e8565b5f8060408385031215612a65575f80fd5b8235612a708161282c565b91506020830135612a808161282c565b809150509250929050565b5f805f805f60a08688031215612a9f575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c90821680612ad657607f821691505b602082108103612af457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b4957610b49612b2f565b5f82612b7457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b4957610b49612b2f565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b4957610b49612b2f565b5f60208284031215612c4b575f80fd5b81516122258161282c565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612ca65783516001600160a01b0316835260209384019390920191600101612c7f565b50506001600160a01b03959095166060840152505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e54ca8d5ac64997e1a65b8297cb437bc2c5ec972ccb59ec81b9882f865bbefdb64736f6c634300081a0033

Deployed Bytecode Sourcemap

33988:17020:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8364:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10881:218;;;;;;;;;;-1:-1:-1;10881:218:0;;;;;:::i;:::-;;:::i;:::-;;;1249:14:1;;1242:22;1224:41;;1212:2;1197:18;10881:218:0;1084:187:1;35622:63:0;;;;;;;;;;-1:-1:-1;35622:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34062:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1719:32:1;;;1701:51;;1689:2;1674:18;34062:51:0;1528:230:1;9600:116:0;;;;;;;;;;-1:-1:-1;9692:12:0;;9600:116;;;1909:25:1;;;1897:2;1882:18;9600:116:0;1763:177:1;43799:157:0;;;;;;;;;;-1:-1:-1;43799:157:0;;;;;:::i;:::-;;:::i;:::-;;35340:33;;;;;;;;;;;;;;;;35300;;;;;;;;;;;;;;;;40483:277;;;;;;;;;;-1:-1:-1;40483:277:0;;;;;:::i;:::-;;:::i;11637:514::-;;;;;;;;;;-1:-1:-1;11637:514:0;;;;;:::i;:::-;;:::i;9418:101::-;;;;;;;;;;-1:-1:-1;9418:101:0;;9505:2;2831:36:1;;2819:2;2804:18;9418:101:0;2689:184:1;12612:333:0;;;;;;;;;;-1:-1:-1;12612:333:0;;;;;:::i;:::-;;:::i;34120:38::-;;;;;;;;;;;;;;;34382:33;;;;;;;;;;-1:-1:-1;34382:33:0;;;;;;;;43964:126;;;;;;;;;;-1:-1:-1;43964:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44054:28:0;44030:4;44054:28;;;:19;:28;;;;;;;;;43964:126;35217:36;;;;;;;;;;;;;;;;35075:28;;;;;;;;;;;;;;;;34462:31;;;;;;;;;;-1:-1:-1;34462:31:0;;;;;;;;;;;9795:159;;;;;;;;;;-1:-1:-1;9795:159:0;;;;;:::i;:::-;-1:-1:-1;;;;;9924:18:0;9893:7;9924:18;;;;;;;;;;;;9795:159;25186:160;;;;;;;;;;;;;:::i;39498:121::-;;;;;;;;;;;;;:::i;41035:169::-;;;;;;;;;;-1:-1:-1;41035:169:0;;;;;:::i;:::-;;:::i;34197:30::-;;;;;;;;;;-1:-1:-1;34197:30:0;;;;-1:-1:-1;;;;;34197:30:0;;;35260:33;;;;;;;;;;;;;;;;34968:30;;;;;;;;;;;;;;;;41408:403;;;;;;;;;;-1:-1:-1;41408:403:0;;;;;:::i;:::-;;:::i;35110:28::-;;;;;;;;;;;;;;;;39298:148;;;;;;;;;;;;;:::i;24476:87::-;;;;;;;;;;-1:-1:-1;24545:6:0;;-1:-1:-1;;;;;24545:6:0;24476:87;;34234:24;;;;;;;;;;-1:-1:-1;34234:24:0;;;;-1:-1:-1;;;;;34234:24:0;;;41300:100;;;;;;;;;;-1:-1:-1;41300:100:0;;;;;:::i;:::-;;:::i;8611:112::-;;;;;;;;;;;;;:::i;43057:306::-;;;;;;;;;;-1:-1:-1;43057:306:0;;;;;:::i;:::-;;:::i;35042:24::-;;;;;;;;;;;;;;;;42730:319;;;;;;;;;;-1:-1:-1;42730:319:0;;;;;:::i;:::-;;:::i;35380:27::-;;;;;;;;;;;;;;;;35183:25;;;;;;;;;;;;;;;;39823:101;;;;;;;;;;-1:-1:-1;39823:101:0;;;;;:::i;:::-;;:::i;13508:445::-;;;;;;;;;;-1:-1:-1;13508:445:0;;;;;:::i;:::-;;:::i;34500:37::-;;;;;;;;;;-1:-1:-1;34500:37:0;;;;;;;;;;;10203:224;;;;;;;;;;-1:-1:-1;10203:224:0;;;;;:::i;:::-;;:::i;43567:::-;;;;;;;;;;-1:-1:-1;43567:224:0;;;;;:::i;:::-;;:::i;35843:57::-;;;;;;;;;;-1:-1:-1;35843:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34422:33;;;;;;;;;;-1:-1:-1;34422:33:0;;;;;;;;;;;42420:182;;;;;;;;;;-1:-1:-1;42420:182:0;;;;;:::i;:::-;;:::i;40768:259::-;;;;;;;;;;-1:-1:-1;40768:259:0;;;;;:::i;:::-;;:::i;34886:39::-;;;;;;;;;;-1:-1:-1;34886:39:0;;;;;;;;34267:35;;;;;;;;;;;;;;;;39994:481;;;;;;;;;;-1:-1:-1;39994:481:0;;;;;:::i;:::-;;:::i;34934:27::-;;;;;;;;;;;;;;;;10506:196;;;;;;;;;;-1:-1:-1;10506:196:0;;;;;:::i;:::-;-1:-1:-1;;;;;10663:18:0;;;10632:7;10663:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10506:196;34309:33;;;;;;;;;;;;;;;;39680:135;;;;;;;;;;;;;:::i;35005:30::-;;;;;;;;;;;;;;;;25521:309;;;;;;;;;;-1:-1:-1;25521:309:0;;;;;:::i;:::-;;:::i;35145:31::-;;;;;;;;;;;;;;;;34349:24;;;;;;;;;;;;;;;;42610:112;;;;;;;;;;-1:-1:-1;42610:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;42695:19:0;42671:4;42695:19;;;:10;:19;;;;;;;;;42610:112;41819:593;;;;;;;;;;-1:-1:-1;41819:593:0;;;;;:::i;:::-;;:::i;8364:108::-;8418:13;8455:5;8448:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8364:108;:::o;10881:218::-;11001:4;11022:39;175:10;11045:7;11054:6;11022:8;:39::i;:::-;-1:-1:-1;11083:4:0;10881:218;;;;;:::o;43799:157::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;;;;;;;;;43906:9:::1;::::0;43878:38:::1;::::0;-1:-1:-1;;;;;43906:9:0;;::::1;::::0;43878:38;::::1;::::0;::::1;::::0;43906:9:::1;::::0;43878:38:::1;43927:9;:21:::0;;-1:-1:-1;;;;;;43927:21:0::1;-1:-1:-1::0;;;;;43927:21:0;;;::::1;::::0;;;::::1;::::0;;43799:157::o;40483:277::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;40620:4:::1;40612;40591:13;9692:12:::0;;;9600:116;40591:13:::1;:17;::::0;40607:1:::1;40591:17;:::i;:::-;40590:26;;;;:::i;:::-;40589:35;;;;:::i;:::-;40579:6;:45;;40557:142;;;::::0;-1:-1:-1;;;40557:142:0;;8152:2:1;40557:142:0::1;::::0;::::1;8134:21:1::0;8191:2;8171:18;;;8164:30;8230:34;8210:18;;;8203:62;-1:-1:-1;;;8281:18:1;;;8274:45;8336:19;;40557:142:0::1;7950:411:1::0;40557:142:0::1;40733:19;:6:::0;40743:8:::1;40733:19;:::i;:::-;40710:20;:42:::0;-1:-1:-1;40483:277:0:o;11637:514::-;11793:4;11814:36;11824:6;11832:9;11843:6;11814:9;:36::i;:::-;11865:248;11892:6;175:10;11948:150;12008:6;11948:150;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11948:19:0;;;;;;:11;:19;;;;;;;;175:10;11948:33;;;;;;;;;;:37;:150::i;:::-;11865:8;:248::i;:::-;-1:-1:-1;12135:4:0;11637:514;;;;;:::o;12612:333::-;175:10;12737:4;12842:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12842:34:0;;;;;;;;;;12737:4;;12758:149;;12816:7;;12842:50;;12881:10;12842:38;:50::i;25186:160::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;25281:6:::1;::::0;25260:40:::1;::::0;25297:1:::1;::::0;-1:-1:-1;;;;;25281:6:0::1;::::0;25260:40:::1;::::0;25297:1;;25260:40:::1;25315:6;:19:::0;;-1:-1:-1;;;;;;25315:19:0::1;::::0;;25186:160::o;39498:121::-;24716:6;;39550:4;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;-1:-1:-1;39567:14:0::1;:22:::0;;-1:-1:-1;;39567:22:0::1;::::0;;;39498:121;:::o;41035:169::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41150:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;41150:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41035:169::o;41408:403::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;41558:15:::1;:31:::0;;;41600:15:::1;:31:::0;;;41642:9:::1;:19:::0;;;41654:7;41687:33:::1;41618:13:::0;41576;41687:33:::1;:::i;:::-;:45;;;;:::i;:::-;41672:12;:60:::0;;;41767:2:::1;-1:-1:-1::0;41751:18:0::1;41743:60;;;::::0;-1:-1:-1;;;41743:60:0;;8698:2:1;41743:60:0::1;::::0;::::1;8680:21:1::0;8737:2;8717:18;;;8710:30;8776:31;8756:18;;;8749:59;8825:18;;41743:60:0::1;8496:353:1::0;41743:60:0::1;41408:403:::0;;;:::o;39298:148::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;39353:13:::1;:20:::0;;-1:-1:-1;;39384:18:0;;;;;39426:12:::1;39413:10;:25:::0;39298:148::o;41300:100::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;41371:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;41371:21:0;;::::1;::::0;;;::::1;::::0;;41300:100::o;8611:112::-;8667:13;8704:7;8697:14;;;;;:::i;43057:306::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;43203:13:::1;-1:-1:-1::0;;;;;43195:21:0::1;:4;-1:-1:-1::0;;;;;43195:21:0::1;::::0;43173:128:::1;;;::::0;-1:-1:-1;;;43173:128:0;;9056:2:1;43173:128:0::1;::::0;::::1;9038:21:1::0;9095:2;9075:18;;;9068:30;9134:34;9114:18;;;9107:62;9205:27;9185:18;;;9178:55;9250:19;;43173:128:0::1;8854:421:1::0;43173:128:0::1;43314:41;43343:4;43349:5;43314:28;:41::i;:::-;43057:306:::0;;:::o;42730:319::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;42883:1:::1;42865:8;:15;:19;42857:62;;;::::0;-1:-1:-1;;;42857:62:0;;9482:2:1;42857:62:0::1;::::0;::::1;9464:21:1::0;9521:2;9501:18;;;9494:30;9560:32;9540:18;;;9533:60;9610:18;;42857:62:0::1;9280:354:1::0;42857:62:0::1;42935:9;42930:112;42954:8;:15;42950:1;:19;42930:112;;;43017:13;42991:10;:23;43002:8;43011:1;43002:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;42991:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;42991:23:0;:39;;-1:-1:-1;;42991:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;42971:3:0::1;42930:112;;39823:101:::0;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;39890:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39890:26:0;;::::1;::::0;;;::::1;::::0;;39823:101::o;13508:445::-;13638:4;13659:256;175:10;13717:7;13743:157;13804:15;13743:157;;;;;;;;;;;;;;;;;175:10;13743:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13743:34:0;;;;;;;;;;;;:38;:157::i;10203:224::-;10326:4;10347:42;175:10;10371:9;10382:6;10347:9;:42::i;43567:224::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;43720:15:::1;::::0;43677:59:::1;::::0;-1:-1:-1;;;;;43720:15:0;;::::1;::::0;43677:59;::::1;::::0;::::1;::::0;43720:15:::1;::::0;43677:59:::1;43747:15;:36:::0;;-1:-1:-1;;;;;;43747:36:0::1;-1:-1:-1::0;;;;;43747:36:0;;;::::1;::::0;;;::::1;::::0;;43567:224::o;42420:182::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42505:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;42505:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42560:34;;1224:41:1;;;42560:34:0::1;::::0;1197:18:1;42560:34:0::1;;;;;;;42420:182:::0;;:::o;40768:259::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;40909:4:::1;40901;40879:13;9692:12:::0;;;9600:116;40879:13:::1;:18;::::0;40895:2:::1;40879:18;:::i;:::-;40878:27;;;;:::i;:::-;40877:36;;;;:::i;:::-;40867:6;:46;;40845:132;;;::::0;-1:-1:-1;;;40845:132:0;;9973:2:1;40845:132:0::1;::::0;::::1;9955:21:1::0;10012:2;9992:18;;;9985:30;10051:34;10031:18;;;10024:62;-1:-1:-1;;;10102:18:1;;;10095:34;10146:19;;40845:132:0::1;9771:400:1::0;40845:132:0::1;41000:19;:6:::0;41010:8:::1;41000:19;:::i;:::-;40988:9;:31:::0;-1:-1:-1;40768:259:0:o;39994:481::-;24716:6;;40091:4;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;40165:6:::1;40144:13;9692:12:::0;;;9600:116;40144:13:::1;:17;::::0;40160:1:::1;40144:17;:::i;:::-;40143:28;;;;:::i;:::-;40130:9;:41;;40108:144;;;::::0;-1:-1:-1;;;40108:144:0;;10378:2:1;40108:144:0::1;::::0;::::1;10360:21:1::0;10417:2;10397:18;;;10390:30;10456:34;10436:18;;;10429:62;-1:-1:-1;;;10507:18:1;;;10500:51;10568:19;;40108:144:0::1;10176:417:1::0;40108:144:0::1;40320:4;40299:13;9692:12:::0;;;9600:116;40299:13:::1;:17;::::0;40315:1:::1;40299:17;:::i;:::-;40298:26;;;;:::i;:::-;40285:9;:39;;40263:141;;;::::0;-1:-1:-1;;;40263:141:0;;10800:2:1;40263:141:0::1;::::0;::::1;10782:21:1::0;10839:2;10819:18;;;10812:30;10878:34;10858:18;;;10851:62;-1:-1:-1;;;10929:18:1;;;10922:50;10989:19;;40263:141:0::1;10598:416:1::0;40263:141:0::1;-1:-1:-1::0;40415:18:0::1;:30:::0;;;40463:4:::1;24790:1;39994:481:::0;;;:::o;39680:135::-;24716:6;;39740:4;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;-1:-1:-1;39757:20:0::1;:28:::0;;-1:-1:-1;;39757:28:0::1;::::0;;;39680:135;:::o;25521:309::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25632:22:0;::::1;25606:122;;;::::0;-1:-1:-1;;;25606:122:0;;11221:2:1;25606:122:0::1;::::0;::::1;11203:21:1::0;11260:2;11240:18;;;11233:30;11299:34;11279:18;;;11272:62;-1:-1:-1;;;11350:18:1;;;11343:36;11396:19;;25606:122:0::1;11019:402:1::0;25606:122:0::1;25769:6;::::0;25748:38:::1;::::0;-1:-1:-1;;;;;25748:38:0;;::::1;::::0;25769:6:::1;::::0;25748:38:::1;::::0;25769:6:::1;::::0;25748:38:::1;25801:6;:17:::0;;-1:-1:-1;;;;;;25801:17:0::1;-1:-1:-1::0;;;;;25801:17:0;;;::::1;::::0;;;::::1;::::0;;25521:309::o;41819:593::-;24716:6;;-1:-1:-1;;;;;24716:6:0;175:10;24716:22;24708:67;;;;-1:-1:-1;;;24708:67:0;;;;;;;:::i;:::-;42049:13:::1;:29:::0;;;42089:16:::1;:32:::0;;;42132:10:::1;:20:::0;;;42163:21:::1;:46:::0;;;42220:18:::1;:40:::0;;;42145:7;42287:32:::1;42108:13:::0;42065;42287:32:::1;:::i;:::-;:45;;;;:::i;:::-;42271:13;:61:::0;;;42368:2:::1;-1:-1:-1::0;42351:19:0::1;42343:61;;;::::0;-1:-1:-1;;;42343:61:0;;11628:2:1;42343:61:0::1;::::0;::::1;11610:21:1::0;11667:2;11647:18;;;11640:30;11706:31;11686:18;;;11679:59;11755:18;;42343:61:0::1;11426:353:1::0;42343:61:0::1;41819:593:::0;;;;;:::o;17264:416::-;-1:-1:-1;;;;;17420:19:0;;17412:68;;;;-1:-1:-1;;;17412:68:0;;11986:2:1;17412:68:0;;;11968:21:1;12025:2;12005:18;;;11998:30;12064:34;12044:18;;;12037:62;-1:-1:-1;;;12115:18:1;;;12108:34;12159:19;;17412:68:0;11784:400:1;17412:68:0;-1:-1:-1;;;;;17503:21:0;;17495:68;;;;-1:-1:-1;;;17495:68:0;;12391:2:1;17495:68:0;;;12373:21:1;12430:2;12410:18;;;12403:30;12469:34;12449:18;;;12442:62;-1:-1:-1;;;12520:18:1;;;12513:32;12562:19;;17495:68:0;12189:398:1;17495:68:0;-1:-1:-1;;;;;17580:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17636:32;;1909:25:1;;;17636:32:0;;1882:18:1;17636:32:0;;;;;;;;17264:416;;;:::o;44148:5118::-;-1:-1:-1;;;;;44280:18:0;;44272:68;;;;-1:-1:-1;;;44272:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44359:16:0;;44351:64;;;;-1:-1:-1;;;44351:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44449:14:0;;;;;;:10;:14;;;;;;;;44448:15;:36;;;;-1:-1:-1;;;;;;44468:16:0;;;;;;:10;:16;;;;;;;;44467:17;44448:36;44426:135;;;;-1:-1:-1;;;44426:135:0;;13604:2:1;44426:135:0;;;13586:21:1;13643:2;13623:18;;;13616:30;13682:34;13662:18;;;13655:62;-1:-1:-1;;;13733:18:1;;;13726:47;13790:19;;44426:135:0;13402:413:1;44426:135:0;44576:6;44586:1;44576:11;44572:93;;44604:28;44620:4;44626:2;44630:1;44604:15;:28::i;44572:93::-;44681:14;;;;44677:2487;;;24545:6;;-1:-1:-1;;;;;44734:15:0;;;24545:6;;44734:15;;;;:49;;-1:-1:-1;24545:6:0;;-1:-1:-1;;;;;44770:13:0;;;24545:6;;44770:13;;44734:49;:86;;;;-1:-1:-1;;;;;;44804:16:0;;;;44734:86;:128;;;;-1:-1:-1;;;;;;44841:21:0;;44855:6;44841:21;;44734:128;:158;;;;-1:-1:-1;44884:8:0;;-1:-1:-1;;;44884:8:0;;;;44883:9;44734:158;44712:2441;;;44932:13;;;;;;;44927:223;;-1:-1:-1;;;;;45004:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;45033:23:0;;;;;;:19;:23;;;;;;;;45004:52;44970:160;;;;-1:-1:-1;;;44970:160:0;;14022:2:1;44970:160:0;;;14004:21:1;14061:2;14041:18;;;14034:30;-1:-1:-1;;;14080:18:1;;;14073:52;14142:18;;44970:160:0;13820:346:1;44970:160:0;45306:20;;;;45302:641;;;24545:6;;-1:-1:-1;;;;;45381:13:0;;;24545:6;;45381:13;;;;:72;;;45437:15;-1:-1:-1;;;;;45423:30:0;:2;-1:-1:-1;;;;;45423:30:0;;;45381:72;:129;;;;;45496:13;-1:-1:-1;;;;;45482:28:0;:2;-1:-1:-1;;;;;45482:28:0;;;45381:129;45351:573;;;45628:9;45599:39;;;;:28;:39;;;;;;45674:12;-1:-1:-1;45561:258:0;;;;-1:-1:-1;;;45561:258:0;;14373:2:1;45561:258:0;;;14355:21:1;14412:2;14392:18;;;14385:30;14451:34;14431:18;;;14424:62;14522:34;14502:18;;;14495:62;-1:-1:-1;;;14573:19:1;;;14566:40;14623:19;;45561:258:0;14171:477:1;45561:258:0;45875:9;45846:39;;;;:28;:39;;;;;45888:12;45846:54;;45351:573;-1:-1:-1;;;;;46017:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;46074:35:0;;;;;;:31;:35;;;;;;;;46073:36;46017:92;45991:1147;;;46196:20;;46186:6;:30;;46152:169;;;;-1:-1:-1;;;46152:169:0;;14855:2:1;46152:169:0;;;14837:21:1;14894:2;14874:18;;;14867:30;14933:34;14913:18;;;14906:62;-1:-1:-1;;;14984:18:1;;;14977:51;15045:19;;46152:169:0;14653:417:1;46152:169:0;46404:9;;-1:-1:-1;;;;;9924:18:0;;9893:7;9924:18;;;;;;;;;;;46378:22;;:6;:22;:::i;:::-;:35;;46344:140;;;;-1:-1:-1;;;46344:140:0;;15277:2:1;46344:140:0;;;15259:21:1;15316:2;15296:18;;;15289:30;-1:-1:-1;;;15335:18:1;;;15328:49;15394:18;;46344:140:0;15075:343:1;46344:140:0;45991:1147;;;-1:-1:-1;;;;;46582:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;46637:37:0;;;;;;:31;:37;;;;;;;;46636:38;46582:92;46556:582;;;46761:20;;46751:6;:30;;46717:170;;;;-1:-1:-1;;;46717:170:0;;15625:2:1;46717:170:0;;;15607:21:1;15664:2;15644:18;;;15637:30;15703:34;15683:18;;;15676:62;-1:-1:-1;;;15754:18:1;;;15747:52;15816:19;;46717:170:0;15423:418:1;46556:582:0;-1:-1:-1;;;;;46918:35:0;;;;;;:31;:35;;;;;;;;46913:225;;47038:9;;-1:-1:-1;;;;;9924:18:0;;9893:7;9924:18;;;;;;;;;;;47012:22;;:6;:22;:::i;:::-;:35;;46978:140;;;;-1:-1:-1;;;46978:140:0;;15277:2:1;46978:140:0;;;15259:21:1;15316:2;15296:18;;;15289:30;-1:-1:-1;;;15335:18:1;;;15328:49;15394:18;;46978:140:0;15075:343:1;46978:140:0;47238:10;;:14;;47251:1;47238:14;:::i;:::-;47221:12;:32;;:68;;;;;47276:13;-1:-1:-1;;;;;47270:19:0;:2;-1:-1:-1;;;;;47270:19:0;;;47221:68;:142;;;;-1:-1:-1;;;;;;47306:57:0;;47320:42;47306:57;;47221:142;47203:221;;;-1:-1:-1;;;;;47390:14:0;;47407:5;47390:14;;;:10;:14;;;;;:22;;-1:-1:-1;;47390:22:0;;;47203:221;47485:4;47436:28;9924:18;;;;;;;;;;;47543;;47519:42;;;;;;;47592:35;;-1:-1:-1;47616:11:0;;;;;;;47592:35;:61;;;;-1:-1:-1;47645:8:0;;-1:-1:-1;;;47645:8:0;;;;47644:9;47592:61;:110;;;;-1:-1:-1;;;;;;47671:31:0;;;;;;:25;:31;;;;;;;;47670:32;47592:110;:153;;;;-1:-1:-1;;;;;;47720:25:0;;;;;;:19;:25;;;;;;;;47719:26;47592:153;:194;;;;-1:-1:-1;;;;;;47763:23:0;;;;;;:19;:23;;;;;;;;47762:24;47592:194;47574:326;;;47813:8;:15;;-1:-1:-1;;;;47813:15:0;-1:-1:-1;;;47813:15:0;;;47845:10;:8;:10::i;:::-;47872:8;:16;;-1:-1:-1;;;;47872:16:0;;;47574:326;47928:8;;-1:-1:-1;;;;;48038:25:0;;47912:12;48038:25;;;:19;:25;;;;;;47928:8;-1:-1:-1;;;47928:8:0;;;;;47927:9;;48038:25;;:52;;-1:-1:-1;;;;;;48067:23:0;;;;;;:19;:23;;;;;;;;48038:52;48034:100;;;-1:-1:-1;48117:5:0;48034:100;48146:12;48251:7;48247:966;;;-1:-1:-1;;;;;48303:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;48352:1;48336:13;;:17;48303:50;48299:765;;;48381:34;48411:3;48381:25;48392:13;;48381:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;48374:41;;48484:13;;48464:16;;48457:4;:23;;;;:::i;:::-;48456:41;;;;:::i;:::-;48434:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;48554:13:0;;48540:10;;48533:17;;:4;:17;:::i;:::-;48532:35;;;;:::i;:::-;48516:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;48633:13:0;;48616;;48609:20;;:4;:20;:::i;:::-;48608:38;;;;:::i;:::-;48586:18;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;48299:765:0;;-1:-1:-1;48299:765:0;;-1:-1:-1;;;;;48708:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;48758:1;48743:12;;:16;48708:51;48704:360;;;48787:33;48816:3;48787:24;48798:12;;48787:6;:10;;:24;;;;:::i;:33::-;48780:40;;48888:12;;48869:15;;48862:4;:22;;;;:::i;:::-;48861:39;;;;:::i;:::-;48839:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;48956:12:0;;48943:9;;48936:16;;:4;:16;:::i;:::-;48935:33;;;;:::i;:::-;48919:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;49036:12:0;;49017:15;;49010:22;;:4;:22;:::i;:::-;49009:39;;;;:::i;:::-;48987:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;48704:360:0;49084:8;;49080:91;;49113:42;49129:4;49143;49150;49113:15;:42::i;:::-;49187:14;49197:4;49187:14;;:::i;:::-;;;48247:966;49225:33;49241:4;49247:2;49251:6;49225:15;:33::i;:::-;44261:5005;;;;44148:5118;;;:::o;19821:258::-;19957:7;19997:12;19989:6;;;;19981:29;;;;-1:-1:-1;;;19981:29:0;;;;;;;;:::i;:::-;-1:-1:-1;20025:9:0;20037:5;20041:1;20037;:5;:::i;:::-;20025:17;19821:258;-1:-1:-1;;;;;19821:258:0:o;18806:197::-;18864:7;;18900:5;18904:1;18900;:5;:::i;:::-;18888:17;;18933:1;18928;:6;;18920:46;;;;-1:-1:-1;;;18920:46:0;;16181:2:1;18920:46:0;;;16163:21:1;16220:2;16200:18;;;16193:30;16259:29;16239:18;;;16232:57;16306:18;;18920:46:0;15979:351:1;18920:46:0;18990:1;18806:197;-1:-1:-1;;;18806:197:0:o;43371:188::-;-1:-1:-1;;;;;43454:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;43454:39:0;;;;;;;;;;43511:40;;43454:39;;:31;43511:40;;;43371:188;;:::o;14503:666::-;-1:-1:-1;;;;;14663:20:0;;14655:70;;;;-1:-1:-1;;;14655:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14748:23:0;;14740:71;;;;-1:-1:-1;;;14740:71:0;;;;;;;:::i;:::-;14912:120;14952:6;14912:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14912:17:0;;:9;:17;;;;;;;;;;;;:120;:21;:120::i;:::-;-1:-1:-1;;;;;14892:17:0;;;:9;:17;;;;;;;;;;;:140;;;;15070:20;;;;;;;:32;;15095:6;15070:24;:32::i;:::-;-1:-1:-1;;;;;15047:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;15122:35;1909:25:1;;;15047:20:0;;15122:35;;;;;;1882:18:1;15122:35:0;1763:177:1;49785:1220:0;49868:4;49824:23;9924:18;;;;;;;;;;;49824:50;;49885:25;49981:12;;49947:18;;49913;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;49885:108;-1:-1:-1;50004:12:0;50033:20;;;:46;;-1:-1:-1;50057:22:0;;50033:46;50029:85;;;50096:7;;;49785:1220::o;50029:85::-;50148:18;;:23;;50169:2;50148:23;:::i;:::-;50130:15;:41;50126:115;;;50206:18;;:23;;50227:2;50206:23;:::i;:::-;50188:41;;50126:115;50253:23;50366:1;50333:17;50298:18;;50280:15;:36;;;;:::i;:::-;50279:71;;;;:::i;:::-;:88;;;;:::i;:::-;50253:114;-1:-1:-1;50378:26:0;50407:36;:15;50253:114;50407:19;:36::i;:::-;50378:65;-1:-1:-1;50484:21:0;50518:36;50378:65;50518:16;:36::i;:::-;50567:18;50588:44;:21;50614:17;50588:25;:44::i;:::-;50567:65;;50645:17;50665:51;50698:17;50665:28;50680:12;;50665:10;:14;;:28;;;;:::i;:51::-;50750:1;50729:18;:22;;;50762:18;:22;;;50795:12;:16;;;50846:9;;50838:45;;50645:71;;-1:-1:-1;;;;;;50846:9:0;;50645:71;;50838:45;50750:1;50838:45;50645:71;50846:9;50838:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50918:15:0;;50910:87;;50824:59;;-1:-1:-1;;;;;;50918:15:0;;50961:21;;50910:87;;;;50961:21;50918:15;50910:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;49785:1220:0:o;20382:511::-;20440:7;20701:1;20706;20701:6;20697:55;;-1:-1:-1;20735:1:0;20728:8;;20697:55;20768:9;20780:5;20784:1;20780;:5;:::i;:::-;20768:17;-1:-1:-1;20817:1:0;20808:5;20812:1;20768:17;20808:5;:::i;:::-;:10;20800:56;;;;-1:-1:-1;;;20800:56:0;;16747:2:1;20800:56:0;;;16729:21:1;16786:2;16766:18;;;16759:30;16825:34;16805:18;;;16798:62;-1:-1:-1;;;16876:18:1;;;16869:31;16917:19;;20800:56:0;16545:397:1;21421:140:0;21479:7;21510:39;21514:1;21517;21510:39;;;;;;;;;;;;;;;;;:3;:39::i;19330:144::-;19388:7;19419:43;19423:1;19426;19419:43;;;;;;;;;;;;;;;;;:3;:43::i;49274:503::-;49364:16;;;49378:1;49364:16;;;;;;;;49340:21;;49364:16;;;;;;;;;;-1:-1:-1;49364:16:0;49340:40;;49409:4;49391;49396:1;49391:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;49391:23:0;;;-1:-1:-1;;;;;49391:23:0;;;;;49435:15;-1:-1:-1;;;;;49435:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49425:4;49430:1;49425:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;49425:32:0;;;-1:-1:-1;;;;;49425:32:0;;;;;49470:62;49487:4;49502:15;49520:11;49470:8;:62::i;:::-;49545:224;;-1:-1:-1;;;49545:224:0;;-1:-1:-1;;;;;49545:15:0;:66;;;;:224;;49626:11;;49652:1;;49696:4;;49723;;49743:15;;49545:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49329:448;49274:503;:::o;22109:348::-;22245:7;22284:12;22277:5;22269:28;;;;-1:-1:-1;;;22269:28:0;;;;;;;;:::i;:::-;-1:-1:-1;22312:9:0;22324:5;22328:1;22324;:5;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;492:70;437:131;:::o;573:134::-;641:20;;670:31;641:20;670:31;:::i;712:367::-;780:6;788;841:2;829:9;820:7;816:23;812:32;809:52;;;857:1;854;847:12;809:52;896:9;883:23;915:31;940:5;915:31;:::i;:::-;965:5;1043:2;1028:18;;;;1015:32;;-1:-1:-1;;;712:367:1:o;1276:247::-;1335:6;1388:2;1376:9;1367:7;1363:23;1359:32;1356:52;;;1404:1;1401;1394:12;1356:52;1443:9;1430:23;1462:31;1487:5;1462:31;:::i;1945:226::-;2004:6;2057:2;2045:9;2036:7;2032:23;2028:32;2025:52;;;2073:1;2070;2063:12;2025:52;-1:-1:-1;2118:23:1;;1945:226;-1:-1:-1;1945:226:1:o;2176:508::-;2253:6;2261;2269;2322:2;2310:9;2301:7;2297:23;2293:32;2290:52;;;2338:1;2335;2328:12;2290:52;2377:9;2364:23;2396:31;2421:5;2396:31;:::i;:::-;2446:5;-1:-1:-1;2503:2:1;2488:18;;2475:32;2516:33;2475:32;2516:33;:::i;:::-;2176:508;;2568:7;;-1:-1:-1;;;2648:2:1;2633:18;;;;2620:32;;2176:508::o;3086:160::-;3151:20;;3207:13;;3200:21;3190:32;;3180:60;;3236:1;3233;3226:12;3251:315;3316:6;3324;3377:2;3365:9;3356:7;3352:23;3348:32;3345:52;;;3393:1;3390;3383:12;3345:52;3432:9;3419:23;3451:31;3476:5;3451:31;:::i;:::-;3501:5;-1:-1:-1;3525:35:1;3556:2;3541:18;;3525:35;:::i;:::-;3515:45;;3251:315;;;;;:::o;3571:466::-;3648:6;3656;3664;3717:2;3705:9;3696:7;3692:23;3688:32;3685:52;;;3733:1;3730;3723:12;3685:52;-1:-1:-1;;3778:23:1;;;3898:2;3883:18;;3870:32;;-1:-1:-1;4001:2:1;3986:18;;;3973:32;;3571:466;-1:-1:-1;3571:466:1:o;4042:180::-;4098:6;4151:2;4139:9;4130:7;4126:23;4122:32;4119:52;;;4167:1;4164;4157:12;4119:52;4190:26;4206:9;4190:26;:::i;4227:127::-;4288:10;4283:3;4279:20;4276:1;4269:31;4319:4;4316:1;4309:15;4343:4;4340:1;4333:15;4359:1207;4449:6;4457;4510:2;4498:9;4489:7;4485:23;4481:32;4478:52;;;4526:1;4523;4516:12;4478:52;4566:9;4553:23;4599:18;4591:6;4588:30;4585:50;;;4631:1;4628;4621:12;4585:50;4654:22;;4707:4;4699:13;;4695:27;-1:-1:-1;4685:55:1;;4736:1;4733;4726:12;4685:55;4776:2;4763:16;4802:18;4794:6;4791:30;4788:56;;;4824:18;;:::i;:::-;4870:6;4867:1;4863:14;4906:2;4900:9;4969:2;4965:7;4960:2;4956;4952:11;4948:25;4940:6;4936:38;5040:6;5028:10;5025:22;5004:18;4992:10;4989:34;4986:62;4983:88;;;5051:18;;:::i;:::-;5087:2;5080:22;5137;;;5187:4;5219:11;;;5215:22;;;5137;5175:17;;5249:19;;;5246:39;;;5281:1;5278;5271:12;5246:39;5313:4;5309:2;5305:13;5294:24;;5327:152;5343:6;5338:3;5335:15;5327:152;;;5411:23;5430:3;5411:23;:::i;:::-;5399:36;;5464:4;5360:14;;;;5455;5327:152;;;-1:-1:-1;5498:6:1;-1:-1:-1;5523:37:1;;-1:-1:-1;;;5554:4:1;5539:20;;5523:37;:::i;5571:388::-;5639:6;5647;5700:2;5688:9;5679:7;5675:23;5671:32;5668:52;;;5716:1;5713;5706:12;5668:52;5755:9;5742:23;5774:31;5799:5;5774:31;:::i;:::-;5824:5;-1:-1:-1;5881:2:1;5866:18;;5853:32;5894:33;5853:32;5894:33;:::i;:::-;5946:7;5936:17;;;5571:388;;;;;:::o;5964:708::-;6059:6;6067;6075;6083;6091;6144:3;6132:9;6123:7;6119:23;6115:33;6112:53;;;6161:1;6158;6151:12;6112:53;-1:-1:-1;;6206:23:1;;;6326:2;6311:18;;6298:32;;-1:-1:-1;6429:2:1;6414:18;;6401:32;;6532:2;6517:18;;6504:32;;-1:-1:-1;6635:3:1;6620:19;6607:33;;-1:-1:-1;5964:708:1;-1:-1:-1;5964:708:1:o;6677:380::-;6756:1;6752:12;;;;6799;;;6820:61;;6874:4;6866:6;6862:17;6852:27;;6820:61;6927:2;6919:6;6916:14;6896:18;6893:38;6890:161;;6973:10;6968:3;6964:20;6961:1;6954:31;7008:4;7005:1;6998:15;7036:4;7033:1;7026:15;6890:161;;6677:380;;;:::o;7062:356::-;7264:2;7246:21;;;7283:18;;;7276:30;7342:34;7337:2;7322:18;;7315:62;7409:2;7394:18;;7062:356::o;7423:127::-;7484:10;7479:3;7475:20;7472:1;7465:31;7515:4;7512:1;7505:15;7539:4;7536:1;7529:15;7555:168;7628:9;;;7659;;7676:15;;;7670:22;;7656:37;7646:71;;7697:18;;:::i;7728:217::-;7768:1;7794;7784:132;;7838:10;7833:3;7829:20;7826:1;7819:31;7873:4;7870:1;7863:15;7901:4;7898:1;7891:15;7784:132;-1:-1:-1;7930:9:1;;7728:217::o;8366:125::-;8431:9;;;8452:10;;;8449:36;;;8465:18;;:::i;9639:127::-;9700:10;9695:3;9691:20;9688:1;9681:31;9731:4;9728:1;9721:15;9755:4;9752:1;9745:15;12592:401;12794:2;12776:21;;;12833:2;12813:18;;;12806:30;12872:34;12867:2;12852:18;;12845:62;-1:-1:-1;;;12938:2:1;12923:18;;12916:35;12983:3;12968:19;;12592:401::o;12998:399::-;13200:2;13182:21;;;13239:2;13219:18;;;13212:30;13278:34;13273:2;13258:18;;13251:62;-1:-1:-1;;;13344:2:1;13329:18;;13322:33;13387:3;13372:19;;12998:399::o;15846:128::-;15913:9;;;15934:11;;;15931:37;;;15948:18;;:::i;16947:251::-;17017:6;17070:2;17058:9;17049:7;17045:23;17041:32;17038:52;;;17086:1;17083;17076:12;17038:52;17118:9;17112:16;17137:31;17162:5;17137:31;:::i;17203:959::-;17465:4;17513:3;17502:9;17498:19;17544:6;17533:9;17526:25;17587:6;17582:2;17571:9;17567:18;17560:34;17630:3;17625:2;17614:9;17610:18;17603:31;17654:6;17689;17683:13;17720:6;17712;17705:22;17758:3;17747:9;17743:19;17736:26;;17797:2;17789:6;17785:15;17771:29;;17818:1;17828:195;17842:6;17839:1;17836:13;17828:195;;;17907:13;;-1:-1:-1;;;;;17903:39:1;17891:52;;17972:2;17998:15;;;;17963:12;;;;17939:1;17857:9;17828:195;;;-1:-1:-1;;;;;;;18079:32:1;;;;18074:2;18059:18;;18052:60;-1:-1:-1;;18143:3:1;18128:19;18121:35;18040:3;17203:959;-1:-1:-1;;;17203:959:1:o

Swarm Source

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