ETH Price: $3,295.56 (-2.76%)

Token

ANIMAZING AI | https://animazingai.com/ (ANMAI)
 

Overview

Max Total Supply

1,000,000,000 ANMAI

Holders

110

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Bitfinex 20
Balance
59,097 ANMAI

Value
$0.00
0x8103683202aa8da10536036edef04cdd865c225e
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:
ANMAI

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *                ________  ________   _____ ______   ________  ___     
 *               |\   __  \|\   ___  \|\   _ \  _   \|\   __  \|\  \    
 *               \ \  \|\  \ \  \\ \  \ \  \\\__\ \  \ \  \|\  \ \  \   
 *                \ \   __  \ \  \\ \  \ \  \\|__| \  \ \   __  \ \  \  
 *                 \ \  \ \  \ \  \\ \  \ \  \    \ \  \ \  \ \  \ \  \ 
 *                  \ \__\ \__\ \__\\ \__\ \__\    \ \__\ \__\ \__\ \__\
 *                   \|__|\|__|\|__| \|__|\|__|     \|__|\|__|\|__|\|__|
 *                                                                      
 *                                                                      
 *                                                                      
 * ANIMAZING AI : Powered by Stability AI's Stable Diffusion
 * 
 * Telegram: https://t.me/Animazing_AI
 * Twitter: https://twitter.com/animazingai
 * Homepage: https://animazingai.com/
 * 
 * Total Supply: 1 Billion Tokens
 * 5% to the Team
 * 20% Reserved for Staking
 * 75% to LP
 * Buy and Sell Tax = 4%
 * 
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

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

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

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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
    );

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
}

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @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 9;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

        return true;
    }

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

    /** @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");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
 contract ANMAI is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>
    string private _name = "ANIMAZING AI | https://animazingai.com/ " ;
    string private _symbol = "ANMAI";
    uint8 private _decimals = 9;
    uint256 private _supply = 1000000000;
    uint256 public taxForLiquidity = 47; //sniper protection, to be lowered to 4% after launch
    uint256 public taxForMarketing = 47; //sniper protection, to be lowered to 4% after launch
    uint256 public maxTxAmount = 10000001 * 10**_decimals;
    uint256 public maxWalletAmount = 10000001 * 10**_decimals;
    address public marketingWallet = 0x21f85331F3D92496ea429787Ce0c21C0C3828aFf;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _marketingReserves = 0;
    mapping(address => bool) public _isExcludedFromFee;
    uint256 public numTokensSellToAddToLiquidity = 200000 * 10**_decimals;
    uint256 public numTokensSellToAddToETH = 100000 * 10**_decimals;

    function postLaunch() external onlyOwner {
        taxForLiquidity = 2;
        taxForMarketing = 2;
        maxTxAmount = 500000001 * 10**_decimals;
        maxWalletAmount = 500000001 * 10**_decimals;
    }
    // TOKENOMICS END ============================================================>

    // StableDiffusion Access START ==============================================>
    struct userUnlock {
        string tgUserName;
        bool unlocked;
        uint256 unlockedAt;
        uint256 totalEthPaid;
    }

    struct channelUnlock {
        string tgChannel;
        bool unlocked;
        uint256 unlockedAt;
        uint256 totalEthPaid;
    }

    mapping(string => userUnlock) public unlockedUsers;
    mapping(string => channelUnlock) public unlockedChannels;

    uint public userCostEth = 0.01 ether;
    uint public userCostTokens = 10000 * 10**_decimals;

    uint public channelCostEth = 0.1 ether;
    uint public channelCostTokens = 100000 * 10**_decimals;

    event UserUnlocked(string tg_username, uint256 unlockTime);
    event ChannelUnlocked(string tg_channel, uint256 unlockTime);
    event CostUpdated(bool _isEth, bool _isChannel, uint _cost);
    event ExcludedFromFeeUpdated(address _address, bool _status);
    event AdminModifierSet(string tg_user_chan, bool _isChannel, bool _isUnlocked, 
        uint _unlockBlock, uint _amtPaid);
    event PairUpdated(address _address);

    //with all eth payments, reserve is held on the contract until the sending threshold is reached.
    function unlockUser(string memory tg_username) external payable {
        require(msg.value >= userCostEth, "Not enough ETH sent!");
        require(msg.sender.balance >= userCostTokens, "Not enough tokens!");
        _marketingReserves += msg.value;
        _transfer(msg.sender, DEAD, userCostTokens);

        unlockedUsers[tg_username] = userUnlock(
            tg_username,
            true,
            block.timestamp,
            unlockedUsers[tg_username].totalEthPaid + msg.value
        );
        emit UserUnlocked(tg_username, block.timestamp);
    }

    function unlockChannel(string memory tg_channel) external payable {
        require(msg.value >= userCostEth, "Not enough ETH sent!");
        require(msg.sender.balance >= userCostTokens, "Not enough tokens!");
        _marketingReserves += msg.value;
        _transfer(msg.sender, DEAD, userCostTokens);
        
        unlockedChannels[tg_channel] = channelUnlock(
            tg_channel,
            true,
            block.timestamp,
            unlockedChannels[tg_channel].totalEthPaid + msg.value
        );
        emit ChannelUnlocked(tg_channel, block.timestamp);
    }

    //Some simple ABIv1 getters below
    function isUnlocked(string memory tg_user_chan, bool _isChannel) external view returns(bool) {
        if (_isChannel) {
            return unlockedChannels[tg_user_chan].unlocked;
        }
        return unlockedUsers[tg_user_chan].unlocked;
    }

    function getAmtPaid(string memory tg_user_chan, bool _isChannel) external view returns(uint) {
        if (_isChannel) {
            return unlockedChannels[tg_user_chan].totalEthPaid;
        }
        return unlockedUsers[tg_user_chan].totalEthPaid;
    }

    function getUnlockBlock(string memory tg_user_chan, bool _isChannel) external view returns(uint) {
        if (_isChannel) {
            return unlockedChannels[tg_user_chan].unlockedAt;
        }
        return unlockedUsers[tg_user_chan].unlockedAt;
    }

    //Admin modifier function
    function setUnlockStatus(string memory tg_user_chan, bool _isChannel, 
        bool _isUnlocked, uint _unlockBlock, uint _amtPaid) external onlyOwner {
        if (_isChannel) {
            unlockedChannels[tg_user_chan] = channelUnlock(
                tg_user_chan,
                _isUnlocked,
                _unlockBlock,
                _amtPaid
            );
        } else {
            unlockedUsers[tg_user_chan] = userUnlock(
                tg_user_chan,
                _isUnlocked,
                _unlockBlock,
                _amtPaid
            );
        }
        emit AdminModifierSet(tg_user_chan, _isChannel, _isUnlocked, _unlockBlock, _amtPaid);
    }

    function setCost(bool _isEth, bool _isChannel, uint _cost) external onlyOwner {
        if (_isEth) {
            if (_isChannel) {
                channelCostEth = _cost;
            } else {
                userCostEth = _cost;
            }
        } else {
            if (_isChannel) {
                channelCostTokens = _cost * 10**_decimals;
            } else {
                userCostTokens = _cost * 10**_decimals;
            }
        }
        emit CostUpdated(_isEth, _isChannel, _cost);
    }
    // StableDiffusion Access END ================================================>

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;

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

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

    /**
     * @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() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //eth mainnet
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[marketingWallet] = true;
    }

    function updatePair(address _pair) external onlyOwner {
        require(_pair != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(_pair != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        uniswapV2Pair = _pair;
        emit PairUpdated(_pair);
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    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(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");

        if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify) {
            if (from != uniswapV2Pair) {
                uint256 contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves;
                if (contractLiquidityBalance >= numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(numTokensSellToAddToLiquidity);
                }
                if ((_marketingReserves) >= numTokensSellToAddToETH) {
                    _swapTokensForEth(numTokensSellToAddToETH);
                    _marketingReserves -= numTokensSellToAddToETH;
                    bool sent = payable(marketingWallet).send(address(this).balance);
                    require(sent, "Failed to send ETH");
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } 
            else {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
                if(from == uniswapV2Pair){
                    require((amount + balanceOf(to)) <= maxWalletAmount, "ERC20: balance amount exceeded max wallet amount limit");
                }

                uint256 marketingShare = ((amount * taxForMarketing) / 100);
                uint256 liquidityShare = ((amount * taxForLiquidity) / 100);
                transferAmount = amount - (marketingShare + liquidityShare);
                _marketingReserves += marketingShare;

                super._transfer(from, address(this), (marketingShare + liquidityShare));
            }
            super._transfer(from, to, transferAmount);
        } 
        else {
            super._transfer(from, to, amount);
        }
    }

    function excludeFromFee(address _address, bool _status) external onlyOwner {
        _isExcludedFromFee[_address] = _status;
        emit ExcludedFromFeeUpdated(_address, _status);
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        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 _addLiquidity(uint256 tokenAmount, uint256 ethAmount)
        private
        lockTheSwap
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            marketingWallet,
            block.timestamp
        );
    }

    function changeMarketingWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        require(newWallet != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(newWallet != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        marketingWallet = newWallet;
        return true;
    }

    function changeTaxForLiquidityAndMarketing(uint256 _taxForLiquidity, uint256 _taxForMarketing)
        public
        onlyOwner
        returns (bool)
    {
        require((_taxForLiquidity+_taxForMarketing) <= 10, "ERC20: total tax must not be greater than 10%");
        taxForLiquidity = _taxForLiquidity;
        taxForMarketing = _taxForMarketing;

        return true;
    }

    function changeSwapThresholds(uint256 _numTokensSellToAddToLiquidity, uint256 _numTokensSellToAddToETH)
        public
        onlyOwner
        returns (bool)
    {
        require(_numTokensSellToAddToLiquidity < _supply / 97, "Cannot liquidate more than 3% of the supply at once!");
        require(_numTokensSellToAddToETH < _supply / 97, "Cannot liquidate more than 3% of the supply at once!");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity * 10**_decimals;
        numTokensSellToAddToETH = _numTokensSellToAddToETH * 10**_decimals;

        return true;
    }

    function changeMaxTxAmount(uint256 _maxTxAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"tg_user_chan","type":"string"},{"indexed":false,"internalType":"bool","name":"_isChannel","type":"bool"},{"indexed":false,"internalType":"bool","name":"_isUnlocked","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_unlockBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amtPaid","type":"uint256"}],"name":"AdminModifierSet","type":"event"},{"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":"string","name":"tg_channel","type":"string"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"ChannelUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_isEth","type":"bool"},{"indexed":false,"internalType":"bool","name":"_isChannel","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"CostUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludedFromFeeUpdated","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":"address","name":"_address","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"tg_username","type":"string"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"UserUnlocked","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"changeSwapThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"channelCostEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"channelCostTokens","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":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"}],"name":"getAmtPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"}],"name":"getUnlockBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"}],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEth","type":"bool"},{"internalType":"bool","name":"_isChannel","type":"bool"},{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_user_chan","type":"string"},{"internalType":"bool","name":"_isChannel","type":"bool"},{"internalType":"bool","name":"_isUnlocked","type":"bool"},{"internalType":"uint256","name":"_unlockBlock","type":"uint256"},{"internalType":"uint256","name":"_amtPaid","type":"uint256"}],"name":"setUnlockStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tg_channel","type":"string"}],"name":"unlockChannel","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"tg_username","type":"string"}],"name":"unlockUser","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"unlockedChannels","outputs":[{"internalType":"string","name":"tgChannel","type":"string"},{"internalType":"bool","name":"unlocked","type":"bool"},{"internalType":"uint256","name":"unlockedAt","type":"uint256"},{"internalType":"uint256","name":"totalEthPaid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"unlockedUsers","outputs":[{"internalType":"string","name":"tgUserName","type":"string"},{"internalType":"bool","name":"unlocked","type":"bool"},{"internalType":"uint256","name":"unlockedAt","type":"uint256"},{"internalType":"uint256","name":"totalEthPaid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userCostEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userCostTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260405180606001604052806028815260200162005a3f60289139600690816200002e919062000be7565b506040518060400160405280600581526020017f414e4d41490000000000000000000000000000000000000000000000000000008152506007908162000075919062000be7565b506009600860006101000a81548160ff021916908360ff160217905550633b9aca00600955602f600a55602f600b55600860009054906101000a900460ff16600a620000c2919062000e5e565b62989681620000d2919062000eaf565b600c55600860009054906101000a900460ff16600a620000f3919062000e5e565b6298968162000103919062000eaf565b600d557321f85331f3d92496ea429787ce0c21c0c3828aff600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601055600860009054906101000a900460ff16600a620001c1919062000e5e565b62030d40620001d1919062000eaf565b601255600860009054906101000a900460ff16600a620001f2919062000e5e565b620186a062000202919062000eaf565b601355662386f26fc10000601655600860009054906101000a900460ff16600a6200022e919062000e5e565b6127106200023d919062000eaf565b60175567016345785d8a0000601855600860009054906101000a900460ff16600a6200026a919062000e5e565b620186a06200027a919062000eaf565b6019553480156200028a57600080fd5b50600680546200029a90620009d6565b80601f0160208091040260200160405190810160405280929190818152602001828054620002c890620009d6565b8015620003195780601f10620002ed5761010080835404028352916020019162000319565b820191906000526020600020905b815481529060010190602001808311620002fb57829003601f168201915b5050505050600780546200032d90620009d6565b80601f01602080910402602001604051908101604052809291908181526020018280546200035b90620009d6565b8015620003ac5780601f106200038057610100808354040283529160200191620003ac565b820191906000526020600020905b8154815290600101906020018083116200038e57829003601f168201915b50505050508160039081620003c2919062000be7565b508060049081620003d4919062000be7565b505050620003f7620003eb6200075a60201b60201c565b6200076260201b60201c565b6200043533600860009054906101000a900460ff16600a6200041a919062000e5e565b60095462000429919062000eaf565b6200082860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c0919062000f7a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000528573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054e919062000f7a565b6040518363ffffffff1660e01b81526004016200056d92919062000fbd565b6020604051808303816000875af11580156200058d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b3919062000f7a565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016011600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050620010d6565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000891906200104b565b60405180910390fd5b8060026000828254620008ae91906200106d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009619190620010b9565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009ef57607f821691505b60208210810362000a055762000a04620009a7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a6f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a30565b62000a7b868362000a30565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ac862000ac262000abc8462000a93565b62000a9d565b62000a93565b9050919050565b6000819050919050565b62000ae48362000aa7565b62000afc62000af38262000acf565b84845462000a3d565b825550505050565b600090565b62000b1362000b04565b62000b2081848462000ad9565b505050565b5b8181101562000b485762000b3c60008262000b09565b60018101905062000b26565b5050565b601f82111562000b975762000b618162000a0b565b62000b6c8462000a20565b8101602085101562000b7c578190505b62000b9462000b8b8562000a20565b83018262000b25565b50505b505050565b600082821c905092915050565b600062000bbc6000198460080262000b9c565b1980831691505092915050565b600062000bd7838362000ba9565b9150826002028217905092915050565b62000bf2826200096d565b67ffffffffffffffff81111562000c0e5762000c0d62000978565b5b62000c1a8254620009d6565b62000c2782828562000b4c565b600060209050601f83116001811462000c5f576000841562000c4a578287015190505b62000c56858262000bc9565b86555062000cc6565b601f19841662000c6f8662000a0b565b60005b8281101562000c995784890151825560018201915060208501945060208101905062000c72565b8683101562000cb9578489015162000cb5601f89168262000ba9565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d5c5780860481111562000d345762000d3362000cce565b5b600185161562000d445780820291505b808102905062000d548562000cfd565b945062000d14565b94509492505050565b60008262000d77576001905062000e4a565b8162000d87576000905062000e4a565b816001811462000da0576002811462000dab5762000de1565b600191505062000e4a565b60ff84111562000dc05762000dbf62000cce565b5b8360020a91508482111562000dda5762000dd962000cce565b5b5062000e4a565b5060208310610133831016604e8410600b841016171562000e1b5782820a90508381111562000e155762000e1462000cce565b5b62000e4a565b62000e2a848484600162000d0a565b9250905081840481111562000e445762000e4362000cce565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e6b8262000a93565b915062000e788362000e51565b925062000ea77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d65565b905092915050565b600062000ebc8262000a93565b915062000ec98362000a93565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f055762000f0462000cce565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f428262000f15565b9050919050565b62000f548162000f35565b811462000f6057600080fd5b50565b60008151905062000f748162000f49565b92915050565b60006020828403121562000f935762000f9262000f10565b5b600062000fa38482850162000f63565b91505092915050565b62000fb78162000f35565b82525050565b600060408201905062000fd4600083018562000fac565b62000fe3602083018462000fac565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001033601f8362000fea565b9150620010408262000ffb565b602082019050919050565b60006020820190508181036000830152620010668162001024565b9050919050565b60006200107a8262000a93565b9150620010878362000a93565b9250828201905080821115620010a257620010a162000cce565b5b92915050565b620010b38162000a93565b82525050565b6000602082019050620010d06000830184620010a8565b92915050565b60805161492a6200111560003960008181610e3a0152818161299301528181612a7401528181612a9b01528181612dcd0152612df4015261492a6000f3fe60806040526004361061028c5760003560e01c8063768dc7101161015a578063af8af690116100c1578063df1d099e1161007a578063df1d099e14610a67578063df8408fe14610a92578063f1b2b3d914610abb578063f2fde38b14610af8578063f345bd8514610b21578063fbee93ba14610b4c57610293565b8063af8af6901461091d578063b5c78e8a1461095a578063bb85c6d114610997578063c0fdea57146109d4578063d12a7688146109ff578063dd62ed3e14610a2a57610293565b8063a2330d9711610113578063a2330d97146107f6578063a3996f7b14610836578063a457c2d71461084d578063a9059cbb1461088a578063aa4bde28146108c7578063ad16a0cf146108f257610293565b8063768dc710146106d05780637930ef691461070d57806381bfdcca146107385780638c0b5e22146107755780638da5cb5b146107a057806395d89b41146107cb57610293565b806330b63d80116101fe57806363cdf60f116101b757806363cdf60f146105ab578063677daa57146105eb57806370a0823114610628578063715018a61461066557806373c503b31461067c57806375f0a874146106a557610293565b806330b63d8014610473578063313ce567146104b057806339509351146104db57806349bd5a5e146105185780634fa74c4d14610543578063527ffabd1461058057610293565b80631694505e116102505780631694505e1461037257806316a7b1601461039d57806318160ddd146103b957806318bc47f6146103e45780631b56bbf91461040d57806323b872dd1461043657610293565b806303fd2a4514610298578063054dee0f146102c357806306fdde03146102ee578063095ea7b3146103195780630f1d7ad91461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b77565b6040516102ba9190612f1f565b60405180910390f35b3480156102cf57600080fd5b506102d8610b9d565b6040516102e59190612f53565b60405180910390f35b3480156102fa57600080fd5b50610303610ba3565b6040516103109190612ffe565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061308c565b610c35565b60405161034d91906130e7565b60405180910390f35b610370600480360381019061036b9190613237565b610c58565b005b34801561037e57600080fd5b50610387610e38565b60405161039491906132df565b60405180910390f35b6103b760048036038101906103b29190613237565b610e5c565b005b3480156103c557600080fd5b506103ce61103c565b6040516103db9190612f53565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613326565b611046565b005b34801561041957600080fd5b50610434600480360381019061042f91906133bd565b6111bc565b005b34801561044257600080fd5b5061045d600480360381019061045891906133ea565b61133e565b60405161046a91906130e7565b60405180910390f35b34801561047f57600080fd5b5061049a6004803603810190610495919061343d565b61136d565b6040516104a791906130e7565b60405180910390f35b3480156104bc57600080fd5b506104c561147b565b6040516104d29190613499565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd919061308c565b611484565b60405161050f91906130e7565b60405180910390f35b34801561052457600080fd5b5061052d6114bb565b60405161053a9190612f1f565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906134b4565b6114e1565b60405161057791906130e7565b60405180910390f35b34801561058c57600080fd5b50610595611557565b6040516105a29190612f53565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613237565b61155d565b6040516105e29493929190613510565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d919061355c565b611638565b60405161061f91906130e7565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906133bd565b611652565b60405161065c9190612f53565b60405180910390f35b34801561067157600080fd5b5061067a61169a565b005b34801561068857600080fd5b506106a3600480360381019061069e9190613589565b6116ae565b005b3480156106b157600080fd5b506106ba611782565b6040516106c79190612f1f565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906133bd565b6117a8565b60405161070491906130e7565b60405180910390f35b34801561071957600080fd5b506107226117c8565b60405161072f9190612f53565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a919061355c565b6117ce565b60405161076c91906130e7565b60405180910390f35b34801561078157600080fd5b5061078a6117e8565b6040516107979190612f53565b60405180910390f35b3480156107ac57600080fd5b506107b56117ee565b6040516107c29190612f1f565b60405180910390f35b3480156107d757600080fd5b506107e0611818565b6040516107ed9190612ffe565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613237565b6118aa565b60405161082d9493929190613510565b60405180910390f35b34801561084257600080fd5b5061084b611985565b005b34801561085957600080fd5b50610874600480360381019061086f919061308c565b611a01565b60405161088191906130e7565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac919061308c565b611a78565b6040516108be91906130e7565b60405180910390f35b3480156108d357600080fd5b506108dc611a9b565b6040516108e99190612f53565b60405180910390f35b3480156108fe57600080fd5b50610907611aa1565b6040516109149190612f53565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f919061343d565b611aa7565b60405161095191906130e7565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c91906134b4565b611b18565b60405161098e9190612f53565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b991906133bd565b611b74565b6040516109cb91906130e7565b60405180910390f35b3480156109e057600080fd5b506109e9611cc7565b6040516109f69190612f53565b60405180910390f35b348015610a0b57600080fd5b50610a14611ccd565b604051610a219190612f53565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c91906135dc565b611cd3565b604051610a5e9190612f53565b60405180910390f35b348015610a7357600080fd5b50610a7c611d5a565b604051610a899190612f53565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061361c565b611d60565b005b348015610ac757600080fd5b50610ae26004803603810190610add91906134b4565b611dfc565b604051610aef9190612f53565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a91906133bd565b611e58565b005b348015610b2d57600080fd5b50610b36611edb565b604051610b439190612f53565b60405180910390f35b348015610b5857600080fd5b50610b61611ee1565b604051610b6e9190612f53565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b606060038054610bb29061368b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde9061368b565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b600080610c40611ee7565b9050610c4d818585611eef565b600191505092915050565b601654341015610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490613708565b60405180910390fd5b6017543373ffffffffffffffffffffffffffffffffffffffff16311015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613774565b60405180910390fd5b3460106000828254610d0b91906137c3565b92505081905550610d4133600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166017546120b8565b604051806080016040528082815260200160011515815260200142815260200134601584604051610d729190613833565b908152602001604051809103902060030154610d8e91906137c3565b815250601582604051610da19190613833565b90815260200160405180910390206000820151816000019081610dc491906139ec565b5060208201518160010160006101000a81548160ff02191690831515021790555060408201518160020155606082015181600301559050507f8382dfeb92e23123a91d983e4f179a9fbe329ff91e14e11cd3c3b5252f1151228142604051610e2d929190613abe565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b601654341015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890613708565b60405180910390fd5b6017543373ffffffffffffffffffffffffffffffffffffffff16311015610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490613774565b60405180910390fd5b3460106000828254610f0f91906137c3565b92505081905550610f4533600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166017546120b8565b604051806080016040528082815260200160011515815260200142815260200134601484604051610f769190613833565b908152602001604051809103902060030154610f9291906137c3565b815250601482604051610fa59190613833565b90815260200160405180910390206000820151816000019081610fc891906139ec565b5060208201518160010160006101000a81548160ff02191690831515021790555060408201518160020155606082015181600301559050507f892c7b6af36dc1cd7c78d56ead1e536ddf81fe5688e6b3f631cdfadf7ad4c5088142604051611031929190613abe565b60405180910390a150565b6000600254905090565b61104e612648565b83156110e75760405180608001604052808681526020018415158152602001838152602001828152506015866040516110879190613833565b908152602001604051809103902060008201518160000190816110aa91906139ec565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030155905050611176565b604051806080016040528086815260200184151581526020018381526020018281525060148660405161111a9190613833565b9081526020016040518091039020600082015181600001908161113d91906139ec565b5060208201518160010160006101000a81548160ff02191690831515021790555060408201518160020155606082015181600301559050505b7fc7da2a9b77928245e263afcf4e639fd44ae7d1970e45b7c6ff1a952442938caf85858585856040516111ad959493929190613aee565b60405180910390a15050505050565b6111c4612648565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613bba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613bba565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f816040516113339190612f1f565b60405180910390a150565b600080611349611ee7565b90506113568582856126c6565b6113618585856120b8565b60019150509392505050565b6000611377612648565b60616009546113869190613c09565b83106113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613cac565b60405180910390fd5b60616009546113d69190613c09565b8210611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90613cac565b60405180910390fd5b600860009054906101000a900460ff16600a6114339190613dff565b8361143e9190613e4a565b601281905550600860009054906101000a900460ff16600a6114609190613dff565b8261146b9190613e4a565b6013819055506001905092915050565b60006009905090565b60008061148f611ee7565b90506114b08185856114a18589611cd3565b6114ab91906137c3565b611eef565b600191505092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000811561151f576015836040516114f99190613833565b908152602001604051809103902060010160009054906101000a900460ff169050611551565b60148360405161152f9190613833565b908152602001604051809103902060010160009054906101000a900460ff1690505b92915050565b600b5481565b6014818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546115969061368b565b80601f01602080910402602001604051908101604052809291908181526020018280546115c29061368b565b801561160f5780601f106115e45761010080835404028352916020019161160f565b820191906000526020600020905b8154815290600101906020018083116115f257829003601f168201915b5050505050908060010160009054906101000a900460ff16908060020154908060030154905084565b6000611642612648565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116a2612648565b6116ac6000612752565b565b6116b6612648565b82156116db5781156116ce57806018819055506116d6565b806016819055505b611742565b811561171357600860009054906101000a900460ff16600a6116fd9190613dff565b816117089190613e4a565b601981905550611741565b600860009054906101000a900460ff16600a61172f9190613dff565b8161173a9190613e4a565b6017819055505b5b7fb87a29e1f0734b57d95308af5a136440c194441ac49edd417a1ed26aa78ceda283838360405161177593929190613ea4565b60405180910390a1505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b60185481565b60006117d8612648565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118279061368b565b80601f01602080910402602001604051908101604052809291908181526020018280546118539061368b565b80156118a05780601f10611875576101008083540402835291602001916118a0565b820191906000526020600020905b81548152906001019060200180831161188357829003601f168201915b5050505050905090565b6015818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546118e39061368b565b80601f016020809104026020016040519081016040528092919081815260200182805461190f9061368b565b801561195c5780601f106119315761010080835404028352916020019161195c565b820191906000526020600020905b81548152906001019060200180831161193f57829003601f168201915b5050505050908060010160009054906101000a900460ff16908060020154908060030154905084565b61198d612648565b6002600a819055506002600b81905550600860009054906101000a900460ff16600a6119b99190613dff565b631dcd65016119c89190613e4a565b600c81905550600860009054906101000a900460ff16600a6119ea9190613dff565b631dcd65016119f99190613e4a565b600d81905550565b600080611a0c611ee7565b90506000611a1a8286611cd3565b905083811015611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613f4d565b60405180910390fd5b611a6c8286868403611eef565b60019250505092915050565b600080611a83611ee7565b9050611a908185856120b8565b600191505092915050565b600d5481565b60135481565b6000611ab1612648565b600a8284611abf91906137c3565b1115611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613fdf565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b60008115611b4957601583604051611b309190613833565b9081526020016040518091039020600301549050611b6e565b601483604051611b599190613833565b90815260200160405180910390206003015490505b92915050565b6000611b7e612648565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613bba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490613bba565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60105481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60195481565b611d68612648565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff28282604051611df0929190613fff565b60405180910390a15050565b60008115611e2d57601583604051611e149190613833565b9081526020016040518091039020600201549050611e52565b601483604051611e3d9190613833565b90815260200160405180910390206002015490505b92915050565b611e60612648565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec69061409a565b60405180910390fd5b611ed881612752565b50565b600a5481565b60175481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f559061412c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906141be565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ab9190612f53565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90614250565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d906142e2565b60405180910390fd5b806121a084611652565b10156121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890614374565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061228a5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156122a35750601a60149054906101000a900460ff16155b1561263757601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123fc57600060105461230b30611652565b6123159190614394565b9050601254811061232c5761232b601254612818565b5b601354601054106123fa576123426013546128d9565b601354601060008282546123569190614394565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef90614414565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249f5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124ac57819050612626565b600c548211156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e8906144a6565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361259f57600d5461255284611652565b8361255d91906137c3565b111561259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614538565b60405180910390fd5b5b60006064600b54846125b19190613e4a565b6125bb9190613c09565b905060006064600a54856125cf9190613e4a565b6125d99190613c09565b905080826125e791906137c3565b846125f29190614394565b9250816010600082825461260691906137c3565b925050819055506126238630838561261e91906137c3565b612b4c565b50505b612631848483612b4c565b50612643565b612642838383612b4c565b5b505050565b612650611ee7565b73ffffffffffffffffffffffffffffffffffffffff1661266e6117ee565b73ffffffffffffffffffffffffffffffffffffffff16146126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb906145a4565b60405180910390fd5b565b60006126d28484611cd3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461274c578181101561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614610565b60405180910390fd5b61274b8484848403611eef565b5b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601a60146101000a81548160ff02191690831515021790555060006002826128429190613c09565b9050600081836128529190614394565b90506000479050612862836128d9565b600081476128709190614394565b905061287c8382612dac565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128af93929190614630565b60405180910390a1505050506000601a60146101000a81548160ff02191690831515021790555050565b6001601a60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156129115761291061310c565b5b60405190808252806020026020018201604052801561293f5781602001602082028036833780820191505090505b509050308160008151811061295757612956614667565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2091906146ab565b81600181518110612a3457612a33614667565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a99307f000000000000000000000000000000000000000000000000000000000000000084611eef565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612afb9594939291906147d1565b600060405180830381600087803b158015612b1557600080fd5b505af1158015612b29573d6000803e3d6000fd5b50505050506000601a60146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb290614250565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c21906142e2565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790614374565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d9e9190612f53565b60405180910390a350505050565b6001601a60146101000a81548160ff021916908315150217905550612df2307f000000000000000000000000000000000000000000000000000000000000000084611eef565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612e799695949392919061482b565b60606040518083038185885af1158015612e97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ebc91906148a1565b5050506000601a60146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f0982612ede565b9050919050565b612f1981612efe565b82525050565b6000602082019050612f346000830184612f10565b92915050565b6000819050919050565b612f4d81612f3a565b82525050565b6000602082019050612f686000830184612f44565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fa8578082015181840152602081019050612f8d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fd082612f6e565b612fda8185612f79565b9350612fea818560208601612f8a565b612ff381612fb4565b840191505092915050565b600060208201905081810360008301526130188184612fc5565b905092915050565b6000604051905090565b600080fd5b600080fd5b61303d81612efe565b811461304857600080fd5b50565b60008135905061305a81613034565b92915050565b61306981612f3a565b811461307457600080fd5b50565b60008135905061308681613060565b92915050565b600080604083850312156130a3576130a261302a565b5b60006130b18582860161304b565b92505060206130c285828601613077565b9150509250929050565b60008115159050919050565b6130e1816130cc565b82525050565b60006020820190506130fc60008301846130d8565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61314482612fb4565b810181811067ffffffffffffffff821117156131635761316261310c565b5b80604052505050565b6000613176613020565b9050613182828261313b565b919050565b600067ffffffffffffffff8211156131a2576131a161310c565b5b6131ab82612fb4565b9050602081019050919050565b82818337600083830152505050565b60006131da6131d584613187565b61316c565b9050828152602081018484840111156131f6576131f5613107565b5b6132018482856131b8565b509392505050565b600082601f83011261321e5761321d613102565b5b813561322e8482602086016131c7565b91505092915050565b60006020828403121561324d5761324c61302a565b5b600082013567ffffffffffffffff81111561326b5761326a61302f565b5b61327784828501613209565b91505092915050565b6000819050919050565b60006132a56132a061329b84612ede565b613280565b612ede565b9050919050565b60006132b78261328a565b9050919050565b60006132c9826132ac565b9050919050565b6132d9816132be565b82525050565b60006020820190506132f460008301846132d0565b92915050565b613303816130cc565b811461330e57600080fd5b50565b600081359050613320816132fa565b92915050565b600080600080600060a086880312156133425761334161302a565b5b600086013567ffffffffffffffff8111156133605761335f61302f565b5b61336c88828901613209565b955050602061337d88828901613311565b945050604061338e88828901613311565b935050606061339f88828901613077565b92505060806133b088828901613077565b9150509295509295909350565b6000602082840312156133d3576133d261302a565b5b60006133e18482850161304b565b91505092915050565b6000806000606084860312156134035761340261302a565b5b60006134118682870161304b565b93505060206134228682870161304b565b925050604061343386828701613077565b9150509250925092565b600080604083850312156134545761345361302a565b5b600061346285828601613077565b925050602061347385828601613077565b9150509250929050565b600060ff82169050919050565b6134938161347d565b82525050565b60006020820190506134ae600083018461348a565b92915050565b600080604083850312156134cb576134ca61302a565b5b600083013567ffffffffffffffff8111156134e9576134e861302f565b5b6134f585828601613209565b925050602061350685828601613311565b9150509250929050565b6000608082019050818103600083015261352a8187612fc5565b905061353960208301866130d8565b6135466040830185612f44565b6135536060830184612f44565b95945050505050565b6000602082840312156135725761357161302a565b5b600061358084828501613077565b91505092915050565b6000806000606084860312156135a2576135a161302a565b5b60006135b086828701613311565b93505060206135c186828701613311565b92505060406135d286828701613077565b9150509250925092565b600080604083850312156135f3576135f261302a565b5b60006136018582860161304b565b92505060206136128582860161304b565b9150509250929050565b600080604083850312156136335761363261302a565b5b60006136418582860161304b565b925050602061365285828601613311565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136a357607f821691505b6020821081036136b6576136b561365c565b5b50919050565b7f4e6f7420656e6f756768204554482073656e7421000000000000000000000000600082015250565b60006136f2601483612f79565b91506136fd826136bc565b602082019050919050565b60006020820190508181036000830152613721816136e5565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b600061375e601283612f79565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137ce82612f3a565b91506137d983612f3a565b92508282019050808211156137f1576137f0613794565b5b92915050565b600081905092915050565b600061380d82612f6e565b61381781856137f7565b9350613827818560208601612f8a565b80840191505092915050565b600061383f8284613802565b915081905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261386f565b6138b6868361386f565b95508019841693508086168417925050509392505050565b60006138e96138e46138df84612f3a565b613280565b612f3a565b9050919050565b6000819050919050565b613903836138ce565b61391761390f826138f0565b84845461387c565b825550505050565b600090565b61392c61391f565b6139378184846138fa565b505050565b5b8181101561395b57613950600082613924565b60018101905061393d565b5050565b601f8211156139a0576139718161384a565b61397a8461385f565b81016020851015613989578190505b61399d6139958561385f565b83018261393c565b50505b505050565b600082821c905092915050565b60006139c3600019846008026139a5565b1980831691505092915050565b60006139dc83836139b2565b9150826002028217905092915050565b6139f582612f6e565b67ffffffffffffffff811115613a0e57613a0d61310c565b5b613a18825461368b565b613a2382828561395f565b600060209050601f831160018114613a565760008415613a44578287015190505b613a4e85826139d0565b865550613ab6565b601f198416613a648661384a565b60005b82811015613a8c57848901518255600182019150602085019450602081019050613a67565b86831015613aa95784890151613aa5601f8916826139b2565b8355505b6001600288020188555050505b505050505050565b60006040820190508181036000830152613ad88185612fc5565b9050613ae76020830184612f44565b9392505050565b600060a0820190508181036000830152613b088188612fc5565b9050613b1760208301876130d8565b613b2460408301866130d8565b613b316060830185612f44565b613b3e6080830184612f44565b9695505050505050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b6000613ba4602883612f79565b9150613baf82613b48565b604082019050919050565b60006020820190508181036000830152613bd381613b97565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c1482612f3a565b9150613c1f83612f3a565b925082613c2f57613c2e613bda565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203325206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b6000613c96603483612f79565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613d2357808604811115613cff57613cfe613794565b5b6001851615613d0e5780820291505b8081029050613d1c85613ccc565b9450613ce3565b94509492505050565b600082613d3c5760019050613df8565b81613d4a5760009050613df8565b8160018114613d605760028114613d6a57613d99565b6001915050613df8565b60ff841115613d7c57613d7b613794565b5b8360020a915084821115613d9357613d92613794565b5b50613df8565b5060208310610133831016604e8410600b8410161715613dce5782820a905083811115613dc957613dc8613794565b5b613df8565b613ddb8484846001613cd9565b92509050818404811115613df257613df1613794565b5b81810290505b9392505050565b6000613e0a82612f3a565b9150613e158361347d565b9250613e427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d2c565b905092915050565b6000613e5582612f3a565b9150613e6083612f3a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e9957613e98613794565b5b828202905092915050565b6000606082019050613eb960008301866130d8565b613ec660208301856130d8565b613ed36040830184612f44565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f37602583612f79565b9150613f4282613edb565b604082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000613fc9602d83612f79565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b60006040820190506140146000830185612f10565b61402160208301846130d8565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614084602683612f79565b915061408f82614028565b604082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614116602483612f79565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141a8602283612f79565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061423a602583612f79565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602383612f79565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061435e602683612f79565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b600061439f82612f3a565b91506143aa83612f3a565b92508282039050818111156143c2576143c1613794565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006143fe601283612f79565b9150614409826143c8565b602082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000614490603983612f79565b915061449b82614434565b604082019050919050565b600060208201905081810360008301526144bf81614483565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000614522603683612f79565b915061452d826144c6565b604082019050919050565b6000602082019050818103600083015261455181614515565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061458e602083612f79565b915061459982614558565b602082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006145fa601d83612f79565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b60006060820190506146456000830186612f44565b6146526020830185612f44565b61465f6040830184612f44565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506146a581613034565b92915050565b6000602082840312156146c1576146c061302a565b5b60006146cf84828501614696565b91505092915050565b6000819050919050565b60006146fd6146f86146f3846146d8565b613280565b612f3a565b9050919050565b61470d816146e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61474881612efe565b82525050565b600061475a838361473f565b60208301905092915050565b6000602082019050919050565b600061477e82614713565b614788818561471e565b93506147938361472f565b8060005b838110156147c45781516147ab888261474e565b97506147b683614766565b925050600181019050614797565b5085935050505092915050565b600060a0820190506147e66000830188612f44565b6147f36020830187614704565b81810360408301526148058186614773565b90506148146060830185612f10565b6148216080830184612f44565b9695505050505050565b600060c0820190506148406000830189612f10565b61484d6020830188612f44565b61485a6040830187614704565b6148676060830186614704565b6148746080830185612f10565b61488160a0830184612f44565b979650505050505050565b60008151905061489b81613060565b92915050565b6000806000606084860312156148ba576148b961302a565b5b60006148c88682870161488c565b93505060206148d98682870161488c565b92505060406148ea8682870161488c565b915050925092509256fea264697066735822122005825b43cbf15eb211b6036620a09247267b78cdc93fc7638ef95c0f0ddd1ba664736f6c63430008100033414e494d415a494e47204149207c2068747470733a2f2f616e696d617a696e6761692e636f6d2f20

Deployed Bytecode

0x60806040526004361061028c5760003560e01c8063768dc7101161015a578063af8af690116100c1578063df1d099e1161007a578063df1d099e14610a67578063df8408fe14610a92578063f1b2b3d914610abb578063f2fde38b14610af8578063f345bd8514610b21578063fbee93ba14610b4c57610293565b8063af8af6901461091d578063b5c78e8a1461095a578063bb85c6d114610997578063c0fdea57146109d4578063d12a7688146109ff578063dd62ed3e14610a2a57610293565b8063a2330d9711610113578063a2330d97146107f6578063a3996f7b14610836578063a457c2d71461084d578063a9059cbb1461088a578063aa4bde28146108c7578063ad16a0cf146108f257610293565b8063768dc710146106d05780637930ef691461070d57806381bfdcca146107385780638c0b5e22146107755780638da5cb5b146107a057806395d89b41146107cb57610293565b806330b63d80116101fe57806363cdf60f116101b757806363cdf60f146105ab578063677daa57146105eb57806370a0823114610628578063715018a61461066557806373c503b31461067c57806375f0a874146106a557610293565b806330b63d8014610473578063313ce567146104b057806339509351146104db57806349bd5a5e146105185780634fa74c4d14610543578063527ffabd1461058057610293565b80631694505e116102505780631694505e1461037257806316a7b1601461039d57806318160ddd146103b957806318bc47f6146103e45780631b56bbf91461040d57806323b872dd1461043657610293565b806303fd2a4514610298578063054dee0f146102c357806306fdde03146102ee578063095ea7b3146103195780630f1d7ad91461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b77565b6040516102ba9190612f1f565b60405180910390f35b3480156102cf57600080fd5b506102d8610b9d565b6040516102e59190612f53565b60405180910390f35b3480156102fa57600080fd5b50610303610ba3565b6040516103109190612ffe565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061308c565b610c35565b60405161034d91906130e7565b60405180910390f35b610370600480360381019061036b9190613237565b610c58565b005b34801561037e57600080fd5b50610387610e38565b60405161039491906132df565b60405180910390f35b6103b760048036038101906103b29190613237565b610e5c565b005b3480156103c557600080fd5b506103ce61103c565b6040516103db9190612f53565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613326565b611046565b005b34801561041957600080fd5b50610434600480360381019061042f91906133bd565b6111bc565b005b34801561044257600080fd5b5061045d600480360381019061045891906133ea565b61133e565b60405161046a91906130e7565b60405180910390f35b34801561047f57600080fd5b5061049a6004803603810190610495919061343d565b61136d565b6040516104a791906130e7565b60405180910390f35b3480156104bc57600080fd5b506104c561147b565b6040516104d29190613499565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd919061308c565b611484565b60405161050f91906130e7565b60405180910390f35b34801561052457600080fd5b5061052d6114bb565b60405161053a9190612f1f565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906134b4565b6114e1565b60405161057791906130e7565b60405180910390f35b34801561058c57600080fd5b50610595611557565b6040516105a29190612f53565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613237565b61155d565b6040516105e29493929190613510565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d919061355c565b611638565b60405161061f91906130e7565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906133bd565b611652565b60405161065c9190612f53565b60405180910390f35b34801561067157600080fd5b5061067a61169a565b005b34801561068857600080fd5b506106a3600480360381019061069e9190613589565b6116ae565b005b3480156106b157600080fd5b506106ba611782565b6040516106c79190612f1f565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906133bd565b6117a8565b60405161070491906130e7565b60405180910390f35b34801561071957600080fd5b506107226117c8565b60405161072f9190612f53565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a919061355c565b6117ce565b60405161076c91906130e7565b60405180910390f35b34801561078157600080fd5b5061078a6117e8565b6040516107979190612f53565b60405180910390f35b3480156107ac57600080fd5b506107b56117ee565b6040516107c29190612f1f565b60405180910390f35b3480156107d757600080fd5b506107e0611818565b6040516107ed9190612ffe565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613237565b6118aa565b60405161082d9493929190613510565b60405180910390f35b34801561084257600080fd5b5061084b611985565b005b34801561085957600080fd5b50610874600480360381019061086f919061308c565b611a01565b60405161088191906130e7565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac919061308c565b611a78565b6040516108be91906130e7565b60405180910390f35b3480156108d357600080fd5b506108dc611a9b565b6040516108e99190612f53565b60405180910390f35b3480156108fe57600080fd5b50610907611aa1565b6040516109149190612f53565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f919061343d565b611aa7565b60405161095191906130e7565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c91906134b4565b611b18565b60405161098e9190612f53565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b991906133bd565b611b74565b6040516109cb91906130e7565b60405180910390f35b3480156109e057600080fd5b506109e9611cc7565b6040516109f69190612f53565b60405180910390f35b348015610a0b57600080fd5b50610a14611ccd565b604051610a219190612f53565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c91906135dc565b611cd3565b604051610a5e9190612f53565b60405180910390f35b348015610a7357600080fd5b50610a7c611d5a565b604051610a899190612f53565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061361c565b611d60565b005b348015610ac757600080fd5b50610ae26004803603810190610add91906134b4565b611dfc565b604051610aef9190612f53565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a91906133bd565b611e58565b005b348015610b2d57600080fd5b50610b36611edb565b604051610b439190612f53565b60405180910390f35b348015610b5857600080fd5b50610b61611ee1565b604051610b6e9190612f53565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b606060038054610bb29061368b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde9061368b565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050905090565b600080610c40611ee7565b9050610c4d818585611eef565b600191505092915050565b601654341015610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490613708565b60405180910390fd5b6017543373ffffffffffffffffffffffffffffffffffffffff16311015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613774565b60405180910390fd5b3460106000828254610d0b91906137c3565b92505081905550610d4133600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166017546120b8565b604051806080016040528082815260200160011515815260200142815260200134601584604051610d729190613833565b908152602001604051809103902060030154610d8e91906137c3565b815250601582604051610da19190613833565b90815260200160405180910390206000820151816000019081610dc491906139ec565b5060208201518160010160006101000a81548160ff02191690831515021790555060408201518160020155606082015181600301559050507f8382dfeb92e23123a91d983e4f179a9fbe329ff91e14e11cd3c3b5252f1151228142604051610e2d929190613abe565b60405180910390a150565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b601654341015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890613708565b60405180910390fd5b6017543373ffffffffffffffffffffffffffffffffffffffff16311015610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490613774565b60405180910390fd5b3460106000828254610f0f91906137c3565b92505081905550610f4533600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166017546120b8565b604051806080016040528082815260200160011515815260200142815260200134601484604051610f769190613833565b908152602001604051809103902060030154610f9291906137c3565b815250601482604051610fa59190613833565b90815260200160405180910390206000820151816000019081610fc891906139ec565b5060208201518160010160006101000a81548160ff02191690831515021790555060408201518160020155606082015181600301559050507f892c7b6af36dc1cd7c78d56ead1e536ddf81fe5688e6b3f631cdfadf7ad4c5088142604051611031929190613abe565b60405180910390a150565b6000600254905090565b61104e612648565b83156110e75760405180608001604052808681526020018415158152602001838152602001828152506015866040516110879190613833565b908152602001604051809103902060008201518160000190816110aa91906139ec565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030155905050611176565b604051806080016040528086815260200184151581526020018381526020018281525060148660405161111a9190613833565b9081526020016040518091039020600082015181600001908161113d91906139ec565b5060208201518160010160006101000a81548160ff02191690831515021790555060408201518160020155606082015181600301559050505b7fc7da2a9b77928245e263afcf4e639fd44ae7d1970e45b7c6ff1a952442938caf85858585856040516111ad959493929190613aee565b60405180910390a15050505050565b6111c4612648565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613bba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613bba565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f816040516113339190612f1f565b60405180910390a150565b600080611349611ee7565b90506113568582856126c6565b6113618585856120b8565b60019150509392505050565b6000611377612648565b60616009546113869190613c09565b83106113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613cac565b60405180910390fd5b60616009546113d69190613c09565b8210611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90613cac565b60405180910390fd5b600860009054906101000a900460ff16600a6114339190613dff565b8361143e9190613e4a565b601281905550600860009054906101000a900460ff16600a6114609190613dff565b8261146b9190613e4a565b6013819055506001905092915050565b60006009905090565b60008061148f611ee7565b90506114b08185856114a18589611cd3565b6114ab91906137c3565b611eef565b600191505092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000811561151f576015836040516114f99190613833565b908152602001604051809103902060010160009054906101000a900460ff169050611551565b60148360405161152f9190613833565b908152602001604051809103902060010160009054906101000a900460ff1690505b92915050565b600b5481565b6014818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546115969061368b565b80601f01602080910402602001604051908101604052809291908181526020018280546115c29061368b565b801561160f5780601f106115e45761010080835404028352916020019161160f565b820191906000526020600020905b8154815290600101906020018083116115f257829003601f168201915b5050505050908060010160009054906101000a900460ff16908060020154908060030154905084565b6000611642612648565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116a2612648565b6116ac6000612752565b565b6116b6612648565b82156116db5781156116ce57806018819055506116d6565b806016819055505b611742565b811561171357600860009054906101000a900460ff16600a6116fd9190613dff565b816117089190613e4a565b601981905550611741565b600860009054906101000a900460ff16600a61172f9190613dff565b8161173a9190613e4a565b6017819055505b5b7fb87a29e1f0734b57d95308af5a136440c194441ac49edd417a1ed26aa78ceda283838360405161177593929190613ea4565b60405180910390a1505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b60185481565b60006117d8612648565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118279061368b565b80601f01602080910402602001604051908101604052809291908181526020018280546118539061368b565b80156118a05780601f10611875576101008083540402835291602001916118a0565b820191906000526020600020905b81548152906001019060200180831161188357829003601f168201915b5050505050905090565b6015818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546118e39061368b565b80601f016020809104026020016040519081016040528092919081815260200182805461190f9061368b565b801561195c5780601f106119315761010080835404028352916020019161195c565b820191906000526020600020905b81548152906001019060200180831161193f57829003601f168201915b5050505050908060010160009054906101000a900460ff16908060020154908060030154905084565b61198d612648565b6002600a819055506002600b81905550600860009054906101000a900460ff16600a6119b99190613dff565b631dcd65016119c89190613e4a565b600c81905550600860009054906101000a900460ff16600a6119ea9190613dff565b631dcd65016119f99190613e4a565b600d81905550565b600080611a0c611ee7565b90506000611a1a8286611cd3565b905083811015611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613f4d565b60405180910390fd5b611a6c8286868403611eef565b60019250505092915050565b600080611a83611ee7565b9050611a908185856120b8565b600191505092915050565b600d5481565b60135481565b6000611ab1612648565b600a8284611abf91906137c3565b1115611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613fdf565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b60008115611b4957601583604051611b309190613833565b9081526020016040518091039020600301549050611b6e565b601483604051611b599190613833565b90815260200160405180910390206003015490505b92915050565b6000611b7e612648565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590613bba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490613bba565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60105481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60195481565b611d68612648565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff28282604051611df0929190613fff565b60405180910390a15050565b60008115611e2d57601583604051611e149190613833565b9081526020016040518091039020600201549050611e52565b601483604051611e3d9190613833565b90815260200160405180910390206002015490505b92915050565b611e60612648565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec69061409a565b60405180910390fd5b611ed881612752565b50565b600a5481565b60175481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f559061412c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906141be565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ab9190612f53565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90614250565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d906142e2565b60405180910390fd5b806121a084611652565b10156121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890614374565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061228a5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156122a35750601a60149054906101000a900460ff16155b1561263757601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123fc57600060105461230b30611652565b6123159190614394565b9050601254811061232c5761232b601254612818565b5b601354601054106123fa576123426013546128d9565b601354601060008282546123569190614394565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef90614414565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249f5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124ac57819050612626565b600c548211156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e8906144a6565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361259f57600d5461255284611652565b8361255d91906137c3565b111561259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614538565b60405180910390fd5b5b60006064600b54846125b19190613e4a565b6125bb9190613c09565b905060006064600a54856125cf9190613e4a565b6125d99190613c09565b905080826125e791906137c3565b846125f29190614394565b9250816010600082825461260691906137c3565b925050819055506126238630838561261e91906137c3565b612b4c565b50505b612631848483612b4c565b50612643565b612642838383612b4c565b5b505050565b612650611ee7565b73ffffffffffffffffffffffffffffffffffffffff1661266e6117ee565b73ffffffffffffffffffffffffffffffffffffffff16146126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb906145a4565b60405180910390fd5b565b60006126d28484611cd3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461274c578181101561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614610565b60405180910390fd5b61274b8484848403611eef565b5b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601a60146101000a81548160ff02191690831515021790555060006002826128429190613c09565b9050600081836128529190614394565b90506000479050612862836128d9565b600081476128709190614394565b905061287c8382612dac565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128af93929190614630565b60405180910390a1505050506000601a60146101000a81548160ff02191690831515021790555050565b6001601a60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156129115761291061310c565b5b60405190808252806020026020018201604052801561293f5781602001602082028036833780820191505090505b509050308160008151811061295757612956614667565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2091906146ab565b81600181518110612a3457612a33614667565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a99307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611eef565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612afb9594939291906147d1565b600060405180830381600087803b158015612b1557600080fd5b505af1158015612b29573d6000803e3d6000fd5b50505050506000601a60146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb290614250565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c21906142e2565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790614374565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d9e9190612f53565b60405180910390a350505050565b6001601a60146101000a81548160ff021916908315150217905550612df2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611eef565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612e799695949392919061482b565b60606040518083038185885af1158015612e97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ebc91906148a1565b5050506000601a60146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f0982612ede565b9050919050565b612f1981612efe565b82525050565b6000602082019050612f346000830184612f10565b92915050565b6000819050919050565b612f4d81612f3a565b82525050565b6000602082019050612f686000830184612f44565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fa8578082015181840152602081019050612f8d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fd082612f6e565b612fda8185612f79565b9350612fea818560208601612f8a565b612ff381612fb4565b840191505092915050565b600060208201905081810360008301526130188184612fc5565b905092915050565b6000604051905090565b600080fd5b600080fd5b61303d81612efe565b811461304857600080fd5b50565b60008135905061305a81613034565b92915050565b61306981612f3a565b811461307457600080fd5b50565b60008135905061308681613060565b92915050565b600080604083850312156130a3576130a261302a565b5b60006130b18582860161304b565b92505060206130c285828601613077565b9150509250929050565b60008115159050919050565b6130e1816130cc565b82525050565b60006020820190506130fc60008301846130d8565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61314482612fb4565b810181811067ffffffffffffffff821117156131635761316261310c565b5b80604052505050565b6000613176613020565b9050613182828261313b565b919050565b600067ffffffffffffffff8211156131a2576131a161310c565b5b6131ab82612fb4565b9050602081019050919050565b82818337600083830152505050565b60006131da6131d584613187565b61316c565b9050828152602081018484840111156131f6576131f5613107565b5b6132018482856131b8565b509392505050565b600082601f83011261321e5761321d613102565b5b813561322e8482602086016131c7565b91505092915050565b60006020828403121561324d5761324c61302a565b5b600082013567ffffffffffffffff81111561326b5761326a61302f565b5b61327784828501613209565b91505092915050565b6000819050919050565b60006132a56132a061329b84612ede565b613280565b612ede565b9050919050565b60006132b78261328a565b9050919050565b60006132c9826132ac565b9050919050565b6132d9816132be565b82525050565b60006020820190506132f460008301846132d0565b92915050565b613303816130cc565b811461330e57600080fd5b50565b600081359050613320816132fa565b92915050565b600080600080600060a086880312156133425761334161302a565b5b600086013567ffffffffffffffff8111156133605761335f61302f565b5b61336c88828901613209565b955050602061337d88828901613311565b945050604061338e88828901613311565b935050606061339f88828901613077565b92505060806133b088828901613077565b9150509295509295909350565b6000602082840312156133d3576133d261302a565b5b60006133e18482850161304b565b91505092915050565b6000806000606084860312156134035761340261302a565b5b60006134118682870161304b565b93505060206134228682870161304b565b925050604061343386828701613077565b9150509250925092565b600080604083850312156134545761345361302a565b5b600061346285828601613077565b925050602061347385828601613077565b9150509250929050565b600060ff82169050919050565b6134938161347d565b82525050565b60006020820190506134ae600083018461348a565b92915050565b600080604083850312156134cb576134ca61302a565b5b600083013567ffffffffffffffff8111156134e9576134e861302f565b5b6134f585828601613209565b925050602061350685828601613311565b9150509250929050565b6000608082019050818103600083015261352a8187612fc5565b905061353960208301866130d8565b6135466040830185612f44565b6135536060830184612f44565b95945050505050565b6000602082840312156135725761357161302a565b5b600061358084828501613077565b91505092915050565b6000806000606084860312156135a2576135a161302a565b5b60006135b086828701613311565b93505060206135c186828701613311565b92505060406135d286828701613077565b9150509250925092565b600080604083850312156135f3576135f261302a565b5b60006136018582860161304b565b92505060206136128582860161304b565b9150509250929050565b600080604083850312156136335761363261302a565b5b60006136418582860161304b565b925050602061365285828601613311565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136a357607f821691505b6020821081036136b6576136b561365c565b5b50919050565b7f4e6f7420656e6f756768204554482073656e7421000000000000000000000000600082015250565b60006136f2601483612f79565b91506136fd826136bc565b602082019050919050565b60006020820190508181036000830152613721816136e5565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b600061375e601283612f79565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137ce82612f3a565b91506137d983612f3a565b92508282019050808211156137f1576137f0613794565b5b92915050565b600081905092915050565b600061380d82612f6e565b61381781856137f7565b9350613827818560208601612f8a565b80840191505092915050565b600061383f8284613802565b915081905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261386f565b6138b6868361386f565b95508019841693508086168417925050509392505050565b60006138e96138e46138df84612f3a565b613280565b612f3a565b9050919050565b6000819050919050565b613903836138ce565b61391761390f826138f0565b84845461387c565b825550505050565b600090565b61392c61391f565b6139378184846138fa565b505050565b5b8181101561395b57613950600082613924565b60018101905061393d565b5050565b601f8211156139a0576139718161384a565b61397a8461385f565b81016020851015613989578190505b61399d6139958561385f565b83018261393c565b50505b505050565b600082821c905092915050565b60006139c3600019846008026139a5565b1980831691505092915050565b60006139dc83836139b2565b9150826002028217905092915050565b6139f582612f6e565b67ffffffffffffffff811115613a0e57613a0d61310c565b5b613a18825461368b565b613a2382828561395f565b600060209050601f831160018114613a565760008415613a44578287015190505b613a4e85826139d0565b865550613ab6565b601f198416613a648661384a565b60005b82811015613a8c57848901518255600182019150602085019450602081019050613a67565b86831015613aa95784890151613aa5601f8916826139b2565b8355505b6001600288020188555050505b505050505050565b60006040820190508181036000830152613ad88185612fc5565b9050613ae76020830184612f44565b9392505050565b600060a0820190508181036000830152613b088188612fc5565b9050613b1760208301876130d8565b613b2460408301866130d8565b613b316060830185612f44565b613b3e6080830184612f44565b9695505050505050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b6000613ba4602883612f79565b9150613baf82613b48565b604082019050919050565b60006020820190508181036000830152613bd381613b97565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c1482612f3a565b9150613c1f83612f3a565b925082613c2f57613c2e613bda565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203325206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b6000613c96603483612f79565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613d2357808604811115613cff57613cfe613794565b5b6001851615613d0e5780820291505b8081029050613d1c85613ccc565b9450613ce3565b94509492505050565b600082613d3c5760019050613df8565b81613d4a5760009050613df8565b8160018114613d605760028114613d6a57613d99565b6001915050613df8565b60ff841115613d7c57613d7b613794565b5b8360020a915084821115613d9357613d92613794565b5b50613df8565b5060208310610133831016604e8410600b8410161715613dce5782820a905083811115613dc957613dc8613794565b5b613df8565b613ddb8484846001613cd9565b92509050818404811115613df257613df1613794565b5b81810290505b9392505050565b6000613e0a82612f3a565b9150613e158361347d565b9250613e427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d2c565b905092915050565b6000613e5582612f3a565b9150613e6083612f3a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e9957613e98613794565b5b828202905092915050565b6000606082019050613eb960008301866130d8565b613ec660208301856130d8565b613ed36040830184612f44565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f37602583612f79565b9150613f4282613edb565b604082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000613fc9602d83612f79565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b60006040820190506140146000830185612f10565b61402160208301846130d8565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614084602683612f79565b915061408f82614028565b604082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614116602483612f79565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141a8602283612f79565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061423a602583612f79565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602383612f79565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061435e602683612f79565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b600061439f82612f3a565b91506143aa83612f3a565b92508282039050818111156143c2576143c1613794565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006143fe601283612f79565b9150614409826143c8565b602082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000614490603983612f79565b915061449b82614434565b604082019050919050565b600060208201905081810360008301526144bf81614483565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000614522603683612f79565b915061452d826144c6565b604082019050919050565b6000602082019050818103600083015261455181614515565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061458e602083612f79565b915061459982614558565b602082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006145fa601d83612f79565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b60006060820190506146456000830186612f44565b6146526020830185612f44565b61465f6040830184612f44565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506146a581613034565b92915050565b6000602082840312156146c1576146c061302a565b5b60006146cf84828501614696565b91505092915050565b6000819050919050565b60006146fd6146f86146f3846146d8565b613280565b612f3a565b9050919050565b61470d816146e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61474881612efe565b82525050565b600061475a838361473f565b60208301905092915050565b6000602082019050919050565b600061477e82614713565b614788818561471e565b93506147938361472f565b8060005b838110156147c45781516147ab888261474e565b97506147b683614766565b925050600181019050614797565b5085935050505092915050565b600060a0820190506147e66000830188612f44565b6147f36020830187614704565b81810360408301526148058186614773565b90506148146060830185612f10565b6148216080830184612f44565b9695505050505050565b600060c0820190506148406000830189612f10565b61484d6020830188612f44565b61485a6040830187614704565b6148676060830186614704565b6148746080830185612f10565b61488160a0830184612f44565b979650505050505050565b60008151905061489b81613060565b92915050565b6000806000606084860312156148ba576148b961302a565b5b60006148c88682870161488c565b93505060206148d98682870161488c565b92505060406148ea8682870161488c565b915050925092509256fea264697066735822122005825b43cbf15eb211b6036620a09247267b78cdc93fc7638ef95c0f0ddd1ba664736f6c63430008100033

Deployed Bytecode Sourcemap

29220:13533:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29932:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31059:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18938:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21212:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32393:594;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35186:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31809:576;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20076:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33867:694;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36451:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22036:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41715:602;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19919:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23752:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35244:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33034:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29630:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30937:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42325:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19103:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16197:103;;;;;;;;;;;;;:::i;:::-;;34569:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29850:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30047:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31161:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42515:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29726:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15549:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18762:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30994:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30252:213;;;;;;;;;;;;;:::i;:::-;;22836:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20656:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29786:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30180:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41316:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33296:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40958:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30003:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30104:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20249:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31206:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39369:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33566:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16455:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29534:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31102:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29932:64;;;;;;;;;;;;;:::o;31059:36::-;;;;:::o;18938:102::-;18994:13;19027:5;19020:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18938:102;:::o;21212:244::-;21333:4;21355:13;21371:12;:10;:12::i;:::-;21355:28;;21394:32;21403:5;21410:7;21419:6;21394:8;:32::i;:::-;21444:4;21437:11;;;21212:244;;;;:::o;32393:594::-;32491:11;;32478:9;:24;;32470:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32568:14;;32546:10;:18;;;:36;;32538:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32638:9;32616:18;;:31;;;;;;;:::i;:::-;;;;;;;;32658:43;32668:10;32680:4;;;;;;;;;;;32686:14;;32658:9;:43::i;:::-;32753:166;;;;;;;;32781:10;32753:166;;;;32806:4;32753:166;;;;;;32825:15;32753:166;;;;32899:9;32855:16;32872:10;32855:28;;;;;;:::i;:::-;;;;;;;;;;;;;:41;;;:53;;;;:::i;:::-;32753:166;;;32722:16;32739:10;32722:28;;;;;;:::i;:::-;;;;;;;;;;;;;:197;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32935:44;32951:10;32963:15;32935:44;;;;;;;:::i;:::-;;;;;;;;32393:594;:::o;35186:51::-;;;:::o;31809:576::-;31905:11;;31892:9;:24;;31884:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31982:14;;31960:10;:18;;;:36;;31952:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32052:9;32030:18;;:31;;;;;;;:::i;:::-;;;;;;;;32072:43;32082:10;32094:4;;;;;;;;;;;32100:14;;32072:9;:43::i;:::-;32157:162;;;;;;;;32182:11;32157:162;;;;32208:4;32157:162;;;;;;32227:15;32157:162;;;;32299:9;32257:13;32271:11;32257:26;;;;;;:::i;:::-;;;;;;;;;;;;;:39;;;:51;;;;:::i;:::-;32157:162;;;32128:13;32142:11;32128:26;;;;;;:::i;:::-;;;;;;;;;;;;;:191;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32335:42;32348:11;32361:15;32335:42;;;;;;;:::i;:::-;;;;;;;;31809:576;:::o;20076:110::-;20139:7;20166:12;;20159:19;;20076:110;:::o;33867:694::-;15435:13;:11;:13::i;:::-;34033:10:::1;34029:430;;;34093:147;;;;;;;;34125:12;34093:147;;;;34156:11;34093:147;;;;;;34186:12;34093:147;;;;34217:8;34093:147;;::::0;34060:16:::1;34077:12;34060:30;;;;;;:::i;:::-;;;;;;;;;;;;;:180;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34029:430;;;34303:144;;;;;;;;34332:12;34303:144;;;;34363:11;34303:144;;;;;;34393:12;34303:144;;;;34424:8;34303:144;;::::0;34273:13:::1;34287:12;34273:27;;;;;;:::i;:::-;;;;;;;;;;;;;:174;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34029:430;34474:79;34491:12;34505:10;34517:11;34530:12;34544:8;34474:79;;;;;;;;;;:::i;:::-;;;;;;;;33867:694:::0;;;;;:::o;36451:288::-;15435:13;:11;:13::i;:::-;36533:4:::1;;;;;;;;;;;36524:13;;:5;:13;;::::0;36516:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36618:1;36601:19;;:5;:19;;::::0;36593:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36692:5;36676:13;;:21;;;;;;;;;;;;;;;;;;36713:18;36725:5;36713:18;;;;;;:::i;:::-;;;;;;;;36451:288:::0;:::o;22036:297::-;22169:4;22186:15;22204:12;:10;:12::i;:::-;22186:30;;22227:38;22243:4;22249:7;22258:6;22227:15;:38::i;:::-;22276:27;22286:4;22292:2;22296:6;22276:9;:27::i;:::-;22321:4;22314:11;;;22036:297;;;;;:::o;41715:602::-;41872:4;15435:13;:11;:13::i;:::-;41945:2:::1;41935:7;;:12;;;;:::i;:::-;41902:30;:45;41894:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;42060:2;42050:7;;:12;;;;:::i;:::-;42023:24;:39;42015:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;42199:9;;;;;;;;;;;42195:2;:13;;;;:::i;:::-;42162:30;:46;;;;:::i;:::-;42130:29;:78;;;;42276:9;;;;;;;;;;;42272:2;:13;;;;:::i;:::-;42245:24;:40;;;;:::i;:::-;42219:23;:66;;;;42305:4;42298:11;;41715:602:::0;;;;:::o;19919:92::-;19977:5;20002:1;19995:8;;19919:92;:::o;23752:272::-;23869:4;23891:13;23907:12;:10;:12::i;:::-;23891:28;;23930:64;23939:5;23946:7;23983:10;23955:25;23965:5;23972:7;23955:9;:25::i;:::-;:38;;;;:::i;:::-;23930:8;:64::i;:::-;24012:4;24005:11;;;23752:272;;;;:::o;35244:28::-;;;;;;;;;;;;;:::o;33034:254::-;33121:4;33142:10;33138:89;;;33176:16;33193:12;33176:30;;;;;;:::i;:::-;;;;;;;;;;;;;:39;;;;;;;;;;;;33169:46;;;;33138:89;33244:13;33258:12;33244:27;;;;;;:::i;:::-;;;;;;;;;;;;;:36;;;;;;;;;;;;33237:43;;33034:254;;;;;:::o;29630:35::-;;;;:::o;30937:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42325:182::-;42427:4;15435:13;:11;:13::i;:::-;42463:12:::1;42449:11;:26;;;;42495:4;42488:11;;42325:182:::0;;;:::o;19103:177::-;19222:7;19254:9;:18;19264:7;19254:18;;;;;;;;;;;;;;;;19247:25;;19103:177;;;:::o;16197:103::-;15435:13;:11;:13::i;:::-;16262:30:::1;16289:1;16262:18;:30::i;:::-;16197:103::o:0;34569:524::-;15435:13;:11;:13::i;:::-;34662:6:::1;34658:374;;;34689:10;34685:133;;;34737:5;34720:14;:22;;;;34685:133;;;34797:5;34783:11;:19;;;;34685:133;34658:374;;;34854:10;34850:171;;;34917:9;;;;;;;;;;;34913:2;:13;;;;:::i;:::-;34905:5;:21;;;;:::i;:::-;34885:17;:41;;;;34850:171;;;34996:9;;;;;;;;;;;34992:2;:13;;;;:::i;:::-;34984:5;:21;;;;:::i;:::-;34967:14;:38;;;;34850:171;34658:374;35047:38;35059:6;35067:10;35079:5;35047:38;;;;;;;;:::i;:::-;;;;;;;;34569:524:::0;;;:::o;29850:75::-;;;;;;;;;;;;;:::o;30047:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;31161:38::-;;;;:::o;42515:198::-;42625:4;15435:13;:11;:13::i;:::-;42665:16:::1;42647:15;:34;;;;42701:4;42694:11;;42515:198:::0;;;:::o;29726:53::-;;;;:::o;15549:87::-;15595:7;15622:6;;;;;;;;;;;15615:13;;15549:87;:::o;18762:106::-;18820:13;18853:7;18846:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18762:106;:::o;30994:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30252:213::-;15435:13;:11;:13::i;:::-;30322:1:::1;30304:15;:19;;;;30352:1;30334:15;:19;;;;30394:9;;;;;;;;;;;30390:2;:13;;;;:::i;:::-;30378:9;:25;;;;:::i;:::-;30364:11;:39;;;;30448:9;;;;;;;;;;;30444:2;:13;;;;:::i;:::-;30432:9;:25;;;;:::i;:::-;30414:15;:43;;;;30252:213::o:0;22836:507::-;22958:4;22980:13;22996:12;:10;:12::i;:::-;22980:28;;23019:24;23046:25;23056:5;23063:7;23046:9;:25::i;:::-;23019:52;;23124:15;23104:16;:35;;23082:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;23240:60;23249:5;23256:7;23284:15;23265:16;:34;23240:8;:60::i;:::-;23331:4;23324:11;;;;22836:507;;;;:::o;20656:236::-;20773:4;20795:13;20811:12;:10;:12::i;:::-;20795:28;;20834;20844:5;20851:2;20855:6;20834:9;:28::i;:::-;20880:4;20873:11;;;20656:236;;;;:::o;29786:57::-;;;;:::o;30180:63::-;;;;:::o;41316:391::-;41464:4;15435:13;:11;:13::i;:::-;41533:2:::1;41512:16;41495;:33;;;;:::i;:::-;41494:41;;41486:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;41614:16;41596:15;:34;;;;41659:16;41641:15;:34;;;;41695:4;41688:11;;41316:391:::0;;;;:::o;33296:262::-;33383:4;33404:10;33400:93;;;33438:16;33455:12;33438:30;;;;;;:::i;:::-;;;;;;;;;;;;;:43;;;33431:50;;;;33400:93;33510:13;33524:12;33510:27;;;;;;:::i;:::-;;;;;;;;;;;;;:40;;;33503:47;;33296:262;;;;;:::o;40958:350::-;41061:4;15435:13;:11;:13::i;:::-;41104:4:::1;;;;;;;;;;;41091:17;;:9;:17;;::::0;41083:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41193:1;41172:23;;:9;:23;;::::0;41164:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41269:9;41251:15;;:27;;;;;;;;;;;;;;;;;;41296:4;41289:11;;40958:350:::0;;;:::o;30003:37::-;;;;:::o;30104:69::-;;;;:::o;20249:201::-;20383:7;20415:11;:18;20427:5;20415:18;;;;;;;;;;;;;;;:27;20434:7;20415:27;;;;;;;;;;;;;;;;20408:34;;20249:201;;;;:::o;31206:54::-;;;;:::o;39369:189::-;15435:13;:11;:13::i;:::-;39486:7:::1;39455:18;:28;39474:8;39455:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;39509:41;39532:8;39542:7;39509:41;;;;;;;:::i;:::-;;;;;;;;39369:189:::0;;:::o;33566:262::-;33657:4;33678:10;33674:91;;;33712:16;33729:12;33712:30;;;;;;:::i;:::-;;;;;;;;;;;;;:41;;;33705:48;;;;33674:91;33782:13;33796:12;33782:27;;;;;;:::i;:::-;;;;;;;;;;;;;:38;;;33775:45;;33566:262;;;;;:::o;16455:238::-;15435:13;:11;:13::i;:::-;16578:1:::1;16558:22;;:8;:22;;::::0;16536:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16657:28;16676:8;16657:18;:28::i;:::-;16455:238:::0;:::o;29534:35::-;;;;:::o;31102:50::-;;;;:::o;14342:98::-;14395:7;14422:10;14415:17;;14342:98;:::o;26059:380::-;26212:1;26195:19;;:5;:19;;;26187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26293:1;26274:21;;:7;:21;;;26266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26377:6;26347:11;:18;26359:5;26347:18;;;;;;;;;;;;;;;:27;26366:7;26347:27;;;;;;;;;;;;;;;:36;;;;26415:7;26399:32;;26408:5;26399:32;;;26424:6;26399:32;;;;;;:::i;:::-;;;;;;;;26059:380;;;:::o;37217:2144::-;37331:1;37315:18;;:4;:18;;;37307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37408:1;37394:16;;:2;:16;;;37386:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37488:6;37469:15;37479:4;37469:9;:15::i;:::-;:25;;37461:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37563:13;;;;;;;;;;;37555:21;;:4;:21;;;:44;;;;37586:13;;;;;;;;;;;37580:19;;:2;:19;;;37555:44;37554:67;;;;;37605:16;;;;;;;;;;;37604:17;37554:67;37550:1804;;;37650:13;;;;;;;;;;;37642:21;;:4;:21;;;37638:681;;37684:32;37746:18;;37719:24;37737:4;37719:9;:24::i;:::-;:45;;;;:::i;:::-;37684:80;;37815:29;;37787:24;:57;37783:152;;37869:46;37885:29;;37869:15;:46::i;:::-;37783:152;37981:23;;37958:18;;37957:47;37953:351;;38029:42;38047:23;;38029:17;:42::i;:::-;38116:23;;38094:18;;:45;;;;;;;:::i;:::-;;;;;;;;38162:9;38182:15;;;;;;;;;;;38174:29;;:52;38204:21;38174:52;;;;;;;;;;;;;;;;;;;;;;;38162:64;;38257:4;38249:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;38006:298;37953:351;37665:654;37638:681;38335:22;38376:18;:24;38395:4;38376:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;38404:18;:22;38423:2;38404:22;;;;;;;;;;;;;;;;;;;;;;;;;38376:50;38372:839;;;38464:6;38447:23;;38372:839;;;38543:11;;38533:6;:21;;38525:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;38646:13;;;;;;;;;;;38638:21;;:4;:21;;;38635:178;;38719:15;;38701:13;38711:2;38701:9;:13::i;:::-;38692:6;:22;;;;:::i;:::-;38691:43;;38683:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;38635:178;38833:22;38888:3;38869:15;;38860:6;:24;;;;:::i;:::-;38859:32;;;;:::i;:::-;38833:59;;38911:22;38966:3;38947:15;;38938:6;:24;;;;:::i;:::-;38937:32;;;;:::i;:::-;38911:59;;39033:14;39016;:31;;;;:::i;:::-;39006:6;:42;;;;:::i;:::-;38989:59;;39089:14;39067:18;;:36;;;;;;;:::i;:::-;;;;;;;;39124:71;39140:4;39154;39179:14;39162;:31;;;;:::i;:::-;39124:15;:71::i;:::-;38506:705;;38372:839;39225:41;39241:4;39247:2;39251:14;39225:15;:41::i;:::-;37623:1655;37550:1804;;;39309:33;39325:4;39331:2;39335:6;39309:15;:33::i;:::-;37550:1804;37217:2144;;;:::o;15714:132::-;15789:12;:10;:12::i;:::-;15778:23;;:7;:5;:7::i;:::-;:23;;;15770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15714:132::o;26730:502::-;26865:24;26892:25;26902:5;26909:7;26892:9;:25::i;:::-;26865:52;;26952:17;26932:16;:37;26928:297;;27032:6;27012:16;:26;;26986:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27147:51;27156:5;27163:7;27191:6;27172:16;:25;27147:8;:51::i;:::-;26928:297;26854:378;26730:502;;;:::o;16853:191::-;16927:16;16946:6;;;;;;;;;;;16927:25;;16972:8;16963:6;;:17;;;;;;;;;;;;;;;;;;17027:8;16996:40;;17017:8;16996:40;;;;;;;;;;;;16916:128;16853:191;:::o;39566:474::-;35503:4;35484:16;;:23;;;;;;;;;;;;;;;;;;39652:12:::1;39691:1;39668:20;:24;;;;:::i;:::-;39652:41;;39704:17;39748:4;39725:20;:27;;;;:::i;:::-;39704:49;;39766:22;39791:21;39766:46;;39825:23;39843:4;39825:17;:23::i;:::-;39861:18;39907:14;39883:21;:38;;;;:::i;:::-;39861:61;;39935:36;39949:9;39960:10;39935:13;:36::i;:::-;39989:43;40004:4;40010:10;40022:9;39989:43;;;;;;;;:::i;:::-;;;;;;;;39641:399;;;;35549:5:::0;35530:16;;:24;;;;;;;;;;;;;;;;;;39566:474;:::o;40048:488::-;35503:4;35484:16;;:23;;;;;;;;;;;;;;;;;;40127:21:::1;40165:1;40151:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40127:40;;40196:4;40178;40183:1;40178:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;40222:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40212:4;40217:1;40212:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;40257:62;40274:4;40289:15;40307:11;40257:8;:62::i;:::-;40332:15;:66;;;40413:11;40439:1;40455:4;40482;40502:15;40332:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40116:420;35549:5:::0;35530:16;;:24;;;;;;;;;;;;;;;;;;40048:488;:::o;27240:776::-;27387:1;27371:18;;:4;:18;;;27363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27464:1;27450:16;;:2;:16;;;27442:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27519:19;27541:9;:15;27551:4;27541:15;;;;;;;;;;;;;;;;27519:37;;27604:6;27589:11;:21;;27567:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;27744:6;27730:11;:20;27712:9;:15;27722:4;27712:15;;;;;;;;;;;;;;;:38;;;;27947:6;27930:9;:13;27940:2;27930:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27997:2;27982:26;;27991:4;27982:26;;;28001:6;27982:26;;;;;;:::i;:::-;;;;;;;;27352:664;27240:776;;;:::o;40544:406::-;35503:4;35484:16;;:23;;;;;;;;;;;;;;;;;;40661:62:::1;40678:4;40693:15;40711:11;40661:8;:62::i;:::-;40736:15;:31;;;40775:9;40808:4;40828:11;40854:1;40870::::0;40886:15:::1;;;;;;;;;;;40916;40736:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35549:5:::0;35530:16;;:24;;;;;;;;;;;;;;;;;;40544:406;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:77::-;630:7;659:5;648:16;;593:77;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2370:75::-;2403:6;2436:2;2430:9;2420:19;;2370:75;:::o;2451:117::-;2560:1;2557;2550:12;2574:117;2683:1;2680;2673:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:117::-;4259:1;4256;4249:12;4273:117;4382:1;4379;4372:12;4396:180;4444:77;4441:1;4434:88;4541:4;4538:1;4531:15;4565:4;4562:1;4555:15;4582:281;4665:27;4687:4;4665:27;:::i;:::-;4657:6;4653:40;4795:6;4783:10;4780:22;4759:18;4747:10;4744:34;4741:62;4738:88;;;4806:18;;:::i;:::-;4738:88;4846:10;4842:2;4835:22;4625:238;4582:281;;:::o;4869:129::-;4903:6;4930:20;;:::i;:::-;4920:30;;4959:33;4987:4;4979:6;4959:33;:::i;:::-;4869:129;;;:::o;5004:308::-;5066:4;5156:18;5148:6;5145:30;5142:56;;;5178:18;;:::i;:::-;5142:56;5216:29;5238:6;5216:29;:::i;:::-;5208:37;;5300:4;5294;5290:15;5282:23;;5004:308;;;:::o;5318:146::-;5415:6;5410:3;5405;5392:30;5456:1;5447:6;5442:3;5438:16;5431:27;5318:146;;;:::o;5470:425::-;5548:5;5573:66;5589:49;5631:6;5589:49;:::i;:::-;5573:66;:::i;:::-;5564:75;;5662:6;5655:5;5648:21;5700:4;5693:5;5689:16;5738:3;5729:6;5724:3;5720:16;5717:25;5714:112;;;5745:79;;:::i;:::-;5714:112;5835:54;5882:6;5877:3;5872;5835:54;:::i;:::-;5554:341;5470:425;;;;;:::o;5915:340::-;5971:5;6020:3;6013:4;6005:6;6001:17;5997:27;5987:122;;6028:79;;:::i;:::-;5987:122;6145:6;6132:20;6170:79;6245:3;6237:6;6230:4;6222:6;6218:17;6170:79;:::i;:::-;6161:88;;5977:278;5915:340;;;;:::o;6261:509::-;6330:6;6379:2;6367:9;6358:7;6354:23;6350:32;6347:119;;;6385:79;;:::i;:::-;6347:119;6533:1;6522:9;6518:17;6505:31;6563:18;6555:6;6552:30;6549:117;;;6585:79;;:::i;:::-;6549:117;6690:63;6745:7;6736:6;6725:9;6721:22;6690:63;:::i;:::-;6680:73;;6476:287;6261:509;;;;:::o;6776:60::-;6804:3;6825:5;6818:12;;6776:60;;;:::o;6842:142::-;6892:9;6925:53;6943:34;6952:24;6970:5;6952:24;:::i;:::-;6943:34;:::i;:::-;6925:53;:::i;:::-;6912:66;;6842:142;;;:::o;6990:126::-;7040:9;7073:37;7104:5;7073:37;:::i;:::-;7060:50;;6990:126;;;:::o;7122:152::-;7198:9;7231:37;7262:5;7231:37;:::i;:::-;7218:50;;7122:152;;;:::o;7280:183::-;7393:63;7450:5;7393:63;:::i;:::-;7388:3;7381:76;7280:183;;:::o;7469:274::-;7588:4;7626:2;7615:9;7611:18;7603:26;;7639:97;7733:1;7722:9;7718:17;7709:6;7639:97;:::i;:::-;7469:274;;;;:::o;7749:116::-;7819:21;7834:5;7819:21;:::i;:::-;7812:5;7809:32;7799:60;;7855:1;7852;7845:12;7799:60;7749:116;:::o;7871:133::-;7914:5;7952:6;7939:20;7930:29;;7968:30;7992:5;7968:30;:::i;:::-;7871:133;;;;:::o;8010:1079::-;8109:6;8117;8125;8133;8141;8190:3;8178:9;8169:7;8165:23;8161:33;8158:120;;;8197:79;;:::i;:::-;8158:120;8345:1;8334:9;8330:17;8317:31;8375:18;8367:6;8364:30;8361:117;;;8397:79;;:::i;:::-;8361:117;8502:63;8557:7;8548:6;8537:9;8533:22;8502:63;:::i;:::-;8492:73;;8288:287;8614:2;8640:50;8682:7;8673:6;8662:9;8658:22;8640:50;:::i;:::-;8630:60;;8585:115;8739:2;8765:50;8807:7;8798:6;8787:9;8783:22;8765:50;:::i;:::-;8755:60;;8710:115;8864:2;8890:53;8935:7;8926:6;8915:9;8911:22;8890:53;:::i;:::-;8880:63;;8835:118;8992:3;9019:53;9064:7;9055:6;9044:9;9040:22;9019:53;:::i;:::-;9009:63;;8963:119;8010:1079;;;;;;;;:::o;9095:329::-;9154:6;9203:2;9191:9;9182:7;9178:23;9174:32;9171:119;;;9209:79;;:::i;:::-;9171:119;9329:1;9354:53;9399:7;9390:6;9379:9;9375:22;9354:53;:::i;:::-;9344:63;;9300:117;9095:329;;;;:::o;9430:619::-;9507:6;9515;9523;9572:2;9560:9;9551:7;9547:23;9543:32;9540:119;;;9578:79;;:::i;:::-;9540:119;9698:1;9723:53;9768:7;9759:6;9748:9;9744:22;9723:53;:::i;:::-;9713:63;;9669:117;9825:2;9851:53;9896:7;9887:6;9876:9;9872:22;9851:53;:::i;:::-;9841:63;;9796:118;9953:2;9979:53;10024:7;10015:6;10004:9;10000:22;9979:53;:::i;:::-;9969:63;;9924:118;9430:619;;;;;:::o;10055:474::-;10123:6;10131;10180:2;10168:9;10159:7;10155:23;10151:32;10148:119;;;10186:79;;:::i;:::-;10148:119;10306:1;10331:53;10376:7;10367:6;10356:9;10352:22;10331:53;:::i;:::-;10321:63;;10277:117;10433:2;10459:53;10504:7;10495:6;10484:9;10480:22;10459:53;:::i;:::-;10449:63;;10404:118;10055:474;;;;;:::o;10535:86::-;10570:7;10610:4;10603:5;10599:16;10588:27;;10535:86;;;:::o;10627:112::-;10710:22;10726:5;10710:22;:::i;:::-;10705:3;10698:35;10627:112;;:::o;10745:214::-;10834:4;10872:2;10861:9;10857:18;10849:26;;10885:67;10949:1;10938:9;10934:17;10925:6;10885:67;:::i;:::-;10745:214;;;;:::o;10965:648::-;11040:6;11048;11097:2;11085:9;11076:7;11072:23;11068:32;11065:119;;;11103:79;;:::i;:::-;11065:119;11251:1;11240:9;11236:17;11223:31;11281:18;11273:6;11270:30;11267:117;;;11303:79;;:::i;:::-;11267:117;11408:63;11463:7;11454:6;11443:9;11439:22;11408:63;:::i;:::-;11398:73;;11194:287;11520:2;11546:50;11588:7;11579:6;11568:9;11564:22;11546:50;:::i;:::-;11536:60;;11491:115;10965:648;;;;;:::o;11619:632::-;11810:4;11848:3;11837:9;11833:19;11825:27;;11898:9;11892:4;11888:20;11884:1;11873:9;11869:17;11862:47;11926:78;11999:4;11990:6;11926:78;:::i;:::-;11918:86;;12014:66;12076:2;12065:9;12061:18;12052:6;12014:66;:::i;:::-;12090:72;12158:2;12147:9;12143:18;12134:6;12090:72;:::i;:::-;12172;12240:2;12229:9;12225:18;12216:6;12172:72;:::i;:::-;11619:632;;;;;;;:::o;12257:329::-;12316:6;12365:2;12353:9;12344:7;12340:23;12336:32;12333:119;;;12371:79;;:::i;:::-;12333:119;12491:1;12516:53;12561:7;12552:6;12541:9;12537:22;12516:53;:::i;:::-;12506:63;;12462:117;12257:329;;;;:::o;12592:607::-;12663:6;12671;12679;12728:2;12716:9;12707:7;12703:23;12699:32;12696:119;;;12734:79;;:::i;:::-;12696:119;12854:1;12879:50;12921:7;12912:6;12901:9;12897:22;12879:50;:::i;:::-;12869:60;;12825:114;12978:2;13004:50;13046:7;13037:6;13026:9;13022:22;13004:50;:::i;:::-;12994:60;;12949:115;13103:2;13129:53;13174:7;13165:6;13154:9;13150:22;13129:53;:::i;:::-;13119:63;;13074:118;12592:607;;;;;:::o;13205:474::-;13273:6;13281;13330:2;13318:9;13309:7;13305:23;13301:32;13298:119;;;13336:79;;:::i;:::-;13298:119;13456:1;13481:53;13526:7;13517:6;13506:9;13502:22;13481:53;:::i;:::-;13471:63;;13427:117;13583:2;13609:53;13654:7;13645:6;13634:9;13630:22;13609:53;:::i;:::-;13599:63;;13554:118;13205:474;;;;;:::o;13685:468::-;13750:6;13758;13807:2;13795:9;13786:7;13782:23;13778:32;13775:119;;;13813:79;;:::i;:::-;13775:119;13933:1;13958:53;14003:7;13994:6;13983:9;13979:22;13958:53;:::i;:::-;13948:63;;13904:117;14060:2;14086:50;14128:7;14119:6;14108:9;14104:22;14086:50;:::i;:::-;14076:60;;14031:115;13685:468;;;;;:::o;14159:180::-;14207:77;14204:1;14197:88;14304:4;14301:1;14294:15;14328:4;14325:1;14318:15;14345:320;14389:6;14426:1;14420:4;14416:12;14406:22;;14473:1;14467:4;14463:12;14494:18;14484:81;;14550:4;14542:6;14538:17;14528:27;;14484:81;14612:2;14604:6;14601:14;14581:18;14578:38;14575:84;;14631:18;;:::i;:::-;14575:84;14396:269;14345:320;;;:::o;14671:170::-;14811:22;14807:1;14799:6;14795:14;14788:46;14671:170;:::o;14847:366::-;14989:3;15010:67;15074:2;15069:3;15010:67;:::i;:::-;15003:74;;15086:93;15175:3;15086:93;:::i;:::-;15204:2;15199:3;15195:12;15188:19;;14847:366;;;:::o;15219:419::-;15385:4;15423:2;15412:9;15408:18;15400:26;;15472:9;15466:4;15462:20;15458:1;15447:9;15443:17;15436:47;15500:131;15626:4;15500:131;:::i;:::-;15492:139;;15219:419;;;:::o;15644:168::-;15784:20;15780:1;15772:6;15768:14;15761:44;15644:168;:::o;15818:366::-;15960:3;15981:67;16045:2;16040:3;15981:67;:::i;:::-;15974:74;;16057:93;16146:3;16057:93;:::i;:::-;16175:2;16170:3;16166:12;16159:19;;15818:366;;;:::o;16190:419::-;16356:4;16394:2;16383:9;16379:18;16371:26;;16443:9;16437:4;16433:20;16429:1;16418:9;16414:17;16407:47;16471:131;16597:4;16471:131;:::i;:::-;16463:139;;16190:419;;;:::o;16615:180::-;16663:77;16660:1;16653:88;16760:4;16757:1;16750:15;16784:4;16781:1;16774:15;16801:191;16841:3;16860:20;16878:1;16860:20;:::i;:::-;16855:25;;16894:20;16912:1;16894:20;:::i;:::-;16889:25;;16937:1;16934;16930:9;16923:16;;16958:3;16955:1;16952:10;16949:36;;;16965:18;;:::i;:::-;16949:36;16801:191;;;;:::o;16998:148::-;17100:11;17137:3;17122:18;;16998:148;;;;:::o;17152:390::-;17258:3;17286:39;17319:5;17286:39;:::i;:::-;17341:89;17423:6;17418:3;17341:89;:::i;:::-;17334:96;;17439:65;17497:6;17492:3;17485:4;17478:5;17474:16;17439:65;:::i;:::-;17529:6;17524:3;17520:16;17513:23;;17262:280;17152:390;;;;:::o;17548:275::-;17680:3;17702:95;17793:3;17784:6;17702:95;:::i;:::-;17695:102;;17814:3;17807:10;;17548:275;;;;:::o;17829:141::-;17878:4;17901:3;17893:11;;17924:3;17921:1;17914:14;17958:4;17955:1;17945:18;17937:26;;17829:141;;;:::o;17976:93::-;18013:6;18060:2;18055;18048:5;18044:14;18040:23;18030:33;;17976:93;;;:::o;18075:107::-;18119:8;18169:5;18163:4;18159:16;18138:37;;18075:107;;;;:::o;18188:393::-;18257:6;18307:1;18295:10;18291:18;18330:97;18360:66;18349:9;18330:97;:::i;:::-;18448:39;18478:8;18467:9;18448:39;:::i;:::-;18436:51;;18520:4;18516:9;18509:5;18505:21;18496:30;;18569:4;18559:8;18555:19;18548:5;18545:30;18535:40;;18264:317;;18188:393;;;;;:::o;18587:142::-;18637:9;18670:53;18688:34;18697:24;18715:5;18697:24;:::i;:::-;18688:34;:::i;:::-;18670:53;:::i;:::-;18657:66;;18587:142;;;:::o;18735:75::-;18778:3;18799:5;18792:12;;18735:75;;;:::o;18816:269::-;18926:39;18957:7;18926:39;:::i;:::-;18987:91;19036:41;19060:16;19036:41;:::i;:::-;19028:6;19021:4;19015:11;18987:91;:::i;:::-;18981:4;18974:105;18892:193;18816:269;;;:::o;19091:73::-;19136:3;19091:73;:::o;19170:189::-;19247:32;;:::i;:::-;19288:65;19346:6;19338;19332:4;19288:65;:::i;:::-;19223:136;19170:189;;:::o;19365:186::-;19425:120;19442:3;19435:5;19432:14;19425:120;;;19496:39;19533:1;19526:5;19496:39;:::i;:::-;19469:1;19462:5;19458:13;19449:22;;19425:120;;;19365:186;;:::o;19557:543::-;19658:2;19653:3;19650:11;19647:446;;;19692:38;19724:5;19692:38;:::i;:::-;19776:29;19794:10;19776:29;:::i;:::-;19766:8;19762:44;19959:2;19947:10;19944:18;19941:49;;;19980:8;19965:23;;19941:49;20003:80;20059:22;20077:3;20059:22;:::i;:::-;20049:8;20045:37;20032:11;20003:80;:::i;:::-;19662:431;;19647:446;19557:543;;;:::o;20106:117::-;20160:8;20210:5;20204:4;20200:16;20179:37;;20106:117;;;;:::o;20229:169::-;20273:6;20306:51;20354:1;20350:6;20342:5;20339:1;20335:13;20306:51;:::i;:::-;20302:56;20387:4;20381;20377:15;20367:25;;20280:118;20229:169;;;;:::o;20403:295::-;20479:4;20625:29;20650:3;20644:4;20625:29;:::i;:::-;20617:37;;20687:3;20684:1;20680:11;20674:4;20671:21;20663:29;;20403:295;;;;:::o;20703:1395::-;20820:37;20853:3;20820:37;:::i;:::-;20922:18;20914:6;20911:30;20908:56;;;20944:18;;:::i;:::-;20908:56;20988:38;21020:4;21014:11;20988:38;:::i;:::-;21073:67;21133:6;21125;21119:4;21073:67;:::i;:::-;21167:1;21191:4;21178:17;;21223:2;21215:6;21212:14;21240:1;21235:618;;;;21897:1;21914:6;21911:77;;;21963:9;21958:3;21954:19;21948:26;21939:35;;21911:77;22014:67;22074:6;22067:5;22014:67;:::i;:::-;22008:4;22001:81;21870:222;21205:887;;21235:618;21287:4;21283:9;21275:6;21271:22;21321:37;21353:4;21321:37;:::i;:::-;21380:1;21394:208;21408:7;21405:1;21402:14;21394:208;;;21487:9;21482:3;21478:19;21472:26;21464:6;21457:42;21538:1;21530:6;21526:14;21516:24;;21585:2;21574:9;21570:18;21557:31;;21431:4;21428:1;21424:12;21419:17;;21394:208;;;21630:6;21621:7;21618:19;21615:179;;;21688:9;21683:3;21679:19;21673:26;21731:48;21773:4;21765:6;21761:17;21750:9;21731:48;:::i;:::-;21723:6;21716:64;21638:156;21615:179;21840:1;21836;21828:6;21824:14;21820:22;21814:4;21807:36;21242:611;;;21205:887;;20795:1303;;;20703:1395;;:::o;22104:423::-;22245:4;22283:2;22272:9;22268:18;22260:26;;22332:9;22326:4;22322:20;22318:1;22307:9;22303:17;22296:47;22360:78;22433:4;22424:6;22360:78;:::i;:::-;22352:86;;22448:72;22516:2;22505:9;22501:18;22492:6;22448:72;:::i;:::-;22104:423;;;;;:::o;22533:731::-;22746:4;22784:3;22773:9;22769:19;22761:27;;22834:9;22828:4;22824:20;22820:1;22809:9;22805:17;22798:47;22862:78;22935:4;22926:6;22862:78;:::i;:::-;22854:86;;22950:66;23012:2;23001:9;22997:18;22988:6;22950:66;:::i;:::-;23026;23088:2;23077:9;23073:18;23064:6;23026:66;:::i;:::-;23102:72;23170:2;23159:9;23155:18;23146:6;23102:72;:::i;:::-;23184:73;23252:3;23241:9;23237:19;23228:6;23184:73;:::i;:::-;22533:731;;;;;;;;:::o;23270:227::-;23410:34;23406:1;23398:6;23394:14;23387:58;23479:10;23474:2;23466:6;23462:15;23455:35;23270:227;:::o;23503:366::-;23645:3;23666:67;23730:2;23725:3;23666:67;:::i;:::-;23659:74;;23742:93;23831:3;23742:93;:::i;:::-;23860:2;23855:3;23851:12;23844:19;;23503:366;;;:::o;23875:419::-;24041:4;24079:2;24068:9;24064:18;24056:26;;24128:9;24122:4;24118:20;24114:1;24103:9;24099:17;24092:47;24156:131;24282:4;24156:131;:::i;:::-;24148:139;;23875:419;;;:::o;24300:180::-;24348:77;24345:1;24338:88;24445:4;24442:1;24435:15;24469:4;24466:1;24459:15;24486:185;24526:1;24543:20;24561:1;24543:20;:::i;:::-;24538:25;;24577:20;24595:1;24577:20;:::i;:::-;24572:25;;24616:1;24606:35;;24621:18;;:::i;:::-;24606:35;24663:1;24660;24656:9;24651:14;;24486:185;;;;:::o;24677:239::-;24817:34;24813:1;24805:6;24801:14;24794:58;24886:22;24881:2;24873:6;24869:15;24862:47;24677:239;:::o;24922:366::-;25064:3;25085:67;25149:2;25144:3;25085:67;:::i;:::-;25078:74;;25161:93;25250:3;25161:93;:::i;:::-;25279:2;25274:3;25270:12;25263:19;;24922:366;;;:::o;25294:419::-;25460:4;25498:2;25487:9;25483:18;25475:26;;25547:9;25541:4;25537:20;25533:1;25522:9;25518:17;25511:47;25575:131;25701:4;25575:131;:::i;:::-;25567:139;;25294:419;;;:::o;25719:102::-;25761:8;25808:5;25805:1;25801:13;25780:34;;25719:102;;;:::o;25827:848::-;25888:5;25895:4;25919:6;25910:15;;25943:5;25934:14;;25957:712;25978:1;25968:8;25965:15;25957:712;;;26073:4;26068:3;26064:14;26058:4;26055:24;26052:50;;;26082:18;;:::i;:::-;26052:50;26132:1;26122:8;26118:16;26115:451;;;26547:4;26540:5;26536:16;26527:25;;26115:451;26597:4;26591;26587:15;26579:23;;26627:32;26650:8;26627:32;:::i;:::-;26615:44;;25957:712;;;25827:848;;;;;;;:::o;26681:1073::-;26735:5;26926:8;26916:40;;26947:1;26938:10;;26949:5;;26916:40;26975:4;26965:36;;26992:1;26983:10;;26994:5;;26965:36;27061:4;27109:1;27104:27;;;;27145:1;27140:191;;;;27054:277;;27104:27;27122:1;27113:10;;27124:5;;;27140:191;27185:3;27175:8;27172:17;27169:43;;;27192:18;;:::i;:::-;27169:43;27241:8;27238:1;27234:16;27225:25;;27276:3;27269:5;27266:14;27263:40;;;27283:18;;:::i;:::-;27263:40;27316:5;;;27054:277;;27440:2;27430:8;27427:16;27421:3;27415:4;27412:13;27408:36;27390:2;27380:8;27377:16;27372:2;27366:4;27363:12;27359:35;27343:111;27340:246;;;27496:8;27490:4;27486:19;27477:28;;27531:3;27524:5;27521:14;27518:40;;;27538:18;;:::i;:::-;27518:40;27571:5;;27340:246;27611:42;27649:3;27639:8;27633:4;27630:1;27611:42;:::i;:::-;27596:57;;;;27685:4;27680:3;27676:14;27669:5;27666:25;27663:51;;;27694:18;;:::i;:::-;27663:51;27743:4;27736:5;27732:16;27723:25;;26681:1073;;;;;;:::o;27760:281::-;27818:5;27842:23;27860:4;27842:23;:::i;:::-;27834:31;;27886:25;27902:8;27886:25;:::i;:::-;27874:37;;27930:104;27967:66;27957:8;27951:4;27930:104;:::i;:::-;27921:113;;27760:281;;;;:::o;28047:348::-;28087:7;28110:20;28128:1;28110:20;:::i;:::-;28105:25;;28144:20;28162:1;28144:20;:::i;:::-;28139:25;;28332:1;28264:66;28260:74;28257:1;28254:81;28249:1;28242:9;28235:17;28231:105;28228:131;;;28339:18;;:::i;:::-;28228:131;28387:1;28384;28380:9;28369:20;;28047:348;;;;:::o;28401:418::-;28538:4;28576:2;28565:9;28561:18;28553:26;;28589:65;28651:1;28640:9;28636:17;28627:6;28589:65;:::i;:::-;28664:66;28726:2;28715:9;28711:18;28702:6;28664:66;:::i;:::-;28740:72;28808:2;28797:9;28793:18;28784:6;28740:72;:::i;:::-;28401:418;;;;;;:::o;28825:224::-;28965:34;28961:1;28953:6;28949:14;28942:58;29034:7;29029:2;29021:6;29017:15;29010:32;28825:224;:::o;29055:366::-;29197:3;29218:67;29282:2;29277:3;29218:67;:::i;:::-;29211:74;;29294:93;29383:3;29294:93;:::i;:::-;29412:2;29407:3;29403:12;29396:19;;29055:366;;;:::o;29427:419::-;29593:4;29631:2;29620:9;29616:18;29608:26;;29680:9;29674:4;29670:20;29666:1;29655:9;29651:17;29644:47;29708:131;29834:4;29708:131;:::i;:::-;29700:139;;29427:419;;;:::o;29852:232::-;29992:34;29988:1;29980:6;29976:14;29969:58;30061:15;30056:2;30048:6;30044:15;30037:40;29852:232;:::o;30090:366::-;30232:3;30253:67;30317:2;30312:3;30253:67;:::i;:::-;30246:74;;30329:93;30418:3;30329:93;:::i;:::-;30447:2;30442:3;30438:12;30431:19;;30090:366;;;:::o;30462:419::-;30628:4;30666:2;30655:9;30651:18;30643:26;;30715:9;30709:4;30705:20;30701:1;30690:9;30686:17;30679:47;30743:131;30869:4;30743:131;:::i;:::-;30735:139;;30462:419;;;:::o;30887:320::-;31002:4;31040:2;31029:9;31025:18;31017:26;;31053:71;31121:1;31110:9;31106:17;31097:6;31053:71;:::i;:::-;31134:66;31196:2;31185:9;31181:18;31172:6;31134:66;:::i;:::-;30887:320;;;;;:::o;31213:225::-;31353:34;31349:1;31341:6;31337:14;31330:58;31422:8;31417:2;31409:6;31405:15;31398:33;31213:225;:::o;31444:366::-;31586:3;31607:67;31671:2;31666:3;31607:67;:::i;:::-;31600:74;;31683:93;31772:3;31683:93;:::i;:::-;31801:2;31796:3;31792:12;31785:19;;31444:366;;;:::o;31816:419::-;31982:4;32020:2;32009:9;32005:18;31997:26;;32069:9;32063:4;32059:20;32055:1;32044:9;32040:17;32033:47;32097:131;32223:4;32097:131;:::i;:::-;32089:139;;31816:419;;;:::o;32241:223::-;32381:34;32377:1;32369:6;32365:14;32358:58;32450:6;32445:2;32437:6;32433:15;32426:31;32241:223;:::o;32470:366::-;32612:3;32633:67;32697:2;32692:3;32633:67;:::i;:::-;32626:74;;32709:93;32798:3;32709:93;:::i;:::-;32827:2;32822:3;32818:12;32811:19;;32470:366;;;:::o;32842:419::-;33008:4;33046:2;33035:9;33031:18;33023:26;;33095:9;33089:4;33085:20;33081:1;33070:9;33066:17;33059:47;33123:131;33249:4;33123:131;:::i;:::-;33115:139;;32842:419;;;:::o;33267:221::-;33407:34;33403:1;33395:6;33391:14;33384:58;33476:4;33471:2;33463:6;33459:15;33452:29;33267:221;:::o;33494:366::-;33636:3;33657:67;33721:2;33716:3;33657:67;:::i;:::-;33650:74;;33733:93;33822:3;33733:93;:::i;:::-;33851:2;33846:3;33842:12;33835:19;;33494:366;;;:::o;33866:419::-;34032:4;34070:2;34059:9;34055:18;34047:26;;34119:9;34113:4;34109:20;34105:1;34094:9;34090:17;34083:47;34147:131;34273:4;34147:131;:::i;:::-;34139:139;;33866:419;;;:::o;34291:224::-;34431:34;34427:1;34419:6;34415:14;34408:58;34500:7;34495:2;34487:6;34483:15;34476:32;34291:224;:::o;34521:366::-;34663:3;34684:67;34748:2;34743:3;34684:67;:::i;:::-;34677:74;;34760:93;34849:3;34760:93;:::i;:::-;34878:2;34873:3;34869:12;34862:19;;34521:366;;;:::o;34893:419::-;35059:4;35097:2;35086:9;35082:18;35074:26;;35146:9;35140:4;35136:20;35132:1;35121:9;35117:17;35110:47;35174:131;35300:4;35174:131;:::i;:::-;35166:139;;34893:419;;;:::o;35318:222::-;35458:34;35454:1;35446:6;35442:14;35435:58;35527:5;35522:2;35514:6;35510:15;35503:30;35318:222;:::o;35546:366::-;35688:3;35709:67;35773:2;35768:3;35709:67;:::i;:::-;35702:74;;35785:93;35874:3;35785:93;:::i;:::-;35903:2;35898:3;35894:12;35887:19;;35546:366;;;:::o;35918:419::-;36084:4;36122:2;36111:9;36107:18;36099:26;;36171:9;36165:4;36161:20;36157:1;36146:9;36142:17;36135:47;36199:131;36325:4;36199:131;:::i;:::-;36191:139;;35918:419;;;:::o;36343:225::-;36483:34;36479:1;36471:6;36467:14;36460:58;36552:8;36547:2;36539:6;36535:15;36528:33;36343:225;:::o;36574:366::-;36716:3;36737:67;36801:2;36796:3;36737:67;:::i;:::-;36730:74;;36813:93;36902:3;36813:93;:::i;:::-;36931:2;36926:3;36922:12;36915:19;;36574:366;;;:::o;36946:419::-;37112:4;37150:2;37139:9;37135:18;37127:26;;37199:9;37193:4;37189:20;37185:1;37174:9;37170:17;37163:47;37227:131;37353:4;37227:131;:::i;:::-;37219:139;;36946:419;;;:::o;37371:194::-;37411:4;37431:20;37449:1;37431:20;:::i;:::-;37426:25;;37465:20;37483:1;37465:20;:::i;:::-;37460:25;;37509:1;37506;37502:9;37494:17;;37533:1;37527:4;37524:11;37521:37;;;37538:18;;:::i;:::-;37521:37;37371:194;;;;:::o;37571:168::-;37711:20;37707:1;37699:6;37695:14;37688:44;37571:168;:::o;37745:366::-;37887:3;37908:67;37972:2;37967:3;37908:67;:::i;:::-;37901:74;;37984:93;38073:3;37984:93;:::i;:::-;38102:2;38097:3;38093:12;38086:19;;37745:366;;;:::o;38117:419::-;38283:4;38321:2;38310:9;38306:18;38298:26;;38370:9;38364:4;38360:20;38356:1;38345:9;38341:17;38334:47;38398:131;38524:4;38398:131;:::i;:::-;38390:139;;38117:419;;;:::o;38542:244::-;38682:34;38678:1;38670:6;38666:14;38659:58;38751:27;38746:2;38738:6;38734:15;38727:52;38542:244;:::o;38792:366::-;38934:3;38955:67;39019:2;39014:3;38955:67;:::i;:::-;38948:74;;39031:93;39120:3;39031:93;:::i;:::-;39149:2;39144:3;39140:12;39133:19;;38792:366;;;:::o;39164:419::-;39330:4;39368:2;39357:9;39353:18;39345:26;;39417:9;39411:4;39407:20;39403:1;39392:9;39388:17;39381:47;39445:131;39571:4;39445:131;:::i;:::-;39437:139;;39164:419;;;:::o;39589:241::-;39729:34;39725:1;39717:6;39713:14;39706:58;39798:24;39793:2;39785:6;39781:15;39774:49;39589:241;:::o;39836:366::-;39978:3;39999:67;40063:2;40058:3;39999:67;:::i;:::-;39992:74;;40075:93;40164:3;40075:93;:::i;:::-;40193:2;40188:3;40184:12;40177:19;;39836:366;;;:::o;40208:419::-;40374:4;40412:2;40401:9;40397:18;40389:26;;40461:9;40455:4;40451:20;40447:1;40436:9;40432:17;40425:47;40489:131;40615:4;40489:131;:::i;:::-;40481:139;;40208:419;;;:::o;40633:182::-;40773:34;40769:1;40761:6;40757:14;40750:58;40633:182;:::o;40821:366::-;40963:3;40984:67;41048:2;41043:3;40984:67;:::i;:::-;40977:74;;41060:93;41149:3;41060:93;:::i;:::-;41178:2;41173:3;41169:12;41162:19;;40821:366;;;:::o;41193:419::-;41359:4;41397:2;41386:9;41382:18;41374:26;;41446:9;41440:4;41436:20;41432:1;41421:9;41417:17;41410:47;41474:131;41600:4;41474:131;:::i;:::-;41466:139;;41193:419;;;:::o;41618:179::-;41758:31;41754:1;41746:6;41742:14;41735:55;41618:179;:::o;41803:366::-;41945:3;41966:67;42030:2;42025:3;41966:67;:::i;:::-;41959:74;;42042:93;42131:3;42042:93;:::i;:::-;42160:2;42155:3;42151:12;42144:19;;41803:366;;;:::o;42175:419::-;42341:4;42379:2;42368:9;42364:18;42356:26;;42428:9;42422:4;42418:20;42414:1;42403:9;42399:17;42392:47;42456:131;42582:4;42456:131;:::i;:::-;42448:139;;42175:419;;;:::o;42600:442::-;42749:4;42787:2;42776:9;42772:18;42764:26;;42800:71;42868:1;42857:9;42853:17;42844:6;42800:71;:::i;:::-;42881:72;42949:2;42938:9;42934:18;42925:6;42881:72;:::i;:::-;42963;43031:2;43020:9;43016:18;43007:6;42963:72;:::i;:::-;42600:442;;;;;;:::o;43048:180::-;43096:77;43093:1;43086:88;43193:4;43190:1;43183:15;43217:4;43214:1;43207:15;43234:143;43291:5;43322:6;43316:13;43307:22;;43338:33;43365:5;43338:33;:::i;:::-;43234:143;;;;:::o;43383:351::-;43453:6;43502:2;43490:9;43481:7;43477:23;43473:32;43470:119;;;43508:79;;:::i;:::-;43470:119;43628:1;43653:64;43709:7;43700:6;43689:9;43685:22;43653:64;:::i;:::-;43643:74;;43599:128;43383:351;;;;:::o;43740:85::-;43785:7;43814:5;43803:16;;43740:85;;;:::o;43831:158::-;43889:9;43922:61;43940:42;43949:32;43975:5;43949:32;:::i;:::-;43940:42;:::i;:::-;43922:61;:::i;:::-;43909:74;;43831:158;;;:::o;43995:147::-;44090:45;44129:5;44090:45;:::i;:::-;44085:3;44078:58;43995:147;;:::o;44148:114::-;44215:6;44249:5;44243:12;44233:22;;44148:114;;;:::o;44268:184::-;44367:11;44401:6;44396:3;44389:19;44441:4;44436:3;44432:14;44417:29;;44268:184;;;;:::o;44458:132::-;44525:4;44548:3;44540:11;;44578:4;44573:3;44569:14;44561:22;;44458:132;;;:::o;44596:108::-;44673:24;44691:5;44673:24;:::i;:::-;44668:3;44661:37;44596:108;;:::o;44710:179::-;44779:10;44800:46;44842:3;44834:6;44800:46;:::i;:::-;44878:4;44873:3;44869:14;44855:28;;44710:179;;;;:::o;44895:113::-;44965:4;44997;44992:3;44988:14;44980:22;;44895:113;;;:::o;45044:732::-;45163:3;45192:54;45240:5;45192:54;:::i;:::-;45262:86;45341:6;45336:3;45262:86;:::i;:::-;45255:93;;45372:56;45422:5;45372:56;:::i;:::-;45451:7;45482:1;45467:284;45492:6;45489:1;45486:13;45467:284;;;45568:6;45562:13;45595:63;45654:3;45639:13;45595:63;:::i;:::-;45588:70;;45681:60;45734:6;45681:60;:::i;:::-;45671:70;;45527:224;45514:1;45511;45507:9;45502:14;;45467:284;;;45471:14;45767:3;45760:10;;45168:608;;;45044:732;;;;:::o;45782:831::-;46045:4;46083:3;46072:9;46068:19;46060:27;;46097:71;46165:1;46154:9;46150:17;46141:6;46097:71;:::i;:::-;46178:80;46254:2;46243:9;46239:18;46230:6;46178:80;:::i;:::-;46305:9;46299:4;46295:20;46290:2;46279:9;46275:18;46268:48;46333:108;46436:4;46427:6;46333:108;:::i;:::-;46325:116;;46451:72;46519:2;46508:9;46504:18;46495:6;46451:72;:::i;:::-;46533:73;46601:3;46590:9;46586:19;46577:6;46533:73;:::i;:::-;45782:831;;;;;;;;:::o;46619:807::-;46868:4;46906:3;46895:9;46891:19;46883:27;;46920:71;46988:1;46977:9;46973:17;46964:6;46920:71;:::i;:::-;47001:72;47069:2;47058:9;47054:18;47045:6;47001:72;:::i;:::-;47083:80;47159:2;47148:9;47144:18;47135:6;47083:80;:::i;:::-;47173;47249:2;47238:9;47234:18;47225:6;47173:80;:::i;:::-;47263:73;47331:3;47320:9;47316:19;47307:6;47263:73;:::i;:::-;47346;47414:3;47403:9;47399:19;47390:6;47346:73;:::i;:::-;46619:807;;;;;;;;;:::o;47432:143::-;47489:5;47520:6;47514:13;47505:22;;47536:33;47563:5;47536:33;:::i;:::-;47432:143;;;;:::o;47581:663::-;47669:6;47677;47685;47734:2;47722:9;47713:7;47709:23;47705:32;47702:119;;;47740:79;;:::i;:::-;47702:119;47860:1;47885:64;47941:7;47932:6;47921:9;47917:22;47885:64;:::i;:::-;47875:74;;47831:128;47998:2;48024:64;48080:7;48071:6;48060:9;48056:22;48024:64;:::i;:::-;48014:74;;47969:129;48137:2;48163:64;48219:7;48210:6;48199:9;48195:22;48163:64;:::i;:::-;48153:74;;48108:129;47581:663;;;;;:::o

Swarm Source

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