ETH Price: $2,493.44 (-1.86%)

Token

XTraderErc (XT)
 

Overview

Max Total Supply

1,000,000,000 XT

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,807,557.261810696866468674 XT

Value
$0.00
0x4381598e506ae3670aaa3276b07301f94f4296bc
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:
XTraderErc

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


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

XTRADER.GG : The goal of a successful trader is to make the best trades

telegram : @xtradergg | twitter : @XTradergg | medium : @xtrader

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

pragma solidity ^0.8.11;
pragma experimental ABIEncoderV2;

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 {
        _transferOwnership(address(0));
    }

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

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

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract XTraderErc is ERC20, Ownable {


    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    uint8 private constant _decimals = 18;
    bool private swapping;

    address public devWallet;
    address public tradingBotShareWallet;
    address public liquidityReceiver;

    uint256 public maxTxnAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletAmount;

    uint256 public percentForLPBurn = 18;
    bool public lpBurnEnabled = true;
    uint256 public cooldownBlocks = 3;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    uint256 public launchBlock;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public bots;
    mapping (address => uint256) private _buyBlock;

    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTradingBotShareFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTradingBotShareFee;

    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTradingBotShare;

    // 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 ExcludeFromFees(address indexed account, bool isExcluded);

    event WhitelistAccount(address indexed account);

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("XTraderErc", "XT") {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTxnAmount = totalSupply * 15 / 1000; // 1.5% from total supply maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 15 / 1000; // 1.5% from total supply maxWalletAmount
        swapTokensAtAmount = (totalSupply * 3) / 10000; // 0.03% swap wallet

        buyDevFee = 1;
        buyLiquidityFee = 1;
        buyTradingBotShareFee = 1;
        buyTotalFees = buyDevFee + buyLiquidityFee + buyTradingBotShareFee;

        sellDevFee = 1;
        sellLiquidityFee = 1;
        sellTradingBotShareFee = 1;
        sellTotalFees = sellDevFee + sellLiquidityFee + sellTradingBotShareFee;

        devWallet = address(0xb953Cc3fb301f4462fc12285446eCC317B58305E);
        tradingBotShareWallet = address(0xA5d36a1BE29eAb47042620C7c83fE4Ae7EA93283);
        liquidityReceiver = address(0x456cbef9D43bF05362dF97f48b4f8f1ba242288E);


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

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

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

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

    receive() external payable {}

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

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

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

    // 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() * 1) / 1000) / 1e18,
            "Cannot set maxTxnAmount lower than 0.1%"
        );
        maxTxnAmount = newNum * (10**18);
    }

    function updateLpBurnFrequency(uint256 newNum) external onlyOwner {
        lpBurnFrequency = newNum * 1 seconds;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWalletAmount lower than 0.5%"
        );
        maxWalletAmount = 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 _devFee,
        uint256 _liquidityFee,
        uint256 _tradingBotShareFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTradingBotShareFee = _tradingBotShareFee;
        buyTotalFees = buyDevFee + buyLiquidityFee + buyTradingBotShareFee;
        require(buyTotalFees <= 10, "total fee 10% or less");
    }

    function updateSellFees(
        uint256 _devFee,
        uint256 _liquidityFee,
        uint256 _tradingBotShareFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTradingBotShareFee = _tradingBotShareFee;
        sellTotalFees = sellDevFee + sellLiquidityFee + sellTradingBotShareFee;
        require(sellTotalFees <= 10, "total fee 10% or less");
    }

    function blockBot(address bot) public onlyOwner {
        require(bot != address(uniswapV2Pair));
        require(bot != address(uniswapV2Router));

        bots[bot] = true;
    }

    function blockMultipleBots(address[] calldata accounts) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            require(accounts[i] != address(uniswapV2Pair));
            require(accounts[i] != address(uniswapV2Router));
            bots[accounts[i]] = true;
        }
    }

    function unblockBot(address notBot) public onlyOwner {
        bots[notBot] = false;
    }

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

    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 updateDevWallet(address newDevWallet) external
    {
        require(_msgSender() == devWallet, "!dev");
        devWallet = newDevWallet;
    }

    function updateTradingBotShareWallet(address newTradingBotShareWallet)
        external
    {
        require(_msgSender() == tradingBotShareWallet, "!xtrader");
        tradingBotShareWallet = newTradingBotShareWallet;
    }

    function updateLiquidityReceiver(address newLiquidReceiver)
        external
    {
        require(_msgSender() == liquidityReceiver, "!liqiduityReceiver");
        liquidityReceiver = newLiquidReceiver;
    }

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

    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(amount > 0, "Transfer amount must be greater than zero");
        require(!bots[from] && !bots[to], "Your account is blockListed!");

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                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 <= maxTxnAmount,
                        "Buy transfer amount exceeds the maxTxnAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Max wallet exceeded"
                    );

                    if(block.number <= launchBlock + cooldownBlocks) {
                        _buyBlock[tx.origin] = block.number;
                    }
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTxnAmount,
                        "Sell transfer amount exceeds the maxTxnAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        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) {
                bool isSniper = _buyBlock[from] > 0;
                uint256 _sellLiquidityFee = sellLiquidityFee;
                uint256 _sellDevFee = sellDevFee;
                uint256 _sellTradingBotShareFee = sellTradingBotShareFee;
                uint256 _sellTotalFees = sellTotalFees;
                if (isSniper) {
                    _sellLiquidityFee = 2; _sellDevFee = 20; _sellTradingBotShareFee = 23;
                    _sellTotalFees = _sellLiquidityFee + _sellDevFee + _sellTradingBotShareFee;
                }
                fees = amount.mul(_sellTotalFees).div(100);
                tokensForLiquidity += (fees * _sellLiquidityFee) / _sellTotalFees;
                tokensForDev += (fees * _sellDevFee) / _sellTotalFees;
                tokensForTradingBotShare += (fees * _sellTradingBotShareFee) / _sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                _approve(liquidityReceiver, address(this), maxTxnAmount);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForTradingBotShare += (fees * buyTradingBotShareFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityReceiver,
            block.timestamp
        );
    }

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 totalTokensSwappedForEth = totalTokensToSwap.sub(tokensForLiquidity.div(2));

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

        uint256 ethForTradingBotShare = ethBalance.mul(tokensForTradingBotShare).div(totalTokensSwappedForEth);

        uint256 ethForLiquidity = ethBalance - ethForDev - ethForTradingBotShare;

        tokensForLiquidity = 0;
        tokensForDev = 0;
        tokensForTradingBotShare = 0;

        (success, ) = address(tradingBotShareWallet).call{value: ethForTradingBotShare}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                liquidityTokens
            );
        }

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

    function getRewardTokens(address token, uint256 amount) external {
        require (_msgSender() == devWallet);
        IERC20(token).transferFrom(liquidityReceiver, address(this), amount);
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function receiveETH() external {
        require(_msgSender() == devWallet);
        payable(devWallet).transfer(address(this).balance);
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from uniswapV2Pair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":"account","type":"address"}],"name":"WhitelistAccount","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":"bot","type":"address"}],"name":"blockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blockMultipleBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTradingBotShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getRewardTokens","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiveETH","outputs":[],"stateMutability":"nonpayable","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTradingBotShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":"tokensForTradingBotShare","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":[],"name":"tradingBotShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"notBot","type":"address"}],"name":"unblockBot","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_tradingBotShareFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidReceiver","type":"address"}],"name":"updateLiquidityReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateLpBurnFrequency","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_tradingBotShareFee","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"},{"inputs":[{"internalType":"address","name":"newTradingBotShareWallet","type":"address"}],"name":"updateTradingBotShareWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526012600c819055600d805460ff1990811660019081179092556003600e55610e10600f55825462ffffff19166201000017909255601680549092161790553480156200004f57600080fd5b506040518060400160405280600a8152602001695854726164657245726360b01b81525060405180604001604052806002815260200161161560f21b81525081600390816200009f9190620007ca565b506004620000ae8282620007ca565b505050620000cb620000c56200046e60201b60201c565b62000472565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000ed816001620004c4565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000896565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d2919062000896565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000246919062000896565b6001600160a01b031660a081905262000261906001620004c4565b60a051620002719060016200053e565b6b033b2e3c9fd0803ce80000006103e86200028e82600f620008de565b6200029a9190620008fe565b6009556103e8620002ad82600f620008de565b620002b99190620008fe565b600b55612710620002cc826003620008de565b620002d89190620008fe565b600a55600160188190556019819055601a819055620002f8818062000921565b62000304919062000921565b6017556001601c819055601d819055601e81905562000324818062000921565b62000330919062000921565b601b55600680546001600160a01b031990811673b953cc3fb301f4462fc12285446ecc317b58305e1790915560078054821673a5d36a1be29eab47042620c7c83fe4ae7ea932831790556008805490911673456cbef9d43bf05362df97f48b4f8f1ba242288e179055620003b8620003b06005546001600160a01b031690565b600162000592565b620003c530600162000592565b620003d461dead600162000592565b600654620003ed906001600160a01b0316600162000592565b60085462000406906001600160a01b0316600162000592565b620004256200041d6005546001600160a01b031690565b6001620004c4565b62000432306001620004c4565b6200044161dead6001620004c4565b6006546200045a906001600160a01b03166001620004c4565b6200046633826200063c565b505062000937565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005135760405162461bcd60e51b8152602060048201819052602482015260008051602062003ff383398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005dd5760405162461bcd60e51b8152602060048201819052602482015260008051602062003ff383398151915260448201526064016200050a565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006945760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200050a565b8060026000828254620006a8919062000921565b90915550506001600160a01b03821660009081526020819052604081208054839290620006d790849062000921565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075157607f821691505b6020821081036200077257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072157600081815260208120601f850160051c81016020861015620007a15750805b601f850160051c820191505b81811015620007c257828155600101620007ad565b505050505050565b81516001600160401b03811115620007e657620007e662000726565b620007fe81620007f784546200073c565b8462000778565b602080601f8311600181146200083657600084156200081d5750858301515b600019600386901b1c1916600185901b178555620007c2565b600085815260208120601f198616915b82811015620008675788860151825594840194600190910190840162000846565b5085821015620008865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008a957600080fd5b81516001600160a01b0381168114620008c157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008f857620008f8620008c8565b92915050565b6000826200091c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008f857620008f8620008c8565b60805160a05161362d620009c6600039600081816106d101528181610f6d015281816115a901528181611aec0152818161209f01528181612b5d01528181612bff0152612c2b0152600081816104d601528181610fd101528181611b2a0152818161206101528181612ea901528181612f6201528181612f9e015281816130180152613080015261362d6000f3fe6080604052600436106104095760003560e01c80638095d56411610213578063c024666811610123578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610c16578063ed9a48ba14610c2b578063f11a24d314610c4b578063f2fde38b14610c61578063f637434214610c8157600080fd5b8063dd62ed3e14610b84578063de77e94e14610bca578063e2f4560514610be0578063e70ef8a414610bf657600080fd5b8063cf46f24c116100f2578063cf46f24c14610b0c578063d00efb2f14610b22578063d0ac10fb14610b38578063d257b34f14610b4e578063d85ba06314610b6e57600080fd5b8063c024666814610a92578063c17b5b8c14610ab2578063c18bc19514610ad2578063c876d0b914610af257600080fd5b8063a0d82dc5116101a6578063aa4bde2811610175578063aa4bde28146109dd578063b38ef433146109f3578063b62496f514610a13578063bbc0c74214610a43578063bfd7928414610a6257600080fd5b8063a0d82dc514610971578063a457c2d714610987578063a4c82a00146109a7578063a9059cbb146109bd57600080fd5b806395d89b41116101e257806395d89b41146109105780639a7a23d6146109255780639c3b4fdc146109455780639fccce321461095b57600080fd5b80638095d564146108925780638da5cb5b146108b25780638ea5220f146108d0578063924de9b7146108f057600080fd5b80632e82f1a0116103195780636a486a8e116102a157806370a082311161027057806370a08231146107f2578063715018a614610828578063730c18881461083d578063751039fc1461085d5780637571336a1461087257600080fd5b80636a486a8e1461078c5780636ad92803146107a25780636b999053146107b85780636ddd1713146107d857600080fd5b806349bd5a5e116102e857806349bd5a5e146106bf5780634a62bb65146106f35780634fbee1931461071357806350b8deb11461074c578063627752231461076c57600080fd5b80632e82f1a014610654578063313ce5671461066e578063395093511461068a5780633ecfd51e146106aa57600080fd5b80631a8145bb1161039c578063264d26dd1161036b578063264d26dd146105d357806327c8f835146105f35780632912df7914610609578063293230b8146106295780632c3e486c1461063e57600080fd5b80631a8145bb1461055d578063203e727e1461057357806323b872dd14610593578063262d3a7e146105b357600080fd5b80631694505e116103d85780631694505e146104c457806318160ddd146105105780631816467f14610525578063199ffc721461054757600080fd5b806306fdde0314610415578063095ea7b3146104405780630baa9ed61461047057806310d5de531461049457600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610c97565b60405161043791906130f8565b60405180910390f35b34801561044c57600080fd5b5061046061045b36600461315b565b610d29565b6040519015158152602001610437565b34801561047c57600080fd5b50610486600e5481565b604051908152602001610437565b3480156104a057600080fd5b506104606104af366004613187565b60236020526000908152604090205460ff1681565b3480156104d057600080fd5b506104f87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610437565b34801561051c57600080fd5b50600254610486565b34801561053157600080fd5b50610545610540366004613187565b610d40565b005b34801561055357600080fd5b50610486600c5481565b34801561056957600080fd5b5061048660205481565b34801561057f57600080fd5b5061054561058e3660046131a4565b610db7565b34801561059f57600080fd5b506104606105ae3660046131bd565b610e8c565b3480156105bf57600080fd5b506105456105ce3660046131fe565b610f36565b3480156105df57600080fd5b506008546104f8906001600160a01b031681565b3480156105ff57600080fd5b506104f861dead81565b34801561061557600080fd5b506105456106243660046131a4565b61109f565b34801561063557600080fd5b506105456110da565b34801561064a57600080fd5b50610486600f5481565b34801561066057600080fd5b50600d546104609060ff1681565b34801561067a57600080fd5b5060405160128152602001610437565b34801561069657600080fd5b506104606106a536600461315b565b61111d565b3480156106b657600080fd5b50610545611159565b3480156106cb57600080fd5b506104f87f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ff57600080fd5b506012546104609062010000900460ff1681565b34801561071f57600080fd5b5061046061072e366004613187565b6001600160a01b031660009081526022602052604090205460ff1690565b34801561075857600080fd5b506007546104f8906001600160a01b031681565b34801561077857600080fd5b5061054561078736600461315b565b6111b5565b34801561079857600080fd5b50610486601b5481565b3480156107ae57600080fd5b5061048660215481565b3480156107c457600080fd5b506105456107d3366004613187565b611252565b3480156107e457600080fd5b506012546104609060ff1681565b3480156107fe57600080fd5b5061048661080d366004613187565b6001600160a01b031660009081526020819052604090205490565b34801561083457600080fd5b5061054561129d565b34801561084957600080fd5b50610545610858366004613281565b6112d3565b34801561086957600080fd5b506104606113fc565b34801561087e57600080fd5b5061054561088d3660046132ba565b611441565b34801561089e57600080fd5b506105456108ad3660046132f3565b611496565b3480156108be57600080fd5b506005546001600160a01b03166104f8565b3480156108dc57600080fd5b506006546104f8906001600160a01b031681565b3480156108fc57600080fd5b5061054561090b36600461331f565b611531565b34801561091c57600080fd5b5061042a61156e565b34801561093157600080fd5b506105456109403660046132ba565b61157d565b34801561095157600080fd5b5061048660185481565b34801561096757600080fd5b50610486601f5481565b34801561097d57600080fd5b50610486601c5481565b34801561099357600080fd5b506104606109a236600461315b565b61165c565b3480156109b357600080fd5b5061048660105481565b3480156109c957600080fd5b506104606109d836600461315b565b6116f5565b3480156109e957600080fd5b50610486600b5481565b3480156109ff57600080fd5b50610545610a0e366004613187565b611702565b348015610a1f57600080fd5b50610460610a2e366004613187565b60246020526000908152604090205460ff1681565b348015610a4f57600080fd5b5060125461046090610100900460ff1681565b348015610a6e57600080fd5b50610460610a7d366004613187565b60146020526000908152604090205460ff1681565b348015610a9e57600080fd5b50610545610aad3660046132ba565b611772565b348015610abe57600080fd5b50610545610acd3660046132f3565b6117fb565b348015610ade57600080fd5b50610545610aed3660046131a4565b611896565b348015610afe57600080fd5b506016546104609060ff1681565b348015610b1857600080fd5b5061048660095481565b348015610b2e57600080fd5b5061048660115481565b348015610b4457600080fd5b50610486601a5481565b348015610b5a57600080fd5b50610460610b693660046131a4565b61196e565b348015610b7a57600080fd5b5061048660175481565b348015610b9057600080fd5b50610486610b9f36600461333c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bd657600080fd5b50610486601e5481565b348015610bec57600080fd5b50610486600a5481565b348015610c0257600080fd5b50610545610c11366004613187565b611ac0565b348015610c2257600080fd5b50610460611b8a565b348015610c3757600080fd5b50610545610c46366004613187565b611bc7565b348015610c5757600080fd5b5061048660195481565b348015610c6d57600080fd5b50610545610c7c366004613187565b611c41565b348015610c8d57600080fd5b50610486601d5481565b606060038054610ca69061336a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd29061336a565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d36338484611cd9565b5060015b92915050565b6006546001600160a01b0316336001600160a01b031614610d955760405162461bcd60e51b8152600401610d8c9060208082526004908201526310b232bb60e11b604082015260600190565b60405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de15760405162461bcd60e51b8152600401610d8c906133a4565b670de0b6b3a76400006103e8610df660025490565b610e019060016133ef565b610e0b9190613406565b610e159190613406565b811015610e745760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e312560c81b6064820152608401610d8c565b610e8681670de0b6b3a76400006133ef565b60095550565b6000610e99848484611dfd565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f1e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d8c565b610f2b8533858403611cd9565b506001949350505050565b6005546001600160a01b03163314610f605760405162461bcd60e51b8152600401610d8c906133a4565b60005b8181101561109a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316838383818110610fa757610fa7613428565b9050602002016020810190610fbc9190613187565b6001600160a01b031603610fcf57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683838381811061100b5761100b613428565b90506020020160208101906110209190613187565b6001600160a01b03160361103357600080fd5b60016014600085858581811061104b5761104b613428565b90506020020160208101906110609190613187565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806110928161343e565b915050610f63565b505050565b6005546001600160a01b031633146110c95760405162461bcd60e51b8152600401610d8c906133a4565b6110d48160016133ef565b600f5550565b6005546001600160a01b031633146111045760405162461bcd60e51b8152600401610d8c906133a4565b601280544260105561ffff191661010117905543601155565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d36918590611154908690613457565b611cd9565b6006546001600160a01b0316336001600160a01b03161461117957600080fd5b6006546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156111b2573d6000803e3d6000fd5b50565b6006546001600160a01b0316336001600160a01b0316146111d557600080fd5b6008546040516323b872dd60e01b81526001600160a01b03918216600482015230602482015260448101839052908316906323b872dd906064016020604051808303816000875af115801561122e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109a919061346a565b6005546001600160a01b0316331461127c5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6005546001600160a01b031633146112c75760405162461bcd60e51b8152600401610d8c906133a4565b6112d16000612819565b565b6005546001600160a01b031633146112fd5760405162461bcd60e51b8152600401610d8c906133a4565b61025883101561136b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610d8c565b6103e8821115801561137b575060015b6113e05760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610d8c565b600f92909255600c55600d805460ff1916911515919091179055565b6005546000906001600160a01b031633146114295760405162461bcd60e51b8152600401610d8c906133a4565b6012805462ff00001916905560025460095550600190565b6005546001600160a01b0316331461146b5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114c05760405162461bcd60e51b8152600401610d8c906133a4565b60188390556019829055601a819055806114da8385613457565b6114e49190613457565b6017819055600a101561109a5760405162461bcd60e51b8152602060048201526015602482015274746f74616c2066656520313025206f72206c65737360581b6044820152606401610d8c565b6005546001600160a01b0316331461155b5760405162461bcd60e51b8152600401610d8c906133a4565b6012805460ff1916911515919091179055565b606060048054610ca69061336a565b6005546001600160a01b031633146115a75760405162461bcd60e51b8152600401610d8c906133a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361164e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d8c565b611658828261286b565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d8c565b6116eb3385858403611cd9565b5060019392505050565b6000610d36338484611dfd565b6007546001600160a01b0316336001600160a01b0316146117505760405162461bcd60e51b815260206004820152600860248201526710bc3a3930b232b960c11b6044820152606401610d8c565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461179c5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118255760405162461bcd60e51b8152600401610d8c906133a4565b601c839055601d829055601e8190558061183f8385613457565b6118499190613457565b601b819055600a101561109a5760405162461bcd60e51b8152602060048201526015602482015274746f74616c2066656520313025206f72206c65737360581b6044820152606401610d8c565b6005546001600160a01b031633146118c05760405162461bcd60e51b8152600401610d8c906133a4565b670de0b6b3a76400006103e86118d560025490565b6118e09060056133ef565b6118ea9190613406565b6118f49190613406565b8110156119565760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610d8c565b61196881670de0b6b3a76400006133ef565b600b5550565b6005546000906001600160a01b0316331461199b5760405162461bcd60e51b8152600401610d8c906133a4565b620186a06119a860025490565b6119b39060016133ef565b6119bd9190613406565b821015611a2a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d8c565b6103e8611a3660025490565b611a419060056133ef565b611a4b9190613406565b821115611ab75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d8c565b50600a55600190565b6005546001600160a01b03163314611aea5760405162461bcd60e51b8152600401610d8c906133a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611b2857600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611b6657600080fd5b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6005546000906001600160a01b03163314611bb75760405162461bcd60e51b8152600401610d8c906133a4565b506016805460ff19169055600190565b6008546001600160a01b0316336001600160a01b031614611c1f5760405162461bcd60e51b815260206004820152601260248201527110b634b8b4b23ab4ba3ca932b1b2b4bb32b960711b6044820152606401610d8c565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c6b5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b038116611cd05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d8c565b6111b281612819565b6001600160a01b038316611d3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d8c565b6001600160a01b038216611d9c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d8c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e235760405162461bcd60e51b8152600401610d8c90613487565b6001600160a01b038216611e495760405162461bcd60e51b8152600401610d8c906134cc565b60008111611eab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d8c565b6001600160a01b03831660009081526014602052604090205460ff16158015611eed57506001600160a01b03821660009081526014602052604090205460ff16155b611f395760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610d8c565b60125462010000900460ff1615612401576005546001600160a01b03848116911614801590611f7657506005546001600160a01b03838116911614155b8015611f8d57506001600160a01b03821661dead14155b8015611fa35750600554600160a01b900460ff16155b1561240157601254610100900460ff1661203b576001600160a01b03831660009081526022602052604090205460ff1680611ff657506001600160a01b03821660009081526022602052604090205460ff165b61203b5760405162461bcd60e51b81526020600482015260166024820152753a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d8c565b60165460ff1615612182576005546001600160a01b0383811691161480159061209657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156120d457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156121825732600090815260136020526040902054431161216f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d8c565b3260009081526013602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff1680156121c357506001600160a01b03821660009081526023602052604090205460ff16155b156122c8576009548111156122305760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610d8c565b600b546001600160a01b0383166000908152602081905260409020546122569083613457565b111561229a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d8c565b600e546011546122aa9190613457565b43116122c3573260009081526015602052604090204390555b612401565b6001600160a01b03821660009081526024602052604090205460ff16801561230957506001600160a01b03831660009081526023602052604090205460ff16155b15612377576009548111156122c35760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610d8c565b6001600160a01b03821660009081526023602052604090205460ff1661240157600b546001600160a01b0383166000908152602081905260409020546123bd9083613457565b11156124015760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d8c565b30600090815260208190526040902054600a5481108015908190612427575060125460ff165b801561243d5750600554600160a01b900460ff16155b801561246257506001600160a01b03851660009081526024602052604090205460ff16155b801561248757506001600160a01b03851660009081526022602052604090205460ff16155b80156124ac57506001600160a01b03841660009081526022602052604090205460ff16155b156124da576005805460ff60a01b1916600160a01b1790556124cc6128bf565b6005805460ff60a01b191690555b600554600160a01b900460ff1615801561250c57506001600160a01b03841660009081526024602052604090205460ff165b801561251a5750600d5460ff165b80156125355750600f546010546125319190613457565b4210155b801561255a57506001600160a01b03851660009081526022602052604090205460ff16155b1561256957612567612b42565b505b6005546001600160a01b03861660009081526022602052604090205460ff600160a01b9092048216159116806125b757506001600160a01b03851660009081526022602052604090205460ff165b156125c0575060005b60008115612805576001600160a01b03861660009081526024602052604090205460ff1680156125f257506000601b54115b156126ef576001600160a01b038716600090815260156020526040902054601d54601c54601e54601b5493158015949061264a576002935060149250601791508161263d8486613457565b6126479190613457565b90505b61265f60646126598c84612cd2565b90612ce5565b95508061266c85886133ef565b6126769190613406565b602060008282546126879190613457565b9091555081905061269884886133ef565b6126a29190613406565b601f60008282546126b39190613457565b909155508190506126c483886133ef565b6126ce9190613406565b602160008282546126df9190613457565b909155506127e795505050505050565b6001600160a01b03871660009081526024602052604090205460ff16801561271957506000601754115b156127e757612738606461265960175488612cd290919063ffffffff16565b90506017546019548261274b91906133ef565b6127559190613406565b602060008282546127669190613457565b9091555050600854600954612786916001600160a01b0316903090611cd9565b60175460185461279690836133ef565b6127a09190613406565b601f60008282546127b19190613457565b9091555050601754601a546127c690836133ef565b6127d09190613406565b602160008282546127e19190613457565b90915550505b80156127f8576127f8873083612cf1565b612802818661350f565b94505b612810878787612cf1565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b3060009081526020819052604081205490506000602154601f546020546128e69190613457565b6128f09190613457565b905060008215806128ff575081155b1561290957505050565b600a8054612916916133ef565b83111561292d57600a805461292a916133ef565b92505b6007546001600160a01b0316600090815260208190526040812054905060006002846020548761295d91906133ef565b6129679190613406565b6129719190613406565b90506000612989836129838885612e46565b90612e46565b90504761299582612e52565b60006129a14783612e46565b905060006129c56129be6002602054612ce590919063ffffffff16565b8990612e46565b905060006129e282612659601f5486612cd290919063ffffffff16565b905060006129ff8361265960215487612cd290919063ffffffff16565b9050600081612a0e848761350f565b612a18919061350f565b60006020819055601f81905560218190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612a75576040519150601f19603f3d011682016040523d82523d6000602084013e612a7a565b606091505b50909a50508715801590612a8e5750600081115b15612adf57612a9d8882613012565b60408051888152602081018390529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b2c576040519150601f19603f3d011682016040523d82523d6000602084013e612b31565b606091505b505050505050505050505050505050565b426010556040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a0823190602401602060405180830381865afa158015612baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd39190613522565b90506000612bf2612710612659600c5485612cd290919063ffffffff16565b90508015612c2757612c277f000000000000000000000000000000000000000000000000000000000000000061dead83612cf1565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c8757600080fd5b505af1158015612c9b573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6000612cde82846133ef565b9392505050565b6000612cde8284613406565b6001600160a01b038316612d175760405162461bcd60e51b8152600401610d8c90613487565b6001600160a01b038216612d3d5760405162461bcd60e51b8152600401610d8c906134cc565b6001600160a01b03831660009081526020819052604090205481811015612db55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d8c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dec908490613457565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e3891815260200190565b60405180910390a350505050565b6000612cde828461350f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e8757612e87613428565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f29919061353b565b81600181518110612f3c57612f3c613428565b60200260200101906001600160a01b031690816001600160a01b031681525050612f87307f000000000000000000000000000000000000000000000000000000000000000084611cd9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612fdc908590600090869030904290600401613558565b600060405180830381600087803b158015612ff657600080fd5b505af115801561300a573d6000803e3d6000fd5b505050505050565b61303d307f000000000000000000000000000000000000000000000000000000000000000084611cd9565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156130cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130f191906135c9565b5050505050565b600060208083528351808285015260005b8181101561312557858101830151858201604001528201613109565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146111b257600080fd5b6000806040838503121561316e57600080fd5b823561317981613146565b946020939093013593505050565b60006020828403121561319957600080fd5b8135612cde81613146565b6000602082840312156131b657600080fd5b5035919050565b6000806000606084860312156131d257600080fd5b83356131dd81613146565b925060208401356131ed81613146565b929592945050506040919091013590565b6000806020838503121561321157600080fd5b823567ffffffffffffffff8082111561322957600080fd5b818501915085601f83011261323d57600080fd5b81358181111561324c57600080fd5b8660208260051b850101111561326157600080fd5b60209290920196919550909350505050565b80151581146111b257600080fd5b60008060006060848603121561329657600080fd5b833592506020840135915060408401356132af81613273565b809150509250925092565b600080604083850312156132cd57600080fd5b82356132d881613146565b915060208301356132e881613273565b809150509250929050565b60008060006060848603121561330857600080fd5b505081359360208301359350604090920135919050565b60006020828403121561333157600080fd5b8135612cde81613273565b6000806040838503121561334f57600080fd5b823561335a81613146565b915060208301356132e881613146565b600181811c9082168061337e57607f821691505b60208210810361339e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d3a57610d3a6133d9565b60008261342357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201613450576134506133d9565b5060010190565b80820180821115610d3a57610d3a6133d9565b60006020828403121561347c57600080fd5b8151612cde81613273565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d3a57610d3a6133d9565b60006020828403121561353457600080fd5b5051919050565b60006020828403121561354d57600080fd5b8151612cde81613146565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135a85784516001600160a01b031683529383019391830191600101613583565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135de57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205c0b5dfa8ce1d4f155a85dc40405e11a2d428021aa271461d6d32879a812ab7864736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106104095760003560e01c80638095d56411610213578063c024666811610123578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610c16578063ed9a48ba14610c2b578063f11a24d314610c4b578063f2fde38b14610c61578063f637434214610c8157600080fd5b8063dd62ed3e14610b84578063de77e94e14610bca578063e2f4560514610be0578063e70ef8a414610bf657600080fd5b8063cf46f24c116100f2578063cf46f24c14610b0c578063d00efb2f14610b22578063d0ac10fb14610b38578063d257b34f14610b4e578063d85ba06314610b6e57600080fd5b8063c024666814610a92578063c17b5b8c14610ab2578063c18bc19514610ad2578063c876d0b914610af257600080fd5b8063a0d82dc5116101a6578063aa4bde2811610175578063aa4bde28146109dd578063b38ef433146109f3578063b62496f514610a13578063bbc0c74214610a43578063bfd7928414610a6257600080fd5b8063a0d82dc514610971578063a457c2d714610987578063a4c82a00146109a7578063a9059cbb146109bd57600080fd5b806395d89b41116101e257806395d89b41146109105780639a7a23d6146109255780639c3b4fdc146109455780639fccce321461095b57600080fd5b80638095d564146108925780638da5cb5b146108b25780638ea5220f146108d0578063924de9b7146108f057600080fd5b80632e82f1a0116103195780636a486a8e116102a157806370a082311161027057806370a08231146107f2578063715018a614610828578063730c18881461083d578063751039fc1461085d5780637571336a1461087257600080fd5b80636a486a8e1461078c5780636ad92803146107a25780636b999053146107b85780636ddd1713146107d857600080fd5b806349bd5a5e116102e857806349bd5a5e146106bf5780634a62bb65146106f35780634fbee1931461071357806350b8deb11461074c578063627752231461076c57600080fd5b80632e82f1a014610654578063313ce5671461066e578063395093511461068a5780633ecfd51e146106aa57600080fd5b80631a8145bb1161039c578063264d26dd1161036b578063264d26dd146105d357806327c8f835146105f35780632912df7914610609578063293230b8146106295780632c3e486c1461063e57600080fd5b80631a8145bb1461055d578063203e727e1461057357806323b872dd14610593578063262d3a7e146105b357600080fd5b80631694505e116103d85780631694505e146104c457806318160ddd146105105780631816467f14610525578063199ffc721461054757600080fd5b806306fdde0314610415578063095ea7b3146104405780630baa9ed61461047057806310d5de531461049457600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610c97565b60405161043791906130f8565b60405180910390f35b34801561044c57600080fd5b5061046061045b36600461315b565b610d29565b6040519015158152602001610437565b34801561047c57600080fd5b50610486600e5481565b604051908152602001610437565b3480156104a057600080fd5b506104606104af366004613187565b60236020526000908152604090205460ff1681565b3480156104d057600080fd5b506104f87f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610437565b34801561051c57600080fd5b50600254610486565b34801561053157600080fd5b50610545610540366004613187565b610d40565b005b34801561055357600080fd5b50610486600c5481565b34801561056957600080fd5b5061048660205481565b34801561057f57600080fd5b5061054561058e3660046131a4565b610db7565b34801561059f57600080fd5b506104606105ae3660046131bd565b610e8c565b3480156105bf57600080fd5b506105456105ce3660046131fe565b610f36565b3480156105df57600080fd5b506008546104f8906001600160a01b031681565b3480156105ff57600080fd5b506104f861dead81565b34801561061557600080fd5b506105456106243660046131a4565b61109f565b34801561063557600080fd5b506105456110da565b34801561064a57600080fd5b50610486600f5481565b34801561066057600080fd5b50600d546104609060ff1681565b34801561067a57600080fd5b5060405160128152602001610437565b34801561069657600080fd5b506104606106a536600461315b565b61111d565b3480156106b657600080fd5b50610545611159565b3480156106cb57600080fd5b506104f87f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f881565b3480156106ff57600080fd5b506012546104609062010000900460ff1681565b34801561071f57600080fd5b5061046061072e366004613187565b6001600160a01b031660009081526022602052604090205460ff1690565b34801561075857600080fd5b506007546104f8906001600160a01b031681565b34801561077857600080fd5b5061054561078736600461315b565b6111b5565b34801561079857600080fd5b50610486601b5481565b3480156107ae57600080fd5b5061048660215481565b3480156107c457600080fd5b506105456107d3366004613187565b611252565b3480156107e457600080fd5b506012546104609060ff1681565b3480156107fe57600080fd5b5061048661080d366004613187565b6001600160a01b031660009081526020819052604090205490565b34801561083457600080fd5b5061054561129d565b34801561084957600080fd5b50610545610858366004613281565b6112d3565b34801561086957600080fd5b506104606113fc565b34801561087e57600080fd5b5061054561088d3660046132ba565b611441565b34801561089e57600080fd5b506105456108ad3660046132f3565b611496565b3480156108be57600080fd5b506005546001600160a01b03166104f8565b3480156108dc57600080fd5b506006546104f8906001600160a01b031681565b3480156108fc57600080fd5b5061054561090b36600461331f565b611531565b34801561091c57600080fd5b5061042a61156e565b34801561093157600080fd5b506105456109403660046132ba565b61157d565b34801561095157600080fd5b5061048660185481565b34801561096757600080fd5b50610486601f5481565b34801561097d57600080fd5b50610486601c5481565b34801561099357600080fd5b506104606109a236600461315b565b61165c565b3480156109b357600080fd5b5061048660105481565b3480156109c957600080fd5b506104606109d836600461315b565b6116f5565b3480156109e957600080fd5b50610486600b5481565b3480156109ff57600080fd5b50610545610a0e366004613187565b611702565b348015610a1f57600080fd5b50610460610a2e366004613187565b60246020526000908152604090205460ff1681565b348015610a4f57600080fd5b5060125461046090610100900460ff1681565b348015610a6e57600080fd5b50610460610a7d366004613187565b60146020526000908152604090205460ff1681565b348015610a9e57600080fd5b50610545610aad3660046132ba565b611772565b348015610abe57600080fd5b50610545610acd3660046132f3565b6117fb565b348015610ade57600080fd5b50610545610aed3660046131a4565b611896565b348015610afe57600080fd5b506016546104609060ff1681565b348015610b1857600080fd5b5061048660095481565b348015610b2e57600080fd5b5061048660115481565b348015610b4457600080fd5b50610486601a5481565b348015610b5a57600080fd5b50610460610b693660046131a4565b61196e565b348015610b7a57600080fd5b5061048660175481565b348015610b9057600080fd5b50610486610b9f36600461333c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bd657600080fd5b50610486601e5481565b348015610bec57600080fd5b50610486600a5481565b348015610c0257600080fd5b50610545610c11366004613187565b611ac0565b348015610c2257600080fd5b50610460611b8a565b348015610c3757600080fd5b50610545610c46366004613187565b611bc7565b348015610c5757600080fd5b5061048660195481565b348015610c6d57600080fd5b50610545610c7c366004613187565b611c41565b348015610c8d57600080fd5b50610486601d5481565b606060038054610ca69061336a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd29061336a565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d36338484611cd9565b5060015b92915050565b6006546001600160a01b0316336001600160a01b031614610d955760405162461bcd60e51b8152600401610d8c9060208082526004908201526310b232bb60e11b604082015260600190565b60405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de15760405162461bcd60e51b8152600401610d8c906133a4565b670de0b6b3a76400006103e8610df660025490565b610e019060016133ef565b610e0b9190613406565b610e159190613406565b811015610e745760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e312560c81b6064820152608401610d8c565b610e8681670de0b6b3a76400006133ef565b60095550565b6000610e99848484611dfd565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f1e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d8c565b610f2b8533858403611cd9565b506001949350505050565b6005546001600160a01b03163314610f605760405162461bcd60e51b8152600401610d8c906133a4565b60005b8181101561109a577f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f86001600160a01b0316838383818110610fa757610fa7613428565b9050602002016020810190610fbc9190613187565b6001600160a01b031603610fcf57600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031683838381811061100b5761100b613428565b90506020020160208101906110209190613187565b6001600160a01b03160361103357600080fd5b60016014600085858581811061104b5761104b613428565b90506020020160208101906110609190613187565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806110928161343e565b915050610f63565b505050565b6005546001600160a01b031633146110c95760405162461bcd60e51b8152600401610d8c906133a4565b6110d48160016133ef565b600f5550565b6005546001600160a01b031633146111045760405162461bcd60e51b8152600401610d8c906133a4565b601280544260105561ffff191661010117905543601155565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d36918590611154908690613457565b611cd9565b6006546001600160a01b0316336001600160a01b03161461117957600080fd5b6006546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156111b2573d6000803e3d6000fd5b50565b6006546001600160a01b0316336001600160a01b0316146111d557600080fd5b6008546040516323b872dd60e01b81526001600160a01b03918216600482015230602482015260448101839052908316906323b872dd906064016020604051808303816000875af115801561122e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109a919061346a565b6005546001600160a01b0316331461127c5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6005546001600160a01b031633146112c75760405162461bcd60e51b8152600401610d8c906133a4565b6112d16000612819565b565b6005546001600160a01b031633146112fd5760405162461bcd60e51b8152600401610d8c906133a4565b61025883101561136b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610d8c565b6103e8821115801561137b575060015b6113e05760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610d8c565b600f92909255600c55600d805460ff1916911515919091179055565b6005546000906001600160a01b031633146114295760405162461bcd60e51b8152600401610d8c906133a4565b6012805462ff00001916905560025460095550600190565b6005546001600160a01b0316331461146b5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114c05760405162461bcd60e51b8152600401610d8c906133a4565b60188390556019829055601a819055806114da8385613457565b6114e49190613457565b6017819055600a101561109a5760405162461bcd60e51b8152602060048201526015602482015274746f74616c2066656520313025206f72206c65737360581b6044820152606401610d8c565b6005546001600160a01b0316331461155b5760405162461bcd60e51b8152600401610d8c906133a4565b6012805460ff1916911515919091179055565b606060048054610ca69061336a565b6005546001600160a01b031633146115a75760405162461bcd60e51b8152600401610d8c906133a4565b7f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f86001600160a01b0316826001600160a01b03160361164e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d8c565b611658828261286b565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d8c565b6116eb3385858403611cd9565b5060019392505050565b6000610d36338484611dfd565b6007546001600160a01b0316336001600160a01b0316146117505760405162461bcd60e51b815260206004820152600860248201526710bc3a3930b232b960c11b6044820152606401610d8c565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461179c5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118255760405162461bcd60e51b8152600401610d8c906133a4565b601c839055601d829055601e8190558061183f8385613457565b6118499190613457565b601b819055600a101561109a5760405162461bcd60e51b8152602060048201526015602482015274746f74616c2066656520313025206f72206c65737360581b6044820152606401610d8c565b6005546001600160a01b031633146118c05760405162461bcd60e51b8152600401610d8c906133a4565b670de0b6b3a76400006103e86118d560025490565b6118e09060056133ef565b6118ea9190613406565b6118f49190613406565b8110156119565760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610d8c565b61196881670de0b6b3a76400006133ef565b600b5550565b6005546000906001600160a01b0316331461199b5760405162461bcd60e51b8152600401610d8c906133a4565b620186a06119a860025490565b6119b39060016133ef565b6119bd9190613406565b821015611a2a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d8c565b6103e8611a3660025490565b611a419060056133ef565b611a4b9190613406565b821115611ab75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610d8c565b50600a55600190565b6005546001600160a01b03163314611aea5760405162461bcd60e51b8152600401610d8c906133a4565b7f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f86001600160a01b0316816001600160a01b031603611b2857600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b031603611b6657600080fd5b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6005546000906001600160a01b03163314611bb75760405162461bcd60e51b8152600401610d8c906133a4565b506016805460ff19169055600190565b6008546001600160a01b0316336001600160a01b031614611c1f5760405162461bcd60e51b815260206004820152601260248201527110b634b8b4b23ab4ba3ca932b1b2b4bb32b960711b6044820152606401610d8c565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c6b5760405162461bcd60e51b8152600401610d8c906133a4565b6001600160a01b038116611cd05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d8c565b6111b281612819565b6001600160a01b038316611d3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d8c565b6001600160a01b038216611d9c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d8c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e235760405162461bcd60e51b8152600401610d8c90613487565b6001600160a01b038216611e495760405162461bcd60e51b8152600401610d8c906134cc565b60008111611eab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d8c565b6001600160a01b03831660009081526014602052604090205460ff16158015611eed57506001600160a01b03821660009081526014602052604090205460ff16155b611f395760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610d8c565b60125462010000900460ff1615612401576005546001600160a01b03848116911614801590611f7657506005546001600160a01b03838116911614155b8015611f8d57506001600160a01b03821661dead14155b8015611fa35750600554600160a01b900460ff16155b1561240157601254610100900460ff1661203b576001600160a01b03831660009081526022602052604090205460ff1680611ff657506001600160a01b03821660009081526022602052604090205460ff165b61203b5760405162461bcd60e51b81526020600482015260166024820152753a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d8c565b60165460ff1615612182576005546001600160a01b0383811691161480159061209657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156120d457507f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f86001600160a01b0316826001600160a01b031614155b156121825732600090815260136020526040902054431161216f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610d8c565b3260009081526013602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff1680156121c357506001600160a01b03821660009081526023602052604090205460ff16155b156122c8576009548111156122305760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610d8c565b600b546001600160a01b0383166000908152602081905260409020546122569083613457565b111561229a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d8c565b600e546011546122aa9190613457565b43116122c3573260009081526015602052604090204390555b612401565b6001600160a01b03821660009081526024602052604090205460ff16801561230957506001600160a01b03831660009081526023602052604090205460ff16155b15612377576009548111156122c35760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610d8c565b6001600160a01b03821660009081526023602052604090205460ff1661240157600b546001600160a01b0383166000908152602081905260409020546123bd9083613457565b11156124015760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610d8c565b30600090815260208190526040902054600a5481108015908190612427575060125460ff165b801561243d5750600554600160a01b900460ff16155b801561246257506001600160a01b03851660009081526024602052604090205460ff16155b801561248757506001600160a01b03851660009081526022602052604090205460ff16155b80156124ac57506001600160a01b03841660009081526022602052604090205460ff16155b156124da576005805460ff60a01b1916600160a01b1790556124cc6128bf565b6005805460ff60a01b191690555b600554600160a01b900460ff1615801561250c57506001600160a01b03841660009081526024602052604090205460ff165b801561251a5750600d5460ff165b80156125355750600f546010546125319190613457565b4210155b801561255a57506001600160a01b03851660009081526022602052604090205460ff16155b1561256957612567612b42565b505b6005546001600160a01b03861660009081526022602052604090205460ff600160a01b9092048216159116806125b757506001600160a01b03851660009081526022602052604090205460ff165b156125c0575060005b60008115612805576001600160a01b03861660009081526024602052604090205460ff1680156125f257506000601b54115b156126ef576001600160a01b038716600090815260156020526040902054601d54601c54601e54601b5493158015949061264a576002935060149250601791508161263d8486613457565b6126479190613457565b90505b61265f60646126598c84612cd2565b90612ce5565b95508061266c85886133ef565b6126769190613406565b602060008282546126879190613457565b9091555081905061269884886133ef565b6126a29190613406565b601f60008282546126b39190613457565b909155508190506126c483886133ef565b6126ce9190613406565b602160008282546126df9190613457565b909155506127e795505050505050565b6001600160a01b03871660009081526024602052604090205460ff16801561271957506000601754115b156127e757612738606461265960175488612cd290919063ffffffff16565b90506017546019548261274b91906133ef565b6127559190613406565b602060008282546127669190613457565b9091555050600854600954612786916001600160a01b0316903090611cd9565b60175460185461279690836133ef565b6127a09190613406565b601f60008282546127b19190613457565b9091555050601754601a546127c690836133ef565b6127d09190613406565b602160008282546127e19190613457565b90915550505b80156127f8576127f8873083612cf1565b612802818661350f565b94505b612810878787612cf1565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b3060009081526020819052604081205490506000602154601f546020546128e69190613457565b6128f09190613457565b905060008215806128ff575081155b1561290957505050565b600a8054612916916133ef565b83111561292d57600a805461292a916133ef565b92505b6007546001600160a01b0316600090815260208190526040812054905060006002846020548761295d91906133ef565b6129679190613406565b6129719190613406565b90506000612989836129838885612e46565b90612e46565b90504761299582612e52565b60006129a14783612e46565b905060006129c56129be6002602054612ce590919063ffffffff16565b8990612e46565b905060006129e282612659601f5486612cd290919063ffffffff16565b905060006129ff8361265960215487612cd290919063ffffffff16565b9050600081612a0e848761350f565b612a18919061350f565b60006020819055601f81905560218190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612a75576040519150601f19603f3d011682016040523d82523d6000602084013e612a7a565b606091505b50909a50508715801590612a8e5750600081115b15612adf57612a9d8882613012565b60408051888152602081018390529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b2c576040519150601f19603f3d011682016040523d82523d6000602084013e612b31565b606091505b505050505050505050505050505050565b426010556040516370a0823160e01b81526001600160a01b037f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f8166004820152600090819030906370a0823190602401602060405180830381865afa158015612baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd39190613522565b90506000612bf2612710612659600c5485612cd290919063ffffffff16565b90508015612c2757612c277f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f861dead83612cf1565b60007f0000000000000000000000006135eb61a963cf1d0ebf5daf7922fa5be97610f89050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c8757600080fd5b505af1158015612c9b573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6000612cde82846133ef565b9392505050565b6000612cde8284613406565b6001600160a01b038316612d175760405162461bcd60e51b8152600401610d8c90613487565b6001600160a01b038216612d3d5760405162461bcd60e51b8152600401610d8c906134cc565b6001600160a01b03831660009081526020819052604090205481811015612db55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d8c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612dec908490613457565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e3891815260200190565b60405180910390a350505050565b6000612cde828461350f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e8757612e87613428565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f29919061353b565b81600181518110612f3c57612f3c613428565b60200260200101906001600160a01b031690816001600160a01b031681525050612f87307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611cd9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612fdc908590600090869030904290600401613558565b600060405180830381600087803b158015612ff657600080fd5b505af115801561300a573d6000803e3d6000fd5b505050505050565b61303d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611cd9565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156130cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130f191906135c9565b5050505050565b600060208083528351808285015260005b8181101561312557858101830151858201604001528201613109565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146111b257600080fd5b6000806040838503121561316e57600080fd5b823561317981613146565b946020939093013593505050565b60006020828403121561319957600080fd5b8135612cde81613146565b6000602082840312156131b657600080fd5b5035919050565b6000806000606084860312156131d257600080fd5b83356131dd81613146565b925060208401356131ed81613146565b929592945050506040919091013590565b6000806020838503121561321157600080fd5b823567ffffffffffffffff8082111561322957600080fd5b818501915085601f83011261323d57600080fd5b81358181111561324c57600080fd5b8660208260051b850101111561326157600080fd5b60209290920196919550909350505050565b80151581146111b257600080fd5b60008060006060848603121561329657600080fd5b833592506020840135915060408401356132af81613273565b809150509250925092565b600080604083850312156132cd57600080fd5b82356132d881613146565b915060208301356132e881613273565b809150509250929050565b60008060006060848603121561330857600080fd5b505081359360208301359350604090920135919050565b60006020828403121561333157600080fd5b8135612cde81613273565b6000806040838503121561334f57600080fd5b823561335a81613146565b915060208301356132e881613146565b600181811c9082168061337e57607f821691505b60208210810361339e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d3a57610d3a6133d9565b60008261342357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201613450576134506133d9565b5060010190565b80820180821115610d3a57610d3a6133d9565b60006020828403121561347c57600080fd5b8151612cde81613273565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d3a57610d3a6133d9565b60006020828403121561353457600080fd5b5051919050565b60006020828403121561354d57600080fd5b8151612cde81613146565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135a85784516001600160a01b031683529383019391830191600101613583565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135de57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205c0b5dfa8ce1d4f155a85dc40405e11a2d428021aa271461d6d32879a812ab7864736f6c63430008110033

Deployed Bytecode Sourcemap

29219:20583:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14002:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16169:169;;;;;;;;;;-1:-1:-1;16169:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;16169:169:0;1023:187:1;29852:33:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;29852:33:0;1215:177:1;30939:63:0;;;;;;;;;;-1:-1:-1;30939:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29303:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;29303:51:0;1649:230:1;15122:108:0;;;;;;;;;;-1:-1:-1;15210:12:0;;15122:108;;38462:157;;;;;;;;;;-1:-1:-1;38462:157:0;;;;;:::i;:::-;;:::i;:::-;;29770:36;;;;;;;;;;;;;;;;30739:33;;;;;;;;;;;;;;;;35246:259;;;;;;;;;;-1:-1:-1;35246:259:0;;;;;:::i;:::-;;:::i;16820:492::-;;;;;;;;;;-1:-1:-1;16820:492:0;;;;;:::i;:::-;;:::i;37345:311::-;;;;;;;;;;-1:-1:-1;37345:311:0;;;;;:::i;:::-;;:::i;29616:32::-;;;;;;;;;;-1:-1:-1;29616:32:0;;;;-1:-1:-1;;;;;29616:32:0;;;29406:53;;;;;;;;;;;;29452:6;29406:53;;35513:121;;;;;;;;;;-1:-1:-1;35513:121:0;;;;;:::i;:::-;;:::i;34071:191::-;;;;;;;;;;;;;:::i;29892:45::-;;;;;;;;;;;;;;;;29813:32;;;;;;;;;;-1:-1:-1;29813:32:0;;;;;;;;33880:100;;;;;;;;;;-1:-1:-1;33880:100:0;;29503:2;3500:36:1;;3488:2;3473:18;33880:100:0;3358:184:1;17721:215:0;;;;;;;;;;-1:-1:-1;17721:215:0;;;;;:::i;:::-;;:::i;48856:145::-;;;;;;;;;;;;;:::i;29361:38::-;;;;;;;;;;;;;;;30093:33;;;;;;;;;;-1:-1:-1;30093:33:0;;;;;;;;;;;39087:126;;;;;;;;;;-1:-1:-1;39087:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39177:28:0;39153:4;39177:28;;;:19;:28;;;;;;;;;39087:126;29573:36;;;;;;;;;;-1:-1:-1;29573:36:0;;;;-1:-1:-1;;;;;29573:36:0;;;48087:198;;;;;;;;;;-1:-1:-1;48087:198:0;;;;;:::i;:::-;;:::i;30554:28::-;;;;;;;;;;;;;;;;30779:39;;;;;;;;;;;;;;;;37664:92;;;;;;;;;;-1:-1:-1;37664:92:0;;;;;:::i;:::-;;:::i;30015:31::-;;;;;;;;;;-1:-1:-1;30015:31:0;;;;;;;;15293:127;;;;;;;;;;-1:-1:-1;15293:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15394:18:0;15367:7;15394:18;;;;;;;;;;;;15293:127;11519:103;;;;;;;;;;;;;:::i;48293:555::-;;;;;;;;;;-1:-1:-1;48293:555:0;;;;;:::i;:::-;;:::i;34314:160::-;;;;;;;;;;;;;:::i;35918:167::-;;;;;;;;;;-1:-1:-1;35918:167:0;;;;;:::i;:::-;;:::i;36289:419::-;;;;;;;;;;-1:-1:-1;36289:419:0;;;;;:::i;:::-;;:::i;10868:87::-;;;;;;;;;;-1:-1:-1;10941:6:0;;-1:-1:-1;;;;;10941:6:0;10868:87;;29542:24;;;;;;;;;;-1:-1:-1;29542:24:0;;;;-1:-1:-1;;;;;29542:24:0;;;36181:100;;;;;;;;;;-1:-1:-1;36181:100:0;;;;;:::i;:::-;;:::i;14221:104::-;;;;;;;;;;;;;:::i;37954:304::-;;;;;;;;;;-1:-1:-1;37954:304:0;;;;;:::i;:::-;;:::i;30441:24::-;;;;;;;;;;;;;;;;30705:27;;;;;;;;;;;;;;;;30589:25;;;;;;;;;;;;;;;;18439:413;;;;;;;;;;-1:-1:-1;18439:413:0;;;;;:::i;:::-;;:::i;29944:29::-;;;;;;;;;;;;;;;;15633:175;;;;;;;;;;-1:-1:-1;15633:175:0;;;;;:::i;:::-;;:::i;29731:30::-;;;;;;;;;;;;;;;;38627:230;;;;;;;;;;-1:-1:-1;38627:230:0;;;;;:::i;:::-;;:::i;31160:57::-;;;;;;;;;;-1:-1:-1;31160:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30053:33;;;;;;;;;;-1:-1:-1;30053:33:0;;;;;;;;;;;30261:36;;;;;;;;;;-1:-1:-1;30261:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37764:182;;;;;;;;;;-1:-1:-1;37764:182:0;;;;;:::i;:::-;;:::i;36716:428::-;;;;;;;;;;-1:-1:-1;36716:428:0;;;;;:::i;:::-;;:::i;35642:268::-;;;;;;;;;;-1:-1:-1;35642:268:0;;;;;:::i;:::-;;:::i;30359:39::-;;;;;;;;;;-1:-1:-1;30359:39:0;;;;;;;;29657:27;;;;;;;;;;;;;;;;29980:26;;;;;;;;;;;;;;;;30509:36;;;;;;;;;;;;;;;;34741:497;;;;;;;;;;-1:-1:-1;34741:497:0;;;;;:::i;:::-;;:::i;30407:27::-;;;;;;;;;;;;;;;;15871:151;;;;;;;;;;-1:-1:-1;15871:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;15987:18:0;;;15960:7;15987:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15871:151;30659:37;;;;;;;;;;;;;;;;29691:33;;;;;;;;;;;;;;;;37152:185;;;;;;;;;;-1:-1:-1;37152:185:0;;;;;:::i;:::-;;:::i;34536:135::-;;;;;;;;;;;;;:::i;38865:214::-;;;;;;;;;;-1:-1:-1;38865:214:0;;;;;:::i;:::-;;:::i;30472:30::-;;;;;;;;;;;;;;;;11777:201;;;;;;;;;;-1:-1:-1;11777:201:0;;;;;:::i;:::-;;:::i;30621:31::-;;;;;;;;;;;;;;;;14002:100;14056:13;14089:5;14082:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14002:100;:::o;16169:169::-;16252:4;16269:39;10322:10;16292:7;16301:6;16269:8;:39::i;:::-;-1:-1:-1;16326:4:0;16169:169;;;;;:::o;38462:157::-;38558:9;;-1:-1:-1;;;;;38558:9:0;10322:10;-1:-1:-1;;;;;38542:25:0;;38534:42;;;;-1:-1:-1;;;38534:42:0;;;;;;5986:2:1;5968:21;;;6025:1;6005:18;;;5998:29;-1:-1:-1;;;6058:2:1;6043:18;;6036:34;6102:2;6087:18;;5784:327;38534:42:0;;;;;;;;;38587:9;:24;;-1:-1:-1;;;;;;38587:24:0;-1:-1:-1;;;;;38587:24:0;;;;;;;;;;38462:157::o;35246:259::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;35383:4:::1;35375;35354:13;15210:12:::0;;;15122:108;35354:13:::1;:17;::::0;35370:1:::1;35354:17;:::i;:::-;35353:26;;;;:::i;:::-;35352:35;;;;:::i;:::-;35342:6;:45;;35320:134;;;::::0;-1:-1:-1;;;35320:134:0;;7206:2:1;35320:134:0::1;::::0;::::1;7188:21:1::0;7245:2;7225:18;;;7218:30;7284:34;7264:18;;;7257:62;-1:-1:-1;;;7335:18:1;;;7328:37;7382:19;;35320:134:0::1;7004:403:1::0;35320:134:0::1;35480:17;:6:::0;35490::::1;35480:17;:::i;:::-;35465:12;:32:::0;-1:-1:-1;35246:259:0:o;16820:492::-;16960:4;16977:36;16987:6;16995:9;17006:6;16977:9;:36::i;:::-;-1:-1:-1;;;;;17053:19:0;;17026:24;17053:19;;;:11;:19;;;;;;;;10322:10;17053:33;;;;;;;;17105:26;;;;17097:79;;;;-1:-1:-1;;;17097:79:0;;7614:2:1;17097:79:0;;;7596:21:1;7653:2;7633:18;;;7626:30;7692:34;7672:18;;;7665:62;-1:-1:-1;;;7743:18:1;;;7736:38;7791:19;;17097:79:0;7412:404:1;17097:79:0;17212:57;17221:6;10322:10;17262:6;17243:16;:25;17212:8;:57::i;:::-;-1:-1:-1;17300:4:0;;16820:492;-1:-1:-1;;;;16820:492:0:o;37345:311::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;37433:9:::1;37429:220;37448:19:::0;;::::1;37429:220;;;37520:13;-1:-1:-1::0;;;;;37497:37:0::1;:8;;37506:1;37497:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37497:37:0::1;::::0;37489:46:::1;;;::::0;::::1;;37581:15;-1:-1:-1::0;;;;;37558:39:0::1;:8;;37567:1;37558:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37558:39:0::1;::::0;37550:48:::1;;;::::0;::::1;;37633:4;37613;:17;37618:8;;37627:1;37618:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37613:17:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37613:17:0;:24;;-1:-1:-1;;37613:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37469:3;::::1;::::0;::::1;:::i;:::-;;;;37429:220;;;;37345:311:::0;;:::o;35513:121::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;35608:18:::1;:6:::0;35617:9:::1;35608:18;:::i;:::-;35590:15;:36:::0;-1:-1:-1;35513:121:0:o;34071:191::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;34125:13:::1;:20:::0;;34173:15:::1;34156:14;:32:::0;-1:-1:-1;;34199:18:0;;;;;34242:12:::1;34228:11;:26:::0;34071:191::o;17721:215::-;10322:10;17809:4;17858:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17858:34:0;;;;;;;;;;17809:4;;17826:80;;17849:7;;17858:47;;17895:10;;17858:47;:::i;:::-;17826:8;:80::i;48856:145::-;48922:9;;-1:-1:-1;;;;;48922:9:0;10322:10;-1:-1:-1;;;;;48906:25:0;;48898:34;;;;;;48951:9;;48943:50;;-1:-1:-1;;;;;48951:9:0;;;;48971:21;48943:50;;;;;48951:9;48943:50;48951:9;48943:50;48971:21;48951:9;48943:50;;;;;;;;;;;;;;;;;;;;;48856:145::o;48087:198::-;48188:9;;-1:-1:-1;;;;;48188:9:0;10322:10;-1:-1:-1;;;;;48172:25:0;;48163:35;;;;;;48236:17;;48209:68;;-1:-1:-1;;;48209:68:0;;-1:-1:-1;;;;;48236:17:0;;;48209:68;;;8463:34:1;48263:4:0;8513:18:1;;;8506:43;8565:18;;;8558:34;;;48209:26:0;;;;;;8398:18:1;;48209:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37664:92::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37728:12:0::1;37743:5;37728:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;37728:20:0::1;::::0;;37664:92::o;11519:103::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;11584:30:::1;11611:1;11584:18;:30::i;:::-;11519:103::o:0;48293:555::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;48495:3:::1;48472:19;:26;;48450:127;;;::::0;-1:-1:-1;;;48450:127:0;;9055:2:1;48450:127:0::1;::::0;::::1;9037:21:1::0;9094:2;9074:18;;;9067:30;9133:34;9113:18;;;9106:62;-1:-1:-1;;;9184:18:1;;;9177:49;9243:19;;48450:127:0::1;8853:415:1::0;48450:127:0::1;48622:4;48610:8;:16;;:33;;;;-1:-1:-1::0;48630:13:0;48610:33:::1;48588:131;;;::::0;-1:-1:-1;;;48588:131:0;;9475:2:1;48588:131:0::1;::::0;::::1;9457:21:1::0;9514:2;9494:18;;;9487:30;9553:34;9533:18;;;9526:62;-1:-1:-1;;;9604:18:1;;;9597:46;9660:19;;48588:131:0::1;9273:412:1::0;48588:131:0::1;48730:15;:37:::0;;;;48778:16:::1;:27:::0;48816:13:::1;:24:::0;;-1:-1:-1;;48816:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48293:555::o;34314:160::-;10941:6;;34366:4;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;34383:14:::1;:22:::0;;-1:-1:-1;;34383:22:0::1;::::0;;15210:12;;34416::::1;:28:::0;-1:-1:-1;34462:4:0::1;34314:160:::0;:::o;35918:167::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36031:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36031:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35918:167::o;36289:419::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;36445:9:::1;:19:::0;;;36475:15:::1;:31:::0;;;36517:21:::1;:43:::0;;;36541:19;36586:27:::1;36493:13:::0;36457:7;36586:27:::1;:::i;:::-;:51;;;;:::i;:::-;36571:12;:66:::0;;;36672:2:::1;-1:-1:-1::0;36656:18:0::1;36648:52;;;::::0;-1:-1:-1;;;36648:52:0;;9892:2:1;36648:52:0::1;::::0;::::1;9874:21:1::0;9931:2;9911:18;;;9904:30;-1:-1:-1;;;9950:18:1;;;9943:51;10011:18;;36648:52:0::1;9690:345:1::0;36181:100:0;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;36252:11:::1;:21:::0;;-1:-1:-1;;36252:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36181:100::o;14221:104::-;14277:13;14310:7;14303:14;;;;;:::i;37954:304::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;38098:13:::1;-1:-1:-1::0;;;;;38090:21:0::1;:4;-1:-1:-1::0;;;;;38090:21:0::1;::::0;38068:128:::1;;;::::0;-1:-1:-1;;;38068:128:0;;10242:2:1;38068:128:0::1;::::0;::::1;10224:21:1::0;10281:2;10261:18;;;10254:30;10320:34;10300:18;;;10293:62;10391:27;10371:18;;;10364:55;10436:19;;38068:128:0::1;10040:421:1::0;38068:128:0::1;38209:41;38238:4;38244:5;38209:28;:41::i;:::-;37954:304:::0;;:::o;18439:413::-;10322:10;18532:4;18576:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18576:34:0;;;;;;;;;;18629:35;;;;18621:85;;;;-1:-1:-1;;;18621:85:0;;10668:2:1;18621:85:0;;;10650:21:1;10707:2;10687:18;;;10680:30;10746:34;10726:18;;;10719:62;-1:-1:-1;;;10797:18:1;;;10790:35;10842:19;;18621:85:0;10466:401:1;18621:85:0;18742:67;10322:10;18765:7;18793:15;18774:16;:34;18742:8;:67::i;:::-;-1:-1:-1;18840:4:0;;18439:413;-1:-1:-1;;;18439:413:0:o;15633:175::-;15719:4;15736:42;10322:10;15760:9;15771:6;15736:9;:42::i;38627:230::-;38756:21;;-1:-1:-1;;;;;38756:21:0;10322:10;-1:-1:-1;;;;;38740:37:0;;38732:58;;;;-1:-1:-1;;;38732:58:0;;11074:2:1;38732:58:0;;;11056:21:1;11113:1;11093:18;;;11086:29;-1:-1:-1;;;11131:18:1;;;11124:38;11179:18;;38732:58:0;10872:331:1;38732:58:0;38801:21;:48;;-1:-1:-1;;;;;;38801:48:0;-1:-1:-1;;;;;38801:48:0;;;;;;;;;;38627:230::o;37764:182::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37849:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37849:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37904:34;;1163:41:1;;;37904:34:0::1;::::0;1136:18:1;37904:34:0::1;;;;;;;37764:182:::0;;:::o;36716:428::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;36873:10:::1;:20:::0;;;36904:16:::1;:32:::0;;;36947:22:::1;:44:::0;;;36972:19;37018:29:::1;36923:13:::0;36886:7;37018:29:::1;:::i;:::-;:54;;;;:::i;:::-;37002:13;:70:::0;;;37108:2:::1;-1:-1:-1::0;37091:19:0::1;37083:53;;;::::0;-1:-1:-1;;;37083:53:0;;9892:2:1;37083:53:0::1;::::0;::::1;9874:21:1::0;9931:2;9911:18;;;9904:30;-1:-1:-1;;;9950:18:1;;;9943:51;10011:18;;37083:53:0::1;9690:345:1::0;35642:268:0;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;35782:4:::1;35774;35753:13;15210:12:::0;;;15122:108;35753:13:::1;:17;::::0;35769:1:::1;35753:17;:::i;:::-;35752:26;;;;:::i;:::-;35751:35;;;;:::i;:::-;35741:6;:45;;35719:137;;;::::0;-1:-1:-1;;;35719:137:0;;11410:2:1;35719:137:0::1;::::0;::::1;11392:21:1::0;11449:2;11429:18;;;11422:30;11488:34;11468:18;;;11461:62;-1:-1:-1;;;11539:18:1;;;11532:40;11589:19;;35719:137:0::1;11208:406:1::0;35719:137:0::1;35885:17;:6:::0;35895::::1;35885:17;:::i;:::-;35867:15;:35:::0;-1:-1:-1;35642:268:0:o;34741:497::-;10941:6;;34849:4;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;34928:6:::1;34907:13;15210:12:::0;;;15122:108;34907:13:::1;:17;::::0;34923:1:::1;34907:17;:::i;:::-;34906:28;;;;:::i;:::-;34893:9;:41;;34871:144;;;::::0;-1:-1:-1;;;34871:144:0;;11821:2:1;34871:144:0::1;::::0;::::1;11803:21:1::0;11860:2;11840:18;;;11833:30;11899:34;11879:18;;;11872:62;-1:-1:-1;;;11950:18:1;;;11943:51;12011:19;;34871:144:0::1;11619:417:1::0;34871:144:0::1;35083:4;35062:13;15210:12:::0;;;15122:108;35062:13:::1;:17;::::0;35078:1:::1;35062:17;:::i;:::-;35061:26;;;;:::i;:::-;35048:9;:39;;35026:141;;;::::0;-1:-1:-1;;;35026:141:0;;12243:2:1;35026:141:0::1;::::0;::::1;12225:21:1::0;12282:2;12262:18;;;12255:30;12321:34;12301:18;;;12294:62;-1:-1:-1;;;12372:18:1;;;12365:50;12432:19;;35026:141:0::1;12041:416:1::0;35026:141:0::1;-1:-1:-1::0;35178:18:0::1;:30:::0;35226:4:::1;::::0;34741:497::o;37152:185::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;37234:13:::1;-1:-1:-1::0;;;;;37219:29:0::1;:3;-1:-1:-1::0;;;;;37219:29:0::1;::::0;37211:38:::1;;;::::0;::::1;;37283:15;-1:-1:-1::0;;;;;37268:31:0::1;:3;-1:-1:-1::0;;;;;37268:31:0::1;::::0;37260:40:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;37313:9:0::1;;::::0;;;:4:::1;:9;::::0;;;;:16;;-1:-1:-1;;37313:16:0::1;37325:4;37313:16;::::0;;37152:185::o;34536:135::-;10941:6;;34596:4;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;-1:-1:-1;34613:20:0::1;:28:::0;;-1:-1:-1;;34613:28:0::1;::::0;;;34536:135;:::o;38865:214::-;38983:17;;-1:-1:-1;;;;;38983:17:0;10322:10;-1:-1:-1;;;;;38967:33:0;;38959:64;;;;-1:-1:-1;;;38959:64:0;;12664:2:1;38959:64:0;;;12646:21:1;12703:2;12683:18;;;12676:30;-1:-1:-1;;;12722:18:1;;;12715:48;12780:18;;38959:64:0;12462:342:1;38959:64:0;39034:17;:37;;-1:-1:-1;;;;;;39034:37:0;-1:-1:-1;;;;;39034:37:0;;;;;;;;;;38865:214::o;11777:201::-;10941:6;;-1:-1:-1;;;;;10941:6:0;10322:10;11088:23;11080:68;;;;-1:-1:-1;;;11080:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11866:22:0;::::1;11858:73;;;::::0;-1:-1:-1;;;11858:73:0;;13011:2:1;11858:73:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;13089:34;13069:18;;;13062:62;-1:-1:-1;;;13140:18:1;;;13133:36;13186:19;;11858:73:0::1;12809:402:1::0;11858:73:0::1;11942:28;11961:8;11942:18;:28::i;22123:380::-:0;-1:-1:-1;;;;;22259:19:0;;22251:68;;;;-1:-1:-1;;;22251:68:0;;13418:2:1;22251:68:0;;;13400:21:1;13457:2;13437:18;;;13430:30;13496:34;13476:18;;;13469:62;-1:-1:-1;;;13547:18:1;;;13540:34;13591:19;;22251:68:0;13216:400:1;22251:68:0;-1:-1:-1;;;;;22338:21:0;;22330:68;;;;-1:-1:-1;;;22330:68:0;;13823:2:1;22330:68:0;;;13805:21:1;13862:2;13842:18;;;13835:30;13901:34;13881:18;;;13874:62;-1:-1:-1;;;13952:18:1;;;13945:32;13994:19;;22330:68:0;13621:398:1;22330:68:0;-1:-1:-1;;;;;22411:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22463:32;;1361:25:1;;;22463:32:0;;1334:18:1;22463:32:0;;;;;;;22123:380;;;:::o;39221:5806::-;-1:-1:-1;;;;;39353:18:0;;39345:68;;;;-1:-1:-1;;;39345:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39432:16:0;;39424:64;;;;-1:-1:-1;;;39424:64:0;;;;;;;:::i;:::-;39516:1;39507:6;:10;39499:64;;;;-1:-1:-1;;;39499:64:0;;15036:2:1;39499:64:0;;;15018:21:1;15075:2;15055:18;;;15048:30;15114:34;15094:18;;;15087:62;-1:-1:-1;;;15165:18:1;;;15158:39;15214:19;;39499:64:0;14834:405:1;39499:64:0;-1:-1:-1;;;;;39583:10:0;;;;;;:4;:10;;;;;;;;39582:11;:24;;;;-1:-1:-1;;;;;;39598:8:0;;;;;;:4;:8;;;;;;;;39597:9;39582:24;39574:65;;;;-1:-1:-1;;;39574:65:0;;15446:2:1;39574:65:0;;;15428:21:1;15485:2;15465:18;;;15458:30;15524;15504:18;;;15497:58;15572:18;;39574:65:0;15244:352:1;39574:65:0;39656:14;;;;;;;39652:2589;;;10941:6;;-1:-1:-1;;;;;39709:15:0;;;10941:6;;39709:15;;;;:49;;-1:-1:-1;10941:6:0;;-1:-1:-1;;;;;39745:13:0;;;10941:6;;39745:13;;39709:49;:91;;;;-1:-1:-1;;;;;;39779:21:0;;39793:6;39779:21;;39709:91;:121;;;;-1:-1:-1;39822:8:0;;-1:-1:-1;;;39822:8:0;;;;39821:9;39709:121;39687:2543;;;39870:13;;;;;;;39865:223;;-1:-1:-1;;;;;39942:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;39971:23:0;;;;;;:19;:23;;;;;;;;39942:52;39908:160;;;;-1:-1:-1;;;39908:160:0;;15803:2:1;39908:160:0;;;15785:21:1;15842:2;15822:18;;;15815:30;-1:-1:-1;;;15861:18:1;;;15854:52;15923:18;;39908:160:0;15601:346:1;39908:160:0;40244:20;;;;40240:641;;;10941:6;;-1:-1:-1;;;;;40319:13:0;;;10941:6;;40319:13;;;;:72;;;40375:15;-1:-1:-1;;;;;40361:30:0;:2;-1:-1:-1;;;;;40361:30:0;;;40319:72;:129;;;;;40434:13;-1:-1:-1;;;;;40420:28:0;:2;-1:-1:-1;;;;;40420:28:0;;;40319:129;40289:573;;;40566:9;40537:39;;;;:28;:39;;;;;;40612:12;-1:-1:-1;40499:258:0;;;;-1:-1:-1;;;40499:258:0;;16154:2:1;40499:258:0;;;16136:21:1;16193:2;16173:18;;;16166:30;16232:34;16212:18;;;16205:62;16303:34;16283:18;;;16276:62;-1:-1:-1;;;16354:19:1;;;16347:40;16404:19;;40499:258:0;15952:477:1;40499:258:0;40813:9;40784:39;;;;:28;:39;;;;;40826:12;40784:54;;40289:573;-1:-1:-1;;;;;40955:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;41012:35:0;;;;;;:31;:35;;;;;;;;41011:36;40955:92;40929:1286;;;41134:12;;41124:6;:22;;41090:153;;;;-1:-1:-1;;;41090:153:0;;16636:2:1;41090:153:0;;;16618:21:1;16675:2;16655:18;;;16648:30;16714:34;16694:18;;;16687:62;-1:-1:-1;;;16765:18:1;;;16758:43;16818:19;;41090:153:0;16434:409:1;41090:153:0;41326:15;;-1:-1:-1;;;;;15394:18:0;;15367:7;15394:18;;;;;;;;;;;41300:22;;:6;:22;:::i;:::-;:41;;41266:146;;;;-1:-1:-1;;;41266:146:0;;17050:2:1;41266:146:0;;;17032:21:1;17089:2;17069:18;;;17062:30;-1:-1:-1;;;17108:18:1;;;17101:49;17167:18;;41266:146:0;16848:343:1;41266:146:0;41470:14;;41456:11;;:28;;;;:::i;:::-;41440:12;:44;41437:135;;41523:9;41513:20;;;;:9;:20;;;;;41536:12;41513:35;;41437:135;40929:1286;;;-1:-1:-1;;;;;41669:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;41724:37:0;;;;;;:31;:37;;;;;;;;41723:38;41669:92;41643:572;;;41848:12;;41838:6;:22;;41804:154;;;;-1:-1:-1;;;41804:154:0;;17398:2:1;41804:154:0;;;17380:21:1;17437:2;17417:18;;;17410:30;17476:34;17456:18;;;17449:62;-1:-1:-1;;;17527:18:1;;;17520:44;17581:19;;41804:154:0;17196:410:1;41643:572:0;-1:-1:-1;;;;;41989:35:0;;;;;;:31;:35;;;;;;;;41984:231;;42109:15;;-1:-1:-1;;;;;15394:18:0;;15367:7;15394:18;;;;;;;;;;;42083:22;;:6;:22;:::i;:::-;:41;;42049:146;;;;-1:-1:-1;;;42049:146:0;;17050:2:1;42049:146:0;;;17032:21:1;17089:2;17069:18;;;17062:30;-1:-1:-1;;;17108:18:1;;;17101:49;17167:18;;42049:146:0;16848:343:1;42049:146:0;42302:4;42253:28;15394:18;;;;;;;;;;;42360;;42336:42;;;;;;;42409:35;;-1:-1:-1;42433:11:0;;;;42409:35;:61;;;;-1:-1:-1;42462:8:0;;-1:-1:-1;;;42462:8:0;;;;42461:9;42409:61;:110;;;;-1:-1:-1;;;;;;42488:31:0;;;;;;:25;:31;;;;;;;;42487:32;42409:110;:153;;;;-1:-1:-1;;;;;;42537:25:0;;;;;;:19;:25;;;;;;;;42536:26;42409:153;:194;;;;-1:-1:-1;;;;;;42580:23:0;;;;;;:19;:23;;;;;;;;42579:24;42409:194;42391:326;;;42630:8;:15;;-1:-1:-1;;;;42630:15:0;-1:-1:-1;;;42630:15:0;;;42662:10;:8;:10::i;:::-;42689:8;:16;;-1:-1:-1;;;;42689:16:0;;;42391:326;42748:8;;-1:-1:-1;;;42748:8:0;;;;42747:9;:55;;;;-1:-1:-1;;;;;;42773:29:0;;;;;;:25;:29;;;;;;;;42747:55;:85;;;;-1:-1:-1;42819:13:0;;;;42747:85;:153;;;;;42885:15;;42868:14;;:32;;;;:::i;:::-;42849:15;:51;;42747:153;:196;;;;-1:-1:-1;;;;;;42918:25:0;;;;;;:19;:25;;;;;;;;42917:26;42747:196;42729:282;;;42970:29;:27;:29::i;:::-;;42729:282;43039:8;;-1:-1:-1;;;;;43149:25:0;;43023:12;43149:25;;;:19;:25;;;;;;43039:8;-1:-1:-1;;;43039:8:0;;;;;43038:9;;43149:25;;:52;;-1:-1:-1;;;;;;43178:23:0;;;;;;:19;:23;;;;;;;;43149:52;43145:100;;;-1:-1:-1;43228:5:0;43145:100;43257:12;43362:7;43358:1616;;;-1:-1:-1;;;;;43414:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;43463:1;43447:13;;:17;43414:50;43410:1415;;;-1:-1:-1;;;;;43501:15:0;;43485:13;43501:15;;;:9;:15;;;;;;43567:16;;43624:10;;43687:22;;43753:13;;43501:19;;;;;43753:13;43785:223;;43842:1;;-1:-1:-1;43859:2:0;;-1:-1:-1;43889:2:0;;-1:-1:-1;43889:2:0;43931:31;43859:2;43842:1;43931:31;:::i;:::-;:57;;;;:::i;:::-;43914:74;;43785:223;44033:35;44064:3;44033:26;:6;44044:14;44033:10;:26::i;:::-;:30;;:35::i;:::-;44026:42;-1:-1:-1;44138:14:0;44110:24;44117:17;44026:42;44110:24;:::i;:::-;44109:43;;;;:::i;:::-;44087:18;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;44210:14:0;;-1:-1:-1;44188:18:0;44195:11;44188:4;:18;:::i;:::-;44187:37;;;;:::i;:::-;44171:12;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;44306:14:0;;-1:-1:-1;44272:30:0;44279:23;44272:4;:30;:::i;:::-;44271:49;;;;:::i;:::-;44243:24;;:77;;;;;;;:::i;:::-;;;;-1:-1:-1;43410:1415:0;;-1:-1:-1;;;;;;43410:1415:0;;-1:-1:-1;;;;;44382:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;44432:1;44417:12;;:16;44382:51;44378:447;;;44461:33;44490:3;44461:24;44472:12;;44461:6;:10;;:24;;;;:::i;:33::-;44454:40;;44562:12;;44543:15;;44536:4;:22;;;;:::i;:::-;44535:39;;;;:::i;:::-;44513:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44602:17:0;;44636:12;;44593:56;;-1:-1:-1;;;;;44602:17:0;;44629:4;;44593:8;:56::i;:::-;44705:12;;44692:9;;44685:16;;:4;:16;:::i;:::-;44684:33;;;;:::i;:::-;44668:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;44797:12:0;;44772:21;;44765:28;;:4;:28;:::i;:::-;44764:45;;;;:::i;:::-;44736:24;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;44378:447:0;44845:8;;44841:91;;44874:42;44890:4;44904;44911;44874:15;:42::i;:::-;44948:14;44958:4;44948:14;;:::i;:::-;;;43358:1616;44986:33;45002:4;45008:2;45012:6;44986:15;:33::i;:::-;39334:5693;;;;39221:5806;;;:::o;12138:191::-;12231:6;;;-1:-1:-1;;;;;12248:17:0;;;-1:-1:-1;;;;;;12248:17:0;;;;;;;12281:40;;12231:6;;;12248:17;12231:6;;12281:40;;12212:16;;12281:40;12201:128;12138:191;:::o;38266:188::-;-1:-1:-1;;;;;38349:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;38349:39:0;;;;;;;;;;38406:40;;38349:39;;:31;38406:40;;;38266:188;;:::o;46163:1916::-;46246:4;46202:23;15394:18;;;;;;;;;;;46202:50;;46263:25;46327:24;;46312:12;;46291:18;;:33;;;;:::i;:::-;:60;;;;:::i;:::-;46263:88;-1:-1:-1;46362:12:0;46391:20;;;:46;;-1:-1:-1;46415:22:0;;46391:46;46387:85;;;46454:7;;;46163:1916::o;46387:85::-;46506:18;;;:23;;;:::i;:::-;46488:15;:41;46484:115;;;46564:18;;;:23;;;:::i;:::-;46546:41;;46484:115;46648:21;;-1:-1:-1;;;;;46648:21:0;46611:24;15394:18;;;;;;;;;;;46611:59;;46681:23;46794:1;46761:17;46726:18;;46708:15;:36;;;;:::i;:::-;46707:71;;;;:::i;:::-;:88;;;;:::i;:::-;46681:114;-1:-1:-1;46806:26:0;46835:72;46890:16;46835:36;:15;46681:114;46835:19;:36::i;:::-;:54;;:72::i;:::-;46806:101;-1:-1:-1;46948:21:0;46982:36;46806:101;46982:16;:36::i;:::-;47031:18;47052:44;:21;47078:17;47052:25;:44::i;:::-;47031:65;;47109:32;47144:48;47166:25;47189:1;47166:18;;:22;;:25;;;;:::i;:::-;47144:17;;:21;:48::i;:::-;47109:83;;47205:17;47225:58;47258:24;47225:28;47240:12;;47225:10;:14;;:28;;;;:::i;:58::-;47205:78;;47296:29;47328:70;47373:24;47328:40;47343:24;;47328:10;:14;;:40;;;;:::i;:70::-;47296:102;-1:-1:-1;47411:23:0;47296:102;47437:22;47450:9;47437:10;:22;:::i;:::-;:46;;;;:::i;:::-;47517:1;47496:18;:22;;;47529:12;:16;;;47556:24;:28;;;47619:21;;47611:69;;47411:72;;-1:-1:-1;;;;;;47619:21:0;;47654;;47611:69;47517:1;47611:69;47654:21;47619;47611:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47597:83:0;;-1:-1:-1;;47697:19:0;;;;;:42;;;47738:1;47720:15;:19;47697:42;47693:275;;;47756:46;47769:15;47786;47756:12;:46::i;:::-;47822:134;;;18156:25:1;;;18212:2;18197:18;;18190:34;;;18240:18;;;18233:34;;;47822:134:0;;18144:2:1;18129:18;47822:134:0;;;;;;;47693:275;48002:9;;47994:77;;-1:-1:-1;;;;;48002:9:0;;;;48035:21;;47994:77;;;;48035:21;48002:9;47994:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;46163:1916:0:o;49009:790::-;49100:15;49083:14;:32;49201:29;;-1:-1:-1;;;49201:29:0;;-1:-1:-1;;;;;49216:13:0;1840:32:1;49201:29:0;;;1822:51:1;49066:4:0;;;;49201;;:14;;1795:18:1;;49201:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49170:60;;49280:20;49303:77;49364:5;49303:42;49328:16;;49303:20;:24;;:42;;;;:::i;:77::-;49280:100;-1:-1:-1;49487:16:0;;49483:110;;49520:61;49536:13;49559:6;49568:12;49520:15;:61::i;:::-;49668:19;49705:13;49668:51;;49730:4;-1:-1:-1;;;;;49730:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49757:12:0;;;;-1:-1:-1;49757:12:0;;-1:-1:-1;49757:12:0;49787:4;49780:11;;;;;49009:790;:::o;6782:98::-;6840:7;6867:5;6871:1;6867;:5;:::i;:::-;6860:12;6782:98;-1:-1:-1;;;6782:98:0:o;7181:::-;7239:7;7266:5;7270:1;7266;:5;:::i;19342:733::-;-1:-1:-1;;;;;19482:20:0;;19474:70;;;;-1:-1:-1;;;19474:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19563:23:0;;19555:71;;;;-1:-1:-1;;;19555:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19723:17:0;;19699:21;19723:17;;;;;;;;;;;19759:23;;;;19751:74;;;;-1:-1:-1;;;19751:74:0;;18669:2:1;19751:74:0;;;18651:21:1;18708:2;18688:18;;;18681:30;18747:34;18727:18;;;18720:62;-1:-1:-1;;;18798:18:1;;;18791:36;18844:19;;19751:74:0;18467:402:1;19751:74:0;-1:-1:-1;;;;;19861:17:0;;;:9;:17;;;;;;;;;;;19881:22;;;19861:42;;19925:20;;;;;;;;:30;;19897:6;;19861:9;19925:30;;19897:6;;19925:30;:::i;:::-;;;;;;;;19990:9;-1:-1:-1;;;;;19973:35:0;19982:6;-1:-1:-1;;;;;19973:35:0;;20001:6;19973:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;19973:35:0;;;;;;;;19463:612;19342:733;;;:::o;6425:98::-;6483:7;6510:5;6514:1;6510;:5;:::i;45035:589::-;45185:16;;;45199:1;45185:16;;;;;;;;45161:21;;45185:16;;;;;;;;;;-1:-1:-1;45185:16:0;45161:40;;45230:4;45212;45217:1;45212:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45212:23:0;;;-1:-1:-1;;;;;45212:23:0;;;;;45256:15;-1:-1:-1;;;;;45256:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45246:4;45251:1;45246:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45246:32:0;;;-1:-1:-1;;;;;45246:32:0;;;;;45291:62;45308:4;45323:15;45341:11;45291:8;:62::i;:::-;45392:224;;-1:-1:-1;;;45392:224:0;;-1:-1:-1;;;;;45392:15:0;:66;;;;:224;;45473:11;;45499:1;;45543:4;;45570;;45590:15;;45392:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45090:534;45035:589;:::o;45632:523::-;45780:62;45797:4;45812:15;45830:11;45780:8;:62::i;:::-;46089:17;;45885:262;;-1:-1:-1;;;45885:262:0;;45957:4;45885:262;;;20588:34:1;20638:18;;;20631:34;;;46003:1:0;20681:18:1;;;20674:34;;;20724:18;;;20717:34;-1:-1:-1;;;;;46089:17:0;;;20767:19:1;;;20760:44;46121:15:0;20820:19:1;;;20813:35;45885:15:0;:31;;;;;;45924:9;;20522:19:1;;45885:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45632:523;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2530:615::-;2616:6;2624;2677:2;2665:9;2656:7;2652:23;2648:32;2645:52;;;2693:1;2690;2683:12;2645:52;2733:9;2720:23;2762:18;2803:2;2795:6;2792:14;2789:34;;;2819:1;2816;2809:12;2789:34;2857:6;2846:9;2842:22;2832:32;;2902:7;2895:4;2891:2;2887:13;2883:27;2873:55;;2924:1;2921;2914:12;2873:55;2964:2;2951:16;2990:2;2982:6;2979:14;2976:34;;;3006:1;3003;2996:12;2976:34;3059:7;3054:2;3044:6;3041:1;3037:14;3033:2;3029:23;3025:32;3022:45;3019:65;;;3080:1;3077;3070:12;3019:65;3111:2;3103:11;;;;;3133:6;;-1:-1:-1;2530:615:1;;-1:-1:-1;;;;2530:615:1:o;3547:118::-;3633:5;3626:13;3619:21;3612:5;3609:32;3599:60;;3655:1;3652;3645:12;3670:377;3744:6;3752;3760;3813:2;3801:9;3792:7;3788:23;3784:32;3781:52;;;3829:1;3826;3819:12;3781:52;3865:9;3852:23;3842:33;;3922:2;3911:9;3907:18;3894:32;3884:42;;3976:2;3965:9;3961:18;3948:32;3989:28;4011:5;3989:28;:::i;:::-;4036:5;4026:15;;;3670:377;;;;;:::o;4052:382::-;4117:6;4125;4178:2;4166:9;4157:7;4153:23;4149:32;4146:52;;;4194:1;4191;4184:12;4146:52;4233:9;4220:23;4252:31;4277:5;4252:31;:::i;:::-;4302:5;-1:-1:-1;4359:2:1;4344:18;;4331:32;4372:30;4331:32;4372:30;:::i;:::-;4421:7;4411:17;;;4052:382;;;;;:::o;4439:316::-;4516:6;4524;4532;4585:2;4573:9;4564:7;4560:23;4556:32;4553:52;;;4601:1;4598;4591:12;4553:52;-1:-1:-1;;4624:23:1;;;4694:2;4679:18;;4666:32;;-1:-1:-1;4745:2:1;4730:18;;;4717:32;;4439:316;-1:-1:-1;4439:316:1:o;4760:241::-;4816:6;4869:2;4857:9;4848:7;4844:23;4840:32;4837:52;;;4885:1;4882;4875:12;4837:52;4924:9;4911:23;4943:28;4965:5;4943:28;:::i;5006:388::-;5074:6;5082;5135:2;5123:9;5114:7;5110:23;5106:32;5103:52;;;5151:1;5148;5141:12;5103:52;5190:9;5177:23;5209:31;5234:5;5209:31;:::i;:::-;5259:5;-1:-1:-1;5316:2:1;5301:18;;5288:32;5329:33;5288:32;5329:33;:::i;5399:380::-;5478:1;5474:12;;;;5521;;;5542:61;;5596:4;5588:6;5584:17;5574:27;;5542:61;5649:2;5641:6;5638:14;5618:18;5615:38;5612:161;;5695:10;5690:3;5686:20;5683:1;5676:31;5730:4;5727:1;5720:15;5758:4;5755:1;5748:15;5612:161;;5399:380;;;:::o;6116:356::-;6318:2;6300:21;;;6337:18;;;6330:30;6396:34;6391:2;6376:18;;6369:62;6463:2;6448:18;;6116:356::o;6477:127::-;6538:10;6533:3;6529:20;6526:1;6519:31;6569:4;6566:1;6559:15;6593:4;6590:1;6583:15;6609:168;6682:9;;;6713;;6730:15;;;6724:22;;6710:37;6700:71;;6751:18;;:::i;6782:217::-;6822:1;6848;6838:132;;6892:10;6887:3;6883:20;6880:1;6873:31;6927:4;6924:1;6917:15;6955:4;6952:1;6945:15;6838:132;-1:-1:-1;6984:9:1;;6782:217::o;7821:127::-;7882:10;7877:3;7873:20;7870:1;7863:31;7913:4;7910:1;7903:15;7937:4;7934:1;7927:15;7953:135;7992:3;8013:17;;;8010:43;;8033:18;;:::i;:::-;-1:-1:-1;8080:1:1;8069:13;;7953:135::o;8093:125::-;8158:9;;;8179:10;;;8176:36;;;8192:18;;:::i;8603:245::-;8670:6;8723:2;8711:9;8702:7;8698:23;8694:32;8691:52;;;8739:1;8736;8729:12;8691:52;8771:9;8765:16;8790:28;8812:5;8790:28;:::i;14024:401::-;14226:2;14208:21;;;14265:2;14245:18;;;14238:30;14304:34;14299:2;14284:18;;14277:62;-1:-1:-1;;;14370:2:1;14355:18;;14348:35;14415:3;14400:19;;14024:401::o;14430:399::-;14632:2;14614:21;;;14671:2;14651:18;;;14644:30;14710:34;14705:2;14690:18;;14683:62;-1:-1:-1;;;14776:2:1;14761:18;;14754:33;14819:3;14804:19;;14430:399::o;17611:128::-;17678:9;;;17699:11;;;17696:37;;;17713:18;;:::i;18278:184::-;18348:6;18401:2;18389:9;18380:7;18376:23;18372:32;18369:52;;;18417:1;18414;18407:12;18369:52;-1:-1:-1;18440:16:1;;18278:184;-1:-1:-1;18278:184:1:o;19006:251::-;19076:6;19129:2;19117:9;19108:7;19104:23;19100:32;19097:52;;;19145:1;19142;19135:12;19097:52;19177:9;19171:16;19196:31;19221:5;19196:31;:::i;19262:980::-;19524:4;19572:3;19561:9;19557:19;19603:6;19592:9;19585:25;19629:2;19667:6;19662:2;19651:9;19647:18;19640:34;19710:3;19705:2;19694:9;19690:18;19683:31;19734:6;19769;19763:13;19800:6;19792;19785:22;19838:3;19827:9;19823:19;19816:26;;19877:2;19869:6;19865:15;19851:29;;19898:1;19908:195;19922:6;19919:1;19916:13;19908:195;;;19987:13;;-1:-1:-1;;;;;19983:39:1;19971:52;;20078:15;;;;20043:12;;;;20019:1;19937:9;19908:195;;;-1:-1:-1;;;;;;;20159:32:1;;;;20154:2;20139:18;;20132:60;-1:-1:-1;;;20223:3:1;20208:19;20201:35;20120:3;19262:980;-1:-1:-1;;;19262:980:1:o;20859:306::-;20947:6;20955;20963;21016:2;21004:9;20995:7;20991:23;20987:32;20984:52;;;21032:1;21029;21022:12;20984:52;21061:9;21055:16;21045:26;;21111:2;21100:9;21096:18;21090:25;21080:35;;21155:2;21144:9;21140:18;21134:25;21124:35;;20859:306;;;;;:::o

Swarm Source

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