ETH Price: $2,496.77 (-0.60%)

Token

GLINK (GLINK)
 

Overview

Max Total Supply

100,000,000,000 GLINK

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*我会变得富有.eth
Balance
0.000000000000000001 GLINK

Value
$0.00
0x83C9E216027668398a95181d1dd6439cD92A8Fbb
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:
GLINK

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-09
*/

/**
 * SPDX-License-Identifier: MIT
 * https://t.me/glinkerc
 * https://twitter.com/glinkwtf
 * https://glink.wtf/
 */
pragma solidity >=0.8.19;

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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 {}
}

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

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 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 GLINK is ERC20, Ownable {
    using SafeMath for uint256;

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

    // Swapback
    bool private swapping;
    bool public swapEnabled = false;
    uint256 public swapTokensAtAmount;
    uint256 public maxTokensForSwapback;

    //Anti-whale
    bool public limitsInEffect = true;
    bool public transferDelayEnabled = true;
    uint256 public maxWallet;
    uint256 public maxTransactionAmount;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Fee receivers
    address public lpWallet;
    address public marketingWallet;
    address public devWallet;


    bool public tradingActive = false;

    uint256 public totalFeesBuy;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public totalFeesSell;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isFeeExempt;
    mapping(address => bool) public _isTxLimitExempt;

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20("GLINK", "GLINK") {
        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 _buyMarketingFee = 19;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 29;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 100000000000 * 1e18;

        maxTransactionAmount = (totalSupply * 15) / 1000; // 1.5% of total supply
        maxWallet = (totalSupply * 25) / 1000; // 2.5% of total supply

        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger
        maxTokensForSwapback = (totalSupply * 6) / 1000; // 0.6% max swapback

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

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(msg.sender); 
        devWallet = address(msg.sender);
        lpWallet = msg.sender;

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

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

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

    receive() external payable {}

    /// @notice Launches the token and enables trading. Irriversable.
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    /// @notice Removes the max wallet and max transaction limits
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    /// @notice Disables the Same wallet block transfer delay
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    /// @notice Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500.
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= totalSupply()/ 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= 500 * totalSupply()/ 100000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        require(
            newAmount <= maxTokensForSwapback,
            "Swap amount cannot be higher than maxTokensForSwapback"
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    /// @notice Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50.
    function updateMaxTokensForSwapback(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= swapTokensAtAmount,
            "Swap amount cannot be lower than swapTokensAtAmount"
        );
        maxTokensForSwapback = newAmount;
        return true;
    }

    /// @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 2,
            "Cannot set maxTransactionAmount lower than 0.2%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    /// @notice Changes the maximum amount of tokens a wallet can hold
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 5,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * totalSupply()/1000;
    }


    /// @notice Sets if a wallet is excluded from the max wallet and tx limits
    /// @param updAds The wallet to update
    /// @param isEx If the wallet is excluded or not
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isTxLimitExempt[updAds] = isEx;
    }

    /// @notice Sets if the contract can sell tokens
    /// @param enabled set to false to disable selling
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }
    
    /// @notice Sets the fees for buys
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _devFee The fee for the dev wallet
    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(totalFeesBuy <= 11, "Must keep fees at 11% or less");
    }

    /// @notice Sets the fees for sells
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _devFee The fee for the dev wallet
    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(totalFeesSell <= 11, "Must keep fees at 11% or less");
    }

    /// @notice Sets if a wallet is excluded from fees
    /// @param account The wallet to update
    /// @param excluded If the wallet is excluded or not
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /// @notice Sets an address as a new liquidity pair. You probably dont want to do this.
    /// @param pair The new pair
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        lpWallet = newLPWallet;
    }

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

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isFeeExempt[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");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isFeeExempt[from] || _isFeeExempt[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] &&
                    !_isTxLimitExempt[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isTxLimitExempt[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isTxLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isFeeExempt[from] || _isFeeExempt[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] && totalFeesSell > 0) {
                fees = amount.mul(totalFeesSell).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / totalFeesSell;
                tokensForDev += (fees * sellDevFee) / totalFeesSell;
                tokensForMarketing += (fees * sellMarketingFee) / totalFeesSell;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) {
                fees = amount.mul(totalFeesBuy).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / totalFeesBuy;
                tokensForDev += (fees * buyDevFee) / totalFeesBuy;
                tokensForMarketing += (fees * buyMarketingFee) / totalFeesBuy;
            }

            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
            lpWallet,
            block.timestamp
        );
    }

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

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

        if (contractBalance > maxTokensForSwapback) {
            contractBalance = maxTokensForSwapback;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","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":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTokensForSwapback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600e60146101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600581526020017f474c494e4b0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f474c494e4b0000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000e20565b5080600490816200010d919062000e20565b50505062000130620001246200066760201b60201c565b6200066f60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200073560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f71565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f71565b6040518363ffffffff1660e01b8152600401620002af92919062000fb4565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f71565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200073560201b60201c565b6200035260a05160016200081f60201b60201c565b600060139050600060019050600080601d90506000600190506000806c01431e0fae6d7217caa000000090506103e8600f8262000390919062001010565b6200039c91906200108a565b600a819055506103e8601982620003b4919062001010565b620003c091906200108a565b600981905550612710600582620003d8919062001010565b620003e491906200108a565b6006819055506103e8600682620003fc919062001010565b6200040891906200108a565b600781905550866010819055508560118190555084601281905550601254601154601054620004389190620010c2565b620004449190620010c2565b600f81905550836014819055508260158190555081601681905550601654601554601454620004749190620010c2565b620004809190620010c2565b60138190555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200056b6200055d620008c060201b60201c565b6001620008ea60201b60201c565b6200057e306001620008ea60201b60201c565b6200059361dead6001620008ea60201b60201c565b620005c8600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ea60201b60201c565b620005ea620005dc620008c060201b60201c565b60016200073560201b60201c565b620005fd3060016200073560201b60201c565b6200061261dead60016200073560201b60201c565b62000647600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073560201b60201c565b62000659338262000a2460201b60201c565b50505050505050506200125a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007456200066760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200076b620008c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007bb906200115e565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008fa6200066760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000920620008c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000970906200115e565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a1891906200119d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8d906200120a565b60405180910390fd5b62000aaa6000838362000b9c60201b60201c565b806002600082825462000abe9190620010c2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b159190620010c2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7c91906200123d565b60405180910390a362000b986000838362000ba160201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c2857607f821691505b60208210810362000c3e5762000c3d62000be0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ca87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c69565b62000cb4868362000c69565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0162000cfb62000cf58462000ccc565b62000cd6565b62000ccc565b9050919050565b6000819050919050565b62000d1d8362000ce0565b62000d3562000d2c8262000d08565b84845462000c76565b825550505050565b600090565b62000d4c62000d3d565b62000d5981848462000d12565b505050565b5b8181101562000d815762000d7560008262000d42565b60018101905062000d5f565b5050565b601f82111562000dd05762000d9a8162000c44565b62000da58462000c59565b8101602085101562000db5578190505b62000dcd62000dc48562000c59565b83018262000d5e565b50505b505050565b600082821c905092915050565b600062000df56000198460080262000dd5565b1980831691505092915050565b600062000e10838362000de2565b9150826002028217905092915050565b62000e2b8262000ba6565b67ffffffffffffffff81111562000e475762000e4662000bb1565b5b62000e53825462000c0f565b62000e6082828562000d85565b600060209050601f83116001811462000e98576000841562000e83578287015190505b62000e8f858262000e02565b86555062000eff565b601f19841662000ea88662000c44565b60005b8281101562000ed25784890151825560018201915060208501945060208101905062000eab565b8683101562000ef2578489015162000eee601f89168262000de2565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f398262000f0c565b9050919050565b62000f4b8162000f2c565b811462000f5757600080fd5b50565b60008151905062000f6b8162000f40565b92915050565b60006020828403121562000f8a5762000f8962000f07565b5b600062000f9a8482850162000f5a565b91505092915050565b62000fae8162000f2c565b82525050565b600060408201905062000fcb600083018562000fa3565b62000fda602083018462000fa3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200101d8262000ccc565b91506200102a8362000ccc565b92508282026200103a8162000ccc565b9150828204841483151762001054576200105362000fe1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010978262000ccc565b9150620010a48362000ccc565b925082620010b757620010b66200105b565b5b828204905092915050565b6000620010cf8262000ccc565b9150620010dc8362000ccc565b9250828201905080821115620010f757620010f662000fe1565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001146602083620010fd565b915062001153826200110e565b602082019050919050565b60006020820190508181036000830152620011798162001137565b9050919050565b60008115159050919050565b620011978162001180565b82525050565b6000602082019050620011b460008301846200118c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011f2601f83620010fd565b9150620011ff82620011ba565b602082019050919050565b600060208201905081810360008301526200122581620011e3565b9050919050565b620012378162000ccc565b82525050565b60006020820190506200125460008301846200122c565b92915050565b60805160a0516153c0620012b8600039600081816112ab01528181611a6d0152612ae3015260008181610e9f01528181612a8b01528181613b6501528181613c4601528181613c6d01528181613d090152613d3001526153c06000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d3f578063f637434214610d68578063f8b45b0514610d93578063fbc10c5514610dbe5761038c565b8063dd62ed3e14610c81578063e2f4560514610cbe578063e884f26014610ce9578063f11a24d314610d145761038c565b8063c18bc195116100dc578063c18bc19514610bc5578063c876d0b914610bee578063c8c8ebe414610c19578063d257b34f14610c445761038c565b8063bbc0c74214610b48578063c024666814610b73578063c17b5b8c14610b9c5761038c565b80639fccce321161016f578063a457c2d711610149578063a457c2d714610a68578063a9059cbb14610aa5578063aacebbe314610ae2578063b62496f514610b0b5761038c565b80639fccce32146109d5578063a0c973f114610a00578063a0d82dc514610a3d5761038c565b8063924de9b7116101ab578063924de9b71461092d57806395d89b41146109565780639a7a23d6146109815780639c3b4fdc146109aa5761038c565b80638da5cb5b146108ac5780638ea5220f146108d757806392136913146109025761038c565b806349bd5a5e116102b6578063751039fc116102545780637af8ed9c116102235780637af8ed9c146108045780637bce5a04146108415780638095d5641461086c5780638a8c523c146108955761038c565b8063751039fc1461075a5780637571336a1461078557806375f0a874146107ae57806377c18352146107d95761038c565b80636303516c116102905780636303516c146106b05780636ddd1713146106db57806370a0823114610706578063715018a6146107435761038c565b806349bd5a5e1461061d5780634a62bb65146106485780634fbee193146106735761038c565b80631a8145bb1161032357806323b872dd116102fd57806323b872dd1461054d57806327c8f8351461058a578063313ce567146105b557806339509351146105e05761038c565b80631a8145bb146104ce5780631f3fed8f146104f9578063203e727e146105245761038c565b80631694505e1161035f5780631694505e1461042457806318160ddd1461044f5780631816467f1461047a57806319c59e2c146104a35761038c565b806306fdde0314610391578063095ea7b3146103bc5780630e47e822146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610de7565b6040516103b39190613e8f565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613f4a565b610e79565b6040516103f09190613fa5565b60405180910390f35b34801561040557600080fd5b5061040e610e97565b60405161041b9190613fcf565b60405180910390f35b34801561043057600080fd5b50610439610e9d565b6040516104469190614049565b60405180910390f35b34801561045b57600080fd5b50610464610ec1565b6040516104719190613fcf565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190614064565b610ecb565b005b3480156104af57600080fd5b506104b8611007565b6040516104c59190613fcf565b60405180910390f35b3480156104da57600080fd5b506104e361100d565b6040516104f09190613fcf565b60405180910390f35b34801561050557600080fd5b5061050e611013565b60405161051b9190613fcf565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190614091565b611019565b005b34801561055957600080fd5b50610574600480360381019061056f91906140be565b6110f6565b6040516105819190613fa5565b60405180910390f35b34801561059657600080fd5b5061059f6111ee565b6040516105ac9190614120565b60405180910390f35b3480156105c157600080fd5b506105ca6111f4565b6040516105d79190614157565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190613f4a565b6111fd565b6040516106149190613fa5565b60405180910390f35b34801561062957600080fd5b506106326112a9565b60405161063f9190614120565b60405180910390f35b34801561065457600080fd5b5061065d6112cd565b60405161066a9190613fa5565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190614064565b6112e0565b6040516106a79190613fa5565b60405180910390f35b3480156106bc57600080fd5b506106c5611336565b6040516106d29190614120565b60405180910390f35b3480156106e757600080fd5b506106f061135c565b6040516106fd9190613fa5565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190614064565b61136f565b60405161073a9190613fcf565b60405180910390f35b34801561074f57600080fd5b506107586113b7565b005b34801561076657600080fd5b5061076f61143f565b60405161077c9190613fa5565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a7919061419e565b6114df565b005b3480156107ba57600080fd5b506107c36115b6565b6040516107d09190614120565b60405180910390f35b3480156107e557600080fd5b506107ee6115dc565b6040516107fb9190613fcf565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190614091565b6115e2565b6040516108389190613fa5565b60405180910390f35b34801561084d57600080fd5b506108566116b5565b6040516108639190613fcf565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906141de565b6116bb565b005b3480156108a157600080fd5b506108aa6117ba565b005b3480156108b857600080fd5b506108c161186e565b6040516108ce9190614120565b60405180910390f35b3480156108e357600080fd5b506108ec611898565b6040516108f99190614120565b60405180910390f35b34801561090e57600080fd5b506109176118be565b6040516109249190613fcf565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f9190614231565b6118c4565b005b34801561096257600080fd5b5061096b61195d565b6040516109789190613e8f565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a3919061419e565b6119ef565b005b3480156109b657600080fd5b506109bf611b07565b6040516109cc9190613fcf565b60405180910390f35b3480156109e157600080fd5b506109ea611b0d565b6040516109f79190613fcf565b60405180910390f35b348015610a0c57600080fd5b50610a276004803603810190610a229190614064565b611b13565b604051610a349190613fa5565b60405180910390f35b348015610a4957600080fd5b50610a52611b33565b604051610a5f9190613fcf565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f4a565b611b39565b604051610a9c9190613fa5565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613f4a565b611c24565b604051610ad99190613fa5565b60405180910390f35b348015610aee57600080fd5b50610b096004803603810190610b049190614064565b611c42565b005b348015610b1757600080fd5b50610b326004803603810190610b2d9190614064565b611d7e565b604051610b3f9190613fa5565b60405180910390f35b348015610b5457600080fd5b50610b5d611d9e565b604051610b6a9190613fa5565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b95919061419e565b611db1565b005b348015610ba857600080fd5b50610bc36004803603810190610bbe91906141de565b611ed6565b005b348015610bd157600080fd5b50610bec6004803603810190610be79190614091565b611fd5565b005b348015610bfa57600080fd5b50610c036120be565b604051610c109190613fa5565b60405180910390f35b348015610c2557600080fd5b50610c2e6120d1565b604051610c3b9190613fcf565b60405180910390f35b348015610c5057600080fd5b50610c6b6004803603810190610c669190614091565b6120d7565b604051610c789190613fa5565b60405180910390f35b348015610c8d57600080fd5b50610ca86004803603810190610ca3919061425e565b612267565b604051610cb59190613fcf565b60405180910390f35b348015610cca57600080fd5b50610cd36122ee565b604051610ce09190613fcf565b60405180910390f35b348015610cf557600080fd5b50610cfe6122f4565b604051610d0b9190613fa5565b60405180910390f35b348015610d2057600080fd5b50610d29612394565b604051610d369190613fcf565b60405180910390f35b348015610d4b57600080fd5b50610d666004803603810190610d619190614064565b61239a565b005b348015610d7457600080fd5b50610d7d612491565b604051610d8a9190613fcf565b60405180910390f35b348015610d9f57600080fd5b50610da8612497565b604051610db59190613fcf565b60405180910390f35b348015610dca57600080fd5b50610de56004803603810190610de09190614064565b61249d565b005b606060038054610df6906142cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e22906142cd565b8015610e6f5780601f10610e4457610100808354040283529160200191610e6f565b820191906000526020600020905b815481529060010190602001808311610e5257829003601f168201915b5050505050905090565b6000610e8d610e8661255d565b8484612565565b6001905092915050565b60135481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ed361255d565b73ffffffffffffffffffffffffffffffffffffffff16610ef161186e565b73ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e9061434a565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60185481565b60175481565b61102161255d565b73ffffffffffffffffffffffffffffffffffffffff1661103f61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c9061434a565b60405180910390fd5b60028110156110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d0906143dc565b60405180910390fd5b670de0b6b3a7640000816110ed919061442b565b600a8190555050565b600061110384848461272e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114e61255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c5906144df565b60405180910390fd5b6111e2856111da61255d565b858403612565565b60019150509392505050565b61dead81565b60006012905090565b600061129f61120a61255d565b84846001600061121861255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129a91906144ff565b612565565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bf61255d565b73ffffffffffffffffffffffffffffffffffffffff166113dd61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061434a565b60405180910390fd5b61143d60006133c5565b565b600061144961255d565b73ffffffffffffffffffffffffffffffffffffffff1661146761186e565b73ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b49061434a565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6114e761255d565b73ffffffffffffffffffffffffffffffffffffffff1661150561186e565b73ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115529061434a565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60006115ec61255d565b73ffffffffffffffffffffffffffffffffffffffff1661160a61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061434a565b60405180910390fd5b6006548210156116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c906145a5565b60405180910390fd5b8160078190555060019050919050565b60105481565b6116c361255d565b73ffffffffffffffffffffffffffffffffffffffff166116e161186e565b73ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e9061434a565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461175f91906144ff565b61176991906144ff565b600f81905550600b600f5411156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90614611565b60405180910390fd5b505050565b6117c261255d565b73ffffffffffffffffffffffffffffffffffffffff166117e061186e565b73ffffffffffffffffffffffffffffffffffffffff1614611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061434a565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118cc61255d565b73ffffffffffffffffffffffffffffffffffffffff166118ea61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119379061434a565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b60606004805461196c906142cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611998906142cd565b80156119e55780601f106119ba576101008083540402835291602001916119e5565b820191906000526020600020905b8154815290600101906020018083116119c857829003601f168201915b5050505050905090565b6119f761255d565b73ffffffffffffffffffffffffffffffffffffffff16611a1561186e565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a629061434a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af0906146a3565b60405180910390fd5b611b03828261348b565b5050565b60125481565b60195481565b601b6020528060005260406000206000915054906101000a900460ff1681565b60165481565b60008060016000611b4861255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90614735565b60405180910390fd5b611c19611c1061255d565b85858403612565565b600191505092915050565b6000611c38611c3161255d565b848461272e565b6001905092915050565b611c4a61255d565b73ffffffffffffffffffffffffffffffffffffffff16611c6861186e565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb59061434a565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600e60149054906101000a900460ff1681565b611db961255d565b73ffffffffffffffffffffffffffffffffffffffff16611dd761186e565b73ffffffffffffffffffffffffffffffffffffffff1614611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e249061434a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eca9190613fa5565b60405180910390a25050565b611ede61255d565b73ffffffffffffffffffffffffffffffffffffffff16611efc61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f499061434a565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f7a91906144ff565b611f8491906144ff565b601381905550600b6013541115611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614611565b60405180910390fd5b505050565b611fdd61255d565b73ffffffffffffffffffffffffffffffffffffffff16611ffb61186e565b73ffffffffffffffffffffffffffffffffffffffff1614612051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120489061434a565b60405180910390fd5b6005811015612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c906147c7565b60405180910390fd5b6103e86120a0610ec1565b826120ab919061442b565b6120b59190614816565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b60006120e161255d565b73ffffffffffffffffffffffffffffffffffffffff166120ff61186e565b73ffffffffffffffffffffffffffffffffffffffff1614612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061434a565b60405180910390fd5b620186a0612161610ec1565b61216b9190614816565b8210156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906148b9565b60405180910390fd5b620186a06121b9610ec1565b6101f46121c6919061442b565b6121d09190614816565b821115612212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122099061494b565b60405180910390fd5b600754821115612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e906149dd565b60405180910390fd5b8160068190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60006122fe61255d565b73ffffffffffffffffffffffffffffffffffffffff1661231c61186e565b73ffffffffffffffffffffffffffffffffffffffff1614612372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123699061434a565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a261255d565b73ffffffffffffffffffffffffffffffffffffffff166123c061186e565b73ffffffffffffffffffffffffffffffffffffffff1614612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d9061434a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90614a6f565b60405180910390fd5b61248e816133c5565b50565b60155481565b60095481565b6124a561255d565b73ffffffffffffffffffffffffffffffffffffffff166124c361186e565b73ffffffffffffffffffffffffffffffffffffffff1614612519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125109061434a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a90614b93565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127219190613fcf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279490614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390614cb7565b60405180910390fd5b60008103612825576128208383600061352c565b6133c0565b600860009054906101000a900460ff1615612ee85761284261186e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128b0575061288061186e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128e95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612923575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561293c5750600560149054906101000a900460ff16155b15612ee757600e60149054906101000a900460ff16612a3657601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129f65750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614d23565b60405180910390fd5b5b600860019054906101000a900460ff1615612bfe57612a5361186e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ada57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bfd5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf90614ddb565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ca15750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d4857600a54811115612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614e6d565b60405180910390fd5b600954612cf78361136f565b82612d0291906144ff565b1115612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a90614ed9565b60405180910390fd5b612ee6565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612deb5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3a57600a54811115612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614f6b565b60405180910390fd5b612ee5565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ee457600954612e978361136f565b82612ea291906144ff565b1115612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614ed9565b60405180910390fd5b5b5b5b5b5b6000612ef33061136f565b905060006006548210159050808015612f185750600560159054906101000a900460ff165b8015612f315750600560149054906101000a900460ff16155b8015612f875750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fdd5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130335750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613077576001600560146101000a81548160ff02191690831515021790555061305b6137ab565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061312d5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561313757600090505b600081156133b057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561319a57506000601354115b15613267576131c760646131b960135488613a7a90919063ffffffff16565b613a9090919063ffffffff16565b9050601354601554826131da919061442b565b6131e49190614816565b601860008282546131f591906144ff565b925050819055506013546016548261320d919061442b565b6132179190614816565b6019600082825461322891906144ff565b9250508190555060135460145482613240919061442b565b61324a9190614816565b6017600082825461325b91906144ff565b9250508190555061338c565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132c257506000600f54115b1561338b576132ef60646132e1600f5488613a7a90919063ffffffff16565b613a9090919063ffffffff16565b9050600f5460115482613302919061442b565b61330c9190614816565b6018600082825461331d91906144ff565b92505081905550600f5460125482613335919061442b565b61333f9190614816565b6019600082825461335091906144ff565b92505081905550600f5460105482613368919061442b565b6133729190614816565b6017600082825461338391906144ff565b925050819055505b5b60008111156133a1576133a087308361352c565b5b80856133ad9190614f8b565b94505b6133bb87878761352c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361359b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359290614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361360a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360190614cb7565b60405180910390fd5b613615838383613aa6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561369b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369290615031565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461372e91906144ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137929190613fcf565b60405180910390a36137a5848484613aab565b50505050565b60006137b63061136f565b905060006019546017546018546137cd91906144ff565b6137d791906144ff565b90506000808314806137e95750600082145b156137f657505050613a78565b6007548311156138065760075492505b600060028360185486613819919061442b565b6138239190614816565b61382d9190614816565b905060006138448286613ab090919063ffffffff16565b9050600047905061385482613ac6565b60006138698247613ab090919063ffffffff16565b905060006138948761388660175485613a7a90919063ffffffff16565b613a9090919063ffffffff16565b905060006138bf886138b160195486613a7a90919063ffffffff16565b613a9090919063ffffffff16565b905060008183856138d09190614f8b565b6138da9190614f8b565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161393a90615082565b60006040518083038185875af1925050503d8060008114613977576040519150601f19603f3d011682016040523d82523d6000602084013e61397c565b606091505b5050809850506000871180156139925750600081115b156139df576139a18782613d03565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516139d693929190615097565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2590615082565b60006040518083038185875af1925050503d8060008114613a62576040519150601f19603f3d011682016040523d82523d6000602084013e613a67565b606091505b505080985050505050505050505050505b565b60008183613a88919061442b565b905092915050565b60008183613a9e9190614816565b905092915050565b505050565b505050565b60008183613abe9190614f8b565b905092915050565b6000600267ffffffffffffffff811115613ae357613ae26150ce565b5b604051908082528060200260200182016040528015613b115781602001602082028036833780820191505090505b5090503081600081518110613b2957613b286150fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf29190615141565b81600181518110613c0657613c056150fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c6b307f000000000000000000000000000000000000000000000000000000000000000084612565565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ccd959493929190615267565b600060405180830381600087803b158015613ce757600080fd5b505af1158015613cfb573d6000803e3d6000fd5b505050505050565b613d2e307f000000000000000000000000000000000000000000000000000000000000000084612565565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613db5969594939291906152c1565b60606040518083038185885af1158015613dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613df89190615337565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e39578082015181840152602081019050613e1e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e6182613dff565b613e6b8185613e0a565b9350613e7b818560208601613e1b565b613e8481613e45565b840191505092915050565b60006020820190508181036000830152613ea98184613e56565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ee182613eb6565b9050919050565b613ef181613ed6565b8114613efc57600080fd5b50565b600081359050613f0e81613ee8565b92915050565b6000819050919050565b613f2781613f14565b8114613f3257600080fd5b50565b600081359050613f4481613f1e565b92915050565b60008060408385031215613f6157613f60613eb1565b5b6000613f6f85828601613eff565b9250506020613f8085828601613f35565b9150509250929050565b60008115159050919050565b613f9f81613f8a565b82525050565b6000602082019050613fba6000830184613f96565b92915050565b613fc981613f14565b82525050565b6000602082019050613fe46000830184613fc0565b92915050565b6000819050919050565b600061400f61400a61400584613eb6565b613fea565b613eb6565b9050919050565b600061402182613ff4565b9050919050565b600061403382614016565b9050919050565b61404381614028565b82525050565b600060208201905061405e600083018461403a565b92915050565b60006020828403121561407a57614079613eb1565b5b600061408884828501613eff565b91505092915050565b6000602082840312156140a7576140a6613eb1565b5b60006140b584828501613f35565b91505092915050565b6000806000606084860312156140d7576140d6613eb1565b5b60006140e586828701613eff565b93505060206140f686828701613eff565b925050604061410786828701613f35565b9150509250925092565b61411a81613ed6565b82525050565b60006020820190506141356000830184614111565b92915050565b600060ff82169050919050565b6141518161413b565b82525050565b600060208201905061416c6000830184614148565b92915050565b61417b81613f8a565b811461418657600080fd5b50565b60008135905061419881614172565b92915050565b600080604083850312156141b5576141b4613eb1565b5b60006141c385828601613eff565b92505060206141d485828601614189565b9150509250929050565b6000806000606084860312156141f7576141f6613eb1565b5b600061420586828701613f35565b935050602061421686828701613f35565b925050604061422786828701613f35565b9150509250925092565b60006020828403121561424757614246613eb1565b5b600061425584828501614189565b91505092915050565b6000806040838503121561427557614274613eb1565b5b600061428385828601613eff565b925050602061429485828601613eff565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142e557607f821691505b6020821081036142f8576142f761429e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614334602083613e0a565b915061433f826142fe565b602082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b60006143c6602f83613e0a565b91506143d18261436a565b604082019050919050565b600060208201905081810360008301526143f5816143b9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443682613f14565b915061444183613f14565b925082820261444f81613f14565b91508282048414831517614466576144656143fc565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144c9602883613e0a565b91506144d48261446d565b604082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b600061450a82613f14565b915061451583613f14565b925082820190508082111561452d5761452c6143fc565b5b92915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b600061458f603383613e0a565b915061459a82614533565b604082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b60006145fb601d83613e0a565b9150614606826145c5565b602082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061468d603983613e0a565b915061469882614631565b604082019050919050565b600060208201905081810360008301526146bc81614680565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061471f602583613e0a565b915061472a826146c3565b604082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147b1602483613e0a565b91506147bc82614755565b604082019050919050565b600060208201905081810360008301526147e0816147a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482182613f14565b915061482c83613f14565b92508261483c5761483b6147e7565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a3603583613e0a565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614935603483613e0a565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b60006149c7603683613e0a565b91506149d28261496b565b604082019050919050565b600060208201905081810360008301526149f6816149ba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a59602683613e0a565b9150614a64826149fd565b604082019050919050565b60006020820190508181036000830152614a8881614a4c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614aeb602483613e0a565b9150614af682614a8f565b604082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7d602283613e0a565b9150614b8882614b21565b604082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c0f602583613e0a565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ca1602383613e0a565b9150614cac82614c45565b604082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d0d601683613e0a565b9150614d1882614cd7565b602082019050919050565b60006020820190508181036000830152614d3c81614d00565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614dc5604983613e0a565b9150614dd082614d43565b606082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e57603583613e0a565b9150614e6282614dfb565b604082019050919050565b60006020820190508181036000830152614e8681614e4a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ec3601383613e0a565b9150614ece82614e8d565b602082019050919050565b60006020820190508181036000830152614ef281614eb6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f55603683613e0a565b9150614f6082614ef9565b604082019050919050565b60006020820190508181036000830152614f8481614f48565b9050919050565b6000614f9682613f14565b9150614fa183613f14565b9250828203905081811115614fb957614fb86143fc565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061501b602683613e0a565b915061502682614fbf565b604082019050919050565b6000602082019050818103600083015261504a8161500e565b9050919050565b600081905092915050565b50565b600061506c600083615051565b91506150778261505c565b600082019050919050565b600061508d8261505f565b9150819050919050565b60006060820190506150ac6000830186613fc0565b6150b96020830185613fc0565b6150c66040830184613fc0565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061513b81613ee8565b92915050565b60006020828403121561515757615156613eb1565b5b60006151658482850161512c565b91505092915050565b6000819050919050565b600061519361518e6151898461516e565b613fea565b613f14565b9050919050565b6151a381615178565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151de81613ed6565b82525050565b60006151f083836151d5565b60208301905092915050565b6000602082019050919050565b6000615214826151a9565b61521e81856151b4565b9350615229836151c5565b8060005b8381101561525a57815161524188826151e4565b975061524c836151fc565b92505060018101905061522d565b5085935050505092915050565b600060a08201905061527c6000830188613fc0565b615289602083018761519a565b818103604083015261529b8186615209565b90506152aa6060830185614111565b6152b76080830184613fc0565b9695505050505050565b600060c0820190506152d66000830189614111565b6152e36020830188613fc0565b6152f0604083018761519a565b6152fd606083018661519a565b61530a6080830185614111565b61531760a0830184613fc0565b979650505050505050565b60008151905061533181613f1e565b92915050565b6000806000606084860312156153505761534f613eb1565b5b600061535e86828701615322565b935050602061536f86828701615322565b925050604061538086828701615322565b915050925092509256fea2646970667358221220b9b48cd7ce00df6862fc3a28938db85d3a35144a71c196ea851b2e445755f00264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d3f578063f637434214610d68578063f8b45b0514610d93578063fbc10c5514610dbe5761038c565b8063dd62ed3e14610c81578063e2f4560514610cbe578063e884f26014610ce9578063f11a24d314610d145761038c565b8063c18bc195116100dc578063c18bc19514610bc5578063c876d0b914610bee578063c8c8ebe414610c19578063d257b34f14610c445761038c565b8063bbc0c74214610b48578063c024666814610b73578063c17b5b8c14610b9c5761038c565b80639fccce321161016f578063a457c2d711610149578063a457c2d714610a68578063a9059cbb14610aa5578063aacebbe314610ae2578063b62496f514610b0b5761038c565b80639fccce32146109d5578063a0c973f114610a00578063a0d82dc514610a3d5761038c565b8063924de9b7116101ab578063924de9b71461092d57806395d89b41146109565780639a7a23d6146109815780639c3b4fdc146109aa5761038c565b80638da5cb5b146108ac5780638ea5220f146108d757806392136913146109025761038c565b806349bd5a5e116102b6578063751039fc116102545780637af8ed9c116102235780637af8ed9c146108045780637bce5a04146108415780638095d5641461086c5780638a8c523c146108955761038c565b8063751039fc1461075a5780637571336a1461078557806375f0a874146107ae57806377c18352146107d95761038c565b80636303516c116102905780636303516c146106b05780636ddd1713146106db57806370a0823114610706578063715018a6146107435761038c565b806349bd5a5e1461061d5780634a62bb65146106485780634fbee193146106735761038c565b80631a8145bb1161032357806323b872dd116102fd57806323b872dd1461054d57806327c8f8351461058a578063313ce567146105b557806339509351146105e05761038c565b80631a8145bb146104ce5780631f3fed8f146104f9578063203e727e146105245761038c565b80631694505e1161035f5780631694505e1461042457806318160ddd1461044f5780631816467f1461047a57806319c59e2c146104a35761038c565b806306fdde0314610391578063095ea7b3146103bc5780630e47e822146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610de7565b6040516103b39190613e8f565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613f4a565b610e79565b6040516103f09190613fa5565b60405180910390f35b34801561040557600080fd5b5061040e610e97565b60405161041b9190613fcf565b60405180910390f35b34801561043057600080fd5b50610439610e9d565b6040516104469190614049565b60405180910390f35b34801561045b57600080fd5b50610464610ec1565b6040516104719190613fcf565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190614064565b610ecb565b005b3480156104af57600080fd5b506104b8611007565b6040516104c59190613fcf565b60405180910390f35b3480156104da57600080fd5b506104e361100d565b6040516104f09190613fcf565b60405180910390f35b34801561050557600080fd5b5061050e611013565b60405161051b9190613fcf565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190614091565b611019565b005b34801561055957600080fd5b50610574600480360381019061056f91906140be565b6110f6565b6040516105819190613fa5565b60405180910390f35b34801561059657600080fd5b5061059f6111ee565b6040516105ac9190614120565b60405180910390f35b3480156105c157600080fd5b506105ca6111f4565b6040516105d79190614157565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190613f4a565b6111fd565b6040516106149190613fa5565b60405180910390f35b34801561062957600080fd5b506106326112a9565b60405161063f9190614120565b60405180910390f35b34801561065457600080fd5b5061065d6112cd565b60405161066a9190613fa5565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190614064565b6112e0565b6040516106a79190613fa5565b60405180910390f35b3480156106bc57600080fd5b506106c5611336565b6040516106d29190614120565b60405180910390f35b3480156106e757600080fd5b506106f061135c565b6040516106fd9190613fa5565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190614064565b61136f565b60405161073a9190613fcf565b60405180910390f35b34801561074f57600080fd5b506107586113b7565b005b34801561076657600080fd5b5061076f61143f565b60405161077c9190613fa5565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a7919061419e565b6114df565b005b3480156107ba57600080fd5b506107c36115b6565b6040516107d09190614120565b60405180910390f35b3480156107e557600080fd5b506107ee6115dc565b6040516107fb9190613fcf565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190614091565b6115e2565b6040516108389190613fa5565b60405180910390f35b34801561084d57600080fd5b506108566116b5565b6040516108639190613fcf565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906141de565b6116bb565b005b3480156108a157600080fd5b506108aa6117ba565b005b3480156108b857600080fd5b506108c161186e565b6040516108ce9190614120565b60405180910390f35b3480156108e357600080fd5b506108ec611898565b6040516108f99190614120565b60405180910390f35b34801561090e57600080fd5b506109176118be565b6040516109249190613fcf565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f9190614231565b6118c4565b005b34801561096257600080fd5b5061096b61195d565b6040516109789190613e8f565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a3919061419e565b6119ef565b005b3480156109b657600080fd5b506109bf611b07565b6040516109cc9190613fcf565b60405180910390f35b3480156109e157600080fd5b506109ea611b0d565b6040516109f79190613fcf565b60405180910390f35b348015610a0c57600080fd5b50610a276004803603810190610a229190614064565b611b13565b604051610a349190613fa5565b60405180910390f35b348015610a4957600080fd5b50610a52611b33565b604051610a5f9190613fcf565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f4a565b611b39565b604051610a9c9190613fa5565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613f4a565b611c24565b604051610ad99190613fa5565b60405180910390f35b348015610aee57600080fd5b50610b096004803603810190610b049190614064565b611c42565b005b348015610b1757600080fd5b50610b326004803603810190610b2d9190614064565b611d7e565b604051610b3f9190613fa5565b60405180910390f35b348015610b5457600080fd5b50610b5d611d9e565b604051610b6a9190613fa5565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b95919061419e565b611db1565b005b348015610ba857600080fd5b50610bc36004803603810190610bbe91906141de565b611ed6565b005b348015610bd157600080fd5b50610bec6004803603810190610be79190614091565b611fd5565b005b348015610bfa57600080fd5b50610c036120be565b604051610c109190613fa5565b60405180910390f35b348015610c2557600080fd5b50610c2e6120d1565b604051610c3b9190613fcf565b60405180910390f35b348015610c5057600080fd5b50610c6b6004803603810190610c669190614091565b6120d7565b604051610c789190613fa5565b60405180910390f35b348015610c8d57600080fd5b50610ca86004803603810190610ca3919061425e565b612267565b604051610cb59190613fcf565b60405180910390f35b348015610cca57600080fd5b50610cd36122ee565b604051610ce09190613fcf565b60405180910390f35b348015610cf557600080fd5b50610cfe6122f4565b604051610d0b9190613fa5565b60405180910390f35b348015610d2057600080fd5b50610d29612394565b604051610d369190613fcf565b60405180910390f35b348015610d4b57600080fd5b50610d666004803603810190610d619190614064565b61239a565b005b348015610d7457600080fd5b50610d7d612491565b604051610d8a9190613fcf565b60405180910390f35b348015610d9f57600080fd5b50610da8612497565b604051610db59190613fcf565b60405180910390f35b348015610dca57600080fd5b50610de56004803603810190610de09190614064565b61249d565b005b606060038054610df6906142cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e22906142cd565b8015610e6f5780601f10610e4457610100808354040283529160200191610e6f565b820191906000526020600020905b815481529060010190602001808311610e5257829003601f168201915b5050505050905090565b6000610e8d610e8661255d565b8484612565565b6001905092915050565b60135481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ed361255d565b73ffffffffffffffffffffffffffffffffffffffff16610ef161186e565b73ffffffffffffffffffffffffffffffffffffffff1614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e9061434a565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60185481565b60175481565b61102161255d565b73ffffffffffffffffffffffffffffffffffffffff1661103f61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c9061434a565b60405180910390fd5b60028110156110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d0906143dc565b60405180910390fd5b670de0b6b3a7640000816110ed919061442b565b600a8190555050565b600061110384848461272e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114e61255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c5906144df565b60405180910390fd5b6111e2856111da61255d565b858403612565565b60019150509392505050565b61dead81565b60006012905090565b600061129f61120a61255d565b84846001600061121861255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129a91906144ff565b612565565b6001905092915050565b7f000000000000000000000000742e6281f3f53ea662524ebdfdba60a695d4dee781565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113bf61255d565b73ffffffffffffffffffffffffffffffffffffffff166113dd61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061434a565b60405180910390fd5b61143d60006133c5565b565b600061144961255d565b73ffffffffffffffffffffffffffffffffffffffff1661146761186e565b73ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b49061434a565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6114e761255d565b73ffffffffffffffffffffffffffffffffffffffff1661150561186e565b73ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115529061434a565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60006115ec61255d565b73ffffffffffffffffffffffffffffffffffffffff1661160a61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061434a565b60405180910390fd5b6006548210156116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c906145a5565b60405180910390fd5b8160078190555060019050919050565b60105481565b6116c361255d565b73ffffffffffffffffffffffffffffffffffffffff166116e161186e565b73ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e9061434a565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461175f91906144ff565b61176991906144ff565b600f81905550600b600f5411156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90614611565b60405180910390fd5b505050565b6117c261255d565b73ffffffffffffffffffffffffffffffffffffffff166117e061186e565b73ffffffffffffffffffffffffffffffffffffffff1614611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061434a565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118cc61255d565b73ffffffffffffffffffffffffffffffffffffffff166118ea61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119379061434a565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b60606004805461196c906142cd565b80601f0160208091040260200160405190810160405280929190818152602001828054611998906142cd565b80156119e55780601f106119ba576101008083540402835291602001916119e5565b820191906000526020600020905b8154815290600101906020018083116119c857829003601f168201915b5050505050905090565b6119f761255d565b73ffffffffffffffffffffffffffffffffffffffff16611a1561186e565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a629061434a565b60405180910390fd5b7f000000000000000000000000742e6281f3f53ea662524ebdfdba60a695d4dee773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af0906146a3565b60405180910390fd5b611b03828261348b565b5050565b60125481565b60195481565b601b6020528060005260406000206000915054906101000a900460ff1681565b60165481565b60008060016000611b4861255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90614735565b60405180910390fd5b611c19611c1061255d565b85858403612565565b600191505092915050565b6000611c38611c3161255d565b848461272e565b6001905092915050565b611c4a61255d565b73ffffffffffffffffffffffffffffffffffffffff16611c6861186e565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb59061434a565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600e60149054906101000a900460ff1681565b611db961255d565b73ffffffffffffffffffffffffffffffffffffffff16611dd761186e565b73ffffffffffffffffffffffffffffffffffffffff1614611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e249061434a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eca9190613fa5565b60405180910390a25050565b611ede61255d565b73ffffffffffffffffffffffffffffffffffffffff16611efc61186e565b73ffffffffffffffffffffffffffffffffffffffff1614611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f499061434a565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f7a91906144ff565b611f8491906144ff565b601381905550600b6013541115611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614611565b60405180910390fd5b505050565b611fdd61255d565b73ffffffffffffffffffffffffffffffffffffffff16611ffb61186e565b73ffffffffffffffffffffffffffffffffffffffff1614612051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120489061434a565b60405180910390fd5b6005811015612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c906147c7565b60405180910390fd5b6103e86120a0610ec1565b826120ab919061442b565b6120b59190614816565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b60006120e161255d565b73ffffffffffffffffffffffffffffffffffffffff166120ff61186e565b73ffffffffffffffffffffffffffffffffffffffff1614612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061434a565b60405180910390fd5b620186a0612161610ec1565b61216b9190614816565b8210156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906148b9565b60405180910390fd5b620186a06121b9610ec1565b6101f46121c6919061442b565b6121d09190614816565b821115612212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122099061494b565b60405180910390fd5b600754821115612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e906149dd565b60405180910390fd5b8160068190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60006122fe61255d565b73ffffffffffffffffffffffffffffffffffffffff1661231c61186e565b73ffffffffffffffffffffffffffffffffffffffff1614612372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123699061434a565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a261255d565b73ffffffffffffffffffffffffffffffffffffffff166123c061186e565b73ffffffffffffffffffffffffffffffffffffffff1614612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d9061434a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90614a6f565b60405180910390fd5b61248e816133c5565b50565b60155481565b60095481565b6124a561255d565b73ffffffffffffffffffffffffffffffffffffffff166124c361186e565b73ffffffffffffffffffffffffffffffffffffffff1614612519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125109061434a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a90614b93565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127219190613fcf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279490614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390614cb7565b60405180910390fd5b60008103612825576128208383600061352c565b6133c0565b600860009054906101000a900460ff1615612ee85761284261186e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128b0575061288061186e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128e95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612923575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561293c5750600560149054906101000a900460ff16155b15612ee757600e60149054906101000a900460ff16612a3657601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129f65750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614d23565b60405180910390fd5b5b600860019054906101000a900460ff1615612bfe57612a5361186e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ada57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3257507f000000000000000000000000742e6281f3f53ea662524ebdfdba60a695d4dee773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bfd5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf90614ddb565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ca15750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d4857600a54811115612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614e6d565b60405180910390fd5b600954612cf78361136f565b82612d0291906144ff565b1115612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a90614ed9565b60405180910390fd5b612ee6565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612deb5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3a57600a54811115612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614f6b565b60405180910390fd5b612ee5565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ee457600954612e978361136f565b82612ea291906144ff565b1115612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614ed9565b60405180910390fd5b5b5b5b5b5b6000612ef33061136f565b905060006006548210159050808015612f185750600560159054906101000a900460ff165b8015612f315750600560149054906101000a900460ff16155b8015612f875750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fdd5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130335750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613077576001600560146101000a81548160ff02191690831515021790555061305b6137ab565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061312d5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561313757600090505b600081156133b057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561319a57506000601354115b15613267576131c760646131b960135488613a7a90919063ffffffff16565b613a9090919063ffffffff16565b9050601354601554826131da919061442b565b6131e49190614816565b601860008282546131f591906144ff565b925050819055506013546016548261320d919061442b565b6132179190614816565b6019600082825461322891906144ff565b9250508190555060135460145482613240919061442b565b61324a9190614816565b6017600082825461325b91906144ff565b9250508190555061338c565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132c257506000600f54115b1561338b576132ef60646132e1600f5488613a7a90919063ffffffff16565b613a9090919063ffffffff16565b9050600f5460115482613302919061442b565b61330c9190614816565b6018600082825461331d91906144ff565b92505081905550600f5460125482613335919061442b565b61333f9190614816565b6019600082825461335091906144ff565b92505081905550600f5460105482613368919061442b565b6133729190614816565b6017600082825461338391906144ff565b925050819055505b5b60008111156133a1576133a087308361352c565b5b80856133ad9190614f8b565b94505b6133bb87878761352c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361359b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359290614c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361360a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360190614cb7565b60405180910390fd5b613615838383613aa6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561369b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369290615031565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461372e91906144ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137929190613fcf565b60405180910390a36137a5848484613aab565b50505050565b60006137b63061136f565b905060006019546017546018546137cd91906144ff565b6137d791906144ff565b90506000808314806137e95750600082145b156137f657505050613a78565b6007548311156138065760075492505b600060028360185486613819919061442b565b6138239190614816565b61382d9190614816565b905060006138448286613ab090919063ffffffff16565b9050600047905061385482613ac6565b60006138698247613ab090919063ffffffff16565b905060006138948761388660175485613a7a90919063ffffffff16565b613a9090919063ffffffff16565b905060006138bf886138b160195486613a7a90919063ffffffff16565b613a9090919063ffffffff16565b905060008183856138d09190614f8b565b6138da9190614f8b565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161393a90615082565b60006040518083038185875af1925050503d8060008114613977576040519150601f19603f3d011682016040523d82523d6000602084013e61397c565b606091505b5050809850506000871180156139925750600081115b156139df576139a18782613d03565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516139d693929190615097565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2590615082565b60006040518083038185875af1925050503d8060008114613a62576040519150601f19603f3d011682016040523d82523d6000602084013e613a67565b606091505b505080985050505050505050505050505b565b60008183613a88919061442b565b905092915050565b60008183613a9e9190614816565b905092915050565b505050565b505050565b60008183613abe9190614f8b565b905092915050565b6000600267ffffffffffffffff811115613ae357613ae26150ce565b5b604051908082528060200260200182016040528015613b115781602001602082028036833780820191505090505b5090503081600081518110613b2957613b286150fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf29190615141565b81600181518110613c0657613c056150fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c6b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612565565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ccd959493929190615267565b600060405180830381600087803b158015613ce757600080fd5b505af1158015613cfb573d6000803e3d6000fd5b505050505050565b613d2e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612565565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613db5969594939291906152c1565b60606040518083038185885af1158015613dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613df89190615337565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e39578082015181840152602081019050613e1e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e6182613dff565b613e6b8185613e0a565b9350613e7b818560208601613e1b565b613e8481613e45565b840191505092915050565b60006020820190508181036000830152613ea98184613e56565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ee182613eb6565b9050919050565b613ef181613ed6565b8114613efc57600080fd5b50565b600081359050613f0e81613ee8565b92915050565b6000819050919050565b613f2781613f14565b8114613f3257600080fd5b50565b600081359050613f4481613f1e565b92915050565b60008060408385031215613f6157613f60613eb1565b5b6000613f6f85828601613eff565b9250506020613f8085828601613f35565b9150509250929050565b60008115159050919050565b613f9f81613f8a565b82525050565b6000602082019050613fba6000830184613f96565b92915050565b613fc981613f14565b82525050565b6000602082019050613fe46000830184613fc0565b92915050565b6000819050919050565b600061400f61400a61400584613eb6565b613fea565b613eb6565b9050919050565b600061402182613ff4565b9050919050565b600061403382614016565b9050919050565b61404381614028565b82525050565b600060208201905061405e600083018461403a565b92915050565b60006020828403121561407a57614079613eb1565b5b600061408884828501613eff565b91505092915050565b6000602082840312156140a7576140a6613eb1565b5b60006140b584828501613f35565b91505092915050565b6000806000606084860312156140d7576140d6613eb1565b5b60006140e586828701613eff565b93505060206140f686828701613eff565b925050604061410786828701613f35565b9150509250925092565b61411a81613ed6565b82525050565b60006020820190506141356000830184614111565b92915050565b600060ff82169050919050565b6141518161413b565b82525050565b600060208201905061416c6000830184614148565b92915050565b61417b81613f8a565b811461418657600080fd5b50565b60008135905061419881614172565b92915050565b600080604083850312156141b5576141b4613eb1565b5b60006141c385828601613eff565b92505060206141d485828601614189565b9150509250929050565b6000806000606084860312156141f7576141f6613eb1565b5b600061420586828701613f35565b935050602061421686828701613f35565b925050604061422786828701613f35565b9150509250925092565b60006020828403121561424757614246613eb1565b5b600061425584828501614189565b91505092915050565b6000806040838503121561427557614274613eb1565b5b600061428385828601613eff565b925050602061429485828601613eff565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142e557607f821691505b6020821081036142f8576142f761429e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614334602083613e0a565b915061433f826142fe565b602082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b60006143c6602f83613e0a565b91506143d18261436a565b604082019050919050565b600060208201905081810360008301526143f5816143b9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443682613f14565b915061444183613f14565b925082820261444f81613f14565b91508282048414831517614466576144656143fc565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144c9602883613e0a565b91506144d48261446d565b604082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b600061450a82613f14565b915061451583613f14565b925082820190508082111561452d5761452c6143fc565b5b92915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b600061458f603383613e0a565b915061459a82614533565b604082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b60006145fb601d83613e0a565b9150614606826145c5565b602082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061468d603983613e0a565b915061469882614631565b604082019050919050565b600060208201905081810360008301526146bc81614680565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061471f602583613e0a565b915061472a826146c3565b604082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147b1602483613e0a565b91506147bc82614755565b604082019050919050565b600060208201905081810360008301526147e0816147a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482182613f14565b915061482c83613f14565b92508261483c5761483b6147e7565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a3603583613e0a565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614935603483613e0a565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b60006149c7603683613e0a565b91506149d28261496b565b604082019050919050565b600060208201905081810360008301526149f6816149ba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a59602683613e0a565b9150614a64826149fd565b604082019050919050565b60006020820190508181036000830152614a8881614a4c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614aeb602483613e0a565b9150614af682614a8f565b604082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7d602283613e0a565b9150614b8882614b21565b604082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c0f602583613e0a565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ca1602383613e0a565b9150614cac82614c45565b604082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d0d601683613e0a565b9150614d1882614cd7565b602082019050919050565b60006020820190508181036000830152614d3c81614d00565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614dc5604983613e0a565b9150614dd082614d43565b606082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e57603583613e0a565b9150614e6282614dfb565b604082019050919050565b60006020820190508181036000830152614e8681614e4a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ec3601383613e0a565b9150614ece82614e8d565b602082019050919050565b60006020820190508181036000830152614ef281614eb6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f55603683613e0a565b9150614f6082614ef9565b604082019050919050565b60006020820190508181036000830152614f8481614f48565b9050919050565b6000614f9682613f14565b9150614fa183613f14565b9250828203905081811115614fb957614fb86143fc565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061501b602683613e0a565b915061502682614fbf565b604082019050919050565b6000602082019050818103600083015261504a8161500e565b9050919050565b600081905092915050565b50565b600061506c600083615051565b91506150778261505c565b600082019050919050565b600061508d8261505f565b9150819050919050565b60006060820190506150ac6000830186613fc0565b6150b96020830185613fc0565b6150c66040830184613fc0565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061513b81613ee8565b92915050565b60006020828403121561515757615156613eb1565b5b60006151658482850161512c565b91505092915050565b6000819050919050565b600061519361518e6151898461516e565b613fea565b613f14565b9050919050565b6151a381615178565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151de81613ed6565b82525050565b60006151f083836151d5565b60208301905092915050565b6000602082019050919050565b6000615214826151a9565b61521e81856151b4565b9350615229836151c5565b8060005b8381101561525a57815161524188826151e4565b975061524c836151fc565b92505060018101905061522d565b5085935050505092915050565b600060a08201905061527c6000830188613fc0565b615289602083018761519a565b818103604083015261529b8186615209565b90506152aa6060830185614111565b6152b76080830184613fc0565b9695505050505050565b600060c0820190506152d66000830189614111565b6152e36020830188613fc0565b6152f0604083018761519a565b6152fd606083018661519a565b61530a6080830185614111565b61531760a0830184613fc0565b979650505050505050565b60008151905061533181613f1e565b92915050565b6000806000606084860312156153505761534f613eb1565b5b600061535e86828701615322565b935050602061536f86828701615322565b925050604061538086828701615322565b915050925092509256fea2646970667358221220b9b48cd7ce00df6862fc3a28938db85d3a35144a71c196ea851b2e445755f00264736f6c63430008130033

Deployed Bytecode Sourcemap

24971:18316:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10794:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12961:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25987:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25046:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11914:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35483:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25846:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26172:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31701:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13612:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25149:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11756:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14513:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25104:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25396:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35648:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25702:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25256:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12085:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21818:103;;;;;;;;;;;;;:::i;:::-;;29975:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32487:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25732:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25334:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31206:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25880:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33084:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29788:112;;;;;;;;;;;;;:::i;:::-;;21167:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25769:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26022:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32757:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11013:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34600:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25954:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26212:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26381:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26098:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15231:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12425:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35108:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26587:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25804:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34290:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33711:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32067:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25436:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25513:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30448:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12663:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25294:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30167:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25917:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22076:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26060:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25482:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35347:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10794:100;10848:13;10881:5;10874:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10794:100;:::o;12961:169::-;13044:4;13061:39;13070:12;:10;:12::i;:::-;13084:7;13093:6;13061:8;:39::i;:::-;13118:4;13111:11;;12961:169;;;;:::o;25987:28::-;;;;:::o;25046:51::-;;;:::o;11914:108::-;11975:7;12002:12;;11995:19;;11914:108;:::o;35483:157::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35590:9:::1;;;;;;;;;;;35562:38;;35579:9;35562:38;;;;;;;;;;;;35623:9;35611;;:21;;;;;;;;;;;;;;;;;;35483:157:::0;:::o;25846:27::-;;;;:::o;26172:33::-;;;;:::o;26132:::-;;;;:::o;31701:241::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31807:1:::1;31797:6;:11;;31775:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;31927:6;31917;:17;;;;:::i;:::-;31894:20;:40;;;;31701:241:::0;:::o;13612:492::-;13752:4;13769:36;13779:6;13787:9;13798:6;13769:9;:36::i;:::-;13818:24;13845:11;:19;13857:6;13845:19;;;;;;;;;;;;;;;:33;13865:12;:10;:12::i;:::-;13845:33;;;;;;;;;;;;;;;;13818:60;;13917:6;13897:16;:26;;13889:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14004:57;14013:6;14021:12;:10;:12::i;:::-;14054:6;14035:16;:25;14004:8;:57::i;:::-;14092:4;14085:11;;;13612:492;;;;;:::o;25149:53::-;25195:6;25149:53;:::o;11756:93::-;11814:5;11839:2;11832:9;;11756:93;:::o;14513:215::-;14601:4;14618:80;14627:12;:10;:12::i;:::-;14641:7;14687:10;14650:11;:25;14662:12;:10;:12::i;:::-;14650:25;;;;;;;;;;;;;;;:34;14676:7;14650:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14618:8;:80::i;:::-;14716:4;14709:11;;14513:215;;;;:::o;25104:38::-;;;:::o;25396:33::-;;;;;;;;;;;;;:::o;35648:119::-;35714:4;35738:12;:21;35751:7;35738:21;;;;;;;;;;;;;;;;;;;;;;;;;35731:28;;35648:119;;;:::o;25702:23::-;;;;;;;;;;;;;:::o;25256:31::-;;;;;;;;;;;;;:::o;12085:127::-;12159:7;12186:9;:18;12196:7;12186:18;;;;;;;;;;;;;;;;12179:25;;12085:127;;;:::o;21818:103::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21883:30:::1;21910:1;21883:18;:30::i;:::-;21818:103::o:0;29975:121::-;30027:4;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30061:5:::1;30044:14;;:22;;;;;;;;;;;;;;;;;;30084:4;30077:11;;29975:121:::0;:::o;32487:152::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32627:4:::1;32600:16;:24;32617:6;32600:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32487:152:::0;;:::o;25732:30::-;;;;;;;;;;;;;:::o;25334:35::-;;;;:::o;31206:337::-;31316:4;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31373:18:::1;;31360:9;:31;;31338:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;31504:9;31481:20;:32;;;;31531:4;31524:11;;31206:337:::0;;;:::o;25880:30::-;;;;:::o;33084:403::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33252:13:::1;33234:15;:31;;;;33294:13;33276:15;:31;;;;33330:7;33318:9;:19;;;;33399:9;;33381:15;;33363;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;33348:12;:60;;;;33443:2;33427:12;;:18;;33419:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33084:403:::0;;;:::o;29788:112::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29859:4:::1;29843:13;;:20;;;;;;;;;;;;;;;;;;29888:4;29874:11;;:18;;;;;;;;;;;;;;;;;;29788:112::o:0;21167:87::-;21213:7;21240:6;;;;;;;;;;;21233:13;;21167:87;:::o;25769:24::-;;;;;;;;;;;;;:::o;26022:31::-;;;;:::o;32757:100::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32842:7:::1;32828:11;;:21;;;;;;;;;;;;;;;;;;32757:100:::0;:::o;11013:104::-;11069:13;11102:7;11095:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11013:104;:::o;34600:304::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34744:13:::1;34736:21;;:4;:21;;::::0;34714:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34855:41;34884:4;34890:5;34855:28;:41::i;:::-;34600:304:::0;;:::o;25954:24::-;;;;:::o;26212:27::-;;;;:::o;26381:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;26098:25::-;;;;:::o;15231:413::-;15324:4;15341:24;15368:11;:25;15380:12;:10;:12::i;:::-;15368:25;;;;;;;;;;;;;;;:34;15394:7;15368:34;;;;;;;;;;;;;;;;15341:61;;15441:15;15421:16;:35;;15413:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15534:67;15543:12;:10;:12::i;:::-;15557:7;15585:15;15566:16;:34;15534:8;:67::i;:::-;15632:4;15625:11;;;15231:413;;;;:::o;12425:175::-;12511:4;12528:42;12538:12;:10;:12::i;:::-;12552:9;12563:6;12528:9;:42::i;:::-;12588:4;12581:11;;12425:175;;;;:::o;35108:231::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35268:15:::1;;;;;;;;;;;35225:59;;35248:18;35225:59;;;;;;;;;;;;35313:18;35295:15;;:36;;;;;;;;;;;;;;;;;;35108:231:::0;:::o;26587:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25804:33::-;;;;;;;;;;;;;:::o;34290:175::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34399:8:::1;34375:12;:21;34388:7;34375:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;34439:7;34423:34;;;34448:8;34423:34;;;;;;:::i;:::-;;;;;;;;34290:175:::0;;:::o;33711:412::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33881:13:::1;33862:16;:32;;;;33924:13;33905:16;:32;;;;33961:7;33948:10;:20;;;;34033:10;;34014:16;;33995;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;33979:13;:64;;;;34079:2;34062:13;;:19;;34054:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33711:412:::0;;;:::o;32067:232::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32176:1:::1;32166:6;:11;;32144:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32287:4;32273:13;:11;:13::i;:::-;32264:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;32252:9;:39;;;;32067:232:::0;:::o;25436:39::-;;;;;;;;;;;;;:::o;25513:35::-;;;;:::o;30448:639::-;30556:4;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30628:6:::1;30613:13;:11;:13::i;:::-;:21;;;;:::i;:::-;30600:9;:34;;30578:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30782:6;30767:13;:11;:13::i;:::-;30761:3;:19;;;;:::i;:::-;:27;;;;:::i;:::-;30748:9;:40;;30726:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30914:20;;30901:9;:33;;30879:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;31048:9;31027:18;:30;;;;31075:4;31068:11;;30448:639:::0;;;:::o;12663:151::-;12752:7;12779:11;:18;12791:5;12779:18;;;;;;;;;;;;;;;:27;12798:7;12779:27;;;;;;;;;;;;;;;;12772:34;;12663:151;;;;:::o;25294:33::-;;;;:::o;30167:135::-;30227:4;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30267:5:::1;30244:20;;:28;;;;;;;;;;;;;;;;;;30290:4;30283:11;;30167:135:::0;:::o;25917:30::-;;;;:::o;22076:201::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22185:1:::1;22165:22;;:8;:22;;::::0;22157:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22241:28;22260:8;22241:18;:28::i;:::-;22076:201:::0;:::o;26060:31::-;;;;:::o;25482:24::-;;;;:::o;35347:128::-;21398:12;:10;:12::i;:::-;21387:23;;:7;:5;:7::i;:::-;:23;;;21379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35456:11:::1;35445:8;;:22;;;;;;;;;;;;;;;;;;35347:128:::0;:::o;9800:98::-;9853:7;9880:10;9873:17;;9800:98;:::o;18915:380::-;19068:1;19051:19;;:5;:19;;;19043:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19149:1;19130:21;;:7;:21;;;19122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19233:6;19203:11;:18;19215:5;19203:18;;;;;;;;;;;;;;;:27;19222:7;19203:27;;;;;;;;;;;;;;;:36;;;;19271:7;19255:32;;19264:5;19255:32;;;19280:6;19255:32;;;;;;:::i;:::-;;;;;;;;18915:380;;;:::o;35775:4630::-;35923:1;35907:18;;:4;:18;;;35899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36000:1;35986:16;;:2;:16;;;35978:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36069:1;36059:6;:11;36055:93;;36087:28;36103:4;36109:2;36113:1;36087:15;:28::i;:::-;36130:7;;36055:93;36164:14;;;;;;;;;;;36160:2428;;;36225:7;:5;:7::i;:::-;36217:15;;:4;:15;;;;:49;;;;;36259:7;:5;:7::i;:::-;36253:13;;:2;:13;;;;36217:49;:86;;;;;36301:1;36287:16;;:2;:16;;;;36217:86;:128;;;;;36338:6;36324:21;;:2;:21;;;;36217:128;:158;;;;;36367:8;;;;;;;;;;;36366:9;36217:158;36195:2382;;;36415:13;;;;;;;;;;;36410:209;;36487:12;:18;36500:4;36487:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;36509:12;:16;36522:2;36509:16;;;;;;;;;;;;;;;;;;;;;;;;;36487:38;36453:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;36410:209;36775:20;;;;;;;;;;;36771:641;;;36856:7;:5;:7::i;:::-;36850:13;;:2;:13;;;;:72;;;;;36906:15;36892:30;;:2;:30;;;;36850:72;:129;;;;;36965:13;36951:28;;:2;:28;;;;36850:129;36820:573;;;37143:12;37068:28;:39;37097:9;37068:39;;;;;;;;;;;;;;;;:87;37030:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;37357:12;37315:28;:39;37344:9;37315:39;;;;;;;;;;;;;;;:54;;;;36820:573;36771:641;37486:25;:31;37512:4;37486:31;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;37543:16;:20;37560:2;37543:20;;;;;;;;;;;;;;;;;;;;;;;;;37542:21;37486:77;37460:1102;;;37650:20;;37640:6;:30;;37606:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37858:9;;37841:13;37851:2;37841:9;:13::i;:::-;37832:6;:22;;;;:::i;:::-;:35;;37798:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37460:1102;;;38036:25;:29;38062:2;38036:29;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;38091:16;:22;38108:4;38091:22;;;;;;;;;;;;;;;;;;;;;;;;;38090:23;38036:77;38010:552;;;38200:20;;38190:6;:30;;38156:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;38010:552;;;38357:16;:20;38374:2;38357:20;;;;;;;;;;;;;;;;;;;;;;;;;38352:210;;38462:9;;38445:13;38455:2;38445:9;:13::i;:::-;38436:6;:22;;;;:::i;:::-;:35;;38402:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38352:210;38010:552;37460:1102;36195:2382;36160:2428;38600:28;38631:24;38649:4;38631:9;:24::i;:::-;38600:55;;38668:12;38707:18;;38683:20;:42;;38668:57;;38756:7;:35;;;;;38780:11;;;;;;;;;;;38756:35;:61;;;;;38809:8;;;;;;;;;;;38808:9;38756:61;:110;;;;;38835:25;:31;38861:4;38835:31;;;;;;;;;;;;;;;;;;;;;;;;;38834:32;38756:110;:146;;;;;38884:12;:18;38897:4;38884:18;;;;;;;;;;;;;;;;;;;;;;;;;38883:19;38756:146;:180;;;;;38920:12;:16;38933:2;38920:16;;;;;;;;;;;;;;;;;;;;;;;;;38919:17;38756:180;38738:312;;;38974:4;38963:8;;:15;;;;;;;;;;;;;;;;;;38995:10;:8;:10::i;:::-;39033:5;39022:8;;:16;;;;;;;;;;;;;;;;;;38738:312;39062:12;39078:8;;;;;;;;;;;39077:9;39062:24;;39188:12;:18;39201:4;39188:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;39210:12;:16;39223:2;39210:16;;;;;;;;;;;;;;;;;;;;;;;;;39188:38;39184:86;;;39253:5;39243:15;;39184:86;39282:12;39387:7;39383:969;;;39439:25;:29;39465:2;39439:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39488:1;39472:13;;:17;39439:50;39435:768;;;39517:34;39547:3;39517:25;39528:13;;39517:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39510:41;;39620:13;;39600:16;;39593:4;:23;;;;:::i;:::-;39592:41;;;;:::i;:::-;39570:18;;:63;;;;;;;:::i;:::-;;;;;;;;39690:13;;39676:10;;39669:4;:17;;;;:::i;:::-;39668:35;;;;:::i;:::-;39652:12;;:51;;;;;;;:::i;:::-;;;;;;;;39772:13;;39752:16;;39745:4;:23;;;;:::i;:::-;39744:41;;;;:::i;:::-;39722:18;;:63;;;;;;;:::i;:::-;;;;;;;;39435:768;;;39847:25;:31;39873:4;39847:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39897:1;39882:12;;:16;39847:51;39843:360;;;39926:33;39955:3;39926:24;39937:12;;39926:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39919:40;;40027:12;;40008:15;;40001:4;:22;;;;:::i;:::-;40000:39;;;;:::i;:::-;39978:18;;:61;;;;;;;:::i;:::-;;;;;;;;40095:12;;40082:9;;40075:4;:16;;;;:::i;:::-;40074:33;;;;:::i;:::-;40058:12;;:49;;;;;;;:::i;:::-;;;;;;;;40175:12;;40156:15;;40149:4;:22;;;;:::i;:::-;40148:39;;;;:::i;:::-;40126:18;;:61;;;;;;;:::i;:::-;;;;;;;;39843:360;39435:768;40230:1;40223:4;:8;40219:91;;;40252:42;40268:4;40282;40289;40252:15;:42::i;:::-;40219:91;40336:4;40326:14;;;;;:::i;:::-;;;39383:969;40364:33;40380:4;40386:2;40390:6;40364:15;:33::i;:::-;35888:4517;;;;35775:4630;;;;:::o;22437:191::-;22511:16;22530:6;;;;;;;;;;;22511:25;;22556:8;22547:6;;:17;;;;;;;;;;;;;;;;;;22611:8;22580:40;;22601:8;22580:40;;;;;;;;;;;;22500:128;22437:191;:::o;34912:188::-;35029:5;34995:25;:31;35021:4;34995:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35086:5;35052:40;;35080:4;35052:40;;;;;;;;;;;;34912:188;;:::o;16134:733::-;16292:1;16274:20;;:6;:20;;;16266:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16376:1;16355:23;;:9;:23;;;16347:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16431:47;16452:6;16460:9;16471:6;16431:20;:47::i;:::-;16491:21;16515:9;:17;16525:6;16515:17;;;;;;;;;;;;;;;;16491:41;;16568:6;16551:13;:23;;16543:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16689:6;16673:13;:22;16653:9;:17;16663:6;16653:17;;;;;;;;;;;;;;;:42;;;;16741:6;16717:9;:20;16727:9;16717:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16782:9;16765:35;;16774:6;16765:35;;;16793:6;16765:35;;;;;;:::i;:::-;;;;;;;;16813:46;16833:6;16841:9;16852:6;16813:19;:46::i;:::-;16255:612;16134:733;;;:::o;41532:1750::-;41571:23;41597:24;41615:4;41597:9;:24::i;:::-;41571:50;;41632:25;41728:12;;41694:18;;41660;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;41632:108;;41751:12;41799:1;41780:15;:20;:46;;;;41825:1;41804:17;:22;41780:46;41776:85;;;41843:7;;;;;41776:85;41895:20;;41877:15;:38;41873:109;;;41950:20;;41932:38;;41873:109;42043:23;42156:1;42123:17;42088:18;;42070:15;:36;;;;:::i;:::-;42069:71;;;;:::i;:::-;:88;;;;:::i;:::-;42043:114;;42168:26;42197:36;42217:15;42197;:19;;:36;;;;:::i;:::-;42168:65;;42246:25;42274:21;42246:49;;42308:36;42325:18;42308:16;:36::i;:::-;42357:18;42378:44;42404:17;42378:21;:25;;:44;;;;:::i;:::-;42357:65;;42435:23;42461:81;42514:17;42461:34;42476:18;;42461:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;42435:107;;42553:17;42573:51;42606:17;42573:28;42588:12;;42573:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42553:71;;42637:23;42694:9;42676:15;42663:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42637:66;;42737:1;42716:18;:22;;;;42770:1;42749:18;:22;;;;42797:1;42782:12;:16;;;;42833:9;;;;;;;;;;;42825:23;;42856:9;42825:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42811:59;;;;;42905:1;42887:15;:19;:42;;;;;42928:1;42910:15;:19;42887:42;42883:278;;;42946:46;42959:15;42976;42946:12;:46::i;:::-;43012:137;43045:18;43082:15;43116:18;;43012:137;;;;;;;;:::i;:::-;;;;;;;;42883:278;43195:15;;;;;;;;;;;43187:29;;43238:21;43187:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43173:101;;;;;41560:1722;;;;;;;;;;41532:1750;:::o;3243:98::-;3301:7;3332:1;3328;:5;;;;:::i;:::-;3321:12;;3243:98;;;;:::o;3642:::-;3700:7;3731:1;3727;:5;;;;:::i;:::-;3720:12;;3642:98;;;;:::o;19895:125::-;;;;:::o;20624:124::-;;;;:::o;2886:98::-;2944:7;2975:1;2971;:5;;;;:::i;:::-;2964:12;;2886:98;;;;:::o;40413:589::-;40539:21;40577:1;40563:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40539:40;;40608:4;40590;40595:1;40590:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40634:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40624:4;40629:1;40624:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40669:62;40686:4;40701:15;40719:11;40669:8;:62::i;:::-;40770:15;:66;;;40851:11;40877:1;40921:4;40948;40968:15;40770:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40468:534;40413:589;:::o;41010:514::-;41158:62;41175:4;41190:15;41208:11;41158:8;:62::i;:::-;41263:15;:31;;;41302:9;41335:4;41355:11;41381:1;41424;41467:8;;;;;;;;;;;41490:15;41263:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41010:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:234::-;10659:34;10655:1;10647:6;10643:14;10636:58;10728:17;10723:2;10715:6;10711:15;10704:42;10519:234;:::o;10759:366::-;10901:3;10922:67;10986:2;10981:3;10922:67;:::i;:::-;10915:74;;10998:93;11087:3;10998:93;:::i;:::-;11116:2;11111:3;11107:12;11100:19;;10759:366;;;:::o;11131:419::-;11297:4;11335:2;11324:9;11320:18;11312:26;;11384:9;11378:4;11374:20;11370:1;11359:9;11355:17;11348:47;11412:131;11538:4;11412:131;:::i;:::-;11404:139;;11131:419;;;:::o;11556:180::-;11604:77;11601:1;11594:88;11701:4;11698:1;11691:15;11725:4;11722:1;11715:15;11742:410;11782:7;11805:20;11823:1;11805:20;:::i;:::-;11800:25;;11839:20;11857:1;11839:20;:::i;:::-;11834:25;;11894:1;11891;11887:9;11916:30;11934:11;11916:30;:::i;:::-;11905:41;;12095:1;12086:7;12082:15;12079:1;12076:22;12056:1;12049:9;12029:83;12006:139;;12125:18;;:::i;:::-;12006:139;11790:362;11742:410;;;;:::o;12158:227::-;12298:34;12294:1;12286:6;12282:14;12275:58;12367:10;12362:2;12354:6;12350:15;12343:35;12158:227;:::o;12391:366::-;12533:3;12554:67;12618:2;12613:3;12554:67;:::i;:::-;12547:74;;12630:93;12719:3;12630:93;:::i;:::-;12748:2;12743:3;12739:12;12732:19;;12391:366;;;:::o;12763:419::-;12929:4;12967:2;12956:9;12952:18;12944:26;;13016:9;13010:4;13006:20;13002:1;12991:9;12987:17;12980:47;13044:131;13170:4;13044:131;:::i;:::-;13036:139;;12763:419;;;:::o;13188:191::-;13228:3;13247:20;13265:1;13247:20;:::i;:::-;13242:25;;13281:20;13299:1;13281:20;:::i;:::-;13276:25;;13324:1;13321;13317:9;13310:16;;13345:3;13342:1;13339:10;13336:36;;;13352:18;;:::i;:::-;13336:36;13188:191;;;;:::o;13385:238::-;13525:34;13521:1;13513:6;13509:14;13502:58;13594:21;13589:2;13581:6;13577:15;13570:46;13385:238;:::o;13629:366::-;13771:3;13792:67;13856:2;13851:3;13792:67;:::i;:::-;13785:74;;13868:93;13957:3;13868:93;:::i;:::-;13986:2;13981:3;13977:12;13970:19;;13629:366;;;:::o;14001:419::-;14167:4;14205:2;14194:9;14190:18;14182:26;;14254:9;14248:4;14244:20;14240:1;14229:9;14225:17;14218:47;14282:131;14408:4;14282:131;:::i;:::-;14274:139;;14001:419;;;:::o;14426:179::-;14566:31;14562:1;14554:6;14550:14;14543:55;14426:179;:::o;14611:366::-;14753:3;14774:67;14838:2;14833:3;14774:67;:::i;:::-;14767:74;;14850:93;14939:3;14850:93;:::i;:::-;14968:2;14963:3;14959:12;14952:19;;14611:366;;;:::o;14983:419::-;15149:4;15187:2;15176:9;15172:18;15164:26;;15236:9;15230:4;15226:20;15222:1;15211:9;15207:17;15200:47;15264:131;15390:4;15264:131;:::i;:::-;15256:139;;14983:419;;;:::o;15408:244::-;15548:34;15544:1;15536:6;15532:14;15525:58;15617:27;15612:2;15604:6;15600:15;15593:52;15408:244;:::o;15658:366::-;15800:3;15821:67;15885:2;15880:3;15821:67;:::i;:::-;15814:74;;15897:93;15986:3;15897:93;:::i;:::-;16015:2;16010:3;16006:12;15999:19;;15658:366;;;:::o;16030:419::-;16196:4;16234:2;16223:9;16219:18;16211:26;;16283:9;16277:4;16273:20;16269:1;16258:9;16254:17;16247:47;16311:131;16437:4;16311:131;:::i;:::-;16303:139;;16030:419;;;:::o;16455:224::-;16595:34;16591:1;16583:6;16579:14;16572:58;16664:7;16659:2;16651:6;16647:15;16640:32;16455:224;:::o;16685:366::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:419::-;17223:4;17261:2;17250:9;17246:18;17238:26;;17310:9;17304:4;17300:20;17296:1;17285:9;17281:17;17274:47;17338:131;17464:4;17338:131;:::i;:::-;17330:139;;17057:419;;;:::o;17482:223::-;17622:34;17618:1;17610:6;17606:14;17599:58;17691:6;17686:2;17678:6;17674:15;17667:31;17482:223;:::o;17711:366::-;17853:3;17874:67;17938:2;17933:3;17874:67;:::i;:::-;17867:74;;17950:93;18039:3;17950:93;:::i;:::-;18068:2;18063:3;18059:12;18052:19;;17711:366;;;:::o;18083:419::-;18249:4;18287:2;18276:9;18272:18;18264:26;;18336:9;18330:4;18326:20;18322:1;18311:9;18307:17;18300:47;18364:131;18490:4;18364:131;:::i;:::-;18356:139;;18083:419;;;:::o;18508:180::-;18556:77;18553:1;18546:88;18653:4;18650:1;18643:15;18677:4;18674:1;18667:15;18694:185;18734:1;18751:20;18769:1;18751:20;:::i;:::-;18746:25;;18785:20;18803:1;18785:20;:::i;:::-;18780:25;;18824:1;18814:35;;18829:18;;:::i;:::-;18814:35;18871:1;18868;18864:9;18859:14;;18694:185;;;;:::o;18885:240::-;19025:34;19021:1;19013:6;19009:14;19002:58;19094:23;19089:2;19081:6;19077:15;19070:48;18885:240;:::o;19131:366::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:419::-;19669:4;19707:2;19696:9;19692:18;19684:26;;19756:9;19750:4;19746:20;19742:1;19731:9;19727:17;19720:47;19784:131;19910:4;19784:131;:::i;:::-;19776:139;;19503:419;;;:::o;19928:239::-;20068:34;20064:1;20056:6;20052:14;20045:58;20137:22;20132:2;20124:6;20120:15;20113:47;19928:239;:::o;20173:366::-;20315:3;20336:67;20400:2;20395:3;20336:67;:::i;:::-;20329:74;;20412:93;20501:3;20412:93;:::i;:::-;20530:2;20525:3;20521:12;20514:19;;20173:366;;;:::o;20545:419::-;20711:4;20749:2;20738:9;20734:18;20726:26;;20798:9;20792:4;20788:20;20784:1;20773:9;20769:17;20762:47;20826:131;20952:4;20826:131;:::i;:::-;20818:139;;20545:419;;;:::o;20970:241::-;21110:34;21106:1;21098:6;21094:14;21087:58;21179:24;21174:2;21166:6;21162:15;21155:49;20970:241;:::o;21217:366::-;21359:3;21380:67;21444:2;21439:3;21380:67;:::i;:::-;21373:74;;21456:93;21545:3;21456:93;:::i;:::-;21574:2;21569:3;21565:12;21558:19;;21217:366;;;:::o;21589:419::-;21755:4;21793:2;21782:9;21778:18;21770:26;;21842:9;21836:4;21832:20;21828:1;21817:9;21813:17;21806:47;21870:131;21996:4;21870:131;:::i;:::-;21862:139;;21589:419;;;:::o;22014:225::-;22154:34;22150:1;22142:6;22138:14;22131:58;22223:8;22218:2;22210:6;22206:15;22199:33;22014:225;:::o;22245:366::-;22387:3;22408:67;22472:2;22467:3;22408:67;:::i;:::-;22401:74;;22484:93;22573:3;22484:93;:::i;:::-;22602:2;22597:3;22593:12;22586:19;;22245:366;;;:::o;22617:419::-;22783:4;22821:2;22810:9;22806:18;22798:26;;22870:9;22864:4;22860:20;22856:1;22845:9;22841:17;22834:47;22898:131;23024:4;22898:131;:::i;:::-;22890:139;;22617:419;;;:::o;23042:223::-;23182:34;23178:1;23170:6;23166:14;23159:58;23251:6;23246:2;23238:6;23234:15;23227:31;23042:223;:::o;23271:366::-;23413:3;23434:67;23498:2;23493:3;23434:67;:::i;:::-;23427:74;;23510:93;23599:3;23510:93;:::i;:::-;23628:2;23623:3;23619:12;23612:19;;23271:366;;;:::o;23643:419::-;23809:4;23847:2;23836:9;23832:18;23824:26;;23896:9;23890:4;23886:20;23882:1;23871:9;23867:17;23860:47;23924:131;24050:4;23924:131;:::i;:::-;23916:139;;23643:419;;;:::o;24068:221::-;24208:34;24204:1;24196:6;24192:14;24185:58;24277:4;24272:2;24264:6;24260:15;24253:29;24068:221;:::o;24295:366::-;24437:3;24458:67;24522:2;24517:3;24458:67;:::i;:::-;24451:74;;24534:93;24623:3;24534:93;:::i;:::-;24652:2;24647:3;24643:12;24636:19;;24295:366;;;:::o;24667:419::-;24833:4;24871:2;24860:9;24856:18;24848:26;;24920:9;24914:4;24910:20;24906:1;24895:9;24891:17;24884:47;24948:131;25074:4;24948:131;:::i;:::-;24940:139;;24667:419;;;:::o;25092:224::-;25232:34;25228:1;25220:6;25216:14;25209:58;25301:7;25296:2;25288:6;25284:15;25277:32;25092:224;:::o;25322:366::-;25464:3;25485:67;25549:2;25544:3;25485:67;:::i;:::-;25478:74;;25561:93;25650:3;25561:93;:::i;:::-;25679:2;25674:3;25670:12;25663:19;;25322:366;;;:::o;25694:419::-;25860:4;25898:2;25887:9;25883:18;25875:26;;25947:9;25941:4;25937:20;25933:1;25922:9;25918:17;25911:47;25975:131;26101:4;25975:131;:::i;:::-;25967:139;;25694:419;;;:::o;26119:222::-;26259:34;26255:1;26247:6;26243:14;26236:58;26328:5;26323:2;26315:6;26311:15;26304:30;26119:222;:::o;26347:366::-;26489:3;26510:67;26574:2;26569:3;26510:67;:::i;:::-;26503:74;;26586:93;26675:3;26586:93;:::i;:::-;26704:2;26699:3;26695:12;26688:19;;26347:366;;;:::o;26719:419::-;26885:4;26923:2;26912:9;26908:18;26900:26;;26972:9;26966:4;26962:20;26958:1;26947:9;26943:17;26936:47;27000:131;27126:4;27000:131;:::i;:::-;26992:139;;26719:419;;;:::o;27144:172::-;27284:24;27280:1;27272:6;27268:14;27261:48;27144:172;:::o;27322:366::-;27464:3;27485:67;27549:2;27544:3;27485:67;:::i;:::-;27478:74;;27561:93;27650:3;27561:93;:::i;:::-;27679:2;27674:3;27670:12;27663:19;;27322:366;;;:::o;27694:419::-;27860:4;27898:2;27887:9;27883:18;27875:26;;27947:9;27941:4;27937:20;27933:1;27922:9;27918:17;27911:47;27975:131;28101:4;27975:131;:::i;:::-;27967:139;;27694:419;;;:::o;28119:297::-;28259:34;28255:1;28247:6;28243:14;28236:58;28328:34;28323:2;28315:6;28311:15;28304:59;28397:11;28392:2;28384:6;28380:15;28373:36;28119:297;:::o;28422:366::-;28564:3;28585:67;28649:2;28644:3;28585:67;:::i;:::-;28578:74;;28661:93;28750:3;28661:93;:::i;:::-;28779:2;28774:3;28770:12;28763:19;;28422:366;;;:::o;28794:419::-;28960:4;28998:2;28987:9;28983:18;28975:26;;29047:9;29041:4;29037:20;29033:1;29022:9;29018:17;29011:47;29075:131;29201:4;29075:131;:::i;:::-;29067:139;;28794:419;;;:::o;29219:240::-;29359:34;29355:1;29347:6;29343:14;29336:58;29428:23;29423:2;29415:6;29411:15;29404:48;29219:240;:::o;29465:366::-;29607:3;29628:67;29692:2;29687:3;29628:67;:::i;:::-;29621:74;;29704:93;29793:3;29704:93;:::i;:::-;29822:2;29817:3;29813:12;29806:19;;29465:366;;;:::o;29837:419::-;30003:4;30041:2;30030:9;30026:18;30018:26;;30090:9;30084:4;30080:20;30076:1;30065:9;30061:17;30054:47;30118:131;30244:4;30118:131;:::i;:::-;30110:139;;29837:419;;;:::o;30262:169::-;30402:21;30398:1;30390:6;30386:14;30379:45;30262:169;:::o;30437:366::-;30579:3;30600:67;30664:2;30659:3;30600:67;:::i;:::-;30593:74;;30676:93;30765:3;30676:93;:::i;:::-;30794:2;30789:3;30785:12;30778:19;;30437:366;;;:::o;30809:419::-;30975:4;31013:2;31002:9;30998:18;30990:26;;31062:9;31056:4;31052:20;31048:1;31037:9;31033:17;31026:47;31090:131;31216:4;31090:131;:::i;:::-;31082:139;;30809:419;;;:::o;31234:241::-;31374:34;31370:1;31362:6;31358:14;31351:58;31443:24;31438:2;31430:6;31426:15;31419:49;31234:241;:::o;31481:366::-;31623:3;31644:67;31708:2;31703:3;31644:67;:::i;:::-;31637:74;;31720:93;31809:3;31720:93;:::i;:::-;31838:2;31833:3;31829:12;31822:19;;31481:366;;;:::o;31853:419::-;32019:4;32057:2;32046:9;32042:18;32034:26;;32106:9;32100:4;32096:20;32092:1;32081:9;32077:17;32070:47;32134:131;32260:4;32134:131;:::i;:::-;32126:139;;31853:419;;;:::o;32278:194::-;32318:4;32338:20;32356:1;32338:20;:::i;:::-;32333:25;;32372:20;32390:1;32372:20;:::i;:::-;32367:25;;32416:1;32413;32409:9;32401:17;;32440:1;32434:4;32431:11;32428:37;;;32445:18;;:::i;:::-;32428:37;32278:194;;;;:::o;32478:225::-;32618:34;32614:1;32606:6;32602:14;32595:58;32687:8;32682:2;32674:6;32670:15;32663:33;32478:225;:::o;32709:366::-;32851:3;32872:67;32936:2;32931:3;32872:67;:::i;:::-;32865:74;;32948:93;33037:3;32948:93;:::i;:::-;33066:2;33061:3;33057:12;33050:19;;32709:366;;;:::o;33081:419::-;33247:4;33285:2;33274:9;33270:18;33262:26;;33334:9;33328:4;33324:20;33320:1;33309:9;33305:17;33298:47;33362:131;33488:4;33362:131;:::i;:::-;33354:139;;33081:419;;;:::o;33506:147::-;33607:11;33644:3;33629:18;;33506:147;;;;:::o;33659:114::-;;:::o;33779:398::-;33938:3;33959:83;34040:1;34035:3;33959:83;:::i;:::-;33952:90;;34051:93;34140:3;34051:93;:::i;:::-;34169:1;34164:3;34160:11;34153:18;;33779:398;;;:::o;34183:379::-;34367:3;34389:147;34532:3;34389:147;:::i;:::-;34382:154;;34553:3;34546:10;;34183:379;;;:::o;34568:442::-;34717:4;34755:2;34744:9;34740:18;34732:26;;34768:71;34836:1;34825:9;34821:17;34812:6;34768:71;:::i;:::-;34849:72;34917:2;34906:9;34902:18;34893:6;34849:72;:::i;:::-;34931;34999:2;34988:9;34984:18;34975:6;34931:72;:::i;:::-;34568:442;;;;;;:::o;35016:180::-;35064:77;35061:1;35054:88;35161:4;35158:1;35151:15;35185:4;35182:1;35175:15;35202:180;35250:77;35247:1;35240:88;35347:4;35344:1;35337:15;35371:4;35368:1;35361:15;35388:143;35445:5;35476:6;35470:13;35461:22;;35492:33;35519:5;35492:33;:::i;:::-;35388:143;;;;:::o;35537:351::-;35607:6;35656:2;35644:9;35635:7;35631:23;35627:32;35624:119;;;35662:79;;:::i;:::-;35624:119;35782:1;35807:64;35863:7;35854:6;35843:9;35839:22;35807:64;:::i;:::-;35797:74;;35753:128;35537:351;;;;:::o;35894:85::-;35939:7;35968:5;35957:16;;35894:85;;;:::o;35985:158::-;36043:9;36076:61;36094:42;36103:32;36129:5;36103:32;:::i;:::-;36094:42;:::i;:::-;36076:61;:::i;:::-;36063:74;;35985:158;;;:::o;36149:147::-;36244:45;36283:5;36244:45;:::i;:::-;36239:3;36232:58;36149:147;;:::o;36302:114::-;36369:6;36403:5;36397:12;36387:22;;36302:114;;;:::o;36422:184::-;36521:11;36555:6;36550:3;36543:19;36595:4;36590:3;36586:14;36571:29;;36422:184;;;;:::o;36612:132::-;36679:4;36702:3;36694:11;;36732:4;36727:3;36723:14;36715:22;;36612:132;;;:::o;36750:108::-;36827:24;36845:5;36827:24;:::i;:::-;36822:3;36815:37;36750:108;;:::o;36864:179::-;36933:10;36954:46;36996:3;36988:6;36954:46;:::i;:::-;37032:4;37027:3;37023:14;37009:28;;36864:179;;;;:::o;37049:113::-;37119:4;37151;37146:3;37142:14;37134:22;;37049:113;;;:::o;37198:732::-;37317:3;37346:54;37394:5;37346:54;:::i;:::-;37416:86;37495:6;37490:3;37416:86;:::i;:::-;37409:93;;37526:56;37576:5;37526:56;:::i;:::-;37605:7;37636:1;37621:284;37646:6;37643:1;37640:13;37621:284;;;37722:6;37716:13;37749:63;37808:3;37793:13;37749:63;:::i;:::-;37742:70;;37835:60;37888:6;37835:60;:::i;:::-;37825:70;;37681:224;37668:1;37665;37661:9;37656:14;;37621:284;;;37625:14;37921:3;37914:10;;37322:608;;;37198:732;;;;:::o;37936:831::-;38199:4;38237:3;38226:9;38222:19;38214:27;;38251:71;38319:1;38308:9;38304:17;38295:6;38251:71;:::i;:::-;38332:80;38408:2;38397:9;38393:18;38384:6;38332:80;:::i;:::-;38459:9;38453:4;38449:20;38444:2;38433:9;38429:18;38422:48;38487:108;38590:4;38581:6;38487:108;:::i;:::-;38479:116;;38605:72;38673:2;38662:9;38658:18;38649:6;38605:72;:::i;:::-;38687:73;38755:3;38744:9;38740:19;38731:6;38687:73;:::i;:::-;37936:831;;;;;;;;:::o;38773:807::-;39022:4;39060:3;39049:9;39045:19;39037:27;;39074:71;39142:1;39131:9;39127:17;39118:6;39074:71;:::i;:::-;39155:72;39223:2;39212:9;39208:18;39199:6;39155:72;:::i;:::-;39237:80;39313:2;39302:9;39298:18;39289:6;39237:80;:::i;:::-;39327;39403:2;39392:9;39388:18;39379:6;39327:80;:::i;:::-;39417:73;39485:3;39474:9;39470:19;39461:6;39417:73;:::i;:::-;39500;39568:3;39557:9;39553:19;39544:6;39500:73;:::i;:::-;38773:807;;;;;;;;;:::o;39586:143::-;39643:5;39674:6;39668:13;39659:22;;39690:33;39717:5;39690:33;:::i;:::-;39586:143;;;;:::o;39735:663::-;39823:6;39831;39839;39888:2;39876:9;39867:7;39863:23;39859:32;39856:119;;;39894:79;;:::i;:::-;39856:119;40014:1;40039:64;40095:7;40086:6;40075:9;40071:22;40039:64;:::i;:::-;40029:74;;39985:128;40152:2;40178:64;40234:7;40225:6;40214:9;40210:22;40178:64;:::i;:::-;40168:74;;40123:129;40291:2;40317:64;40373:7;40364:6;40353:9;40349:22;40317:64;:::i;:::-;40307:74;;40262:129;39735:663;;;;;:::o

Swarm Source

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