ETH Price: $3,242.41 (-0.50%)
Gas: 1 Gwei

Token

FUA Token (FUA)
 

Overview

Max Total Supply

177,000,000,000 FUA

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
pnl.eth
Balance
0 FUA

Value
$0.00
0x8d73a36d78e2ae4a437053c9ce3be70d483ab74d
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:
FUA

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-20
*/

/*
 * SPDX-License-Identifier: MIT
 * https://fuatoken.io/
 * https://twitter.com/FUA_Token
 * https://t.me/FUA_Eth
 */

pragma solidity 0.8.25;

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 upd 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 upd 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 upd 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 IDexFactory {
    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 IDexRouter {
    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 FUA is ERC20, Ownable {
    using SafeMath for uint256;

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

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

    bool public tradingEnabled = false;

    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

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

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

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

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

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor() ERC20("FUA Token", "FUA") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        exemptFromLimits(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        exemptFromLimits(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyMarketingTax = 0;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 3;
        uint256 _sellProjectTax = 0;

        uint256 _totalSupply = 177_000_000_000 * 10 ** decimals();

        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        marketingWallet = address(0xE4F138fFcd521cc754F5e166F1a0f57873fD9920);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        exemptFromFees(msg.sender, true);
        exemptFromFees(address(this), true);
        exemptFromFees(address(0xdead), true);
        exemptFromFees(marketingWallet, true);

        exemptFromLimits(msg.sender, true);
        exemptFromLimits(address(this), true);
        exemptFromLimits(address(0xdead), true);
        exemptFromLimits(marketingWallet, true);

        transferOwnership(msg.sender);

        /*
            _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  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function startTrading() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function removeAllLimits() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice Removes the transfer delay
     * @dev onlyOwner.
     * Emits an {DisabledTransferDelay} event
     */
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTheMaxTx(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

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

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function exemptFromLimits(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesBuy(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesSell(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function exemptFromFees(address account, bool excluded) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newWallet The new marketing wallet
     */
    function changeMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newWallet The new dev wallet
     */
    function changeProjectWallet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackValues()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _transferDelayEnabled  if the transfer delay is enabled
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function maxTxValues()
        external
        view
        returns (
            bool _limitsEnabled,
            bool _transferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsEnabled = limitsEnabled;
        _transferDelayEnabled = transferDelayEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function receiverwallets()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function taxValues()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

    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 (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: 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(dexRouter) &&
                        to != address(dexPair)
                    ) {
                        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] && !transferLimitExempt[to]
                ) {
                    require(
                        amount <= maxTx,
                        "Buy transfer amount exceeds the maxTx."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] && !transferLimitExempt[from]
                ) {
                    require(
                        amount <= maxTx,
                        "Sell transfer amount exceeds the maxTx."
                    );
                } else if (!transferLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (transferTaxExempt[from] || transferTaxExempt[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] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

            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] = dexRouter.WETH();

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

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

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

        if (contractBalance == 0) {
            return;
        }

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

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        tokensForMarketing = 0;
        tokensForProject = 0;

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

        (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":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","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":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxValues","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"bool","name":"_transferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","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":"receiverwallets","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackValues","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxValues","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"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"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600560156101000a81548160ff021916908315150217905550600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055505f600c5f6101000a81548160ff021916908315150217905550348015610077575f80fd5b506040518060400160405280600981526020017f46554120546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f465541000000000000000000000000000000000000000000000000000000000081525081600390816100f39190610e59565b5080600490816101039190610e59565b5050506101226101176105b660201b60201c565b6105bd60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014b81600161068060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ec9190610f86565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610251573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102759190610f86565b6040518363ffffffff1660e01b8152600401610292929190610fc0565b6020604051808303815f875af11580156102ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d29190610f86565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061031860a051600161068060201b60201c565b61032b60a05160016107ae60201b60201c565b5f805f600390505f8061034261084c60201b60201c565b600a61034e919061114f565b64293605aa0061035e9190611199565b90506103e8600a826103709190611199565b61037a9190611207565b600a819055506103e8600a826103909190611199565b61039a9190611207565b6009819055506103e86001826103b09190611199565b6103ba9190611207565b60068190555060646002826103cf9190611199565b6103d99190611207565b60078190555084600f8190555083601081905550601054600f546103fd9190611237565b600e8190555082601281905550816013819055506013546012546104219190611237565b60118190555073e4f138ffcd521cc754f5e166f1a0f57873fd9920600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104cd33600161085460201b60201c565b6104de30600161085460201b60201c565b6104f161dead600161085460201b60201c565b610524600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161085460201b60201c565b61053533600161068060201b60201c565b61054630600161068060201b60201c565b61055961dead600161068060201b60201c565b61058c600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161068060201b60201c565b61059b3361098260201b60201c565b6105ab3382610a8a60201b60201c565b505050505050611433565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61068e6105b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106b2610bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff906112c4565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516107a291906112fc565b60405180910390a25050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f6012905090565b6108626105b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16610886610bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d3906112c4565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161097691906112fc565b60405180910390a25050565b6109906105b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166109b4610bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906112c4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90611385565b60405180910390fd5b610a87816105bd60201b60201c565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef906113ed565b60405180910390fd5b610b095f8383610c1560201b60201c565b8060025f828254610b1a9190611237565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b6c9190611237565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bd0919061141a565b60405180910390a3610be95f8383610c1a60201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610c9a57607f821691505b602082108103610cad57610cac610c56565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610cd4565b610d198683610cd4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610d5d610d58610d5384610d31565b610d3a565b610d31565b9050919050565b5f819050919050565b610d7683610d43565b610d8a610d8282610d64565b848454610ce0565b825550505050565b5f90565b610d9e610d92565b610da9818484610d6d565b505050565b5b81811015610dcc57610dc15f82610d96565b600181019050610daf565b5050565b601f821115610e1157610de281610cb3565b610deb84610cc5565b81016020851015610dfa578190505b610e0e610e0685610cc5565b830182610dae565b50505b505050565b5f82821c905092915050565b5f610e315f1984600802610e16565b1980831691505092915050565b5f610e498383610e22565b9150826002028217905092915050565b610e6282610c1f565b67ffffffffffffffff811115610e7b57610e7a610c29565b5b610e858254610c83565b610e90828285610dd0565b5f60209050601f831160018114610ec1575f8415610eaf578287015190505b610eb98582610e3e565b865550610f20565b601f198416610ecf86610cb3565b5f5b82811015610ef657848901518255600182019150602085019450602081019050610ed1565b86831015610f135784890151610f0f601f891682610e22565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f5582610f2c565b9050919050565b610f6581610f4b565b8114610f6f575f80fd5b50565b5f81519050610f8081610f5c565b92915050565b5f60208284031215610f9b57610f9a610f28565b5b5f610fa884828501610f72565b91505092915050565b610fba81610f4b565b82525050565b5f604082019050610fd35f830185610fb1565b610fe06020830184610fb1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156110695780860481111561104557611044610fe7565b5b60018516156110545780820291505b808102905061106285611014565b9450611029565b94509492505050565b5f82611081576001905061113c565b8161108e575f905061113c565b81600181146110a457600281146110ae576110dd565b600191505061113c565b60ff8411156110c0576110bf610fe7565b5b8360020a9150848211156110d7576110d6610fe7565b5b5061113c565b5060208310610133831016604e8410600b84101617156111125782820a90508381111561110d5761110c610fe7565b5b61113c565b61111f8484846001611020565b9250905081840481111561113657611135610fe7565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61115982610d31565b915061116483611143565b92506111917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611072565b905092915050565b5f6111a382610d31565b91506111ae83610d31565b92508282026111bc81610d31565b915082820484148315176111d3576111d2610fe7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61121182610d31565b915061121c83610d31565b92508261122c5761122b6111da565b5b828204905092915050565b5f61124182610d31565b915061124c83610d31565b925082820190508082111561126457611263610fe7565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6112ae60208361126a565b91506112b98261127a565b602082019050919050565b5f6020820190508181035f8301526112db816112a2565b9050919050565b5f8115159050919050565b6112f6816112e2565b82525050565b5f60208201905061130f5f8301846112ed565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61136f60268361126a565b915061137a82611315565b604082019050919050565b5f6020820190508181035f83015261139c81611363565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6113d7601f8361126a565b91506113e2826113a3565b602082019050919050565b5f6020820190508181035f830152611404816113cb565b9050919050565b61141481610d31565b82525050565b5f60208201905061142d5f83018461140b565b92915050565b60805160a0516148fa6114775f395f818161122101528181611beb015261241201525f81816123ba015281816132ae0152818161338d01526133b401526148fa5ff3fe6080604052600436106101fc575f3560e01c806399e5b5c81161010c578063db05e5cb1161009f578063f242ab411161006e578063f242ab41146106fe578063f2fde38b14610728578063f3dc390214610750578063fab82a8e1461077f578063fcbb7607146107aa57610203565b8063db05e5cb14610658578063dd62ed3e1461066e578063e13b2007146106aa578063e884f260146106e857610203565b8063a457c2d7116100db578063a457c2d714610590578063a9059cbb146105cc578063bb85c6d114610608578063d08893581461063057610203565b806399e5b5c8146104f05780639a7a23d6146105185780639b6b5499146105405780639fe640941461056857610203565b80634ada218b1161018f57806370a082311161015e57806370a082311461041e578063715018a61461045a57806377b5312c146104705780638da5cb5b1461049c57806395d89b41146104c657610203565b80634ada218b1461037c5780634b896a3e146103a657806352d65858146103ce5780635580145f146103f657610203565b8063293230b8116101cb578063293230b8146102d3578063313ce567146102e957806331f8151114610313578063395093511461034057610203565b806306fdde0314610207578063095ea7b31461023157806318160ddd1461026d57806323b872dd1461029757610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061021b6107d2565b60405161022891906134c9565b60405180910390f35b34801561023c575f80fd5b506102576004803603810190610252919061357a565b610862565b60405161026491906135d2565b60405180910390f35b348015610278575f80fd5b5061028161087f565b60405161028e91906135fa565b60405180910390f35b3480156102a2575f80fd5b506102bd60048036038101906102b89190613613565b610888565b6040516102ca91906135d2565b60405180910390f35b3480156102de575f80fd5b506102e761097a565b005b3480156102f4575f80fd5b506102fd610a5a565b60405161030a919061367e565b60405180910390f35b34801561031e575f80fd5b50610327610a62565b6040516103379493929190613697565b60405180910390f35b34801561034b575f80fd5b506103666004803603810190610361919061357a565b610a99565b60405161037391906135d2565b60405180910390f35b348015610387575f80fd5b50610390610b40565b60405161039d91906135d2565b60405180910390f35b3480156103b1575f80fd5b506103cc60048036038101906103c791906136da565b610b52565b005b3480156103d9575f80fd5b506103f460048036038101906103ef9190613705565b610c74565b005b348015610401575f80fd5b5061041c600480360381019061041791906136da565b610d9f565b005b348015610429575f80fd5b50610444600480360381019061043f9190613743565b610ec1565b60405161045191906135fa565b60405180910390f35b348015610465575f80fd5b5061046e610f06565b005b34801561047b575f80fd5b50610484610f8d565b6040516104939392919061376e565b60405180910390f35b3480156104a7575f80fd5b506104b0610fb1565b6040516104bd91906137b2565b60405180910390f35b3480156104d1575f80fd5b506104da610fd9565b6040516104e791906134c9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190613743565b611069565b005b348015610523575f80fd5b5061053e600480360381019061053991906137f5565b6111a3565b005b34801561054b575f80fd5b50610566600480360381019061056191906137f5565b6112bb565b005b348015610573575f80fd5b5061058e60048036038101906105899190613705565b6113dd565b005b34801561059b575f80fd5b506105b660048036038101906105b1919061357a565b611508565b6040516105c391906135d2565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed919061357a565b6115ee565b6040516105ff91906135d2565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190613743565b61160b565b005b34801561063b575f80fd5b5061065660048036038101906106519190613833565b611747565b005b348015610663575f80fd5b5061066c6118f0565b005b348015610679575f80fd5b50610694600480360381019061068f9190613883565b6119b4565b6040516106a191906135fa565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190613743565b611a36565b6040516106df939291906138c1565b60405180910390f35b3480156106f3575f80fd5b506106fc611b24565b005b348015610709575f80fd5b50610712611be9565b60405161071f91906137b2565b60405180910390f35b348015610733575f80fd5b5061074e60048036038101906107499190613743565b611c0d565b005b34801561075b575f80fd5b50610764611d03565b604051610776969594939291906138f6565b60405180910390f35b34801561078a575f80fd5b50610793611d2f565b6040516107a1929190613955565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906137f5565b611d7e565b005b6060600380546107e1906139a9565b80601f016020809104026020016040519081016040528092919081815260200182805461080d906139a9565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f61087561086e611ea0565b8484611ea7565b6001905092915050565b5f600254905090565b5f61089484848461206a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6108db611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190613a49565b60405180910390fd5b61096e85610966611ea0565b858403611ea7565b60019150509392505050565b610982611ea0565b73ffffffffffffffffffffffffffffffffffffffff166109a0610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90613ab1565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b5f6012905090565b5f805f8060085f9054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b5f610b36610aa5611ea0565b848460015f610ab2611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b319190613afc565b611ea7565b6001905092915050565b600c5f9054906101000a900460ff1681565b610b5a611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610b78610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613ab1565b60405180910390fd5b6005811015610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613b9f565b60405180910390fd5b6103e8610c1d61087f565b82610c289190613bbd565b610c329190613c2b565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051610c6991906135fa565b60405180910390a150565b610c7c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610c9a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613ab1565b60405180910390fd5b81600f8190555080601081905550601054600f54610d0e9190613afc565b600e819055506064600e541115610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613ccb565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610d9393929190613ce9565b60405180910390a15050565b610da7611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610dc5610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613ab1565b60405180910390fd5b6002811015610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690613d68565b60405180910390fd5b6103e8610e6a61087f565b82610e759190613bbd565b610e7f9190613c2b565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610eb691906135fa565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f0e611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610f2c610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613ab1565b60405180910390fd5b610f8b5f612c59565b565b5f805f600560159054906101000a900460ff16925060065491506007549050909192565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fe8906139a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611014906139a9565b801561105f5780601f106110365761010080835404028352916020019161105f565b820191905f5260205f20905b81548152906001019060200180831161104257829003601f168201915b5050505050905090565b611071611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661108f610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613ab1565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111ab611ea0565b73ffffffffffffffffffffffffffffffffffffffff166111c9610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613ab1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613df6565b60405180910390fd5b6112b78282612d1c565b5050565b6112c3611ea0565b73ffffffffffffffffffffffffffffffffffffffff166112e1610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90613ab1565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113d191906135d2565b60405180910390a25050565b6113e5611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611403610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613ab1565b60405180910390fd5b81601281905550806013819055506013546012546114779190613afc565b601181905550606460115411156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90613e84565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516114fc93929190613ce9565b60405180910390a15050565b5f8060015f611515611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613f12565b60405180910390fd5b6115e36115da611ea0565b85858403611ea7565b600191505092915050565b5f6116016115fa611ea0565b848461206a565b6001905092915050565b611613611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611631610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613ab1565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61174f611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661176d610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613ab1565b60405180910390fd5b6001821015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90613fa0565b60405180910390fd5b8181101561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118419061402e565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261187061087f565b61187a9190613bbd565b6118849190613c2b565b6006819055506127108161189661087f565b6118a09190613bbd565b6118aa9190613c2b565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516118e39392919061376e565b60405180910390a1505050565b6118f8611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611916610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390613ab1565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f60165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16925060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16915060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690509193909250565b611b2c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611b4a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613ab1565b60405180910390fd5b5f600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b7f000000000000000000000000000000000000000000000000000000000000000081565b611c15611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611c33610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613ab1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906140bc565b60405180910390fd5b611d0081612c59565b50565b5f805f805f80600e549550600f5494506010549350601154925060125491506013549050909192939495565b5f80600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611d86611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611da4610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613ab1565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611e9491906135d2565b60405180910390a25050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c9061414a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906141d8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161205d91906135fa565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906142f4565b60405180910390fd5b5f810361215d5761215883835f612dba565b612c54565b60085f9054906101000a900460ff161561280457612179610fb1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121e757506121b7610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561221f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612259575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122725750600560149054906101000a900460ff16155b1561280357600c5f9054906101000a900460ff166123655760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614382565b60405180910390fd5b5b600860019054906101000a900460ff161561252957612382610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561240957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125285743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614436565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125c6575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561266d57600a54811115612610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612607906144c4565b60405180910390fd5b60095461261c83610ec1565b826126279190613afc565b1115612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f9061452c565b60405180910390fd5b612802565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561270a575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561275957600a54811115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906145ba565b60405180910390fd5b612801565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612800576009546127b383610ec1565b826127be9190613afc565b11156127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f69061452c565b60405180910390fd5b5b5b5b5b5b5f61280e30610ec1565b90505f60065482101590508080156128325750600560159054906101000a900460ff165b801561284b5750600560149054906101000a900460ff16155b801561289e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128f1575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612944575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612987576001600560146101000a81548160ff02191690831515021790555061296c61302f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a36575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a3f575f90505b5f8115612c445760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a9d57505f601154115b15612b3557612aca6064612abc601154886131dd90919063ffffffff16565b6131f290919063ffffffff16565b905060115460135482612add9190613bbd565b612ae79190613c2b565b60155f828254612af79190613afc565b9250508190555060115460125482612b0f9190613bbd565b612b199190613c2b565b60145f828254612b299190613afc565b92505081905550612c21565b60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b8c57505f600e54115b15612c2057612bb96064612bab600e54886131dd90919063ffffffff16565b6131f290919063ffffffff16565b9050600e5460105482612bcc9190613bbd565b612bd69190613c2b565b60155f828254612be69190613afc565b92505081905550600e54600f5482612bfe9190613bbd565b612c089190613c2b565b60145f828254612c189190613afc565b925050819055505b5b5f811115612c3557612c34873083612dba565b5b8085612c4191906145d8565b94505b612c4f878787612dba565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d906142f4565b60405180910390fd5b612ea1838383613207565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b9061467b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612fb29190613afc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301691906135fa565b60405180910390a361302984848461320c565b50505050565b5f61303930610ec1565b90505f8190505f80830361304f575050506131db565b60075483111561305f5760075492505b5f8390505f47905061307082613211565b5f613084824761344490919063ffffffff16565b90505f6130ae866130a0601554856131dd90919063ffffffff16565b6131f290919063ffffffff16565b90505f6014819055505f601581905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613103906146c6565b5f6040518083038185875af1925050503d805f811461313d576040519150601f19603f3d011682016040523d82523d5f602084013e613142565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318e906146c6565b5f6040518083038185875af1925050503d805f81146131c8576040519150601f19603f3d011682016040523d82523d5f602084013e6131cd565b606091505b505080955050505050505050505b565b5f81836131ea9190613bbd565b905092915050565b5f81836131ff9190613c2b565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561322d5761322c6146da565b5b60405190808252806020026020018201604052801561325b5781602001602082028036833780820191505090505b50905030815f8151811061327257613271614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133399190614748565b8160018151811061334d5761334c614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b2307f000000000000000000000000000000000000000000000000000000000000000084611ea7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161341395949392919061486c565b5f604051808303815f87803b15801561342a575f80fd5b505af115801561343c573d5f803e3d5ffd5b505050505050565b5f818361345191906145d8565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61349b82613459565b6134a58185613463565b93506134b5818560208601613473565b6134be81613481565b840191505092915050565b5f6020820190508181035f8301526134e18184613491565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613516826134ed565b9050919050565b6135268161350c565b8114613530575f80fd5b50565b5f813590506135418161351d565b92915050565b5f819050919050565b61355981613547565b8114613563575f80fd5b50565b5f8135905061357481613550565b92915050565b5f80604083850312156135905761358f6134e9565b5b5f61359d85828601613533565b92505060206135ae85828601613566565b9150509250929050565b5f8115159050919050565b6135cc816135b8565b82525050565b5f6020820190506135e55f8301846135c3565b92915050565b6135f481613547565b82525050565b5f60208201905061360d5f8301846135eb565b92915050565b5f805f6060848603121561362a576136296134e9565b5b5f61363786828701613533565b935050602061364886828701613533565b925050604061365986828701613566565b9150509250925092565b5f60ff82169050919050565b61367881613663565b82525050565b5f6020820190506136915f83018461366f565b92915050565b5f6080820190506136aa5f8301876135c3565b6136b760208301866135c3565b6136c460408301856135eb565b6136d160608301846135eb565b95945050505050565b5f602082840312156136ef576136ee6134e9565b5b5f6136fc84828501613566565b91505092915050565b5f806040838503121561371b5761371a6134e9565b5b5f61372885828601613566565b925050602061373985828601613566565b9150509250929050565b5f60208284031215613758576137576134e9565b5b5f61376584828501613533565b91505092915050565b5f6060820190506137815f8301866135c3565b61378e60208301856135eb565b61379b60408301846135eb565b949350505050565b6137ac8161350c565b82525050565b5f6020820190506137c55f8301846137a3565b92915050565b6137d4816135b8565b81146137de575f80fd5b50565b5f813590506137ef816137cb565b92915050565b5f806040838503121561380b5761380a6134e9565b5b5f61381885828601613533565b9250506020613829858286016137e1565b9150509250929050565b5f805f6060848603121561384a576138496134e9565b5b5f613857868287016137e1565b935050602061386886828701613566565b925050604061387986828701613566565b9150509250925092565b5f8060408385031215613899576138986134e9565b5b5f6138a685828601613533565b92505060206138b785828601613533565b9150509250929050565b5f6060820190506138d45f8301866135c3565b6138e160208301856135c3565b6138ee60408301846135c3565b949350505050565b5f60c0820190506139095f8301896135eb565b61391660208301886135eb565b61392360408301876135eb565b61393060608301866135eb565b61393d60808301856135eb565b61394a60a08301846135eb565b979650505050505050565b5f6040820190506139685f8301856137a3565b61397560208301846137a3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139c057607f821691505b6020821081036139d3576139d261397c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613a33602883613463565b9150613a3e826139d9565b604082019050919050565b5f6020820190508181035f830152613a6081613a27565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a9b602083613463565b9150613aa682613a67565b602082019050919050565b5f6020820190508181035f830152613ac881613a8f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b0682613547565b9150613b1183613547565b9250828201905080821115613b2957613b28613acf565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613b89602483613463565b9150613b9482613b2f565b604082019050919050565b5f6020820190508181035f830152613bb681613b7d565b9050919050565b5f613bc782613547565b9150613bd283613547565b9250828202613be081613547565b91508282048414831517613bf757613bf6613acf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c3582613547565b9150613c4083613547565b925082613c5057613c4f613bfe565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f742062652068696768657220745f8201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b5f613cb5602883613463565b9150613cc082613c5b565b604082019050919050565b5f6020820190508181035f830152613ce281613ca9565b9050919050565b5f606082019050613cfc5f8301866135eb565b613d0960208301856135eb565b613d1660408301846135eb565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f613d52602083613463565b9150613d5d82613d1e565b602082019050919050565b5f6020820190508181035f830152613d7f81613d46565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613de0603983613463565b9150613deb82613d86565b604082019050919050565b5f6020820190508181035f830152613e0d81613dd4565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572205f8201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b5f613e6e602983613463565b9150613e7982613e14565b604082019050919050565b5f6020820190508181035f830152613e9b81613e62565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613efc602583613463565b9150613f0782613ea2565b604082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613f8a603483613463565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b7f6d6178696d756d20616d6f756e742063616e74206265206869676865722074685f8201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b5f614018602a83613463565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140a6602683613463565b91506140b18261404c565b604082019050919050565b5f6020820190508181035f8301526140d38161409a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614134602483613463565b915061413f826140da565b604082019050919050565b5f6020820190508181035f83015261416181614128565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141c2602283613463565b91506141cd82614168565b604082019050919050565b5f6020820190508181035f8301526141ef816141b6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614250602583613463565b915061425b826141f6565b604082019050919050565b5f6020820190508181035f83015261427d81614244565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142de602383613463565b91506142e982614284565b604082019050919050565b5f6020820190508181035f83015261430b816142d2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f742061637469765f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f61436c602283613463565b915061437782614312565b604082019050919050565b5f6020820190508181035f83015261439981614360565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614420604983613463565b915061442b826143a0565b606082019050919050565b5f6020820190508181035f83015261444d81614414565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f6144ae602683613463565b91506144b982614454565b604082019050919050565b5f6020820190508181035f8301526144db816144a2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614516601383613463565b9150614521826144e2565b602082019050919050565b5f6020820190508181035f8301526145438161450a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f6145a4602783613463565b91506145af8261454a565b604082019050919050565b5f6020820190508181035f8301526145d181614598565b9050919050565b5f6145e282613547565b91506145ed83613547565b925082820390508181111561460557614604613acf565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614665602683613463565b91506146708261460b565b604082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b5f81905092915050565b50565b5f6146b15f83614699565b91506146bc826146a3565b5f82019050919050565b5f6146d0826146a6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506147428161351d565b92915050565b5f6020828403121561475d5761475c6134e9565b5b5f61476a84828501614734565b91505092915050565b5f819050919050565b5f819050919050565b5f61479f61479a61479584614773565b61477c565b613547565b9050919050565b6147af81614785565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147e78161350c565b82525050565b5f6147f883836147de565b60208301905092915050565b5f602082019050919050565b5f61481a826147b5565b61482481856147bf565b935061482f836147cf565b805f5b8381101561485f57815161484688826147ed565b975061485183614804565b925050600181019050614832565b5085935050505092915050565b5f60a08201905061487f5f8301886135eb565b61488c60208301876147a6565b818103604083015261489e8186614810565b90506148ad60608301856137a3565b6148ba60808301846135eb565b969550505050505056fea26469706673582212205a10bbf0c6ec9420f05dfb1208455ad23bfc14fba50242414d06c73cd891f2f364736f6c63430008190033

Deployed Bytecode

0x6080604052600436106101fc575f3560e01c806399e5b5c81161010c578063db05e5cb1161009f578063f242ab411161006e578063f242ab41146106fe578063f2fde38b14610728578063f3dc390214610750578063fab82a8e1461077f578063fcbb7607146107aa57610203565b8063db05e5cb14610658578063dd62ed3e1461066e578063e13b2007146106aa578063e884f260146106e857610203565b8063a457c2d7116100db578063a457c2d714610590578063a9059cbb146105cc578063bb85c6d114610608578063d08893581461063057610203565b806399e5b5c8146104f05780639a7a23d6146105185780639b6b5499146105405780639fe640941461056857610203565b80634ada218b1161018f57806370a082311161015e57806370a082311461041e578063715018a61461045a57806377b5312c146104705780638da5cb5b1461049c57806395d89b41146104c657610203565b80634ada218b1461037c5780634b896a3e146103a657806352d65858146103ce5780635580145f146103f657610203565b8063293230b8116101cb578063293230b8146102d3578063313ce567146102e957806331f8151114610313578063395093511461034057610203565b806306fdde0314610207578063095ea7b31461023157806318160ddd1461026d57806323b872dd1461029757610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061021b6107d2565b60405161022891906134c9565b60405180910390f35b34801561023c575f80fd5b506102576004803603810190610252919061357a565b610862565b60405161026491906135d2565b60405180910390f35b348015610278575f80fd5b5061028161087f565b60405161028e91906135fa565b60405180910390f35b3480156102a2575f80fd5b506102bd60048036038101906102b89190613613565b610888565b6040516102ca91906135d2565b60405180910390f35b3480156102de575f80fd5b506102e761097a565b005b3480156102f4575f80fd5b506102fd610a5a565b60405161030a919061367e565b60405180910390f35b34801561031e575f80fd5b50610327610a62565b6040516103379493929190613697565b60405180910390f35b34801561034b575f80fd5b506103666004803603810190610361919061357a565b610a99565b60405161037391906135d2565b60405180910390f35b348015610387575f80fd5b50610390610b40565b60405161039d91906135d2565b60405180910390f35b3480156103b1575f80fd5b506103cc60048036038101906103c791906136da565b610b52565b005b3480156103d9575f80fd5b506103f460048036038101906103ef9190613705565b610c74565b005b348015610401575f80fd5b5061041c600480360381019061041791906136da565b610d9f565b005b348015610429575f80fd5b50610444600480360381019061043f9190613743565b610ec1565b60405161045191906135fa565b60405180910390f35b348015610465575f80fd5b5061046e610f06565b005b34801561047b575f80fd5b50610484610f8d565b6040516104939392919061376e565b60405180910390f35b3480156104a7575f80fd5b506104b0610fb1565b6040516104bd91906137b2565b60405180910390f35b3480156104d1575f80fd5b506104da610fd9565b6040516104e791906134c9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190613743565b611069565b005b348015610523575f80fd5b5061053e600480360381019061053991906137f5565b6111a3565b005b34801561054b575f80fd5b50610566600480360381019061056191906137f5565b6112bb565b005b348015610573575f80fd5b5061058e60048036038101906105899190613705565b6113dd565b005b34801561059b575f80fd5b506105b660048036038101906105b1919061357a565b611508565b6040516105c391906135d2565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed919061357a565b6115ee565b6040516105ff91906135d2565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190613743565b61160b565b005b34801561063b575f80fd5b5061065660048036038101906106519190613833565b611747565b005b348015610663575f80fd5b5061066c6118f0565b005b348015610679575f80fd5b50610694600480360381019061068f9190613883565b6119b4565b6040516106a191906135fa565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190613743565b611a36565b6040516106df939291906138c1565b60405180910390f35b3480156106f3575f80fd5b506106fc611b24565b005b348015610709575f80fd5b50610712611be9565b60405161071f91906137b2565b60405180910390f35b348015610733575f80fd5b5061074e60048036038101906107499190613743565b611c0d565b005b34801561075b575f80fd5b50610764611d03565b604051610776969594939291906138f6565b60405180910390f35b34801561078a575f80fd5b50610793611d2f565b6040516107a1929190613955565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906137f5565b611d7e565b005b6060600380546107e1906139a9565b80601f016020809104026020016040519081016040528092919081815260200182805461080d906139a9565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f61087561086e611ea0565b8484611ea7565b6001905092915050565b5f600254905090565b5f61089484848461206a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6108db611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190613a49565b60405180910390fd5b61096e85610966611ea0565b858403611ea7565b60019150509392505050565b610982611ea0565b73ffffffffffffffffffffffffffffffffffffffff166109a0610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90613ab1565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b5f6012905090565b5f805f8060085f9054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b5f610b36610aa5611ea0565b848460015f610ab2611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b319190613afc565b611ea7565b6001905092915050565b600c5f9054906101000a900460ff1681565b610b5a611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610b78610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613ab1565b60405180910390fd5b6005811015610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613b9f565b60405180910390fd5b6103e8610c1d61087f565b82610c289190613bbd565b610c329190613c2b565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051610c6991906135fa565b60405180910390a150565b610c7c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610c9a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613ab1565b60405180910390fd5b81600f8190555080601081905550601054600f54610d0e9190613afc565b600e819055506064600e541115610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613ccb565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610d9393929190613ce9565b60405180910390a15050565b610da7611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610dc5610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613ab1565b60405180910390fd5b6002811015610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690613d68565b60405180910390fd5b6103e8610e6a61087f565b82610e759190613bbd565b610e7f9190613c2b565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610eb691906135fa565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f0e611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610f2c610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613ab1565b60405180910390fd5b610f8b5f612c59565b565b5f805f600560159054906101000a900460ff16925060065491506007549050909192565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fe8906139a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611014906139a9565b801561105f5780601f106110365761010080835404028352916020019161105f565b820191905f5260205f20905b81548152906001019060200180831161104257829003601f168201915b5050505050905090565b611071611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661108f610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613ab1565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111ab611ea0565b73ffffffffffffffffffffffffffffffffffffffff166111c9610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613ab1565b60405180910390fd5b7f0000000000000000000000002926cd2cfb05ab4f6da8178bb2a02098bbd0b73c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613df6565b60405180910390fd5b6112b78282612d1c565b5050565b6112c3611ea0565b73ffffffffffffffffffffffffffffffffffffffff166112e1610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90613ab1565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113d191906135d2565b60405180910390a25050565b6113e5611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611403610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613ab1565b60405180910390fd5b81601281905550806013819055506013546012546114779190613afc565b601181905550606460115411156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90613e84565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516114fc93929190613ce9565b60405180910390a15050565b5f8060015f611515611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613f12565b60405180910390fd5b6115e36115da611ea0565b85858403611ea7565b600191505092915050565b5f6116016115fa611ea0565b848461206a565b6001905092915050565b611613611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611631610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613ab1565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61174f611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661176d610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613ab1565b60405180910390fd5b6001821015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90613fa0565b60405180910390fd5b8181101561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118419061402e565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261187061087f565b61187a9190613bbd565b6118849190613c2b565b6006819055506127108161189661087f565b6118a09190613bbd565b6118aa9190613c2b565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516118e39392919061376e565b60405180910390a1505050565b6118f8611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611916610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390613ab1565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f60165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16925060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16915060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690509193909250565b611b2c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611b4a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613ab1565b60405180910390fd5b5f600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b7f0000000000000000000000002926cd2cfb05ab4f6da8178bb2a02098bbd0b73c81565b611c15611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611c33610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613ab1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906140bc565b60405180910390fd5b611d0081612c59565b50565b5f805f805f80600e549550600f5494506010549350601154925060125491506013549050909192939495565b5f80600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611d86611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611da4610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613ab1565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611e9491906135d2565b60405180910390a25050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c9061414a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906141d8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161205d91906135fa565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906142f4565b60405180910390fd5b5f810361215d5761215883835f612dba565b612c54565b60085f9054906101000a900460ff161561280457612179610fb1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121e757506121b7610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561221f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612259575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122725750600560149054906101000a900460ff16155b1561280357600c5f9054906101000a900460ff166123655760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614382565b60405180910390fd5b5b600860019054906101000a900460ff161561252957612382610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561240957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246157507f0000000000000000000000002926cd2cfb05ab4f6da8178bb2a02098bbd0b73c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125285743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614436565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125c6575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561266d57600a54811115612610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612607906144c4565b60405180910390fd5b60095461261c83610ec1565b826126279190613afc565b1115612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f9061452c565b60405180910390fd5b612802565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561270a575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561275957600a54811115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906145ba565b60405180910390fd5b612801565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612800576009546127b383610ec1565b826127be9190613afc565b11156127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f69061452c565b60405180910390fd5b5b5b5b5b5b5f61280e30610ec1565b90505f60065482101590508080156128325750600560159054906101000a900460ff165b801561284b5750600560149054906101000a900460ff16155b801561289e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128f1575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612944575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612987576001600560146101000a81548160ff02191690831515021790555061296c61302f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a36575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a3f575f90505b5f8115612c445760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a9d57505f601154115b15612b3557612aca6064612abc601154886131dd90919063ffffffff16565b6131f290919063ffffffff16565b905060115460135482612add9190613bbd565b612ae79190613c2b565b60155f828254612af79190613afc565b9250508190555060115460125482612b0f9190613bbd565b612b199190613c2b565b60145f828254612b299190613afc565b92505081905550612c21565b60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b8c57505f600e54115b15612c2057612bb96064612bab600e54886131dd90919063ffffffff16565b6131f290919063ffffffff16565b9050600e5460105482612bcc9190613bbd565b612bd69190613c2b565b60155f828254612be69190613afc565b92505081905550600e54600f5482612bfe9190613bbd565b612c089190613c2b565b60145f828254612c189190613afc565b925050819055505b5b5f811115612c3557612c34873083612dba565b5b8085612c4191906145d8565b94505b612c4f878787612dba565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d906142f4565b60405180910390fd5b612ea1838383613207565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b9061467b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612fb29190613afc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301691906135fa565b60405180910390a361302984848461320c565b50505050565b5f61303930610ec1565b90505f8190505f80830361304f575050506131db565b60075483111561305f5760075492505b5f8390505f47905061307082613211565b5f613084824761344490919063ffffffff16565b90505f6130ae866130a0601554856131dd90919063ffffffff16565b6131f290919063ffffffff16565b90505f6014819055505f601581905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613103906146c6565b5f6040518083038185875af1925050503d805f811461313d576040519150601f19603f3d011682016040523d82523d5f602084013e613142565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318e906146c6565b5f6040518083038185875af1925050503d805f81146131c8576040519150601f19603f3d011682016040523d82523d5f602084013e6131cd565b606091505b505080955050505050505050505b565b5f81836131ea9190613bbd565b905092915050565b5f81836131ff9190613c2b565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561322d5761322c6146da565b5b60405190808252806020026020018201604052801561325b5781602001602082028036833780820191505090505b50905030815f8151811061327257613271614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133399190614748565b8160018151811061334d5761334c614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ea7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161341395949392919061486c565b5f604051808303815f87803b15801561342a575f80fd5b505af115801561343c573d5f803e3d5ffd5b505050505050565b5f818361345191906145d8565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61349b82613459565b6134a58185613463565b93506134b5818560208601613473565b6134be81613481565b840191505092915050565b5f6020820190508181035f8301526134e18184613491565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613516826134ed565b9050919050565b6135268161350c565b8114613530575f80fd5b50565b5f813590506135418161351d565b92915050565b5f819050919050565b61355981613547565b8114613563575f80fd5b50565b5f8135905061357481613550565b92915050565b5f80604083850312156135905761358f6134e9565b5b5f61359d85828601613533565b92505060206135ae85828601613566565b9150509250929050565b5f8115159050919050565b6135cc816135b8565b82525050565b5f6020820190506135e55f8301846135c3565b92915050565b6135f481613547565b82525050565b5f60208201905061360d5f8301846135eb565b92915050565b5f805f6060848603121561362a576136296134e9565b5b5f61363786828701613533565b935050602061364886828701613533565b925050604061365986828701613566565b9150509250925092565b5f60ff82169050919050565b61367881613663565b82525050565b5f6020820190506136915f83018461366f565b92915050565b5f6080820190506136aa5f8301876135c3565b6136b760208301866135c3565b6136c460408301856135eb565b6136d160608301846135eb565b95945050505050565b5f602082840312156136ef576136ee6134e9565b5b5f6136fc84828501613566565b91505092915050565b5f806040838503121561371b5761371a6134e9565b5b5f61372885828601613566565b925050602061373985828601613566565b9150509250929050565b5f60208284031215613758576137576134e9565b5b5f61376584828501613533565b91505092915050565b5f6060820190506137815f8301866135c3565b61378e60208301856135eb565b61379b60408301846135eb565b949350505050565b6137ac8161350c565b82525050565b5f6020820190506137c55f8301846137a3565b92915050565b6137d4816135b8565b81146137de575f80fd5b50565b5f813590506137ef816137cb565b92915050565b5f806040838503121561380b5761380a6134e9565b5b5f61381885828601613533565b9250506020613829858286016137e1565b9150509250929050565b5f805f6060848603121561384a576138496134e9565b5b5f613857868287016137e1565b935050602061386886828701613566565b925050604061387986828701613566565b9150509250925092565b5f8060408385031215613899576138986134e9565b5b5f6138a685828601613533565b92505060206138b785828601613533565b9150509250929050565b5f6060820190506138d45f8301866135c3565b6138e160208301856135c3565b6138ee60408301846135c3565b949350505050565b5f60c0820190506139095f8301896135eb565b61391660208301886135eb565b61392360408301876135eb565b61393060608301866135eb565b61393d60808301856135eb565b61394a60a08301846135eb565b979650505050505050565b5f6040820190506139685f8301856137a3565b61397560208301846137a3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139c057607f821691505b6020821081036139d3576139d261397c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613a33602883613463565b9150613a3e826139d9565b604082019050919050565b5f6020820190508181035f830152613a6081613a27565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a9b602083613463565b9150613aa682613a67565b602082019050919050565b5f6020820190508181035f830152613ac881613a8f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b0682613547565b9150613b1183613547565b9250828201905080821115613b2957613b28613acf565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613b89602483613463565b9150613b9482613b2f565b604082019050919050565b5f6020820190508181035f830152613bb681613b7d565b9050919050565b5f613bc782613547565b9150613bd283613547565b9250828202613be081613547565b91508282048414831517613bf757613bf6613acf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c3582613547565b9150613c4083613547565b925082613c5057613c4f613bfe565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f742062652068696768657220745f8201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b5f613cb5602883613463565b9150613cc082613c5b565b604082019050919050565b5f6020820190508181035f830152613ce281613ca9565b9050919050565b5f606082019050613cfc5f8301866135eb565b613d0960208301856135eb565b613d1660408301846135eb565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f613d52602083613463565b9150613d5d82613d1e565b602082019050919050565b5f6020820190508181035f830152613d7f81613d46565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613de0603983613463565b9150613deb82613d86565b604082019050919050565b5f6020820190508181035f830152613e0d81613dd4565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572205f8201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b5f613e6e602983613463565b9150613e7982613e14565b604082019050919050565b5f6020820190508181035f830152613e9b81613e62565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613efc602583613463565b9150613f0782613ea2565b604082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613f8a603483613463565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b7f6d6178696d756d20616d6f756e742063616e74206265206869676865722074685f8201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b5f614018602a83613463565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140a6602683613463565b91506140b18261404c565b604082019050919050565b5f6020820190508181035f8301526140d38161409a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614134602483613463565b915061413f826140da565b604082019050919050565b5f6020820190508181035f83015261416181614128565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141c2602283613463565b91506141cd82614168565b604082019050919050565b5f6020820190508181035f8301526141ef816141b6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614250602583613463565b915061425b826141f6565b604082019050919050565b5f6020820190508181035f83015261427d81614244565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142de602383613463565b91506142e982614284565b604082019050919050565b5f6020820190508181035f83015261430b816142d2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f742061637469765f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f61436c602283613463565b915061437782614312565b604082019050919050565b5f6020820190508181035f83015261439981614360565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614420604983613463565b915061442b826143a0565b606082019050919050565b5f6020820190508181035f83015261444d81614414565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f6144ae602683613463565b91506144b982614454565b604082019050919050565b5f6020820190508181035f8301526144db816144a2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614516601383613463565b9150614521826144e2565b602082019050919050565b5f6020820190508181035f8301526145438161450a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f6145a4602783613463565b91506145af8261454a565b604082019050919050565b5f6020820190508181035f8301526145d181614598565b9050919050565b5f6145e282613547565b91506145ed83613547565b925082820390508181111561460557614604613acf565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614665602683613463565b91506146708261460b565b604082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b5f81905092915050565b50565b5f6146b15f83614699565b91506146bc826146a3565b5f82019050919050565b5f6146d0826146a6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506147428161351d565b92915050565b5f6020828403121561475d5761475c6134e9565b5b5f61476a84828501614734565b91505092915050565b5f819050919050565b5f819050919050565b5f61479f61479a61479584614773565b61477c565b613547565b9050919050565b6147af81614785565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147e78161350c565b82525050565b5f6147f883836147de565b60208301905092915050565b5f602082019050919050565b5f61481a826147b5565b61482481856147bf565b935061482f836147cf565b805f5b8381101561485f57815161484688826147ed565b975061485183614804565b925050600181019050614832565b5085935050505092915050565b5f60a08201905061487f5f8301886135eb565b61488c60208301876147a6565b818103604083015261489e8186614810565b90506148ad60608301856137a3565b6148ba60808301846135eb565b969550505050505056fea26469706673582212205a10bbf0c6ec9420f05dfb1208455ad23bfc14fba50242414d06c73cd891f2f364736f6c63430008190033

Deployed Bytecode Sourcemap

25406:21300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11004:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13237:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12124:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13909:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30311:163;;;;;;;;;;;;;:::i;:::-;;11966:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37947:388;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14843:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26025:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32730:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33716:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32307:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12295:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22343:103;;;;;;;;;;;;;:::i;:::-;;37172:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21692:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11223:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36640:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35593:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35103:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34405:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15632:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12651:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36279:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31518:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30629:132;;;;;;;;;;;;;:::i;:::-;;12914:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40273:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30901:152;;;;;;;;;;;;;:::i;:::-;;25524:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22601:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39241:572;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;38567:190;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33234:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11004:100;11058:13;11091:5;11084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11004:100;:::o;13237:194::-;13345:4;13362:39;13371:12;:10;:12::i;:::-;13385:7;13394:6;13362:8;:39::i;:::-;13419:4;13412:11;;13237:194;;;;:::o;12124:108::-;12185:7;12212:12;;12205:19;;12124:108;:::o;13909:529::-;14049:4;14066:36;14076:6;14084:9;14095:6;14066:9;:36::i;:::-;14115:24;14142:11;:19;14154:6;14142:19;;;;;;;;;;;;;;;:33;14162:12;:10;:12::i;:::-;14142:33;;;;;;;;;;;;;;;;14115:60;;14228:6;14208:16;:26;;14186:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14338:57;14347:6;14355:12;:10;:12::i;:::-;14388:6;14369:16;:25;14338:8;:57::i;:::-;14426:4;14419:11;;;13909:529;;;;;:::o;30311:163::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30382:4:::1;30365:14;;:21;;;;;;;;;;;;;;;;;;30415:4;30397:15;;:22;;;;;;;;;;;;;;;;;;30450:15;30435:31;;;;;;;;;;30311:163::o:0;11966:93::-;12024:5;12049:2;12042:9;;11966:93;:::o;37947:388::-;38034:19;38068:26;38109:18;38142:14;38201:13;;;;;;;;;;;38184:30;;38249:20;;;;;;;;;;;38225:44;;38293:9;;38280:22;;38322:5;;38313:14;;37947:388;;;;:::o;14843:290::-;14956:4;14973:130;14996:12;:10;:12::i;:::-;15023:7;15082:10;15045:11;:25;15057:12;:10;:12::i;:::-;15045:25;;;;;;;;;;;;;;;:34;15071:7;15045:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14973:8;:130::i;:::-;15121:4;15114:11;;14843:290;;;;:::o;26025:34::-;;;;;;;;;;;;;:::o;32730:236::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32819:1:::1;32809:6;:11;;32801:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32911:4;32894:13;:11;:13::i;:::-;32885:6;:22;;;;:::i;:::-;32884:31;;;;:::i;:::-;32872:9;:43;;;;32931:27;32948:9;;32931:27;;;;;;:::i;:::-;;;;;;;;32730:236:::0;:::o;33716:400::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33849:13:::1;33831:15;:31;;;;33889:7;33873:13;:23;;;;33939:13;;33921:15;;:31;;;;:::i;:::-;33907:11;:45;;;;33986:3;33971:11;;:18;;33963:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34050:58;34064:11;;34077:15;;34094:13;;34050:58;;;;;;;;:::i;:::-;;;;;;;;33716:400:::0;;:::o;32307:216::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32392:1:::1;32382:6;:11;;32374:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32476:4;32459:13;:11;:13::i;:::-;32450:6;:22;;;;:::i;:::-;32449:31;;;;:::i;:::-;32441:5;:39;;;;32496:19;32509:5;;32496:19;;;;;;:::i;:::-;;;;;;;;32307:216:::0;:::o;12295:143::-;12385:7;12412:9;:18;12422:7;12412:18;;;;;;;;;;;;;;;;12405:25;;12295:143;;;:::o;22343:103::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22408:30:::1;22435:1;22408:18;:30::i;:::-;22343:103::o:0;37172:355::-;37262:21;37298:25;37338;37410:15;;;;;;;;;;;37391:34;;37456:16;;37436:36;;37503:16;;37483:36;;37172:355;;;:::o;21692:87::-;21738:7;21765:6;;;;;;;;;;;21758:13;;21692:87;:::o;11223:104::-;11279:13;11312:7;11305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11223:104;:::o;36640:173::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36755:13:::1;;;;;;;;;;;36723:46;;36744:9;36723:46;;;;;;;;;;;;36796:9;36780:13;;:25;;;;;;;;;;;;;;;;;;36640:173:::0;:::o;35593:300::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35739:7:::1;35731:15;;:4;:15;;::::0;35709:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35844:41;35873:4;35879:5;35844:28;:41::i;:::-;35593:300:::0;;:::o;35103:179::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35216:8:::1;35187:17;:26;35205:7;35187:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35256:7;35240:34;;;35265:8;35240:34;;;;;;:::i;:::-;;;;;;;;35103:179:::0;;:::o;34405:449::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34540:13:::1;34521:16;:32;;;;34581:7;34564:14;:24;;;;34633:14;;34614:16;;:33;;;;:::i;:::-;34599:12;:48;;;;34696:3;34680:12;;:19;;34658:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34784:62;34799:12;;34813:16;;34831:14;;34784:62;;;;;;;;:::i;:::-;;;;;;;;34405:449:::0;;:::o;15632:475::-;15750:4;15767:24;15794:11;:25;15806:12;:10;:12::i;:::-;15794:25;;;;;;;;;;;;;;;:34;15820:7;15794:34;;;;;;;;;;;;;;;;15767:61;;15881:15;15861:16;:35;;15839:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15997:67;16006:12;:10;:12::i;:::-;16020:7;16048:15;16029:16;:34;15997:8;:67::i;:::-;16095:4;16088:11;;;15632:475;;;;:::o;12651:200::-;12762:4;12779:42;12789:12;:10;:12::i;:::-;12803:9;12814:6;12779:9;:42::i;:::-;12839:4;12832:11;;12651:200;;;;:::o;36279:181::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36398:15:::1;;;;;;;;;;;36364:50;;36387:9;36364:50;;;;;;;;;;;;36443:9;36425:15;;:27;;;;;;;;;;;;;;;;;;36279:181:::0;:::o;31518:553::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31684:1:::1;31676:4;:9;;31654:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31792:4;31784;:12;;31776:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31874:8;31856:15;;:26;;;;;;;;;;;;;;;;;;31937:5;31929:4;31913:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31912:30;;;;:::i;:::-;31893:16;:49;;;;31997:5;31989:4;31973:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31972:30;;;;:::i;:::-;31953:16;:49;;;;32018:45;32042:8;32052:4;32058;32018:45;;;;;;;;:::i;:::-;;;;;;;;31518:553:::0;;;:::o;30629:132::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30702:5:::1;30686:13;;:21;;;;;;;;;;;;;;;;;;30737:15;30723:30;;;;;;;;;;30629:132::o:0;12914:176::-;13028:7;13055:11;:18;13067:5;13055:18;;;;;;;;;;;;;;;:27;13074:7;13055:27;;;;;;;;;;;;;;;;13048:34;;12914:176;;;;:::o;40273:448::-;40393:23;40431:25;40471:31;40551:17;:26;40569:7;40551:26;;;;;;;;;;;;;;;;;;;;;;;;;40530:47;;40611:19;:28;40631:7;40611:28;;;;;;;;;;;;;;;;;;;;;;;;;40588:51;;40679:25;:34;40705:7;40679:34;;;;;;;;;;;;;;;;;;;;;;;;;40650:63;;40273:448;;;;;:::o;30901:152::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30986:5:::1;30963:20;;:28;;;;;;;;;;;;;;;;;;31029:15;31007:38;;;;;;;;;;30901:152::o:0;25524:32::-;;;:::o;22601:238::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22724:1:::1;22704:22;;:8;:22;;::::0;22682:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22803:28;22822:8;22803:18;:28::i;:::-;22601:238:::0;:::o;39241:572::-;39326:20;39361:24;39400:22;39437:21;39473:25;39513:23;39579:11;;39564:26;;39620:15;;39601:34;;39663:13;;39646:30;;39703:12;;39687:28;;39746:16;;39726:36;;39791:14;;39773:32;;39241:572;;;;;;:::o;38567:190::-;38644:24;38670:22;38718:15;;;;;;;;;;;38735:13;;;;;;;;;;;38710:39;;;;38567:190;;:::o;33234:195::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33370:4:::1;33340:19;:27;33360:6;33340:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33408:6;33390:31;;;33416:4;33390:31;;;;;;:::i;:::-;;;;;;;;33234:195:::0;;:::o;10010:98::-;10063:7;10090:10;10083:17;;10010:98;:::o;19415:380::-;19568:1;19551:19;;:5;:19;;;19543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19649:1;19630:21;;:7;:21;;;19622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19733:6;19703:11;:18;19715:5;19703:18;;;;;;;;;;;;;;;:27;19722:7;19703:27;;;;;;;;;;;;;;;:36;;;;19771:7;19755:32;;19764:5;19755:32;;;19780:6;19755:32;;;;;;:::i;:::-;;;;;;;;19415:380;;;:::o;40729:4415::-;40877:1;40861:18;;:4;:18;;;40853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40954:1;40940:16;;:2;:16;;;40932:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41023:1;41013:6;:11;41009:93;;41041:28;41057:4;41063:2;41067:1;41041:15;:28::i;:::-;41084:7;;41009:93;41118:13;;;;;;;;;;;41114:2345;;;41178:7;:5;:7::i;:::-;41170:15;;:4;:15;;;;:49;;;;;41212:7;:5;:7::i;:::-;41206:13;;:2;:13;;;;41170:49;:86;;;;;41254:1;41240:16;;:2;:16;;;;41170:86;:128;;;;;41291:6;41277:21;;:2;:21;;;;41170:128;:158;;;;;41320:8;;;;;;;;;;;41319:9;41170:158;41148:2300;;;41368:14;;;;;;;;;;;41363:232;;41441:17;:23;41459:4;41441:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41468:17;:21;41486:2;41468:21;;;;;;;;;;;;;;;;;;;;;;;;;41441:48;41407:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;41363:232;41751:20;;;;;;;;;;;41747:629;;;41832:7;:5;:7::i;:::-;41826:13;;:2;:13;;;;:66;;;;;41882:9;41868:24;;:2;:24;;;;41826:66;:117;;;;;41935:7;41921:22;;:2;:22;;;;41826:117;41796:561;;;42107:12;42032:28;:39;42061:9;42032:39;;;;;;;;;;;;;;;;:87;41994:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42321:12;42279:28;:39;42308:9;42279:39;;;;;;;;;;;;;;;:54;;;;41796:561;41747:629;42450:25;:31;42476:4;42450:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42486:19;:23;42506:2;42486:23;;;;;;;;;;;;;;;;;;;;;;;;;42485:24;42450:59;42424:1009;;;42596:5;;42586:6;:15;;42552:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;42774:9;;42757:13;42767:2;42757:9;:13::i;:::-;42748:6;:22;;;;:::i;:::-;:35;;42714:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42424:1009;;;42952:25;:29;42978:2;42952:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42986:19;:25;43006:4;42986:25;;;;;;;;;;;;;;;;;;;;;;;;;42985:26;42952:59;42926:507;;;43098:5;;43088:6;:15;;43054:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42926:507;;;43225:19;:23;43245:2;43225:23;;;;;;;;;;;;;;;;;;;;;;;;;43220:213;;43333:9;;43316:13;43326:2;43316:9;:13::i;:::-;43307:6;:22;;;;:::i;:::-;:35;;43273:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43220:213;42926:507;42424:1009;41148:2300;41114:2345;43471:28;43502:24;43520:4;43502:9;:24::i;:::-;43471:55;;43539:12;43578:16;;43554:20;:40;;43539:55;;43625:7;:39;;;;;43649:15;;;;;;;;;;;43625:39;:65;;;;;43682:8;;;;;;;;;;;43681:9;43625:65;:114;;;;;43708:25;:31;43734:4;43708:31;;;;;;;;;;;;;;;;;;;;;;;;;43707:32;43625:114;:155;;;;;43757:17;:23;43775:4;43757:23;;;;;;;;;;;;;;;;;;;;;;;;;43756:24;43625:155;:194;;;;;43798:17;:21;43816:2;43798:21;;;;;;;;;;;;;;;;;;;;;;;;;43797:22;43625:194;43607:326;;;43857:4;43846:8;;:15;;;;;;;;;;;;;;;;;;43878:10;:8;:10::i;:::-;43916:5;43905:8;;:16;;;;;;;;;;;;;;;;;;43607:326;43945:12;43961:8;;;;;;;;;;;43960:9;43945:24;;44071:17;:23;44089:4;44071:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;44098:17;:21;44116:2;44098:21;;;;;;;;;;;;;;;;;;;;;;;;;44071:48;44067:96;;;44146:5;44136:15;;44067:96;44175:12;44280:7;44276:815;;;44332:25;:29;44358:2;44332:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;44380:1;44365:12;;:16;44332:49;44328:614;;;44409:33;44438:3;44409:24;44420:12;;44409:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44402:40;;44507:12;;44489:14;;44482:4;:21;;;;:::i;:::-;44481:38;;;;:::i;:::-;44461:16;;:58;;;;;;;:::i;:::-;;;;;;;;44588:12;;44568:16;;44561:4;:23;;;;:::i;:::-;44560:40;;;;:::i;:::-;44538:18;;:62;;;;;;;:::i;:::-;;;;;;;;44328:614;;;44662:25;:31;44688:4;44662:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44711:1;44697:11;;:15;44662:50;44658:284;;;44740:32;44768:3;44740:23;44751:11;;44740:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44733:39;;44836:11;;44819:13;;44812:4;:20;;;;:::i;:::-;44811:36;;;;:::i;:::-;44791:16;;:56;;;;;;;:::i;:::-;;;;;;;;44915:11;;44896:15;;44889:4;:22;;;;:::i;:::-;44888:38;;;;:::i;:::-;44866:18;;:60;;;;;;;:::i;:::-;;;;;;;;44658:284;44328:614;44969:1;44962:4;:8;44958:91;;;44991:42;45007:4;45021;45028;44991:15;:42::i;:::-;44958:91;45075:4;45065:14;;;;;:::i;:::-;;;44276:815;45103:33;45119:4;45125:2;45129:6;45103:15;:33::i;:::-;40842:4302;;;;40729:4415;;;;:::o;22999:191::-;23073:16;23092:6;;;;;;;;;;;23073:25;;23118:8;23109:6;;:17;;;;;;;;;;;;;;;;;;23173:8;23142:40;;23163:8;23142:40;;;;;;;;;;;;23062:128;22999:191;:::o;35901:188::-;36018:5;35984:25;:31;36010:4;35984:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36075:5;36041:40;;36069:4;36041:40;;;;;;;;;;;;35901:188;;:::o;16597:770::-;16755:1;16737:20;;:6;:20;;;16729:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16839:1;16818:23;;:9;:23;;;16810:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16894:47;16915:6;16923:9;16934:6;16894:20;:47::i;:::-;16954:21;16978:9;:17;16988:6;16978:17;;;;;;;;;;;;;;;;16954:41;;17045:6;17028:13;:23;;17006:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17189:6;17173:13;:22;17153:9;:17;17163:6;17153:17;;;;;;;;;;;;;;;:42;;;;17241:6;17217:9;:20;17227:9;17217:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17282:9;17265:35;;17274:6;17265:35;;;17293:6;17265:35;;;;;;:::i;:::-;;;;;;;;17313:46;17333:6;17341:9;17352:6;17313:19;:46::i;:::-;16718:649;16597:770;;;:::o;45731:972::-;45770:23;45796:24;45814:4;45796:9;:24::i;:::-;45770:50;;45831:25;45859:15;45831:43;;45885:12;45933:1;45914:15;:20;45910:59;;45951:7;;;;;45910:59;46003:16;;45985:15;:34;45981:101;;;46054:16;;46036:34;;45981:101;46094:26;46123:15;46094:44;;46151:25;46179:21;46151:49;;46213:36;46230:18;46213:16;:36::i;:::-;46262:18;46283:44;46309:17;46283:21;:25;;:44;;;;:::i;:::-;46262:65;;46340:17;46360:79;46411:17;46360:32;46375:16;;46360:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;46340:99;;46473:1;46452:18;:22;;;;46504:1;46485:16;:20;;;;46540:13;;;;;;;;;;;46532:27;;46567:9;46532:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46518:63;;;;;46616:15;;;;;;;;;;;46608:29;;46659:21;46608:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46594:101;;;;;45759:944;;;;;;;45731:972;:::o;3369:98::-;3427:7;3458:1;3454;:5;;;;:::i;:::-;3447:12;;3369:98;;;;:::o;3768:::-;3826:7;3857:1;3853;:5;;;;:::i;:::-;3846:12;;3768:98;;;;:::o;20395:125::-;;;;:::o;21124:124::-;;;;:::o;45152:571::-;45278:21;45316:1;45302:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45278:40;;45347:4;45329;45334:1;45329:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45373:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45363:4;45368:1;45363:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;45402:56;45419:4;45434:9;45446:11;45402:8;:56::i;:::-;45497:9;:60;;;45572:11;45598:1;45642:4;45669;45689:15;45497:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45207:516;45152:571;:::o;3012:98::-;3070:7;3101:1;3097;:5;;;;:::i;:::-;3090:12;;3012:98;;;;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:529::-;4911:4;4949:3;4938:9;4934:19;4926:27;;4963:65;5025:1;5014:9;5010:17;5001:6;4963:65;:::i;:::-;5038:66;5100:2;5089:9;5085:18;5076:6;5038:66;:::i;:::-;5114:72;5182:2;5171:9;5167:18;5158:6;5114:72;:::i;:::-;5196;5264:2;5253:9;5249:18;5240:6;5196:72;:::i;:::-;4746:529;;;;;;;:::o;5281:329::-;5340:6;5389:2;5377:9;5368:7;5364:23;5360:32;5357:119;;;5395:79;;:::i;:::-;5357:119;5515:1;5540:53;5585:7;5576:6;5565:9;5561:22;5540:53;:::i;:::-;5530:63;;5486:117;5281:329;;;;:::o;5616:474::-;5684:6;5692;5741:2;5729:9;5720:7;5716:23;5712:32;5709:119;;;5747:79;;:::i;:::-;5709:119;5867:1;5892:53;5937:7;5928:6;5917:9;5913:22;5892:53;:::i;:::-;5882:63;;5838:117;5994:2;6020:53;6065:7;6056:6;6045:9;6041:22;6020:53;:::i;:::-;6010:63;;5965:118;5616:474;;;;;:::o;6096:329::-;6155:6;6204:2;6192:9;6183:7;6179:23;6175:32;6172:119;;;6210:79;;:::i;:::-;6172:119;6330:1;6355:53;6400:7;6391:6;6380:9;6376:22;6355:53;:::i;:::-;6345:63;;6301:117;6096:329;;;;:::o;6431:430::-;6574:4;6612:2;6601:9;6597:18;6589:26;;6625:65;6687:1;6676:9;6672:17;6663:6;6625:65;:::i;:::-;6700:72;6768:2;6757:9;6753:18;6744:6;6700:72;:::i;:::-;6782;6850:2;6839:9;6835:18;6826:6;6782:72;:::i;:::-;6431:430;;;;;;:::o;6867:118::-;6954:24;6972:5;6954:24;:::i;:::-;6949:3;6942:37;6867:118;;:::o;6991:222::-;7084:4;7122:2;7111:9;7107:18;7099:26;;7135:71;7203:1;7192:9;7188:17;7179:6;7135:71;:::i;:::-;6991:222;;;;:::o;7219:116::-;7289:21;7304:5;7289:21;:::i;:::-;7282:5;7279:32;7269:60;;7325:1;7322;7315:12;7269:60;7219:116;:::o;7341:133::-;7384:5;7422:6;7409:20;7400:29;;7438:30;7462:5;7438:30;:::i;:::-;7341:133;;;;:::o;7480:468::-;7545:6;7553;7602:2;7590:9;7581:7;7577:23;7573:32;7570:119;;;7608:79;;:::i;:::-;7570:119;7728:1;7753:53;7798:7;7789:6;7778:9;7774:22;7753:53;:::i;:::-;7743:63;;7699:117;7855:2;7881:50;7923:7;7914:6;7903:9;7899:22;7881:50;:::i;:::-;7871:60;;7826:115;7480:468;;;;;:::o;7954:613::-;8028:6;8036;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:50;8286:7;8277:6;8266:9;8262:22;8244:50;:::i;:::-;8234:60;;8190:114;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;8471:2;8497:53;8542:7;8533:6;8522:9;8518:22;8497:53;:::i;:::-;8487:63;;8442:118;7954:613;;;;;:::o;8573:474::-;8641:6;8649;8698:2;8686:9;8677:7;8673:23;8669:32;8666:119;;;8704:79;;:::i;:::-;8666:119;8824:1;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8795:117;8951:2;8977:53;9022:7;9013:6;9002:9;8998:22;8977:53;:::i;:::-;8967:63;;8922:118;8573:474;;;;;:::o;9053:406::-;9184:4;9222:2;9211:9;9207:18;9199:26;;9235:65;9297:1;9286:9;9282:17;9273:6;9235:65;:::i;:::-;9310:66;9372:2;9361:9;9357:18;9348:6;9310:66;:::i;:::-;9386;9448:2;9437:9;9433:18;9424:6;9386:66;:::i;:::-;9053:406;;;;;;:::o;9465:775::-;9698:4;9736:3;9725:9;9721:19;9713:27;;9750:71;9818:1;9807:9;9803:17;9794:6;9750:71;:::i;:::-;9831:72;9899:2;9888:9;9884:18;9875:6;9831:72;:::i;:::-;9913;9981:2;9970:9;9966:18;9957:6;9913:72;:::i;:::-;9995;10063:2;10052:9;10048:18;10039:6;9995:72;:::i;:::-;10077:73;10145:3;10134:9;10130:19;10121:6;10077:73;:::i;:::-;10160;10228:3;10217:9;10213:19;10204:6;10160:73;:::i;:::-;9465:775;;;;;;;;;:::o;10246:332::-;10367:4;10405:2;10394:9;10390:18;10382:26;;10418:71;10486:1;10475:9;10471:17;10462:6;10418:71;:::i;:::-;10499:72;10567:2;10556:9;10552:18;10543:6;10499:72;:::i;:::-;10246:332;;;;;:::o;10584:180::-;10632:77;10629:1;10622:88;10729:4;10726:1;10719:15;10753:4;10750:1;10743:15;10770:320;10814:6;10851:1;10845:4;10841:12;10831:22;;10898:1;10892:4;10888:12;10919:18;10909:81;;10975:4;10967:6;10963:17;10953:27;;10909:81;11037:2;11029:6;11026:14;11006:18;11003:38;11000:84;;11056:18;;:::i;:::-;11000:84;10821:269;10770:320;;;:::o;11096:227::-;11236:34;11232:1;11224:6;11220:14;11213:58;11305:10;11300:2;11292:6;11288:15;11281:35;11096:227;:::o;11329:366::-;11471:3;11492:67;11556:2;11551:3;11492:67;:::i;:::-;11485:74;;11568:93;11657:3;11568:93;:::i;:::-;11686:2;11681:3;11677:12;11670:19;;11329:366;;;:::o;11701:419::-;11867:4;11905:2;11894:9;11890:18;11882:26;;11954:9;11948:4;11944:20;11940:1;11929:9;11925:17;11918:47;11982:131;12108:4;11982:131;:::i;:::-;11974:139;;11701:419;;;:::o;12126:182::-;12266:34;12262:1;12254:6;12250:14;12243:58;12126:182;:::o;12314:366::-;12456:3;12477:67;12541:2;12536:3;12477:67;:::i;:::-;12470:74;;12553:93;12642:3;12553:93;:::i;:::-;12671:2;12666:3;12662:12;12655:19;;12314:366;;;:::o;12686:419::-;12852:4;12890:2;12879:9;12875:18;12867:26;;12939:9;12933:4;12929:20;12925:1;12914:9;12910:17;12903:47;12967:131;13093:4;12967:131;:::i;:::-;12959:139;;12686:419;;;:::o;13111:180::-;13159:77;13156:1;13149:88;13256:4;13253:1;13246:15;13280:4;13277:1;13270:15;13297:191;13337:3;13356:20;13374:1;13356:20;:::i;:::-;13351:25;;13390:20;13408:1;13390:20;:::i;:::-;13385:25;;13433:1;13430;13426:9;13419:16;;13454:3;13451:1;13448:10;13445:36;;;13461:18;;:::i;:::-;13445:36;13297:191;;;;:::o;13494:223::-;13634:34;13630:1;13622:6;13618:14;13611:58;13703:6;13698:2;13690:6;13686:15;13679:31;13494:223;:::o;13723:366::-;13865:3;13886:67;13950:2;13945:3;13886:67;:::i;:::-;13879:74;;13962:93;14051:3;13962:93;:::i;:::-;14080:2;14075:3;14071:12;14064:19;;13723:366;;;:::o;14095:419::-;14261:4;14299:2;14288:9;14284:18;14276:26;;14348:9;14342:4;14338:20;14334:1;14323:9;14319:17;14312:47;14376:131;14502:4;14376:131;:::i;:::-;14368:139;;14095:419;;;:::o;14520:410::-;14560:7;14583:20;14601:1;14583:20;:::i;:::-;14578:25;;14617:20;14635:1;14617:20;:::i;:::-;14612:25;;14672:1;14669;14665:9;14694:30;14712:11;14694:30;:::i;:::-;14683:41;;14873:1;14864:7;14860:15;14857:1;14854:22;14834:1;14827:9;14807:83;14784:139;;14903:18;;:::i;:::-;14784:139;14568:362;14520:410;;;;:::o;14936:180::-;14984:77;14981:1;14974:88;15081:4;15078:1;15071:15;15105:4;15102:1;15095:15;15122:185;15162:1;15179:20;15197:1;15179:20;:::i;:::-;15174:25;;15213:20;15231:1;15213:20;:::i;:::-;15208:25;;15252:1;15242:35;;15257:18;;:::i;:::-;15242:35;15299:1;15296;15292:9;15287:14;;15122:185;;;;:::o;15313:227::-;15453:34;15449:1;15441:6;15437:14;15430:58;15522:10;15517:2;15509:6;15505:15;15498:35;15313:227;:::o;15546:366::-;15688:3;15709:67;15773:2;15768:3;15709:67;:::i;:::-;15702:74;;15785:93;15874:3;15785:93;:::i;:::-;15903:2;15898:3;15894:12;15887:19;;15546:366;;;:::o;15918:419::-;16084:4;16122:2;16111:9;16107:18;16099:26;;16171:9;16165:4;16161:20;16157:1;16146:9;16142:17;16135:47;16199:131;16325:4;16199:131;:::i;:::-;16191:139;;15918:419;;;:::o;16343:442::-;16492:4;16530:2;16519:9;16515:18;16507:26;;16543:71;16611:1;16600:9;16596:17;16587:6;16543:71;:::i;:::-;16624:72;16692:2;16681:9;16677:18;16668:6;16624:72;:::i;:::-;16706;16774:2;16763:9;16759:18;16750:6;16706:72;:::i;:::-;16343:442;;;;;;:::o;16791:182::-;16931:34;16927:1;16919:6;16915:14;16908:58;16791:182;:::o;16979:366::-;17121:3;17142:67;17206:2;17201:3;17142:67;:::i;:::-;17135:74;;17218:93;17307:3;17218:93;:::i;:::-;17336:2;17331:3;17327:12;17320:19;;16979:366;;;:::o;17351:419::-;17517:4;17555:2;17544:9;17540:18;17532:26;;17604:9;17598:4;17594:20;17590:1;17579:9;17575:17;17568:47;17632:131;17758:4;17632:131;:::i;:::-;17624:139;;17351:419;;;:::o;17776:244::-;17916:34;17912:1;17904:6;17900:14;17893:58;17985:27;17980:2;17972:6;17968:15;17961:52;17776:244;:::o;18026:366::-;18168:3;18189:67;18253:2;18248:3;18189:67;:::i;:::-;18182:74;;18265:93;18354:3;18265:93;:::i;:::-;18383:2;18378:3;18374:12;18367:19;;18026:366;;;:::o;18398:419::-;18564:4;18602:2;18591:9;18587:18;18579:26;;18651:9;18645:4;18641:20;18637:1;18626:9;18622:17;18615:47;18679:131;18805:4;18679:131;:::i;:::-;18671:139;;18398:419;;;:::o;18823:228::-;18963:34;18959:1;18951:6;18947:14;18940:58;19032:11;19027:2;19019:6;19015:15;19008:36;18823:228;:::o;19057:366::-;19199:3;19220:67;19284:2;19279:3;19220:67;:::i;:::-;19213:74;;19296:93;19385:3;19296:93;:::i;:::-;19414:2;19409:3;19405:12;19398:19;;19057:366;;;:::o;19429:419::-;19595:4;19633:2;19622:9;19618:18;19610:26;;19682:9;19676:4;19672:20;19668:1;19657:9;19653:17;19646:47;19710:131;19836:4;19710:131;:::i;:::-;19702:139;;19429:419;;;:::o;19854:224::-;19994:34;19990:1;19982:6;19978:14;19971:58;20063:7;20058:2;20050:6;20046:15;20039:32;19854:224;:::o;20084:366::-;20226:3;20247:67;20311:2;20306:3;20247:67;:::i;:::-;20240:74;;20323:93;20412:3;20323:93;:::i;:::-;20441:2;20436:3;20432:12;20425:19;;20084:366;;;:::o;20456:419::-;20622:4;20660:2;20649:9;20645:18;20637:26;;20709:9;20703:4;20699:20;20695:1;20684:9;20680:17;20673:47;20737:131;20863:4;20737:131;:::i;:::-;20729:139;;20456:419;;;:::o;20881:239::-;21021:34;21017:1;21009:6;21005:14;20998:58;21090:22;21085:2;21077:6;21073:15;21066:47;20881:239;:::o;21126:366::-;21268:3;21289:67;21353:2;21348:3;21289:67;:::i;:::-;21282:74;;21365:93;21454:3;21365:93;:::i;:::-;21483:2;21478:3;21474:12;21467:19;;21126:366;;;:::o;21498:419::-;21664:4;21702:2;21691:9;21687:18;21679:26;;21751:9;21745:4;21741:20;21737:1;21726:9;21722:17;21715:47;21779:131;21905:4;21779:131;:::i;:::-;21771:139;;21498:419;;;:::o;21923:229::-;22063:34;22059:1;22051:6;22047:14;22040:58;22132:12;22127:2;22119:6;22115:15;22108:37;21923:229;:::o;22158:366::-;22300:3;22321:67;22385:2;22380:3;22321:67;:::i;:::-;22314:74;;22397:93;22486:3;22397:93;:::i;:::-;22515:2;22510:3;22506:12;22499:19;;22158:366;;;:::o;22530:419::-;22696:4;22734:2;22723:9;22719:18;22711:26;;22783:9;22777:4;22773:20;22769:1;22758:9;22754:17;22747:47;22811:131;22937:4;22811:131;:::i;:::-;22803:139;;22530:419;;;:::o;22955:225::-;23095:34;23091:1;23083:6;23079:14;23072:58;23164:8;23159:2;23151:6;23147:15;23140:33;22955:225;:::o;23186:366::-;23328:3;23349:67;23413:2;23408:3;23349:67;:::i;:::-;23342:74;;23425:93;23514:3;23425:93;:::i;:::-;23543:2;23538:3;23534:12;23527:19;;23186:366;;;:::o;23558:419::-;23724:4;23762:2;23751:9;23747:18;23739:26;;23811:9;23805:4;23801:20;23797:1;23786:9;23782:17;23775:47;23839:131;23965:4;23839:131;:::i;:::-;23831:139;;23558:419;;;:::o;23983:223::-;24123:34;24119:1;24111:6;24107:14;24100:58;24192:6;24187:2;24179:6;24175:15;24168:31;23983:223;:::o;24212:366::-;24354:3;24375:67;24439:2;24434:3;24375:67;:::i;:::-;24368:74;;24451:93;24540:3;24451:93;:::i;:::-;24569:2;24564:3;24560:12;24553:19;;24212:366;;;:::o;24584:419::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:221::-;25149:34;25145:1;25137:6;25133:14;25126:58;25218:4;25213:2;25205:6;25201:15;25194:29;25009:221;:::o;25236:366::-;25378:3;25399:67;25463:2;25458:3;25399:67;:::i;:::-;25392:74;;25475:93;25564:3;25475:93;:::i;:::-;25593:2;25588:3;25584:12;25577:19;;25236:366;;;:::o;25608:419::-;25774:4;25812:2;25801:9;25797:18;25789:26;;25861:9;25855:4;25851:20;25847:1;25836:9;25832:17;25825:47;25889:131;26015:4;25889:131;:::i;:::-;25881:139;;25608:419;;;:::o;26033:224::-;26173:34;26169:1;26161:6;26157:14;26150:58;26242:7;26237:2;26229:6;26225:15;26218:32;26033:224;:::o;26263:366::-;26405:3;26426:67;26490:2;26485:3;26426:67;:::i;:::-;26419:74;;26502:93;26591:3;26502:93;:::i;:::-;26620:2;26615:3;26611:12;26604:19;;26263:366;;;:::o;26635:419::-;26801:4;26839:2;26828:9;26824:18;26816:26;;26888:9;26882:4;26878:20;26874:1;26863:9;26859:17;26852:47;26916:131;27042:4;26916:131;:::i;:::-;26908:139;;26635:419;;;:::o;27060:222::-;27200:34;27196:1;27188:6;27184:14;27177:58;27269:5;27264:2;27256:6;27252:15;27245:30;27060:222;:::o;27288:366::-;27430:3;27451:67;27515:2;27510:3;27451:67;:::i;:::-;27444:74;;27527:93;27616:3;27527:93;:::i;:::-;27645:2;27640:3;27636:12;27629:19;;27288:366;;;:::o;27660:419::-;27826:4;27864:2;27853:9;27849:18;27841:26;;27913:9;27907:4;27903:20;27899:1;27888:9;27884:17;27877:47;27941:131;28067:4;27941:131;:::i;:::-;27933:139;;27660:419;;;:::o;28085:221::-;28225:34;28221:1;28213:6;28209:14;28202:58;28294:4;28289:2;28281:6;28277:15;28270:29;28085:221;:::o;28312:366::-;28454:3;28475:67;28539:2;28534:3;28475:67;:::i;:::-;28468:74;;28551:93;28640:3;28551:93;:::i;:::-;28669:2;28664:3;28660:12;28653:19;;28312:366;;;:::o;28684:419::-;28850:4;28888:2;28877:9;28873:18;28865:26;;28937:9;28931:4;28927:20;28923:1;28912:9;28908:17;28901:47;28965:131;29091:4;28965:131;:::i;:::-;28957:139;;28684:419;;;:::o;29109:297::-;29249:34;29245:1;29237:6;29233:14;29226:58;29318:34;29313:2;29305:6;29301:15;29294:59;29387:11;29382:2;29374:6;29370:15;29363:36;29109:297;:::o;29412:366::-;29554:3;29575:67;29639:2;29634:3;29575:67;:::i;:::-;29568:74;;29651:93;29740:3;29651:93;:::i;:::-;29769:2;29764:3;29760:12;29753:19;;29412:366;;;:::o;29784:419::-;29950:4;29988:2;29977:9;29973:18;29965:26;;30037:9;30031:4;30027:20;30023:1;30012:9;30008:17;30001:47;30065:131;30191:4;30065:131;:::i;:::-;30057:139;;29784:419;;;:::o;30209:225::-;30349:34;30345:1;30337:6;30333:14;30326:58;30418:8;30413:2;30405:6;30401:15;30394:33;30209:225;:::o;30440:366::-;30582:3;30603:67;30667:2;30662:3;30603:67;:::i;:::-;30596:74;;30679:93;30768:3;30679:93;:::i;:::-;30797:2;30792:3;30788:12;30781:19;;30440:366;;;:::o;30812:419::-;30978:4;31016:2;31005:9;31001:18;30993:26;;31065:9;31059:4;31055:20;31051:1;31040:9;31036:17;31029:47;31093:131;31219:4;31093:131;:::i;:::-;31085:139;;30812:419;;;:::o;31237:169::-;31377:21;31373:1;31365:6;31361:14;31354:45;31237:169;:::o;31412:366::-;31554:3;31575:67;31639:2;31634:3;31575:67;:::i;:::-;31568:74;;31651:93;31740:3;31651:93;:::i;:::-;31769:2;31764:3;31760:12;31753:19;;31412:366;;;:::o;31784:419::-;31950:4;31988:2;31977:9;31973:18;31965:26;;32037:9;32031:4;32027:20;32023:1;32012:9;32008:17;32001:47;32065:131;32191:4;32065:131;:::i;:::-;32057:139;;31784:419;;;:::o;32209:226::-;32349:34;32345:1;32337:6;32333:14;32326:58;32418:9;32413:2;32405:6;32401:15;32394:34;32209:226;:::o;32441:366::-;32583:3;32604:67;32668:2;32663:3;32604:67;:::i;:::-;32597:74;;32680:93;32769:3;32680:93;:::i;:::-;32798:2;32793:3;32789:12;32782:19;;32441:366;;;:::o;32813:419::-;32979:4;33017:2;33006:9;33002:18;32994:26;;33066:9;33060:4;33056:20;33052:1;33041:9;33037:17;33030:47;33094:131;33220:4;33094:131;:::i;:::-;33086:139;;32813:419;;;:::o;33238:194::-;33278:4;33298:20;33316:1;33298:20;:::i;:::-;33293:25;;33332:20;33350:1;33332:20;:::i;:::-;33327:25;;33376:1;33373;33369:9;33361:17;;33400:1;33394:4;33391:11;33388:37;;;33405:18;;:::i;:::-;33388:37;33238:194;;;;:::o;33438:225::-;33578:34;33574:1;33566:6;33562:14;33555:58;33647:8;33642:2;33634:6;33630:15;33623:33;33438:225;:::o;33669:366::-;33811:3;33832:67;33896:2;33891:3;33832:67;:::i;:::-;33825:74;;33908:93;33997:3;33908:93;:::i;:::-;34026:2;34021:3;34017:12;34010:19;;33669:366;;;:::o;34041:419::-;34207:4;34245:2;34234:9;34230:18;34222:26;;34294:9;34288:4;34284:20;34280:1;34269:9;34265:17;34258:47;34322:131;34448:4;34322:131;:::i;:::-;34314:139;;34041:419;;;:::o;34466:147::-;34567:11;34604:3;34589:18;;34466:147;;;;:::o;34619:114::-;;:::o;34739:398::-;34898:3;34919:83;35000:1;34995:3;34919:83;:::i;:::-;34912:90;;35011:93;35100:3;35011:93;:::i;:::-;35129:1;35124:3;35120:11;35113:18;;34739:398;;;:::o;35143:379::-;35327:3;35349:147;35492:3;35349:147;:::i;:::-;35342:154;;35513:3;35506:10;;35143:379;;;:::o;35528:180::-;35576:77;35573:1;35566:88;35673:4;35670:1;35663:15;35697:4;35694:1;35687:15;35714:180;35762:77;35759:1;35752:88;35859:4;35856:1;35849:15;35883:4;35880:1;35873:15;35900:143;35957:5;35988:6;35982:13;35973:22;;36004:33;36031:5;36004:33;:::i;:::-;35900:143;;;;:::o;36049:351::-;36119:6;36168:2;36156:9;36147:7;36143:23;36139:32;36136:119;;;36174:79;;:::i;:::-;36136:119;36294:1;36319:64;36375:7;36366:6;36355:9;36351:22;36319:64;:::i;:::-;36309:74;;36265:128;36049:351;;;;:::o;36406:85::-;36451:7;36480:5;36469:16;;36406:85;;;:::o;36497:60::-;36525:3;36546:5;36539:12;;36497:60;;;:::o;36563:158::-;36621:9;36654:61;36672:42;36681:32;36707:5;36681:32;:::i;:::-;36672:42;:::i;:::-;36654:61;:::i;:::-;36641:74;;36563:158;;;:::o;36727:147::-;36822:45;36861:5;36822:45;:::i;:::-;36817:3;36810:58;36727:147;;:::o;36880:114::-;36947:6;36981:5;36975:12;36965:22;;36880:114;;;:::o;37000:184::-;37099:11;37133:6;37128:3;37121:19;37173:4;37168:3;37164:14;37149:29;;37000:184;;;;:::o;37190:132::-;37257:4;37280:3;37272:11;;37310:4;37305:3;37301:14;37293:22;;37190:132;;;:::o;37328:108::-;37405:24;37423:5;37405:24;:::i;:::-;37400:3;37393:37;37328:108;;:::o;37442:179::-;37511:10;37532:46;37574:3;37566:6;37532:46;:::i;:::-;37610:4;37605:3;37601:14;37587:28;;37442:179;;;;:::o;37627:113::-;37697:4;37729;37724:3;37720:14;37712:22;;37627:113;;;:::o;37776:732::-;37895:3;37924:54;37972:5;37924:54;:::i;:::-;37994:86;38073:6;38068:3;37994:86;:::i;:::-;37987:93;;38104:56;38154:5;38104:56;:::i;:::-;38183:7;38214:1;38199:284;38224:6;38221:1;38218:13;38199:284;;;38300:6;38294:13;38327:63;38386:3;38371:13;38327:63;:::i;:::-;38320:70;;38413:60;38466:6;38413:60;:::i;:::-;38403:70;;38259:224;38246:1;38243;38239:9;38234:14;;38199:284;;;38203:14;38499:3;38492:10;;37900:608;;;37776:732;;;;:::o;38514:831::-;38777:4;38815:3;38804:9;38800:19;38792:27;;38829:71;38897:1;38886:9;38882:17;38873:6;38829:71;:::i;:::-;38910:80;38986:2;38975:9;38971:18;38962:6;38910:80;:::i;:::-;39037:9;39031:4;39027:20;39022:2;39011:9;39007:18;39000:48;39065:108;39168:4;39159:6;39065:108;:::i;:::-;39057:116;;39183:72;39251:2;39240:9;39236:18;39227:6;39183:72;:::i;:::-;39265:73;39333:3;39322:9;39318:19;39309:6;39265:73;:::i;:::-;38514:831;;;;;;;;:::o

Swarm Source

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