ETH Price: $2,514.71 (+3.26%)

Token

Trump47 (TRUMP)
 

Overview

Max Total Supply

472,024,000 TRUMP

Holders

122

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
Trump47

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-18
*/

/*
SPDX-License-Identifier: UNLICENSE
*/


// https://x.com/trump0x472024

// https://t.me/Trump47eth

pragma solidity 0.8.26;

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 Trump47 is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private buyFee = 24;
    uint256 private sellFee = 23;
    uint256 private _preventSwapBefore = 23;
    uint256 private _buyCount = 0;

    uint256 private _txAmountLimit;
    uint256 private _walletAmountLimit;
    uint256 private _swapbackMin;
    uint256 private _swapbackMax;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event MaxTxAmountUpdated(uint _txAmountLimit);
    event MaxWalletAmountUpdated(uint _walletAmountLimit);
    event FeesUpdated(uint buyFee, uint sellFee);
    event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax);
    event FeeReceiverUpdated(address _taxWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20("Trump47", "TRUMP") {
        uint256 _totalSupply = 472_024_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 20) / 1000;
        _walletAmountLimit = (_totalSupply * 20) / 1000;
        _swapbackMin = (_totalSupply * 1) / 10000;
        _swapbackMax = (_totalSupply * 200) / 10000;
        _taxWallet = payable(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }


    receive() external payable {}

    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;
        buyFee = 24;
        sellFee = 23;

        emit TradingOpened();
    }

    function setMkt(address payable marketingWallet) external onlyOwner {
        _taxWallet = marketingWallet;

        emit FeeReceiverUpdated(marketingWallet);
    }

    function setTx(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max tx cant be lower than 0.1%");
        _txAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxTxAmountUpdated(_txAmountLimit);
    }

    function setWallet(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max wallet cant be lower than 0.1%");
        _walletAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxWalletAmountUpdated(_walletAmountLimit);
    }

    function setSwapback(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000;
        _swapbackMax = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

  

    function rmvLimits() external onlyOwner {
        _txAmountLimit = totalSupply();
        _walletAmountLimit = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxWalletAmountUpdated(totalSupply());
    }

    function setTax(uint256 buyTax, uint256 sellTax) external onlyOwner {
        require(buyTax <= 25, "Invalid buy tax value");
        require(sellTax <= 25, "Invalid sell tax value");
        buyFee = buyTax;
        sellFee = sellTax;
        emit FeesUpdated(buyTax, sellTax);
    }

    function removeETH() external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        _taxWallet.transfer(address(this).balance);
    }

      function removeErrorToken(address _address) external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        IERC20(_address).transfer(_taxWallet,IERC20(_address).balanceOf(address(this)));
        }

  

    function exemptFee(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
        emit ExcludedFromFee(account, status);
    }

    function viewInfo()
        external
        view
        returns (
            uint256 _buyFee,
            uint256 _sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            buyFee,
            sellFee,
            _txAmountLimit,
            _walletAmountLimit,
            _swapbackMin,
            _swapbackMax
        );
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && !inSwap) {
            taxAmount = amount.mul(buyFee).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit.");
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(sellFee).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _swapbackMin &&
                _buyCount > _preventSwapBefore &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance,_swapbackMax));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee();
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function triggerSwap() external {
        require(
            msg.sender == _taxWallet || msg.sender == owner(),
            "Only fee receiver can trigger"
        );
        uint256 contractTokenBalance = balanceOf(address(this));

        swapTokensForEth(contractTokenBalance);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee();
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee() private {
        bool success;
        (success, ) = address(_taxWallet).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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":false,"internalType":"uint256","name":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","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"},{"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFee","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeErrorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMkt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526018600a556017600b556017600c555f600d555f601360156101000a81548160ff0219169083151502179055505f601360166101000a81548160ff021916908315150217905550348015610056575f80fd5b506040518060400160405280600781526020017f5472756d703437000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5452554d5000000000000000000000000000000000000000000000000000000081525081600390816100d291906107ba565b5080600490816100e291906107ba565b5050506101016100f661032160201b60201c565b61032860201b60201c565b5f6b018672f8503220adb700000090506103e860148261012191906108b6565b61012b9190610924565b600e819055506103e860148261014191906108b6565b61014b9190610924565b600f8190555061271060018261016191906108b6565b61016b9190610924565b60108190555061271060c88261018191906108b6565b61018b9190610924565b6011819055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f6101e46103eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061031b61030f61032160201b60201c565b8261041360201b60201c565b50610a27565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610478906109ae565b60405180910390fd5b6104925f838361057660201b60201c565b8060025f8282546104a391906109cc565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546104f591906109cc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105599190610a0e565b60405180910390a36105725f838361057b60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806105fb57607f821691505b60208210810361060e5761060d6105b7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106707fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610635565b61067a8683610635565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106be6106b96106b484610692565b61069b565b610692565b9050919050565b5f819050919050565b6106d7836106a4565b6106eb6106e3826106c5565b848454610641565b825550505050565b5f90565b6106ff6106f3565b61070a8184846106ce565b505050565b5b8181101561072d576107225f826106f7565b600181019050610710565b5050565b601f8211156107725761074381610614565b61074c84610626565b8101602085101561075b578190505b61076f61076785610626565b83018261070f565b50505b505050565b5f82821c905092915050565b5f6107925f1984600802610777565b1980831691505092915050565b5f6107aa8383610783565b9150826002028217905092915050565b6107c382610580565b67ffffffffffffffff8111156107dc576107db61058a565b5b6107e682546105e4565b6107f1828285610731565b5f60209050601f831160018114610822575f8415610810578287015190505b61081a858261079f565b865550610881565b601f19841661083086610614565b5f5b8281101561085757848901518255600182019150602085019450602081019050610832565b868310156108745784890151610870601f891682610783565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6108c082610692565b91506108cb83610692565b92508282026108d981610692565b915082820484148315176108f0576108ef610889565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61092e82610692565b915061093983610692565b925082610949576109486108f7565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610998601f83610954565b91506109a382610964565b602082019050919050565b5f6020820190508181035f8301526109c58161098c565b9050919050565b5f6109d682610692565b91506109e183610692565b92508282019050808211156109f9576109f8610889565b5b92915050565b610a0881610692565b82525050565b5f602082019050610a215f8301846109ff565b92915050565b61407480610a345f395ff3fe608060405260043610610184575f3560e01c806370a08231116100d0578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610540578063c9567bf914610568578063dd62ed3e1461057e578063f2fde38b146105ba5761018b565b8063a9059cbb146104ad578063ae601480146104e9578063b5973bd4146105185761018b565b806370a08231146103b5578063715018a6146103f15780638da5cb5b146104075780638f937cc41461043157806395d89b4114610447578063a457c2d7146104715761018b565b806323b872dd1161013d57806339509351116101175780633950935114610313578063620cc86c1461034f578063667f6526146103775780636ed6a48d1461039f5761018b565b806323b872dd146102855780632dc4f5e6146102c1578063313ce567146102e95761018b565b80630313fc4b1461018f57806306fdde03146101b7578063095ea7b3146101e157806314d0c4341461021d57806318160ddd14610245578063217b6da61461026f5761018b565b3661018b57005b5f80fd5b34801561019a575f80fd5b506101b560048036038101906101b09190612ce9565b6105e2565b005b3480156101c2575f80fd5b506101cb6106e7565b6040516101d89190612d97565b60405180910390f35b3480156101ec575f80fd5b5061020760048036038101906102029190612e11565b610777565b6040516102149190612e69565b60405180910390f35b348015610228575f80fd5b50610243600480360381019061023e9190612e82565b610794565b005b348015610250575f80fd5b506102596108b6565b6040516102669190612ebc565b60405180910390f35b34801561027a575f80fd5b506102836108bf565b005b348015610290575f80fd5b506102ab60048036038101906102a69190612ed5565b6109b5565b6040516102b89190612e69565b60405180910390f35b3480156102cc575f80fd5b506102e760048036038101906102e29190612f4f565b610aa7565b005b3480156102f4575f80fd5b506102fd610bb4565b60405161030a9190612fa8565b60405180910390f35b34801561031e575f80fd5b5061033960048036038101906103349190612e11565b610bbc565b6040516103469190612e69565b60405180910390f35b34801561035a575f80fd5b5061037560048036038101906103709190612e82565b610c63565b005b348015610382575f80fd5b5061039d60048036038101906103989190612ce9565b610d85565b005b3480156103aa575f80fd5b506103b3610ed4565b005b3480156103c0575f80fd5b506103db60048036038101906103d69190612fc1565b610fea565b6040516103e89190612ebc565b60405180910390f35b3480156103fc575f80fd5b5061040561102f565b005b348015610412575f80fd5b5061041b6110b6565b6040516104289190612ffb565b60405180910390f35b34801561043c575f80fd5b506104456110de565b005b348015610452575f80fd5b5061045b6111d8565b6040516104689190612d97565b60405180910390f35b34801561047c575f80fd5b5061049760048036038101906104929190612e11565b611268565b6040516104a49190612e69565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce9190612e11565b61134e565b6040516104e09190612e69565b60405180910390f35b3480156104f4575f80fd5b506104fd61136b565b60405161050f96959493929190613014565b60405180910390f35b348015610523575f80fd5b5061053e600480360381019061053991906130ae565b611397565b005b34801561054b575f80fd5b5061056660048036038101906105619190612fc1565b61148d565b005b348015610573575f80fd5b5061057c611633565b005b348015610589575f80fd5b506105a4600480360381019061059f91906130d9565b611be8565b6040516105b19190612ebc565b60405180910390f35b3480156105c5575f80fd5b506105e060048036038101906105db9190612fc1565b611c6a565b005b6105ea611d60565b73ffffffffffffffffffffffffffffffffffffffff166106086110b6565b73ffffffffffffffffffffffffffffffffffffffff161461065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065590613161565b60405180910390fd5b6127108261066a6108b6565b61067491906131ac565b61067e919061321a565b601081905550612710816106906108b6565b61069a91906131ac565b6106a4919061321a565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516106db92919061324a565b60405180910390a15050565b6060600380546106f69061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546107229061329e565b801561076d5780601f106107445761010080835404028352916020019161076d565b820191905f5260205f20905b81548152906001019060200180831161075057829003601f168201915b5050505050905090565b5f61078a610783611d60565b8484611d67565b6001905092915050565b61079c611d60565b73ffffffffffffffffffffffffffffffffffffffff166107ba6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790613161565b60405180910390fd5b6001811015610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b9061333e565b60405180910390fd5b6103e8816108606108b6565b61086a91906131ac565b610874919061321a565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ab9190612ebc565b60405180910390a150565b5f600254905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461094e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610945906133a6565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156109b2573d5f803e3d5ffd5b50565b5f6109c1848484611f2a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a08611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e90613434565b60405180910390fd5b610a9b85610a93611d60565b858403611d67565b60019150509392505050565b610aaf611d60565b73ffffffffffffffffffffffffffffffffffffffff16610acd6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90613161565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610ba8929190613452565b60405180910390a15050565b5f6012905090565b5f610c59610bc8611d60565b848460015f610bd5611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c549190613479565b611d67565b6001905092915050565b610c6b611d60565b73ffffffffffffffffffffffffffffffffffffffff16610c896110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613161565b60405180910390fd5b6001811015610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906134f6565b60405180910390fd5b6103e881610d2f6108b6565b610d3991906131ac565b610d43919061321a565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610d7a9190612ebc565b60405180910390a150565b610d8d611d60565b73ffffffffffffffffffffffffffffffffffffffff16610dab6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613161565b60405180910390fd5b6019821115610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061355e565b60405180910390fd5b6019811115610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906135c6565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610ec892919061324a565b60405180910390a15050565b610edc611d60565b73ffffffffffffffffffffffffffffffffffffffff16610efa6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613161565b60405180910390fd5b610f586108b6565b600e81905550610f666108b6565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610f956108b6565b604051610fa29190612ebc565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610fd36108b6565b604051610fe09190612ebc565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611037611d60565b73ffffffffffffffffffffffffffffffffffffffff166110556110b6565b73ffffffffffffffffffffffffffffffffffffffff16146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613161565b60405180910390fd5b6110b45f6125e7565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061116b575061113c6110b6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a1906133a6565b60405180910390fd5b5f6111b430610fea565b90506111bf816126aa565b5f4790505f8111156111d4576111d361293d565b5b5050565b6060600480546111e79061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546112139061329e565b801561125e5780601f106112355761010080835404028352916020019161125e565b820191905f5260205f20905b81548152906001019060200180831161124157829003601f168201915b5050505050905090565b5f8060015f611275611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690613654565b60405180910390fd5b61134361133a611d60565b85858403611d67565b600191505092915050565b5f61136161135a611d60565b8484611f2a565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b61139f611d60565b73ffffffffffffffffffffffffffffffffffffffff166113bd6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90613161565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee8160405161148291906136cd565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611513906133a6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115939190612ffb565b602060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d291906136fa565b6040518363ffffffff1660e01b81526004016115ef929190613725565b6020604051808303815f875af115801561160b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162f9190613760565b5050565b61163b611d60565b73ffffffffffffffffffffffffffffffffffffffff166116596110b6565b73ffffffffffffffffffffffffffffffffffffffff16146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690613161565b60405180910390fd5b601360149054906101000a900460ff16156116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f6906137d5565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117863060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117816108b6565b611d67565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118149190613807565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118be9190613807565b6040518363ffffffff1660e01b81526004016118db929190613832565b6020604051808303815f875af11580156118f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191b9190613807565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306119a230610fea565b5f806119ac6110b6565b426040518863ffffffff1660e01b81526004016119ce96959493929190613892565b60606040518083038185885af11580156119ea573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a0f91906138f1565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611aaf929190613941565b6020604051808303815f875af1158015611acb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aef9190613760565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506018600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611c72611d60565b73ffffffffffffffffffffffffffffffffffffffff16611c906110b6565b73ffffffffffffffffffffffffffffffffffffffff1614611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90613161565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b906139d8565b60405180910390fd5b611d5d816125e7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90613a66565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613af4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1d9190612ebc565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613b82565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613c10565b60405180910390fd5b5f8111612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90613c9e565b60405180910390fd5b5f6120516110b6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156120bf575061208f6110b6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120d85750601360159054906101000a900460ff16155b156125b05761210560646120f7600a54856129cb90919063ffffffff16565b6129e090919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156121b0575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612203575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e657600e5482111561224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224490613d06565b60405180910390fd5b600f548261225a85610fea565b6122649190613479565b11156122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90613d6e565b60405180910390fd5b4360036008546122b59190613479565b11156122ce576122c4836129f5565b156122cd575f80fd5b5b600d5f8154809291906122e090613d8c565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561238a575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123e857600f548261239c85610fea565b6123a69190613479565b11156123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de90613d6e565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561247057503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156124a05761249d606461248f600b54856129cb90919063ffffffff16565b6129e090919063ffffffff16565b90505b5f6124aa30610fea565b9050601360159054906101000a900460ff16158015612515575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561252d5750601360169054906101000a900460ff165b801561253a575060105481115b80156125495750600c54600d54115b801561257e57504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156125ae5761259761259282601154612a06565b6126aa565b5f4790505f8111156125ac576125ab61293d565b5b505b505b5f8111156125c4576125c3843083612a1e565b5b6125e184846125dc8486612c9390919063ffffffff16565b612a1e565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561270957612708613dd3565b5b6040519080825280602002602001820160405280156127375781602001602082028036833780820191505090505b50905030815f8151811061274e5761274d613e00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128169190613807565b8160018151811061282a57612829613e00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128903060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d67565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016128f2959493929190613ee4565b5f604051808303815f87803b158015612909575f80fd5b505af115801561291b573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161298390613f69565b5f6040518083038185875af1925050503d805f81146129bd576040519150601f19603f3d011682016040523d82523d5f602084013e6129c2565b606091505b50508091505050565b5f81836129d891906131ac565b905092915050565b5f81836129ed919061321a565b905092915050565b5f80823b90505f8111915050919050565b5f818311612a145782612a16565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8390613b82565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af190613c10565b60405180910390fd5b612b05838383612ca8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7f90613fed565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612c169190613479565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c7a9190612ebc565b60405180910390a3612c8d848484612cad565b50505050565b5f8183612ca0919061400b565b905092915050565b505050565b505050565b5f80fd5b5f819050919050565b612cc881612cb6565b8114612cd2575f80fd5b50565b5f81359050612ce381612cbf565b92915050565b5f8060408385031215612cff57612cfe612cb2565b5b5f612d0c85828601612cd5565b9250506020612d1d85828601612cd5565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d6982612d27565b612d738185612d31565b9350612d83818560208601612d41565b612d8c81612d4f565b840191505092915050565b5f6020820190508181035f830152612daf8184612d5f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612de082612db7565b9050919050565b612df081612dd6565b8114612dfa575f80fd5b50565b5f81359050612e0b81612de7565b92915050565b5f8060408385031215612e2757612e26612cb2565b5b5f612e3485828601612dfd565b9250506020612e4585828601612cd5565b9150509250929050565b5f8115159050919050565b612e6381612e4f565b82525050565b5f602082019050612e7c5f830184612e5a565b92915050565b5f60208284031215612e9757612e96612cb2565b5b5f612ea484828501612cd5565b91505092915050565b612eb681612cb6565b82525050565b5f602082019050612ecf5f830184612ead565b92915050565b5f805f60608486031215612eec57612eeb612cb2565b5b5f612ef986828701612dfd565b9350506020612f0a86828701612dfd565b9250506040612f1b86828701612cd5565b9150509250925092565b612f2e81612e4f565b8114612f38575f80fd5b50565b5f81359050612f4981612f25565b92915050565b5f8060408385031215612f6557612f64612cb2565b5b5f612f7285828601612dfd565b9250506020612f8385828601612f3b565b9150509250929050565b5f60ff82169050919050565b612fa281612f8d565b82525050565b5f602082019050612fbb5f830184612f99565b92915050565b5f60208284031215612fd657612fd5612cb2565b5b5f612fe384828501612dfd565b91505092915050565b612ff581612dd6565b82525050565b5f60208201905061300e5f830184612fec565b92915050565b5f60c0820190506130275f830189612ead565b6130346020830188612ead565b6130416040830187612ead565b61304e6060830186612ead565b61305b6080830185612ead565b61306860a0830184612ead565b979650505050505050565b5f61307d82612db7565b9050919050565b61308d81613073565b8114613097575f80fd5b50565b5f813590506130a881613084565b92915050565b5f602082840312156130c3576130c2612cb2565b5b5f6130d08482850161309a565b91505092915050565b5f80604083850312156130ef576130ee612cb2565b5b5f6130fc85828601612dfd565b925050602061310d85828601612dfd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61314b602083612d31565b915061315682613117565b602082019050919050565b5f6020820190508181035f8301526131788161313f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131b682612cb6565b91506131c183612cb6565b92508282026131cf81612cb6565b915082820484148315176131e6576131e561317f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61322482612cb6565b915061322f83612cb6565b92508261323f5761323e6131ed565b5b828204905092915050565b5f60408201905061325d5f830185612ead565b61326a6020830184612ead565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132b557607f821691505b6020821081036132c8576132c7613271565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613328602283612d31565b9150613333826132ce565b604082019050919050565b5f6020820190508181035f8301526133558161331c565b9050919050565b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f613390601d83612d31565b915061339b8261335c565b602082019050919050565b5f6020820190508181035f8301526133bd81613384565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61341e602883612d31565b9150613429826133c4565b604082019050919050565b5f6020820190508181035f83015261344b81613412565b9050919050565b5f6040820190506134655f830185612fec565b6134726020830184612e5a565b9392505050565b5f61348382612cb6565b915061348e83612cb6565b92508282019050808211156134a6576134a561317f565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f6134e0601e83612d31565b91506134eb826134ac565b602082019050919050565b5f6020820190508181035f83015261350d816134d4565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613548601583612d31565b915061355382613514565b602082019050919050565b5f6020820190508181035f8301526135758161353c565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6135b0601683612d31565b91506135bb8261357c565b602082019050919050565b5f6020820190508181035f8301526135dd816135a4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61363e602583612d31565b9150613649826135e4565b604082019050919050565b5f6020820190508181035f83015261366b81613632565b9050919050565b5f819050919050565b5f61369561369061368b84612db7565b613672565b612db7565b9050919050565b5f6136a68261367b565b9050919050565b5f6136b78261369c565b9050919050565b6136c7816136ad565b82525050565b5f6020820190506136e05f8301846136be565b92915050565b5f815190506136f481612cbf565b92915050565b5f6020828403121561370f5761370e612cb2565b5b5f61371c848285016136e6565b91505092915050565b5f6040820190506137385f8301856136be565b6137456020830184612ead565b9392505050565b5f8151905061375a81612f25565b92915050565b5f6020828403121561377557613774612cb2565b5b5f6137828482850161374c565b91505092915050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f6137bf601783612d31565b91506137ca8261378b565b602082019050919050565b5f6020820190508181035f8301526137ec816137b3565b9050919050565b5f8151905061380181612de7565b92915050565b5f6020828403121561381c5761381b612cb2565b5b5f613829848285016137f3565b91505092915050565b5f6040820190506138455f830185612fec565b6138526020830184612fec565b9392505050565b5f819050919050565b5f61387c61387761387284613859565b613672565b612cb6565b9050919050565b61388c81613862565b82525050565b5f60c0820190506138a55f830189612fec565b6138b26020830188612ead565b6138bf6040830187613883565b6138cc6060830186613883565b6138d96080830185612fec565b6138e660a0830184612ead565b979650505050505050565b5f805f6060848603121561390857613907612cb2565b5b5f613915868287016136e6565b9350506020613926868287016136e6565b9250506040613937868287016136e6565b9150509250925092565b5f6040820190506139545f830185612fec565b6139616020830184612ead565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6139c2602683612d31565b91506139cd82613968565b604082019050919050565b5f6020820190508181035f8301526139ef816139b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613a50602483612d31565b9150613a5b826139f6565b604082019050919050565b5f6020820190508181035f830152613a7d81613a44565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ade602283612d31565b9150613ae982613a84565b604082019050919050565b5f6020820190508181035f830152613b0b81613ad2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613b6c602583612d31565b9150613b7782613b12565b604082019050919050565b5f6020820190508181035f830152613b9981613b60565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613bfa602383612d31565b9150613c0582613ba0565b604082019050919050565b5f6020820190508181035f830152613c2781613bee565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613c88602983612d31565b9150613c9382613c2e565b604082019050919050565b5f6020820190508181035f830152613cb581613c7c565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613cf0601b83612d31565b9150613cfb82613cbc565b602082019050919050565b5f6020820190508181035f830152613d1d81613ce4565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613d58601a83612d31565b9150613d6382613d24565b602082019050919050565b5f6020820190508181035f830152613d8581613d4c565b9050919050565b5f613d9682612cb6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613dc857613dc761317f565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e5f81612dd6565b82525050565b5f613e708383613e56565b60208301905092915050565b5f602082019050919050565b5f613e9282613e2d565b613e9c8185613e37565b9350613ea783613e47565b805f5b83811015613ed7578151613ebe8882613e65565b9750613ec983613e7c565b925050600181019050613eaa565b5085935050505092915050565b5f60a082019050613ef75f830188612ead565b613f046020830187613883565b8181036040830152613f168186613e88565b9050613f256060830185612fec565b613f326080830184612ead565b9695505050505050565b5f81905092915050565b50565b5f613f545f83613f3c565b9150613f5f82613f46565b5f82019050919050565b5f613f7382613f49565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613fd7602683612d31565b9150613fe282613f7d565b604082019050919050565b5f6020820190508181035f83015261400481613fcb565b9050919050565b5f61401582612cb6565b915061402083612cb6565b92508282039050818111156140385761403761317f565b5b9291505056fea264697066735822122086d0838ec13fbb70421b4c9136c16d8ca02cb0713ec20bef81a4632b41531b5064736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610184575f3560e01c806370a08231116100d0578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610540578063c9567bf914610568578063dd62ed3e1461057e578063f2fde38b146105ba5761018b565b8063a9059cbb146104ad578063ae601480146104e9578063b5973bd4146105185761018b565b806370a08231146103b5578063715018a6146103f15780638da5cb5b146104075780638f937cc41461043157806395d89b4114610447578063a457c2d7146104715761018b565b806323b872dd1161013d57806339509351116101175780633950935114610313578063620cc86c1461034f578063667f6526146103775780636ed6a48d1461039f5761018b565b806323b872dd146102855780632dc4f5e6146102c1578063313ce567146102e95761018b565b80630313fc4b1461018f57806306fdde03146101b7578063095ea7b3146101e157806314d0c4341461021d57806318160ddd14610245578063217b6da61461026f5761018b565b3661018b57005b5f80fd5b34801561019a575f80fd5b506101b560048036038101906101b09190612ce9565b6105e2565b005b3480156101c2575f80fd5b506101cb6106e7565b6040516101d89190612d97565b60405180910390f35b3480156101ec575f80fd5b5061020760048036038101906102029190612e11565b610777565b6040516102149190612e69565b60405180910390f35b348015610228575f80fd5b50610243600480360381019061023e9190612e82565b610794565b005b348015610250575f80fd5b506102596108b6565b6040516102669190612ebc565b60405180910390f35b34801561027a575f80fd5b506102836108bf565b005b348015610290575f80fd5b506102ab60048036038101906102a69190612ed5565b6109b5565b6040516102b89190612e69565b60405180910390f35b3480156102cc575f80fd5b506102e760048036038101906102e29190612f4f565b610aa7565b005b3480156102f4575f80fd5b506102fd610bb4565b60405161030a9190612fa8565b60405180910390f35b34801561031e575f80fd5b5061033960048036038101906103349190612e11565b610bbc565b6040516103469190612e69565b60405180910390f35b34801561035a575f80fd5b5061037560048036038101906103709190612e82565b610c63565b005b348015610382575f80fd5b5061039d60048036038101906103989190612ce9565b610d85565b005b3480156103aa575f80fd5b506103b3610ed4565b005b3480156103c0575f80fd5b506103db60048036038101906103d69190612fc1565b610fea565b6040516103e89190612ebc565b60405180910390f35b3480156103fc575f80fd5b5061040561102f565b005b348015610412575f80fd5b5061041b6110b6565b6040516104289190612ffb565b60405180910390f35b34801561043c575f80fd5b506104456110de565b005b348015610452575f80fd5b5061045b6111d8565b6040516104689190612d97565b60405180910390f35b34801561047c575f80fd5b5061049760048036038101906104929190612e11565b611268565b6040516104a49190612e69565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce9190612e11565b61134e565b6040516104e09190612e69565b60405180910390f35b3480156104f4575f80fd5b506104fd61136b565b60405161050f96959493929190613014565b60405180910390f35b348015610523575f80fd5b5061053e600480360381019061053991906130ae565b611397565b005b34801561054b575f80fd5b5061056660048036038101906105619190612fc1565b61148d565b005b348015610573575f80fd5b5061057c611633565b005b348015610589575f80fd5b506105a4600480360381019061059f91906130d9565b611be8565b6040516105b19190612ebc565b60405180910390f35b3480156105c5575f80fd5b506105e060048036038101906105db9190612fc1565b611c6a565b005b6105ea611d60565b73ffffffffffffffffffffffffffffffffffffffff166106086110b6565b73ffffffffffffffffffffffffffffffffffffffff161461065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065590613161565b60405180910390fd5b6127108261066a6108b6565b61067491906131ac565b61067e919061321a565b601081905550612710816106906108b6565b61069a91906131ac565b6106a4919061321a565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516106db92919061324a565b60405180910390a15050565b6060600380546106f69061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546107229061329e565b801561076d5780601f106107445761010080835404028352916020019161076d565b820191905f5260205f20905b81548152906001019060200180831161075057829003601f168201915b5050505050905090565b5f61078a610783611d60565b8484611d67565b6001905092915050565b61079c611d60565b73ffffffffffffffffffffffffffffffffffffffff166107ba6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790613161565b60405180910390fd5b6001811015610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b9061333e565b60405180910390fd5b6103e8816108606108b6565b61086a91906131ac565b610874919061321a565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ab9190612ebc565b60405180910390a150565b5f600254905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461094e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610945906133a6565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156109b2573d5f803e3d5ffd5b50565b5f6109c1848484611f2a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a08611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e90613434565b60405180910390fd5b610a9b85610a93611d60565b858403611d67565b60019150509392505050565b610aaf611d60565b73ffffffffffffffffffffffffffffffffffffffff16610acd6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90613161565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610ba8929190613452565b60405180910390a15050565b5f6012905090565b5f610c59610bc8611d60565b848460015f610bd5611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c549190613479565b611d67565b6001905092915050565b610c6b611d60565b73ffffffffffffffffffffffffffffffffffffffff16610c896110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613161565b60405180910390fd5b6001811015610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906134f6565b60405180910390fd5b6103e881610d2f6108b6565b610d3991906131ac565b610d43919061321a565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610d7a9190612ebc565b60405180910390a150565b610d8d611d60565b73ffffffffffffffffffffffffffffffffffffffff16610dab6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613161565b60405180910390fd5b6019821115610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061355e565b60405180910390fd5b6019811115610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906135c6565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610ec892919061324a565b60405180910390a15050565b610edc611d60565b73ffffffffffffffffffffffffffffffffffffffff16610efa6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613161565b60405180910390fd5b610f586108b6565b600e81905550610f666108b6565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610f956108b6565b604051610fa29190612ebc565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610fd36108b6565b604051610fe09190612ebc565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611037611d60565b73ffffffffffffffffffffffffffffffffffffffff166110556110b6565b73ffffffffffffffffffffffffffffffffffffffff16146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613161565b60405180910390fd5b6110b45f6125e7565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061116b575061113c6110b6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a1906133a6565b60405180910390fd5b5f6111b430610fea565b90506111bf816126aa565b5f4790505f8111156111d4576111d361293d565b5b5050565b6060600480546111e79061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546112139061329e565b801561125e5780601f106112355761010080835404028352916020019161125e565b820191905f5260205f20905b81548152906001019060200180831161124157829003601f168201915b5050505050905090565b5f8060015f611275611d60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690613654565b60405180910390fd5b61134361133a611d60565b85858403611d67565b600191505092915050565b5f61136161135a611d60565b8484611f2a565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b61139f611d60565b73ffffffffffffffffffffffffffffffffffffffff166113bd6110b6565b73ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90613161565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee8160405161148291906136cd565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611513906133a6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115939190612ffb565b602060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d291906136fa565b6040518363ffffffff1660e01b81526004016115ef929190613725565b6020604051808303815f875af115801561160b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162f9190613760565b5050565b61163b611d60565b73ffffffffffffffffffffffffffffffffffffffff166116596110b6565b73ffffffffffffffffffffffffffffffffffffffff16146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690613161565b60405180910390fd5b601360149054906101000a900460ff16156116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f6906137d5565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117863060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117816108b6565b611d67565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118149190613807565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118be9190613807565b6040518363ffffffff1660e01b81526004016118db929190613832565b6020604051808303815f875af11580156118f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191b9190613807565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306119a230610fea565b5f806119ac6110b6565b426040518863ffffffff1660e01b81526004016119ce96959493929190613892565b60606040518083038185885af11580156119ea573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a0f91906138f1565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611aaf929190613941565b6020604051808303815f875af1158015611acb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aef9190613760565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506018600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611c72611d60565b73ffffffffffffffffffffffffffffffffffffffff16611c906110b6565b73ffffffffffffffffffffffffffffffffffffffff1614611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90613161565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b906139d8565b60405180910390fd5b611d5d816125e7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90613a66565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613af4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1d9190612ebc565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613b82565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613c10565b60405180910390fd5b5f8111612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90613c9e565b60405180910390fd5b5f6120516110b6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156120bf575061208f6110b6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120d85750601360159054906101000a900460ff16155b156125b05761210560646120f7600a54856129cb90919063ffffffff16565b6129e090919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156121b0575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612203575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e657600e5482111561224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224490613d06565b60405180910390fd5b600f548261225a85610fea565b6122649190613479565b11156122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90613d6e565b60405180910390fd5b4360036008546122b59190613479565b11156122ce576122c4836129f5565b156122cd575f80fd5b5b600d5f8154809291906122e090613d8c565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561238a575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123e857600f548261239c85610fea565b6123a69190613479565b11156123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de90613d6e565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561247057503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156124a05761249d606461248f600b54856129cb90919063ffffffff16565b6129e090919063ffffffff16565b90505b5f6124aa30610fea565b9050601360159054906101000a900460ff16158015612515575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561252d5750601360169054906101000a900460ff165b801561253a575060105481115b80156125495750600c54600d54115b801561257e57504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156125ae5761259761259282601154612a06565b6126aa565b5f4790505f8111156125ac576125ab61293d565b5b505b505b5f8111156125c4576125c3843083612a1e565b5b6125e184846125dc8486612c9390919063ffffffff16565b612a1e565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561270957612708613dd3565b5b6040519080825280602002602001820160405280156127375781602001602082028036833780820191505090505b50905030815f8151811061274e5761274d613e00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128169190613807565b8160018151811061282a57612829613e00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128903060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d67565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016128f2959493929190613ee4565b5f604051808303815f87803b158015612909575f80fd5b505af115801561291b573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161298390613f69565b5f6040518083038185875af1925050503d805f81146129bd576040519150601f19603f3d011682016040523d82523d5f602084013e6129c2565b606091505b50508091505050565b5f81836129d891906131ac565b905092915050565b5f81836129ed919061321a565b905092915050565b5f80823b90505f8111915050919050565b5f818311612a145782612a16565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8390613b82565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af190613c10565b60405180910390fd5b612b05838383612ca8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7f90613fed565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612c169190613479565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c7a9190612ebc565b60405180910390a3612c8d848484612cad565b50505050565b5f8183612ca0919061400b565b905092915050565b505050565b505050565b5f80fd5b5f819050919050565b612cc881612cb6565b8114612cd2575f80fd5b50565b5f81359050612ce381612cbf565b92915050565b5f8060408385031215612cff57612cfe612cb2565b5b5f612d0c85828601612cd5565b9250506020612d1d85828601612cd5565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d6982612d27565b612d738185612d31565b9350612d83818560208601612d41565b612d8c81612d4f565b840191505092915050565b5f6020820190508181035f830152612daf8184612d5f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612de082612db7565b9050919050565b612df081612dd6565b8114612dfa575f80fd5b50565b5f81359050612e0b81612de7565b92915050565b5f8060408385031215612e2757612e26612cb2565b5b5f612e3485828601612dfd565b9250506020612e4585828601612cd5565b9150509250929050565b5f8115159050919050565b612e6381612e4f565b82525050565b5f602082019050612e7c5f830184612e5a565b92915050565b5f60208284031215612e9757612e96612cb2565b5b5f612ea484828501612cd5565b91505092915050565b612eb681612cb6565b82525050565b5f602082019050612ecf5f830184612ead565b92915050565b5f805f60608486031215612eec57612eeb612cb2565b5b5f612ef986828701612dfd565b9350506020612f0a86828701612dfd565b9250506040612f1b86828701612cd5565b9150509250925092565b612f2e81612e4f565b8114612f38575f80fd5b50565b5f81359050612f4981612f25565b92915050565b5f8060408385031215612f6557612f64612cb2565b5b5f612f7285828601612dfd565b9250506020612f8385828601612f3b565b9150509250929050565b5f60ff82169050919050565b612fa281612f8d565b82525050565b5f602082019050612fbb5f830184612f99565b92915050565b5f60208284031215612fd657612fd5612cb2565b5b5f612fe384828501612dfd565b91505092915050565b612ff581612dd6565b82525050565b5f60208201905061300e5f830184612fec565b92915050565b5f60c0820190506130275f830189612ead565b6130346020830188612ead565b6130416040830187612ead565b61304e6060830186612ead565b61305b6080830185612ead565b61306860a0830184612ead565b979650505050505050565b5f61307d82612db7565b9050919050565b61308d81613073565b8114613097575f80fd5b50565b5f813590506130a881613084565b92915050565b5f602082840312156130c3576130c2612cb2565b5b5f6130d08482850161309a565b91505092915050565b5f80604083850312156130ef576130ee612cb2565b5b5f6130fc85828601612dfd565b925050602061310d85828601612dfd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61314b602083612d31565b915061315682613117565b602082019050919050565b5f6020820190508181035f8301526131788161313f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131b682612cb6565b91506131c183612cb6565b92508282026131cf81612cb6565b915082820484148315176131e6576131e561317f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61322482612cb6565b915061322f83612cb6565b92508261323f5761323e6131ed565b5b828204905092915050565b5f60408201905061325d5f830185612ead565b61326a6020830184612ead565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132b557607f821691505b6020821081036132c8576132c7613271565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613328602283612d31565b9150613333826132ce565b604082019050919050565b5f6020820190508181035f8301526133558161331c565b9050919050565b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f613390601d83612d31565b915061339b8261335c565b602082019050919050565b5f6020820190508181035f8301526133bd81613384565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61341e602883612d31565b9150613429826133c4565b604082019050919050565b5f6020820190508181035f83015261344b81613412565b9050919050565b5f6040820190506134655f830185612fec565b6134726020830184612e5a565b9392505050565b5f61348382612cb6565b915061348e83612cb6565b92508282019050808211156134a6576134a561317f565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f6134e0601e83612d31565b91506134eb826134ac565b602082019050919050565b5f6020820190508181035f83015261350d816134d4565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613548601583612d31565b915061355382613514565b602082019050919050565b5f6020820190508181035f8301526135758161353c565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6135b0601683612d31565b91506135bb8261357c565b602082019050919050565b5f6020820190508181035f8301526135dd816135a4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61363e602583612d31565b9150613649826135e4565b604082019050919050565b5f6020820190508181035f83015261366b81613632565b9050919050565b5f819050919050565b5f61369561369061368b84612db7565b613672565b612db7565b9050919050565b5f6136a68261367b565b9050919050565b5f6136b78261369c565b9050919050565b6136c7816136ad565b82525050565b5f6020820190506136e05f8301846136be565b92915050565b5f815190506136f481612cbf565b92915050565b5f6020828403121561370f5761370e612cb2565b5b5f61371c848285016136e6565b91505092915050565b5f6040820190506137385f8301856136be565b6137456020830184612ead565b9392505050565b5f8151905061375a81612f25565b92915050565b5f6020828403121561377557613774612cb2565b5b5f6137828482850161374c565b91505092915050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f6137bf601783612d31565b91506137ca8261378b565b602082019050919050565b5f6020820190508181035f8301526137ec816137b3565b9050919050565b5f8151905061380181612de7565b92915050565b5f6020828403121561381c5761381b612cb2565b5b5f613829848285016137f3565b91505092915050565b5f6040820190506138455f830185612fec565b6138526020830184612fec565b9392505050565b5f819050919050565b5f61387c61387761387284613859565b613672565b612cb6565b9050919050565b61388c81613862565b82525050565b5f60c0820190506138a55f830189612fec565b6138b26020830188612ead565b6138bf6040830187613883565b6138cc6060830186613883565b6138d96080830185612fec565b6138e660a0830184612ead565b979650505050505050565b5f805f6060848603121561390857613907612cb2565b5b5f613915868287016136e6565b9350506020613926868287016136e6565b9250506040613937868287016136e6565b9150509250925092565b5f6040820190506139545f830185612fec565b6139616020830184612ead565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6139c2602683612d31565b91506139cd82613968565b604082019050919050565b5f6020820190508181035f8301526139ef816139b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613a50602483612d31565b9150613a5b826139f6565b604082019050919050565b5f6020820190508181035f830152613a7d81613a44565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ade602283612d31565b9150613ae982613a84565b604082019050919050565b5f6020820190508181035f830152613b0b81613ad2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613b6c602583612d31565b9150613b7782613b12565b604082019050919050565b5f6020820190508181035f830152613b9981613b60565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613bfa602383612d31565b9150613c0582613ba0565b604082019050919050565b5f6020820190508181035f830152613c2781613bee565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613c88602983612d31565b9150613c9382613c2e565b604082019050919050565b5f6020820190508181035f830152613cb581613c7c565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613cf0601b83612d31565b9150613cfb82613cbc565b602082019050919050565b5f6020820190508181035f830152613d1d81613ce4565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613d58601a83612d31565b9150613d6382613d24565b602082019050919050565b5f6020820190508181035f830152613d8581613d4c565b9050919050565b5f613d9682612cb6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613dc857613dc761317f565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e5f81612dd6565b82525050565b5f613e708383613e56565b60208301905092915050565b5f602082019050919050565b5f613e9282613e2d565b613e9c8185613e37565b9350613ea783613e47565b805f5b83811015613ed7578151613ebe8882613e65565b9750613ec983613e7c565b925050600181019050613eaa565b5085935050505092915050565b5f60a082019050613ef75f830188612ead565b613f046020830187613883565b8181036040830152613f168186613e88565b9050613f256060830185612fec565b613f326080830184612ead565b9695505050505050565b5f81905092915050565b50565b5f613f545f83613f3c565b9150613f5f82613f46565b5f82019050919050565b5f613f7382613f49565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613fd7602683612d31565b9150613fe282613f7d565b604082019050919050565b5f6020820190508181035f83015261400481613fcb565b9050919050565b5f61401582612cb6565b915061402083612cb6565b92508282039050818111156140385761403761317f565b5b9291505056fea264697066735822122086d0838ec13fbb70421b4c9136c16d8ca02cb0713ec20bef81a4632b41531b5064736f6c634300081a0033

Deployed Bytecode Sourcemap

25390:9283:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28952:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10988:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13221:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28686:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12108:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29818:168;;;;;;;;;;;;;:::i;:::-;;13893:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30242:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11950:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14827:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28440:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29520:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29276:236;;;;;;;;;;;;;:::i;:::-;;12279:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22327:103;;;;;;;;;;;;;:::i;:::-;;21676:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33516:436;;;;;;;;;;;;;:::i;:::-;;11207:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15616:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12635:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30421:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28264:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29996:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27225:1031;;;;;;;;;;;;;:::i;:::-;;12898:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22585:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28952:310;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29126:5:::1;29106:16;29090:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29089:42;;;;:::i;:::-;29074:12;:57;;;;29188:5;29174:10;29158:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29157:36;;;;:::i;:::-;29142:12;:51;;;;29209:45;29225:16;29243:10;29209:45;;;;;;;:::i;:::-;;;;;;;;28952:310:::0;;:::o;10988:100::-;11042:13;11075:5;11068:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10988:100;:::o;13221:194::-;13329:4;13346:39;13355:12;:10;:12::i;:::-;13369:7;13378:6;13346:8;:39::i;:::-;13403:4;13396:11;;13221:194;;;;:::o;28686:258::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28773:1:::1;28761:8;:13;;28753:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28874:4;28862:8;28846:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28845:33;;;;:::i;:::-;28824:18;:54;;;;28894:42;28917:18;;28894:42;;;;;;:::i;:::-;;;;;;;;28686:258:::0;:::o;12108:108::-;12169:7;12196:12;;12189:19;;12108:108;:::o;29818:168::-;29881:10;;;;;;;;;;;29867:24;;:10;:24;;;29859:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29936:10;;;;;;;;;;;:19;;:42;29956:21;29936:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29818:168::o;13893:529::-;14033:4;14050:36;14060:6;14068:9;14079:6;14050:9;:36::i;:::-;14099:24;14126:11;:19;14138:6;14126:19;;;;;;;;;;;;;;;:33;14146:12;:10;:12::i;:::-;14126:33;;;;;;;;;;;;;;;;14099:60;;14212:6;14192:16;:26;;14170:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14322:57;14331:6;14339:12;:10;:12::i;:::-;14372:6;14353:16;:25;14322:8;:57::i;:::-;14410:4;14403:11;;;13893:529;;;;;:::o;30242:171::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30351:6:::1;30321:18;:27;30340:7;30321:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30373:32;30389:7;30398:6;30373:32;;;;;;;:::i;:::-;;;;;;;;30242:171:::0;;:::o;11950:93::-;12008:5;12033:2;12026:9;;11950:93;:::o;14827:290::-;14940:4;14957:130;14980:12;:10;:12::i;:::-;15007:7;15066:10;15029:11;:25;15041:12;:10;:12::i;:::-;15029:25;;;;;;;;;;;;;;;:34;15055:7;15029:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14957:8;:130::i;:::-;15105:4;15098:11;;14827:290;;;;:::o;28440:238::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28523:1:::1;28511:8;:13;;28503:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28616:4;28604:8;28588:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28587:33;;;;:::i;:::-;28570:14;:50;;;;28636:34;28655:14;;28636:34;;;;;;:::i;:::-;;;;;;;;28440:238:::0;:::o;29520:290::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29617:2:::1;29607:6;:12;;29599:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29675:2;29664:7;:13;;29656:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29724:6;29715;:15;;;;29751:7;29741;:17;;;;29774:28;29786:6;29794:7;29774:28;;;;;;;:::i;:::-;;;;;;;;29520:290:::0;;:::o;29276:236::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29344:13:::1;:11;:13::i;:::-;29327:14;:30;;;;29389:13;:11;:13::i;:::-;29368:18;:34;;;;29418:33;29437:13;:11;:13::i;:::-;29418:33;;;;;;:::i;:::-;;;;;;;;29467:37;29490:13;:11;:13::i;:::-;29467:37;;;;;;:::i;:::-;;;;;;;;29276:236::o:0;12279:143::-;12369:7;12396:9;:18;12406:7;12396:18;;;;;;;;;;;;;;;;12389:25;;12279:143;;;:::o;22327:103::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22392:30:::1;22419:1;22392:18;:30::i;:::-;22327:103::o:0;21676:87::-;21722:7;21749:6;;;;;;;;;;;21742:13;;21676:87;:::o;33516:436::-;33595:10;;;;;;;;;;;33581:24;;:10;:24;;;:49;;;;33623:7;:5;:7::i;:::-;33609:21;;:10;:21;;;33581:49;33559:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;33698:28;33729:24;33747:4;33729:9;:24::i;:::-;33698:55;;33766:38;33783:20;33766:16;:38::i;:::-;33815:26;33844:21;33815:50;;33901:1;33880:18;:22;33876:69;;;33919:14;:12;:14::i;:::-;33876:69;33548:404;;33516:436::o;11207:104::-;11263:13;11296:7;11289:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11207:104;:::o;15616:475::-;15734:4;15751:24;15778:11;:25;15790:12;:10;:12::i;:::-;15778:25;;;;;;;;;;;;;;;:34;15804:7;15778:34;;;;;;;;;;;;;;;;15751:61;;15865:15;15845:16;:35;;15823:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15981:67;15990:12;:10;:12::i;:::-;16004:7;16032:15;16013:16;:34;15981:8;:67::i;:::-;16079:4;16072:11;;;15616:475;;;;:::o;12635:200::-;12746:4;12763:42;12773:12;:10;:12::i;:::-;12787:9;12798:6;12763:9;:42::i;:::-;12823:4;12816:11;;12635:200;;;;:::o;30421:485::-;30505:15;30535:16;30566:19;30600:21;30636:24;30675:18;30743:6;;30764:7;;30786:14;;30815:18;;30848:12;;30875;;30721:177;;;;;;;;;;;;30421:485;;;;;;:::o;28264:168::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28356:15:::1;28343:10;;:28;;;;;;;;;;;;;;;;;;28389:35;28408:15;28389:35;;;;;;:::i;:::-;;;;;;;;28264:168:::0;:::o;29996:232::-;30082:10;;;;;;;;;;;30068:24;;:10;:24;;;30060:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30144:8;30137:25;;;30163:10;;;;;;;;;;;30181:8;30174:26;;;30209:4;30174:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30137:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29996:232;:::o;27225:1031::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27287:11:::1;;;;;;;;;;;27286:12;27278:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27380:42;27337:15;;:96;;;;;;;;;;;;;;;;;;27444:64;27461:4;27476:15;;;;;;;;;;;27494:13;:11;:13::i;:::-;27444:8;:64::i;:::-;27547:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27535:49;;;27607:4;27627:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27535:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27519:13;;:141;;;;;;;;;;;;;;;;;;27671:15;;;;;;;;;;;:31;;;27710:21;27755:4;27775:24;27793:4;27775:9;:24::i;:::-;27814:1;27830::::0;27846:7:::1;:5;:7::i;:::-;27868:15;27671:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27912:13;;;;;;;;;;;27905:29;;;27943:15;;;;;;;;;;;27961:14;27905:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28001:4;27987:11;;:18;;;;;;;;;;;;;;;;;;28030:4;28016:11;;:18;;;;;;;;;;;;;;;;;;28058:12;28045:10;:25;;;;28106:12;28081:15;;:38;;;;;;;;;;;;;;;;;;28166:4;28130:18;:33;28157:4;28130:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28190:2;28181:6;:11;;;;28213:2;28203:7;:12;;;;28233:15;;;;;;;;;;27225:1031::o:0;12898:176::-;13012:7;13039:11;:18;13051:5;13039:18;;;;;;;;;;;;;;;:27;13058:7;13039:27;;;;;;;;;;;;;;;;13032:34;;12898:176;;;;:::o;22585:238::-;21907:12;:10;:12::i;:::-;21896:23;;:7;:5;:7::i;:::-;:23;;;21888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22708:1:::1;22688:22;;:8;:22;;::::0;22666:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22787:28;22806:8;22787:18;:28::i;:::-;22585:238:::0;:::o;9994:98::-;10047:7;10074:10;10067:17;;9994:98;:::o;19399:380::-;19552:1;19535:19;;:5;:19;;;19527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19633:1;19614:21;;:7;:21;;;19606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19717:6;19687:11;:18;19699:5;19687:18;;;;;;;;;;;;;;;:27;19706:7;19687:27;;;;;;;;;;;;;;;:36;;;;19755:7;19739:32;;19748:5;19739:32;;;19764:6;19739:32;;;;;;:::i;:::-;;;;;;;;19399:380;;;:::o;30914:2276::-;31062:1;31046:18;;:4;:18;;;31038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:1;31125:16;;:2;:16;;;31117:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31209:1;31200:6;:10;31192:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31267:17;31311:7;:5;:7::i;:::-;31303:15;;:4;:15;;;;:32;;;;;31328:7;:5;:7::i;:::-;31322:13;;:2;:13;;;;31303:32;:43;;;;;31340:6;;;;;;;;;;;31339:7;31303:43;31299:1720;;;31375:27;31398:3;31375:18;31386:6;;31375;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31363:39;;31449:13;;;;;;;;;;;31441:21;;:4;:21;;;:72;;;;;31497:15;;;;;;;;;;;31483:30;;:2;:30;;;;31441:72;:116;;;;;31535:18;:22;31554:2;31535:22;;;;;;;;;;;;;;;;;;;;;;;;;31534:23;31441:116;31419:568;;;31610:14;;31600:6;:24;;31592:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31731:18;;31721:6;31705:13;31715:2;31705:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31675:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31861:12;31857:1;31844:10;;:14;;;;:::i;:::-;:29;31840:102;;;31907:14;31918:2;31907:10;:14::i;:::-;31906:15;31898:24;;;;;;31840:102;31960:9;;:11;;;;;;;;;:::i;:::-;;;;;;31419:568;32013:13;;;;;;;;;;;32007:19;;:2;:19;;;;:46;;;;;32031:18;:22;32050:2;32031:22;;;;;;;;;;;;;;;;;;;;;;;;;32030:23;32007:46;32003:231;;;32130:18;;32120:6;32104:13;32114:2;32104:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32074:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32003:231;32260:13;;;;;;;;;;;32254:19;;:2;:19;;;:44;;;;;32293:4;32277:21;;:4;:21;;;;32254:44;32250:125;;;32331:28;32355:3;32331:19;32342:7;;32331:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32319:40;;32250:125;32391:28;32422:24;32440:4;32422:9;:24::i;:::-;32391:55;;32484:6;;;;;;;;;;;32483:7;:47;;;;;32517:13;;;;;;;;;;;32511:19;;:2;:19;;;32483:47;:79;;;;;32551:11;;;;;;;;;;;32483:79;:135;;;;;32606:12;;32583:20;:35;32483:135;:186;;;;;32651:18;;32639:9;;:30;32483:186;:246;;;;;32716:12;32690:39;;:15;;;;;;;;;;;:39;;;;32483:246;32461:547;;;32764:56;32781:38;32785:20;32806:12;;32781:3;:38::i;:::-;32764:16;:56::i;:::-;32839:26;32868:21;32839:50;;32933:1;32912:18;:22;32908:85;;;32959:14;:12;:14::i;:::-;32908:85;32745:263;32461:547;31348:1671;31299:1720;33047:1;33035:9;:13;33031:93;;;33065:47;33081:4;33095;33102:9;33065:15;:47::i;:::-;33031:93;33134:48;33150:4;33156:2;33160:21;33171:9;33160:6;:10;;:21;;;;:::i;:::-;33134:15;:48::i;:::-;31027:2163;30914:2276;;;:::o;22983:191::-;23057:16;23076:6;;;;;;;;;;;23057:25;;23102:8;23093:6;;:17;;;;;;;;;;;;;;;;;;23157:8;23126:40;;23147:8;23126:40;;;;;;;;;;;;23046:128;22983:191;:::o;33960:532::-;26564:4;26555:6;;:13;;;;;;;;;;;;;;;;;;34063:12:::1;34038:15;;:38;;;;;;;;;;;;;;;;;;34087:21;34125:1;34111:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34087:40;;34156:4;34138;34143:1;34138:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34182:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34172:4;34177:1;34172:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34215:62;34232:4;34247:15;;;;;;;;;;;34265:11;34215:8;:62::i;:::-;34288:15;;;;;;;;;;;:66;;;34369:11;34395:1;34411:4;34438;34458:15;34288:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34027:465;26600:5:::0;26591:6;;:14;;;;;;;;;;;;;;;;;;33960:532;:::o;34500:170::-;34543:12;34588:10;;;;;;;;;;;34580:24;;34612:21;34580:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34566:96;;;;;34532:138;34500:170::o;3353:98::-;3411:7;3442:1;3438;:5;;;;:::i;:::-;3431:12;;3353:98;;;;:::o;3752:::-;3810:7;3841:1;3837;:5;;;;:::i;:::-;3830:12;;3752:98;;;;:::o;33313:195::-;33372:4;33389:12;33456:7;33444:20;33436:28;;33499:1;33492:4;:8;33485:15;;;33313:195;;;:::o;33198:107::-;33255:7;33287:1;33283;:5;33282:15;;33296:1;33282:15;;;33292:1;33282:15;33275:22;;33198:107;;;;:::o;16581:770::-;16739:1;16721:20;;:6;:20;;;16713:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16823:1;16802:23;;:9;:23;;;16794:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16878:47;16899:6;16907:9;16918:6;16878:20;:47::i;:::-;16938:21;16962:9;:17;16972:6;16962:17;;;;;;;;;;;;;;;;16938:41;;17029:6;17012:13;:23;;16990:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17173:6;17157:13;:22;17137:9;:17;17147:6;17137:17;;;;;;;;;;;;;;;:42;;;;17225:6;17201:9;:20;17211:9;17201:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17266:9;17249:35;;17258:6;17249:35;;;17277:6;17249:35;;;;;;:::i;:::-;;;;;;;;17297:46;17317:6;17325:9;17336:6;17297:19;:46::i;:::-;16702:649;16581:770;;;:::o;2996:98::-;3054:7;3085:1;3081;:5;;;;:::i;:::-;3074:12;;2996:98;;;;:::o;20379:125::-;;;;:::o;21108:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:329::-;3878:6;3927:2;3915:9;3906:7;3902:23;3898:32;3895:119;;;3933:79;;:::i;:::-;3895:119;4053:1;4078:53;4123:7;4114:6;4103:9;4099:22;4078:53;:::i;:::-;4068:63;;4024:117;3819:329;;;;:::o;4154:118::-;4241:24;4259:5;4241:24;:::i;:::-;4236:3;4229:37;4154:118;;:::o;4278:222::-;4371:4;4409:2;4398:9;4394:18;4386:26;;4422:71;4490:1;4479:9;4475:17;4466:6;4422:71;:::i;:::-;4278:222;;;;:::o;4506:619::-;4583:6;4591;4599;4648:2;4636:9;4627:7;4623:23;4619:32;4616:119;;;4654:79;;:::i;:::-;4616:119;4774:1;4799:53;4844:7;4835:6;4824:9;4820:22;4799:53;:::i;:::-;4789:63;;4745:117;4901:2;4927:53;4972:7;4963:6;4952:9;4948:22;4927:53;:::i;:::-;4917:63;;4872:118;5029:2;5055:53;5100:7;5091:6;5080:9;5076:22;5055:53;:::i;:::-;5045:63;;5000:118;4506:619;;;;;:::o;5131:116::-;5201:21;5216:5;5201:21;:::i;:::-;5194:5;5191:32;5181:60;;5237:1;5234;5227:12;5181:60;5131:116;:::o;5253:133::-;5296:5;5334:6;5321:20;5312:29;;5350:30;5374:5;5350:30;:::i;:::-;5253:133;;;;:::o;5392:468::-;5457:6;5465;5514:2;5502:9;5493:7;5489:23;5485:32;5482:119;;;5520:79;;:::i;:::-;5482:119;5640:1;5665:53;5710:7;5701:6;5690:9;5686:22;5665:53;:::i;:::-;5655:63;;5611:117;5767:2;5793:50;5835:7;5826:6;5815:9;5811:22;5793:50;:::i;:::-;5783:60;;5738:115;5392:468;;;;;:::o;5866:86::-;5901:7;5941:4;5934:5;5930:16;5919:27;;5866:86;;;:::o;5958:112::-;6041:22;6057:5;6041:22;:::i;:::-;6036:3;6029:35;5958:112;;:::o;6076:214::-;6165:4;6203:2;6192:9;6188:18;6180:26;;6216:67;6280:1;6269:9;6265:17;6256:6;6216:67;:::i;:::-;6076:214;;;;:::o;6296:329::-;6355:6;6404:2;6392:9;6383:7;6379:23;6375:32;6372:119;;;6410:79;;:::i;:::-;6372:119;6530:1;6555:53;6600:7;6591:6;6580:9;6576:22;6555:53;:::i;:::-;6545:63;;6501:117;6296:329;;;;:::o;6631:118::-;6718:24;6736:5;6718:24;:::i;:::-;6713:3;6706:37;6631:118;;:::o;6755:222::-;6848:4;6886:2;6875:9;6871:18;6863:26;;6899:71;6967:1;6956:9;6952:17;6943:6;6899:71;:::i;:::-;6755:222;;;;:::o;6983:775::-;7216:4;7254:3;7243:9;7239:19;7231:27;;7268:71;7336:1;7325:9;7321:17;7312:6;7268:71;:::i;:::-;7349:72;7417:2;7406:9;7402:18;7393:6;7349:72;:::i;:::-;7431;7499:2;7488:9;7484:18;7475:6;7431:72;:::i;:::-;7513;7581:2;7570:9;7566:18;7557:6;7513:72;:::i;:::-;7595:73;7663:3;7652:9;7648:19;7639:6;7595:73;:::i;:::-;7678;7746:3;7735:9;7731:19;7722:6;7678:73;:::i;:::-;6983:775;;;;;;;;;:::o;7764:104::-;7809:7;7838:24;7856:5;7838:24;:::i;:::-;7827:35;;7764:104;;;:::o;7874:138::-;7955:32;7981:5;7955:32;:::i;:::-;7948:5;7945:43;7935:71;;8002:1;7999;7992:12;7935:71;7874:138;:::o;8018:155::-;8072:5;8110:6;8097:20;8088:29;;8126:41;8161:5;8126:41;:::i;:::-;8018:155;;;;:::o;8179:345::-;8246:6;8295:2;8283:9;8274:7;8270:23;8266:32;8263:119;;;8301:79;;:::i;:::-;8263:119;8421:1;8446:61;8499:7;8490:6;8479:9;8475:22;8446:61;:::i;:::-;8436:71;;8392:125;8179:345;;;;:::o;8530:474::-;8598:6;8606;8655:2;8643:9;8634:7;8630:23;8626:32;8623:119;;;8661:79;;:::i;:::-;8623:119;8781:1;8806:53;8851:7;8842:6;8831:9;8827:22;8806:53;:::i;:::-;8796:63;;8752:117;8908:2;8934:53;8979:7;8970:6;8959:9;8955:22;8934:53;:::i;:::-;8924:63;;8879:118;8530:474;;;;;:::o;9010:182::-;9150:34;9146:1;9138:6;9134:14;9127:58;9010:182;:::o;9198:366::-;9340:3;9361:67;9425:2;9420:3;9361:67;:::i;:::-;9354:74;;9437:93;9526:3;9437:93;:::i;:::-;9555:2;9550:3;9546:12;9539:19;;9198:366;;;:::o;9570:419::-;9736:4;9774:2;9763:9;9759:18;9751:26;;9823:9;9817:4;9813:20;9809:1;9798:9;9794:17;9787:47;9851:131;9977:4;9851:131;:::i;:::-;9843:139;;9570:419;;;:::o;9995:180::-;10043:77;10040:1;10033:88;10140:4;10137:1;10130:15;10164:4;10161:1;10154:15;10181:410;10221:7;10244:20;10262:1;10244:20;:::i;:::-;10239:25;;10278:20;10296:1;10278:20;:::i;:::-;10273:25;;10333:1;10330;10326:9;10355:30;10373:11;10355:30;:::i;:::-;10344:41;;10534:1;10525:7;10521:15;10518:1;10515:22;10495:1;10488:9;10468:83;10445:139;;10564:18;;:::i;:::-;10445:139;10229:362;10181:410;;;;:::o;10597:180::-;10645:77;10642:1;10635:88;10742:4;10739:1;10732:15;10766:4;10763:1;10756:15;10783:185;10823:1;10840:20;10858:1;10840:20;:::i;:::-;10835:25;;10874:20;10892:1;10874:20;:::i;:::-;10869:25;;10913:1;10903:35;;10918:18;;:::i;:::-;10903:35;10960:1;10957;10953:9;10948:14;;10783:185;;;;:::o;10974:332::-;11095:4;11133:2;11122:9;11118:18;11110:26;;11146:71;11214:1;11203:9;11199:17;11190:6;11146:71;:::i;:::-;11227:72;11295:2;11284:9;11280:18;11271:6;11227:72;:::i;:::-;10974:332;;;;;:::o;11312:180::-;11360:77;11357:1;11350:88;11457:4;11454:1;11447:15;11481:4;11478:1;11471:15;11498:320;11542:6;11579:1;11573:4;11569:12;11559:22;;11626:1;11620:4;11616:12;11647:18;11637:81;;11703:4;11695:6;11691:17;11681:27;;11637:81;11765:2;11757:6;11754:14;11734:18;11731:38;11728:84;;11784:18;;:::i;:::-;11728:84;11549:269;11498:320;;;:::o;11824:221::-;11964:34;11960:1;11952:6;11948:14;11941:58;12033:4;12028:2;12020:6;12016:15;12009:29;11824:221;:::o;12051:366::-;12193:3;12214:67;12278:2;12273:3;12214:67;:::i;:::-;12207:74;;12290:93;12379:3;12290:93;:::i;:::-;12408:2;12403:3;12399:12;12392:19;;12051:366;;;:::o;12423:419::-;12589:4;12627:2;12616:9;12612:18;12604:26;;12676:9;12670:4;12666:20;12662:1;12651:9;12647:17;12640:47;12704:131;12830:4;12704:131;:::i;:::-;12696:139;;12423:419;;;:::o;12848:179::-;12988:31;12984:1;12976:6;12972:14;12965:55;12848:179;:::o;13033:366::-;13175:3;13196:67;13260:2;13255:3;13196:67;:::i;:::-;13189:74;;13272:93;13361:3;13272:93;:::i;:::-;13390:2;13385:3;13381:12;13374:19;;13033:366;;;:::o;13405:419::-;13571:4;13609:2;13598:9;13594:18;13586:26;;13658:9;13652:4;13648:20;13644:1;13633:9;13629:17;13622:47;13686:131;13812:4;13686:131;:::i;:::-;13678:139;;13405:419;;;:::o;13830:227::-;13970:34;13966:1;13958:6;13954:14;13947:58;14039:10;14034:2;14026:6;14022:15;14015:35;13830:227;:::o;14063:366::-;14205:3;14226:67;14290:2;14285:3;14226:67;:::i;:::-;14219:74;;14302:93;14391:3;14302:93;:::i;:::-;14420:2;14415:3;14411:12;14404:19;;14063:366;;;:::o;14435:419::-;14601:4;14639:2;14628:9;14624:18;14616:26;;14688:9;14682:4;14678:20;14674:1;14663:9;14659:17;14652:47;14716:131;14842:4;14716:131;:::i;:::-;14708:139;;14435:419;;;:::o;14860:320::-;14975:4;15013:2;15002:9;14998:18;14990:26;;15026:71;15094:1;15083:9;15079:17;15070:6;15026:71;:::i;:::-;15107:66;15169:2;15158:9;15154:18;15145:6;15107:66;:::i;:::-;14860:320;;;;;:::o;15186:191::-;15226:3;15245:20;15263:1;15245:20;:::i;:::-;15240:25;;15279:20;15297:1;15279:20;:::i;:::-;15274:25;;15322:1;15319;15315:9;15308:16;;15343:3;15340:1;15337:10;15334:36;;;15350:18;;:::i;:::-;15334:36;15186:191;;;;:::o;15383:180::-;15523:32;15519:1;15511:6;15507:14;15500:56;15383:180;:::o;15569:366::-;15711:3;15732:67;15796:2;15791:3;15732:67;:::i;:::-;15725:74;;15808:93;15897:3;15808:93;:::i;:::-;15926:2;15921:3;15917:12;15910:19;;15569:366;;;:::o;15941:419::-;16107:4;16145:2;16134:9;16130:18;16122:26;;16194:9;16188:4;16184:20;16180:1;16169:9;16165:17;16158:47;16222:131;16348:4;16222:131;:::i;:::-;16214:139;;15941:419;;;:::o;16366:171::-;16506:23;16502:1;16494:6;16490:14;16483:47;16366:171;:::o;16543:366::-;16685:3;16706:67;16770:2;16765:3;16706:67;:::i;:::-;16699:74;;16782:93;16871:3;16782:93;:::i;:::-;16900:2;16895:3;16891:12;16884:19;;16543:366;;;:::o;16915:419::-;17081:4;17119:2;17108:9;17104:18;17096:26;;17168:9;17162:4;17158:20;17154:1;17143:9;17139:17;17132:47;17196:131;17322:4;17196:131;:::i;:::-;17188:139;;16915:419;;;:::o;17340:172::-;17480:24;17476:1;17468:6;17464:14;17457:48;17340:172;:::o;17518:366::-;17660:3;17681:67;17745:2;17740:3;17681:67;:::i;:::-;17674:74;;17757:93;17846:3;17757:93;:::i;:::-;17875:2;17870:3;17866:12;17859:19;;17518:366;;;:::o;17890:419::-;18056:4;18094:2;18083:9;18079:18;18071:26;;18143:9;18137:4;18133:20;18129:1;18118:9;18114:17;18107:47;18171:131;18297:4;18171:131;:::i;:::-;18163:139;;17890:419;;;:::o;18315:224::-;18455:34;18451:1;18443:6;18439:14;18432:58;18524:7;18519:2;18511:6;18507:15;18500:32;18315:224;:::o;18545:366::-;18687:3;18708:67;18772:2;18767:3;18708:67;:::i;:::-;18701:74;;18784:93;18873:3;18784:93;:::i;:::-;18902:2;18897:3;18893:12;18886:19;;18545:366;;;:::o;18917:419::-;19083:4;19121:2;19110:9;19106:18;19098:26;;19170:9;19164:4;19160:20;19156:1;19145:9;19141:17;19134:47;19198:131;19324:4;19198:131;:::i;:::-;19190:139;;18917:419;;;:::o;19342:60::-;19370:3;19391:5;19384:12;;19342:60;;;:::o;19408:142::-;19458:9;19491:53;19509:34;19518:24;19536:5;19518:24;:::i;:::-;19509:34;:::i;:::-;19491:53;:::i;:::-;19478:66;;19408:142;;;:::o;19556:126::-;19606:9;19639:37;19670:5;19639:37;:::i;:::-;19626:50;;19556:126;;;:::o;19688:134::-;19746:9;19779:37;19810:5;19779:37;:::i;:::-;19766:50;;19688:134;;;:::o;19828:147::-;19923:45;19962:5;19923:45;:::i;:::-;19918:3;19911:58;19828:147;;:::o;19981:238::-;20082:4;20120:2;20109:9;20105:18;20097:26;;20133:79;20209:1;20198:9;20194:17;20185:6;20133:79;:::i;:::-;19981:238;;;;:::o;20225:143::-;20282:5;20313:6;20307:13;20298:22;;20329:33;20356:5;20329:33;:::i;:::-;20225:143;;;;:::o;20374:351::-;20444:6;20493:2;20481:9;20472:7;20468:23;20464:32;20461:119;;;20499:79;;:::i;:::-;20461:119;20619:1;20644:64;20700:7;20691:6;20680:9;20676:22;20644:64;:::i;:::-;20634:74;;20590:128;20374:351;;;;:::o;20731:348::-;20860:4;20898:2;20887:9;20883:18;20875:26;;20911:79;20987:1;20976:9;20972:17;20963:6;20911:79;:::i;:::-;21000:72;21068:2;21057:9;21053:18;21044:6;21000:72;:::i;:::-;20731:348;;;;;:::o;21085:137::-;21139:5;21170:6;21164:13;21155:22;;21186:30;21210:5;21186:30;:::i;:::-;21085:137;;;;:::o;21228:345::-;21295:6;21344:2;21332:9;21323:7;21319:23;21315:32;21312:119;;;21350:79;;:::i;:::-;21312:119;21470:1;21495:61;21548:7;21539:6;21528:9;21524:22;21495:61;:::i;:::-;21485:71;;21441:125;21228:345;;;;:::o;21579:173::-;21719:25;21715:1;21707:6;21703:14;21696:49;21579:173;:::o;21758:366::-;21900:3;21921:67;21985:2;21980:3;21921:67;:::i;:::-;21914:74;;21997:93;22086:3;21997:93;:::i;:::-;22115:2;22110:3;22106:12;22099:19;;21758:366;;;:::o;22130:419::-;22296:4;22334:2;22323:9;22319:18;22311:26;;22383:9;22377:4;22373:20;22369:1;22358:9;22354:17;22347:47;22411:131;22537:4;22411:131;:::i;:::-;22403:139;;22130:419;;;:::o;22555:143::-;22612:5;22643:6;22637:13;22628:22;;22659:33;22686:5;22659:33;:::i;:::-;22555:143;;;;:::o;22704:351::-;22774:6;22823:2;22811:9;22802:7;22798:23;22794:32;22791:119;;;22829:79;;:::i;:::-;22791:119;22949:1;22974:64;23030:7;23021:6;23010:9;23006:22;22974:64;:::i;:::-;22964:74;;22920:128;22704:351;;;;:::o;23061:332::-;23182:4;23220:2;23209:9;23205:18;23197:26;;23233:71;23301:1;23290:9;23286:17;23277:6;23233:71;:::i;:::-;23314:72;23382:2;23371:9;23367:18;23358:6;23314:72;:::i;:::-;23061:332;;;;;:::o;23399:85::-;23444:7;23473:5;23462:16;;23399:85;;;:::o;23490:158::-;23548:9;23581:61;23599:42;23608:32;23634:5;23608:32;:::i;:::-;23599:42;:::i;:::-;23581:61;:::i;:::-;23568:74;;23490:158;;;:::o;23654:147::-;23749:45;23788:5;23749:45;:::i;:::-;23744:3;23737:58;23654:147;;:::o;23807:807::-;24056:4;24094:3;24083:9;24079:19;24071:27;;24108:71;24176:1;24165:9;24161:17;24152:6;24108:71;:::i;:::-;24189:72;24257:2;24246:9;24242:18;24233:6;24189:72;:::i;:::-;24271:80;24347:2;24336:9;24332:18;24323:6;24271:80;:::i;:::-;24361;24437:2;24426:9;24422:18;24413:6;24361:80;:::i;:::-;24451:73;24519:3;24508:9;24504:19;24495:6;24451:73;:::i;:::-;24534;24602:3;24591:9;24587:19;24578:6;24534:73;:::i;:::-;23807:807;;;;;;;;;:::o;24620:663::-;24708:6;24716;24724;24773:2;24761:9;24752:7;24748:23;24744:32;24741:119;;;24779:79;;:::i;:::-;24741:119;24899:1;24924:64;24980:7;24971:6;24960:9;24956:22;24924:64;:::i;:::-;24914:74;;24870:128;25037:2;25063:64;25119:7;25110:6;25099:9;25095:22;25063:64;:::i;:::-;25053:74;;25008:129;25176:2;25202:64;25258:7;25249:6;25238:9;25234:22;25202:64;:::i;:::-;25192:74;;25147:129;24620:663;;;;;:::o;25289:332::-;25410:4;25448:2;25437:9;25433:18;25425:26;;25461:71;25529:1;25518:9;25514:17;25505:6;25461:71;:::i;:::-;25542:72;25610:2;25599:9;25595:18;25586:6;25542:72;:::i;:::-;25289:332;;;;;:::o;25627:225::-;25767:34;25763:1;25755:6;25751:14;25744:58;25836:8;25831:2;25823:6;25819:15;25812:33;25627:225;:::o;25858:366::-;26000:3;26021:67;26085:2;26080:3;26021:67;:::i;:::-;26014:74;;26097:93;26186:3;26097:93;:::i;:::-;26215:2;26210:3;26206:12;26199:19;;25858:366;;;:::o;26230:419::-;26396:4;26434:2;26423:9;26419:18;26411:26;;26483:9;26477:4;26473:20;26469:1;26458:9;26454:17;26447:47;26511:131;26637:4;26511:131;:::i;:::-;26503:139;;26230:419;;;:::o;26655:223::-;26795:34;26791:1;26783:6;26779:14;26772:58;26864:6;26859:2;26851:6;26847:15;26840:31;26655:223;:::o;26884:366::-;27026:3;27047:67;27111:2;27106:3;27047:67;:::i;:::-;27040:74;;27123:93;27212:3;27123:93;:::i;:::-;27241:2;27236:3;27232:12;27225:19;;26884:366;;;:::o;27256:419::-;27422:4;27460:2;27449:9;27445:18;27437:26;;27509:9;27503:4;27499:20;27495:1;27484:9;27480:17;27473:47;27537:131;27663:4;27537:131;:::i;:::-;27529:139;;27256:419;;;:::o;27681:221::-;27821:34;27817:1;27809:6;27805:14;27798:58;27890:4;27885:2;27877:6;27873:15;27866:29;27681:221;:::o;27908:366::-;28050:3;28071:67;28135:2;28130:3;28071:67;:::i;:::-;28064:74;;28147:93;28236:3;28147:93;:::i;:::-;28265:2;28260:3;28256:12;28249:19;;27908:366;;;:::o;28280:419::-;28446:4;28484:2;28473:9;28469:18;28461:26;;28533:9;28527:4;28523:20;28519:1;28508:9;28504:17;28497:47;28561:131;28687:4;28561:131;:::i;:::-;28553:139;;28280:419;;;:::o;28705:224::-;28845:34;28841:1;28833:6;28829:14;28822:58;28914:7;28909:2;28901:6;28897:15;28890:32;28705:224;:::o;28935:366::-;29077:3;29098:67;29162:2;29157:3;29098:67;:::i;:::-;29091:74;;29174:93;29263:3;29174:93;:::i;:::-;29292:2;29287:3;29283:12;29276:19;;28935:366;;;:::o;29307:419::-;29473:4;29511:2;29500:9;29496:18;29488:26;;29560:9;29554:4;29550:20;29546:1;29535:9;29531:17;29524:47;29588:131;29714:4;29588:131;:::i;:::-;29580:139;;29307:419;;;:::o;29732:222::-;29872:34;29868:1;29860:6;29856:14;29849:58;29941:5;29936:2;29928:6;29924:15;29917:30;29732:222;:::o;29960:366::-;30102:3;30123:67;30187:2;30182:3;30123:67;:::i;:::-;30116:74;;30199:93;30288:3;30199:93;:::i;:::-;30317:2;30312:3;30308:12;30301:19;;29960:366;;;:::o;30332:419::-;30498:4;30536:2;30525:9;30521:18;30513:26;;30585:9;30579:4;30575:20;30571:1;30560:9;30556:17;30549:47;30613:131;30739:4;30613:131;:::i;:::-;30605:139;;30332:419;;;:::o;30757:228::-;30897:34;30893:1;30885:6;30881:14;30874:58;30966:11;30961:2;30953:6;30949:15;30942:36;30757:228;:::o;30991:366::-;31133:3;31154:67;31218:2;31213:3;31154:67;:::i;:::-;31147:74;;31230:93;31319:3;31230:93;:::i;:::-;31348:2;31343:3;31339:12;31332:19;;30991:366;;;:::o;31363:419::-;31529:4;31567:2;31556:9;31552:18;31544:26;;31616:9;31610:4;31606:20;31602:1;31591:9;31587:17;31580:47;31644:131;31770:4;31644:131;:::i;:::-;31636:139;;31363:419;;;:::o;31788:177::-;31928:29;31924:1;31916:6;31912:14;31905:53;31788:177;:::o;31971:366::-;32113:3;32134:67;32198:2;32193:3;32134:67;:::i;:::-;32127:74;;32210:93;32299:3;32210:93;:::i;:::-;32328:2;32323:3;32319:12;32312:19;;31971:366;;;:::o;32343:419::-;32509:4;32547:2;32536:9;32532:18;32524:26;;32596:9;32590:4;32586:20;32582:1;32571:9;32567:17;32560:47;32624:131;32750:4;32624:131;:::i;:::-;32616:139;;32343:419;;;:::o;32768:176::-;32908:28;32904:1;32896:6;32892:14;32885:52;32768:176;:::o;32950:366::-;33092:3;33113:67;33177:2;33172:3;33113:67;:::i;:::-;33106:74;;33189:93;33278:3;33189:93;:::i;:::-;33307:2;33302:3;33298:12;33291:19;;32950:366;;;:::o;33322:419::-;33488:4;33526:2;33515:9;33511:18;33503:26;;33575:9;33569:4;33565:20;33561:1;33550:9;33546:17;33539:47;33603:131;33729:4;33603:131;:::i;:::-;33595:139;;33322:419;;;:::o;33747:233::-;33786:3;33809:24;33827:5;33809:24;:::i;:::-;33800:33;;33855:66;33848:5;33845:77;33842:103;;33925:18;;:::i;:::-;33842:103;33972:1;33965:5;33961:13;33954:20;;33747:233;;;:::o;33986:180::-;34034:77;34031:1;34024:88;34131:4;34128:1;34121:15;34155:4;34152:1;34145:15;34172:180;34220:77;34217:1;34210:88;34317:4;34314:1;34307:15;34341:4;34338:1;34331:15;34358:114;34425:6;34459:5;34453:12;34443:22;;34358:114;;;:::o;34478:184::-;34577:11;34611:6;34606:3;34599:19;34651:4;34646:3;34642:14;34627:29;;34478:184;;;;:::o;34668:132::-;34735:4;34758:3;34750:11;;34788:4;34783:3;34779:14;34771:22;;34668:132;;;:::o;34806:108::-;34883:24;34901:5;34883:24;:::i;:::-;34878:3;34871:37;34806:108;;:::o;34920:179::-;34989:10;35010:46;35052:3;35044:6;35010:46;:::i;:::-;35088:4;35083:3;35079:14;35065:28;;34920:179;;;;:::o;35105:113::-;35175:4;35207;35202:3;35198:14;35190:22;;35105:113;;;:::o;35254:732::-;35373:3;35402:54;35450:5;35402:54;:::i;:::-;35472:86;35551:6;35546:3;35472:86;:::i;:::-;35465:93;;35582:56;35632:5;35582:56;:::i;:::-;35661:7;35692:1;35677:284;35702:6;35699:1;35696:13;35677:284;;;35778:6;35772:13;35805:63;35864:3;35849:13;35805:63;:::i;:::-;35798:70;;35891:60;35944:6;35891:60;:::i;:::-;35881:70;;35737:224;35724:1;35721;35717:9;35712:14;;35677:284;;;35681:14;35977:3;35970:10;;35378:608;;;35254:732;;;;:::o;35992:831::-;36255:4;36293:3;36282:9;36278:19;36270:27;;36307:71;36375:1;36364:9;36360:17;36351:6;36307:71;:::i;:::-;36388:80;36464:2;36453:9;36449:18;36440:6;36388:80;:::i;:::-;36515:9;36509:4;36505:20;36500:2;36489:9;36485:18;36478:48;36543:108;36646:4;36637:6;36543:108;:::i;:::-;36535:116;;36661:72;36729:2;36718:9;36714:18;36705:6;36661:72;:::i;:::-;36743:73;36811:3;36800:9;36796:19;36787:6;36743:73;:::i;:::-;35992:831;;;;;;;;:::o;36829:147::-;36930:11;36967:3;36952:18;;36829:147;;;;:::o;36982:114::-;;:::o;37102:398::-;37261:3;37282:83;37363:1;37358:3;37282:83;:::i;:::-;37275:90;;37374:93;37463:3;37374:93;:::i;:::-;37492:1;37487:3;37483:11;37476:18;;37102:398;;;:::o;37506:379::-;37690:3;37712:147;37855:3;37712:147;:::i;:::-;37705:154;;37876:3;37869:10;;37506:379;;;:::o;37891:225::-;38031:34;38027:1;38019:6;38015:14;38008:58;38100:8;38095:2;38087:6;38083:15;38076:33;37891:225;:::o;38122:366::-;38264:3;38285:67;38349:2;38344:3;38285:67;:::i;:::-;38278:74;;38361:93;38450:3;38361:93;:::i;:::-;38479:2;38474:3;38470:12;38463:19;;38122:366;;;:::o;38494:419::-;38660:4;38698:2;38687:9;38683:18;38675:26;;38747:9;38741:4;38737:20;38733:1;38722:9;38718:17;38711:47;38775:131;38901:4;38775:131;:::i;:::-;38767:139;;38494:419;;;:::o;38919:194::-;38959:4;38979:20;38997:1;38979:20;:::i;:::-;38974:25;;39013:20;39031:1;39013:20;:::i;:::-;39008:25;;39057:1;39054;39050:9;39042:17;;39081:1;39075:4;39072:11;39069:37;;;39086:18;;:::i;:::-;39069:37;38919:194;;;;:::o

Swarm Source

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