ETH Price: $2,529.69 (-2.79%)

Token

$CLUNA ($CLUNA)
 

Overview

Max Total Supply

6,907,376,873,996 $CLUNA

Holders

76 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
23,828,645.659821397 $CLUNA

Value
$0.00
0x11191bcfe30c6aE7bBEF74c6De97c8D52FF957F9
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Millions of investors in crypto negatively were impacted and abandoned by LUNA, resulting in the birth of a NEW COMMUNITY LUNA, ($CLUNA) Token Project. Three months after the BSC launch, the community continued the development efforts to launch its fraternal twin token $CLUNA on the ETH chain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CLUNA

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-23
*/

// SPDX-License-Identifier: Unlicensed


pragma solidity 0.8.16;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @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 symbol of the token.
     */
    function symbol() external view returns (string memory);

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



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

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

/**
 * @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}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _createTokens(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

/**
 * @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() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}


contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}


contract CLUNA is ERC20, Ownable, LockToken {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public buyBackEnabled = true;

    bool public swapAndLiquifyEnabled = true;
    
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    mapping(address => bool) public _isBlacklisted;

    uint256 public maxSellTransactionAmount = 6907376873 * (10**9);
    uint256 public maxBuyTransactionAmount = 6907376873 * (10**9);
    uint256 public swapTokensAtAmount = 3000000000 * (10**9);
    uint256 public maxWalletToken = 6907376873 * (10**9);
    
    uint256 private buyBackUpperLimit = 1 * 10**17; // equal to 0.1 Eth
    uint256 private _buyBackDivisor = 20;
   
    uint256 public liquidityBuyFee = 1;
    uint256 public buyBackBuyFee = 1;
    uint256 public marketingBuyFee = 2;
    uint256 public communityBuyFee = 2;
    uint256 public operationsBuyFee = 2;
    uint256 public devBuyFee = 2;
    uint256 public totalBuyFees = 10;

    uint256 public liquiditySellFee = 1;
    uint256 public buyBackSellFee = 2;
    uint256 public marketingSellFee = 3;
    uint256 public communitySellFee = 3;
    uint256 public operationsSellFee = 3;
    uint256 public devSellFee = 3;
    uint256 public totalSellFees = 15;
 
    address payable private marketingWallet = payable(0xA30a433d4d168cbc87b5B00C3FEae1B122ea867D);
    address payable private communityWallet = payable(0x98E14AbaB800EE96D749E22DbaB4ba821A4d05cB);
    address payable private operationsWallet = payable(0xCe8B57eB6eEB02E26fc7c0B9E75326BA4f767634);
    address payable private devWallet = payable(0xeC40258A69dfc745cb07C0EccA67CD7A78D7C76E);

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTx;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
    
    event BuyBackEnabledUpdated(bool enabled);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapEthForTokens(uint256 amountIn, address[] path);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);

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

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

    constructor() ERC20("$CLUNA", "$CLUNA") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(communityWallet, true);
        excludeFromFees(operationsWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        
        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[marketingWallet] = true;
        _isExcludedFromMaxTx[communityWallet] = true;
        _isExcludedFromMaxTx[operationsWallet] = true;
        _isExcludedFromMaxTx[devWallet] = true;
        
        /*
            internal function  that is only called here,
            and CANNOT be called ever again
        */
        _createTokens(owner(), 6907376873996 * (10**9));
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) open(from, to) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(automatedMarketMakerPairs[from] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount.");
        }

        if(automatedMarketMakerPairs[to] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }

        if(automatedMarketMakerPairs[to] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            uint256 contractBalanceRecepient = balanceOf(to);
            require(
                contractBalanceRecepient + amount <= maxWalletToken,
                "Exceeds maximum wallet token amount."
            );
        }
        

    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(!inSwapAndLiquify && automatedMarketMakerPairs[to] && swapAndLiquifyEnabled) {
            if(overMinTokenBalance) {
                contractTokenBalance = swapTokensAtAmount;
                swapAndLiquify(contractTokenBalance);
            }
            
            uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > buyBackUpperLimit) {
                
                if (balance > buyBackUpperLimit) {
                    balance = buyBackUpperLimit;
                
                    buyBackTokens(balance.div(_buyBackDivisor));
                }
            }
        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees;

            if(automatedMarketMakerPairs[from]) {
                fees = amount.mul(totalBuyFees).div(100);
            }

            if(automatedMarketMakerPairs[to]) {
                fees = amount.mul(totalSellFees).div(100);
            }
        	amount = amount.sub(fees);
            super._transfer(from, address(this), fees); // get total fee first
            
        }

        super._transfer(from, to, amount);

    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 liquidityTokens = contractTokenBalance.mul(liquiditySellFee).div(totalSellFees);
        uint256 walletTokens = contractTokenBalance.sub(liquidityTokens);
        // split the contract balance into halves
        uint256 half = liquidityTokens.div(2);
        uint256 otherHalf = liquidityTokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half, address(this));

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        swapAndSendToWallets(walletTokens);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendToWallets(uint256 _swapTokens) private {
        uint256 balanceBeforeSwap = address(this).balance;
        swapTokensForEth(_swapTokens, address(this));
        uint256 balanceAfterSwap = address(this).balance.sub(balanceBeforeSwap);
        uint256 marketingShare = balanceAfterSwap.mul(marketingSellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 communityShare = balanceAfterSwap.mul(communitySellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 opsShare = balanceAfterSwap.mul(operationsSellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 devShare = balanceAfterSwap.mul(devSellFee).div(totalSellFees.sub(liquiditySellFee));
        marketingWallet.transfer(marketingShare);
        communityWallet.transfer(communityShare);
        operationsWallet.transfer(opsShare);
        devWallet.transfer(devShare);

    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    
     function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapEthForTokens(amount);
	    }
    }
    
    function swapEthForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapEthForTokens(amount, path);
    }

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

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

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

    function setBuyFees(uint256 _liqFee, uint256 _bbackFee, uint256 _markFee, uint256 _commFee, uint256 _opsFee, uint256 _devFee) public onlyOwner {  
        liquidityBuyFee = _liqFee;
        buyBackBuyFee = _bbackFee;
        marketingBuyFee = _markFee;
        communityBuyFee = _commFee;
        operationsBuyFee = _opsFee;
        devBuyFee = _devFee;
        totalBuyFees = liquidityBuyFee.add(buyBackBuyFee).add(marketingBuyFee).add(communityBuyFee).add(operationsBuyFee).add(devBuyFee); 
        require(totalBuyFees <= 20, "fees too high");
    }

    function setSellFees(uint256 _liqFee, uint256 _bbackFee, uint256 _markFee, uint256 _commFee, uint256 _opsFee, uint256 _devFee) public onlyOwner {  
        liquiditySellFee = _liqFee;
        buyBackSellFee = _bbackFee;
        marketingSellFee = _markFee;
        communitySellFee = _commFee;
        operationsSellFee = _opsFee;
        devSellFee = _devFee;
        totalSellFees = liquiditySellFee.add(buyBackSellFee).add(marketingSellFee).add(communitySellFee).add(operationsSellFee).add(devSellFee);
        require(totalSellFees <= 20, "fees too high"); 
    }

    function updateWallets(address payable _markWallet, address payable _commWallet, address payable _opsWallet, address payable _devWallet) public onlyOwner {  
        marketingWallet = _markWallet;
        communityWallet = _commWallet;
        operationsWallet = _opsWallet;
        devWallet = _devWallet;
    }

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function setMaxWalletToken(uint256 _maxToken) external onlyOwner {
  	    maxWalletToken = _maxToken;
          require(maxWalletToken >= totalSupply().div(200), "value too low");
  	}

    function setMaxSellTx(uint256 _maxSellTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxSellTxAmount;
        require(maxSellTransactionAmount >= totalSupply().div(200), "value too low");
    }
    
    function setMaxBuyTx(uint256 _maxBuyTxAmount) public onlyOwner {
        maxBuyTransactionAmount = _maxBuyTxAmount;
        require(maxBuyTransactionAmount >= totalSupply().div(200), "value too low");
    }

      function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function SetBuyBackUpperLimit(uint256 newLimit) external onlyOwner {
        buyBackUpperLimit = newLimit;
    }

    function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
        swapTokensAtAmount = newLimit;
    }
    
    function buyBackDivisor() public view returns (uint256) {
        return _buyBackDivisor;
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function setBuyBackDivisor(uint256 _newValue) external onlyOwner() {
        require(_newValue > 0, "cannot be set as zero");
        _buyBackDivisor = _newValue;
    }
    
    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { 
        _isExcludedFromMaxTx[_address] = value;
    }

    function setExcludeFromAll(address _address) public onlyOwner {
        _isExcludedFromMaxTx[_address] = true;
        _isExcludedFromFees[_address] = true;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function isExcludedFromMaxTx(address account) public view returns(bool) {
        return _isExcludedFromMaxTx[account];
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function airdropTokens(
        address[] memory wallets,
        uint256[] memory amountsInTokens
    ) external onlyOwner {
        require(wallets.length == amountsInTokens.length);
        require(wallets.length < 600); 
        for (uint256 i = 0; i < wallets.length; i++) {
            super._transfer(msg.sender, wallets[i], amountsInTokens[i]);
        }
    }

    receive() external payable {

  	}
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetBuyBackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communitySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operationsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsSellFee","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setBuyBackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_commFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExcludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTxAmount","type":"uint256"}],"name":"setMaxBuyTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxSellTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_commFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_markWallet","type":"address"},{"internalType":"address payable","name":"_commWallet","type":"address"},{"internalType":"address payable","name":"_opsWallet","type":"address"},{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600560146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff0219169083151502179055506001600760166101000a81548160ff02191690831515021790555061dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550675fdbeeab4ce9da00600a55675fdbeeab4ce9da00600b556729a2241af62c0000600c55675fdbeeab4ce9da00600d5567016345785d8a0000600e556014600f55600160105560016011556002601255600260135560026014556002601555600a6016556001601755600260185560036019556003601a556003601b556003601c55600f601d5573a30a433d4d168cbc87b5b00c3feae1b122ea867d601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507398e14abab800ee96d749e22dbab4ba821a4d05cb601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ce8b57eb6eeb02e26fc7c0b9e75326ba4f767634602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ec40258a69dfc745cb07c0ecca67cd7a78d7c76e602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200028057600080fd5b506040518060400160405280600681526020017f24434c554e4100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f24434c554e4100000000000000000000000000000000000000000000000000008152508160039081620002fe9190620011c9565b508060049081620003109190620011c9565b5050506200033362000327620009d060201b60201c565b620009d860201b60201c565b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200044a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047091906200131a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fe91906200131a565b6040518363ffffffff1660e01b81526004016200051d9291906200135d565b6020604051808303816000875af11580156200053d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056391906200131a565b905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620005ed81600162000a9e60201b60201c565b6200060f6200060162000bd460201b60201c565b600162000bfe60201b60201c565b62000644601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bfe60201b60201c565b62000679601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bfe60201b60201c565b620006ae602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bfe60201b60201c565b620006e3602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bfe60201b60201c565b620006f630600162000bfe60201b60201c565b6001602360006200070c62000bd460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620009c8620009b162000bd460201b60201c565b690176731c4e0c57b5780062000dcd60201b60201c565b505062001681565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2a9062001411565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000c0e620009d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000c3462000bd460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c849062001483565b60405180910390fd5b801515602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d19906200151b565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000dc191906200155a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e3690620015c7565b60405180910390fd5b62000e536000838362000f4560201b60201c565b806002600082825462000e67919062001618565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ebe919062001618565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000f25919062001664565b60405180910390a362000f416000838362000f4a60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fd157607f821691505b60208210810362000fe75762000fe662000f89565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620010517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001012565b6200105d868362001012565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620010aa620010a46200109e8462001075565b6200107f565b62001075565b9050919050565b6000819050919050565b620010c68362001089565b620010de620010d582620010b1565b8484546200101f565b825550505050565b600090565b620010f5620010e6565b62001102818484620010bb565b505050565b5b818110156200112a576200111e600082620010eb565b60018101905062001108565b5050565b601f8211156200117957620011438162000fed565b6200114e8462001002565b810160208510156200115e578190505b620011766200116d8562001002565b83018262001107565b50505b505050565b600082821c905092915050565b60006200119e600019846008026200117e565b1980831691505092915050565b6000620011b983836200118b565b9150826002028217905092915050565b620011d48262000f4f565b67ffffffffffffffff811115620011f057620011ef62000f5a565b5b620011fc825462000fb8565b620012098282856200112e565b600060209050601f8311600181146200124157600084156200122c578287015190505b620012388582620011ab565b865550620012a8565b601f198416620012518662000fed565b60005b828110156200127b5784890151825560018201915060208501945060208101905062001254565b868310156200129b578489015162001297601f8916826200118b565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012e282620012b5565b9050919050565b620012f481620012d5565b81146200130057600080fd5b50565b6000815190506200131481620012e9565b92915050565b600060208284031215620013335762001332620012b0565b5b6000620013438482850162001303565b91505092915050565b6200135781620012d5565b82525050565b60006040820190506200137460008301856200134c565b6200138360208301846200134c565b9392505050565b600082825260208201905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000620013f96038836200138a565b915062001406826200139b565b604082019050919050565b600060208201905081810360008301526200142c81620013ea565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200146b6020836200138a565b9150620014788262001433565b602082019050919050565b600060208201905081810360008301526200149e816200145c565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062001503602a836200138a565b91506200151082620014a5565b604082019050919050565b600060208201905081810360008301526200153681620014f4565b9050919050565b60008115159050919050565b62001554816200153d565b82525050565b600060208201905062001571600083018462001549565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620015af601f836200138a565b9150620015bc8262001577565b602082019050919050565b60006020820190508181036000830152620015e281620015a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620016258262001075565b9150620016328362001075565b92508282019050808211156200164d576200164c620015e9565b5b92915050565b6200165e8162001075565b82525050565b60006020820190506200167b600083018462001653565b92915050565b608051615fc6620016a46000396000818161171f015261206f0152615fc66000f3fe6080604052600436106103c75760003560e01c8063743e540d116101f2578063bdc653ef1161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610e77578063f74c9f4714610ea0578063fb17e6dc14610ec9578063fb201b1d14610ef2576103ce565b8063e2f4560514610dcb578063e6c75f7114610df6578063e7f444b314610e21578063efcc1b2f14610e4c576103ce565b8063c49b9a80116100dc578063c49b9a8014610d0f578063ccb6135814610d38578063d0a3981414610d63578063dd62ed3e14610d8e576103ce565b8063bdc653ef14610c67578063c024666814610c92578063c05e8fa114610cbb578063c2b3e1c214610ce6576103ce565b8063a457c2d711610185578063b45e83f811610154578063b45e83f814610bab578063b62496f514610bd6578063b9e9370014610c13578063ba876bb914610c3e576103ce565b8063a457c2d714610add578063a9059cbb14610b1a578063a946163014610b57578063afc1687514610b80576103ce565b80638ee10823116101c15780638ee1082314610a3557806391d55f4114610a6057806395d89b4114610a895780639a7a23d614610ab4576103ce565b8063743e540d1461098b5780637506cbd8146109b457806385141a77146109df5780638da5cb5b14610a0a576103ce565b8063455a4396116102e25780636053a0e3116102755780636be63855116102445780636be63855146108e3578063706f69371461090e57806370a0823114610937578063715018a614610974576103ce565b80636053a0e314610827578063658c27a91461085257806365b8dbc01461088f57806368078952146108b8576103ce565b80634a74bb02116102b15780634a74bb021461076b5780634fbee193146107965780635aa821a9146107d35780635b89029c146107fe576103ce565b8063455a4396146106c357806347535d7b146106ec57806349928a501461071757806349bd5a5e14610740576103ce565b80631694505e1161035a57806329370cc61161032957806329370cc614610607578063313ce56714610630578063330f829d1461065b5780633950935114610686576103ce565b80631694505e1461053757806318160ddd146105625780631cdd3be31461058d57806323b872dd146105ca576103ce565b8063095ea7b311610396578063095ea7b31461047d578063099d0d30146104ba57806309e89af7146104e55780630b6bb6f51461050e576103ce565b806301143fea146103d357806302259e9e146103fe578063068dde721461042957806306fdde0314610452576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f09565b6040516103f591906146b2565b60405180910390f35b34801561040a57600080fd5b50610413610f0f565b60405161042091906146b2565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b919061470d565b610f15565b005b34801561045e57600080fd5b50610467610fde565b60405161047491906147ca565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f919061484a565b611070565b6040516104b191906148a5565b60405180910390f35b3480156104c657600080fd5b506104cf61108e565b6040516104dc91906146b2565b60405180910390f35b3480156104f157600080fd5b5061050c6004803603810190610507919061470d565b611094565b005b34801561051a57600080fd5b5061053560048036038101906105309190614a08565b61111a565b005b34801561054357600080fd5b5061054c611231565b6040516105599190614ab0565b60405180910390f35b34801561056e57600080fd5b50610577611257565b60405161058491906146b2565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614acb565b611261565b6040516105c191906148a5565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190614af8565b611281565b6040516105fe91906148a5565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190614b77565b611379565b005b34801561063c57600080fd5b50610645611449565b6040516106529190614bc0565b60405180910390f35b34801561066757600080fd5b50610670611452565b60405161067d91906146b2565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a8919061484a565b611458565b6040516106ba91906148a5565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190614bdb565b611504565b005b3480156106f857600080fd5b506107016115db565b60405161070e91906148a5565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190614acb565b6115ee565b005b34801561074c57600080fd5b5061075561171d565b6040516107629190614c2a565b60405180910390f35b34801561077757600080fd5b50610780611741565b60405161078d91906148a5565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b89190614acb565b611754565b6040516107ca91906148a5565b60405180910390f35b3480156107df57600080fd5b506107e86117aa565b6040516107f591906146b2565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614bdb565b6117b0565b005b34801561083357600080fd5b5061083c611887565b60405161084991906148a5565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190614acb565b61189a565b60405161088691906148a5565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614acb565b6118f0565b005b3480156108c457600080fd5b506108cd611abc565b6040516108da91906146b2565b60405180910390f35b3480156108ef57600080fd5b506108f8611ac2565b60405161090591906146b2565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614d08565b611ac8565b005b34801561094357600080fd5b5061095e60048036038101906109599190614acb565b611bc4565b60405161096b91906146b2565b60405180910390f35b34801561098057600080fd5b50610989611c0c565b005b34801561099757600080fd5b506109b260048036038101906109ad9190614dbe565b611c94565b005b3480156109c057600080fd5b506109c9611e1a565b6040516109d691906146b2565b60405180910390f35b3480156109eb57600080fd5b506109f4611e20565b604051610a019190614c2a565b60405180910390f35b348015610a1657600080fd5b50610a1f611e46565b604051610a2c9190614c2a565b60405180910390f35b348015610a4157600080fd5b50610a4a611e70565b604051610a5791906146b2565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a82919061470d565b611e7a565b005b348015610a9557600080fd5b50610a9e611f5f565b604051610aab91906147ca565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad69190614bdb565b611ff1565b005b348015610ae957600080fd5b50610b046004803603810190610aff919061484a565b612109565b604051610b1191906148a5565b60405180910390f35b348015610b2657600080fd5b50610b416004803603810190610b3c919061484a565b6121f4565b604051610b4e91906148a5565b60405180910390f35b348015610b6357600080fd5b50610b7e6004803603810190610b79919061470d565b612212565b005b348015610b8c57600080fd5b50610b956122f7565b604051610ba291906146b2565b60405180910390f35b348015610bb757600080fd5b50610bc06122fd565b604051610bcd91906146b2565b60405180910390f35b348015610be257600080fd5b50610bfd6004803603810190610bf89190614acb565b612303565b604051610c0a91906148a5565b60405180910390f35b348015610c1f57600080fd5b50610c28612323565b604051610c3591906146b2565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c609190614e25565b612329565b005b348015610c7357600080fd5b50610c7c61248a565b604051610c8991906146b2565b60405180910390f35b348015610c9e57600080fd5b50610cb96004803603810190610cb49190614bdb565b612494565b005b348015610cc757600080fd5b50610cd061264b565b604051610cdd91906146b2565b60405180910390f35b348015610cf257600080fd5b50610d0d6004803603810190610d08919061470d565b612651565b005b348015610d1b57600080fd5b50610d366004803603810190610d319190614b77565b6126d7565b005b348015610d4457600080fd5b50610d4d6127a7565b604051610d5a91906146b2565b60405180910390f35b348015610d6f57600080fd5b50610d786127ad565b604051610d8591906146b2565b60405180910390f35b348015610d9a57600080fd5b50610db56004803603810190610db09190614eb2565b6127b3565b604051610dc291906146b2565b60405180910390f35b348015610dd757600080fd5b50610de061283a565b604051610ded91906146b2565b60405180910390f35b348015610e0257600080fd5b50610e0b612840565b604051610e1891906146b2565b60405180910390f35b348015610e2d57600080fd5b50610e36612846565b604051610e4391906146b2565b60405180910390f35b348015610e5857600080fd5b50610e6161284c565b604051610e6e91906146b2565b60405180910390f35b348015610e8357600080fd5b50610e9e6004803603810190610e999190614acb565b612852565b005b348015610eac57600080fd5b50610ec76004803603810190610ec29190614e25565b612949565b005b348015610ed557600080fd5b50610ef06004803603810190610eeb919061470d565b612aaa565b005b348015610efe57600080fd5b50610f07612b8f565b005b60155481565b600a5481565b610f1d612c28565b73ffffffffffffffffffffffffffffffffffffffff16610f3b611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890614f3e565b60405180910390fd5b60008111610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614faa565b60405180910390fd5b80600f8190555050565b606060038054610fed90614ff9565b80601f016020809104026020016040519081016040528092919081815260200182805461101990614ff9565b80156110665780601f1061103b57610100808354040283529160200191611066565b820191906000526020600020905b81548152906001019060200180831161104957829003601f168201915b5050505050905090565b600061108461107d612c28565b8484612c30565b6001905092915050565b60175481565b61109c612c28565b73ffffffffffffffffffffffffffffffffffffffff166110ba611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614f3e565b60405180910390fd5b80600c8190555050565b611122612c28565b73ffffffffffffffffffffffffffffffffffffffff16611140611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614f3e565b60405180910390fd5b60005b81518160ff16101561122d57600160066000848460ff16815181106111c1576111c061502a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061122590615088565b915050611199565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600061128e848484612df9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112d9612c28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090615123565b60405180910390fd5b61136d85611365612c28565b858403612c30565b60019150509392505050565b611381612c28565b73ffffffffffffffffffffffffffffffffffffffff1661139f611e46565b73ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90614f3e565b60405180910390fd5b80600760156101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c08160405161143e91906148a5565b60405180910390a150565b60006009905090565b601a5481565b60006114fa611465612c28565b848460016000611473612c28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f59190615143565b612c30565b6001905092915050565b61150c612c28565b73ffffffffffffffffffffffffffffffffffffffff1661152a611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614f3e565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560149054906101000a900460ff1681565b6115f6612c28565b73ffffffffffffffffffffffffffffffffffffffff16611614611e46565b73ffffffffffffffffffffffffffffffffffffffff161461166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190614f3e565b60405180910390fd5b6001602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600760169054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b6117b8612c28565b73ffffffffffffffffffffffffffffffffffffffff166117d6611e46565b73ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390614f3e565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760159054906101000a900460ff1681565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118f8612c28565b73ffffffffffffffffffffffffffffffffffffffff16611916611e46565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390614f3e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f3906151e9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60185481565b611ad0612c28565b73ffffffffffffffffffffffffffffffffffffffff16611aee611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90614f3e565b60405180910390fd5b8051825114611b5257600080fd5b610258825110611b6157600080fd5b60005b8251811015611bbf57611bac33848381518110611b8457611b8361502a565b5b6020026020010151848481518110611b9f57611b9e61502a565b5b6020026020010151613793565b8080611bb790615209565b915050611b64565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c14612c28565b73ffffffffffffffffffffffffffffffffffffffff16611c32611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90614f3e565b60405180910390fd5b611c926000613a12565b565b611c9c612c28565b73ffffffffffffffffffffffffffffffffffffffff16611cba611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614f3e565b60405180910390fd5b83601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b601b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f54905090565b611e82612c28565b73ffffffffffffffffffffffffffffffffffffffff16611ea0611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90614f3e565b60405180910390fd5b80600d81905550611f1860c8611f0a611257565b613ad890919063ffffffff16565b600d541015611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f539061529d565b60405180910390fd5b50565b606060048054611f6e90614ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9a90614ff9565b8015611fe75780601f10611fbc57610100808354040283529160200191611fe7565b820191906000526020600020905b815481529060010190602001808311611fca57829003601f168201915b5050505050905090565b611ff9612c28565b73ffffffffffffffffffffffffffffffffffffffff16612017611e46565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614f3e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290615355565b60405180910390fd5b6121058282613aee565b5050565b60008060016000612118612c28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc906153e7565b60405180910390fd5b6121e96121e0612c28565b85858403612c30565b600191505092915050565b6000612208612201612c28565b8484612df9565b6001905092915050565b61221a612c28565b73ffffffffffffffffffffffffffffffffffffffff16612238611e46565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614f3e565b60405180910390fd5b80600b819055506122b060c86122a2611257565b613ad890919063ffffffff16565b600b5410156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb9061529d565b60405180910390fd5b50565b60135481565b601c5481565b60246020528060005260406000206000915054906101000a900460ff1681565b60165481565b612331612c28565b73ffffffffffffffffffffffffffffffffffffffff1661234f611e46565b73ffffffffffffffffffffffffffffffffffffffff16146123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c90614f3e565b60405180910390fd5b85601781905550846018819055508360198190555082601a8190555081601b8190555080601c81905550612436601c54612428601b5461241a601a5461240c6019546123fe601854601754613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b601d819055506014601d541115612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990615453565b60405180910390fd5b505050505050565b6000600e54905090565b61249c612c28565b73ffffffffffffffffffffffffffffffffffffffff166124ba611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790614f3e565b60405180910390fd5b801515602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906154e5565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161263f91906148a5565b60405180910390a25050565b60115481565b612659612c28565b73ffffffffffffffffffffffffffffffffffffffff16612677611e46565b73ffffffffffffffffffffffffffffffffffffffff16146126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614f3e565b60405180910390fd5b80600e8190555050565b6126df612c28565b73ffffffffffffffffffffffffffffffffffffffff166126fd611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90614f3e565b60405180910390fd5b80600760166101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161279c91906148a5565b60405180910390a150565b60105481565b601d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b600d5481565b60195481565b60145481565b61285a612c28565b73ffffffffffffffffffffffffffffffffffffffff16612878611e46565b73ffffffffffffffffffffffffffffffffffffffff16146128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c590614f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490615577565b60405180910390fd5b61294681613a12565b50565b612951612c28565b73ffffffffffffffffffffffffffffffffffffffff1661296f611e46565b73ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90614f3e565b60405180910390fd5b856010819055508460118190555083601281905550826013819055508160148190555080601581905550612a56601554612a48601454612a3a601354612a2c601254612a1e601154601054613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b60168190555060146016541115612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9990615453565b60405180910390fd5b505050505050565b612ab2612c28565b73ffffffffffffffffffffffffffffffffffffffff16612ad0611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614f3e565b60405180910390fd5b80600a81905550612b4860c8612b3a611257565b613ad890919063ffffffff16565b600a541015612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b839061529d565b60405180910390fd5b50565b612b97612c28565b73ffffffffffffffffffffffffffffffffffffffff16612bb5611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0290614f3e565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9690615609565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d059061569b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612dec91906146b2565b60405180910390a3505050565b8282600560149054906101000a900460ff1680612e5f5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612eb35750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee990615707565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890615799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc79061582b565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130745750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa90615897565b60405180910390fd5b600083036130cc576130c785856000613793565b61378c565b602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316f5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131c55750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561321057600b5483111561320f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320690615929565b60405180910390fd5b5b602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b35750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133095750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561335457600a54831115613353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334a906159bb565b60405180910390fd5b5b602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133f75750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561344d5750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b157600061345d85611bc4565b9050600d54848261346e9190615143565b11156134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a690615a4d565b60405180910390fd5b505b60006134bc30611bc4565b90506000600c548210159050600760149054906101000a900460ff1615801561352e5750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156135465750600760169054906101000a900460ff165b156135b757801561356057600c54915061355f82613c37565b5b6000479050600760159054906101000a900460ff1680156135825750600e5481115b156135b557600e548111156135b457600e5490506135b36135ae600f5483613ad890919063ffffffff16565b613d5d565b5b5b505b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561365b5750602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561377e576000602460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136df576136dc60646136ce60165489613da990919063ffffffff16565b613ad890919063ffffffff16565b90505b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561375c57613759606461374b601d5489613da990919063ffffffff16565b613ad890919063ffffffff16565b90505b61376f8187613dbf90919063ffffffff16565b955061377c883083613793565b505b613789878787613793565b50505b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f990615799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138689061582b565b60405180910390fd5b61387c838383613dd5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f990615adf565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139959190615143565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139f991906146b2565b60405180910390a3613a0c848484613dda565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183613ae69190615b2e565b905092915050565b801515602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7790615bd1565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613c2f9190615143565b905092915050565b6001600760146101000a81548160ff0219169083151502179055506000613c7d601d54613c6f60175485613da990919063ffffffff16565b613ad890919063ffffffff16565b90506000613c948284613dbf90919063ffffffff16565b90506000613cac600284613ad890919063ffffffff16565b90506000613cc38285613dbf90919063ffffffff16565b90506000479050613cd48330613ddf565b6000613ce98247613dbf90919063ffffffff16565b9050613cf58382614059565b613cfe8561413e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613d3193929190615bf1565b60405180910390a15050505050506000600760146101000a81548160ff02191690831515021790555050565b6001600760146101000a81548160ff0219169083151502179055506000811115613d8b57613d8a81614415565b5b6000600760146101000a81548160ff02191690831515021790555050565b60008183613db79190615c28565b905092915050565b60008183613dcd9190615c82565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613dfc57613dfb6148c5565b5b604051908082528060200260200182016040528015613e2a5781602001602082028036833780820191505090505b5090503081600081518110613e4257613e4161502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0d9190615ccb565b81600181518110613f2157613f2061502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082613f8830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166127b3565b1015613fbe57613fbd30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612c30565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401614022959493929190615df1565b600060405180830381600087803b15801561403c57600080fd5b505af1158015614050573d6000803e3d6000fd5b50505050505050565b61408630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c30565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806140d2611e46565b426040518863ffffffff1660e01b81526004016140f496959493929190615e4b565b60606040518083038185885af1158015614112573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141379190615ec1565b5050505050565b600047905061414d8230613ddf565b60006141628247613dbf90919063ffffffff16565b905060006141a3614180601754601d54613dbf90919063ffffffff16565b61419560195485613da990919063ffffffff16565b613ad890919063ffffffff16565b905060006141e46141c1601754601d54613dbf90919063ffffffff16565b6141d6601a5486613da990919063ffffffff16565b613ad890919063ffffffff16565b90506000614225614202601754601d54613dbf90919063ffffffff16565b614217601b5487613da990919063ffffffff16565b613ad890919063ffffffff16565b90506000614266614243601754601d54613dbf90919063ffffffff16565b614258601c5488613da990919063ffffffff16565b613ad890919063ffffffff16565b9050601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156142d0573d6000803e3d6000fd5b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015614339573d6000803e3d6000fd5b50602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156143a2573d6000803e3d6000fd5b50602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561440b573d6000803e3d6000fd5b5050505050505050565b6000600267ffffffffffffffff811115614432576144316148c5565b5b6040519080825280602002602001820160405280156144605781602001602082028036833780820191505090505b509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144f49190615ccb565b816000815181106145085761450761502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106145575761455661502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661460b61012c42613c2190919063ffffffff16565b6040518663ffffffff1660e01b815260040161462a9493929190615f14565b6000604051808303818588803b15801561464357600080fd5b505af1158015614657573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea7828260405161468d929190615f60565b60405180910390a15050565b6000819050919050565b6146ac81614699565b82525050565b60006020820190506146c760008301846146a3565b92915050565b6000604051905090565b600080fd5b600080fd5b6146ea81614699565b81146146f557600080fd5b50565b600081359050614707816146e1565b92915050565b600060208284031215614723576147226146d7565b5b6000614731848285016146f8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614774578082015181840152602081019050614759565b60008484015250505050565b6000601f19601f8301169050919050565b600061479c8261473a565b6147a68185614745565b93506147b6818560208601614756565b6147bf81614780565b840191505092915050565b600060208201905081810360008301526147e48184614791565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614817826147ec565b9050919050565b6148278161480c565b811461483257600080fd5b50565b6000813590506148448161481e565b92915050565b60008060408385031215614861576148606146d7565b5b600061486f85828601614835565b9250506020614880858286016146f8565b9150509250929050565b60008115159050919050565b61489f8161488a565b82525050565b60006020820190506148ba6000830184614896565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148fd82614780565b810181811067ffffffffffffffff8211171561491c5761491b6148c5565b5b80604052505050565b600061492f6146cd565b905061493b82826148f4565b919050565b600067ffffffffffffffff82111561495b5761495a6148c5565b5b602082029050602081019050919050565b600080fd5b600061498461497f84614940565b614925565b905080838252602082019050602084028301858111156149a7576149a661496c565b5b835b818110156149d057806149bc8882614835565b8452602084019350506020810190506149a9565b5050509392505050565b600082601f8301126149ef576149ee6148c0565b5b81356149ff848260208601614971565b91505092915050565b600060208284031215614a1e57614a1d6146d7565b5b600082013567ffffffffffffffff811115614a3c57614a3b6146dc565b5b614a48848285016149da565b91505092915050565b6000819050919050565b6000614a76614a71614a6c846147ec565b614a51565b6147ec565b9050919050565b6000614a8882614a5b565b9050919050565b6000614a9a82614a7d565b9050919050565b614aaa81614a8f565b82525050565b6000602082019050614ac56000830184614aa1565b92915050565b600060208284031215614ae157614ae06146d7565b5b6000614aef84828501614835565b91505092915050565b600080600060608486031215614b1157614b106146d7565b5b6000614b1f86828701614835565b9350506020614b3086828701614835565b9250506040614b41868287016146f8565b9150509250925092565b614b548161488a565b8114614b5f57600080fd5b50565b600081359050614b7181614b4b565b92915050565b600060208284031215614b8d57614b8c6146d7565b5b6000614b9b84828501614b62565b91505092915050565b600060ff82169050919050565b614bba81614ba4565b82525050565b6000602082019050614bd56000830184614bb1565b92915050565b60008060408385031215614bf257614bf16146d7565b5b6000614c0085828601614835565b9250506020614c1185828601614b62565b9150509250929050565b614c248161480c565b82525050565b6000602082019050614c3f6000830184614c1b565b92915050565b600067ffffffffffffffff821115614c6057614c5f6148c5565b5b602082029050602081019050919050565b6000614c84614c7f84614c45565b614925565b90508083825260208201905060208402830185811115614ca757614ca661496c565b5b835b81811015614cd05780614cbc88826146f8565b845260208401935050602081019050614ca9565b5050509392505050565b600082601f830112614cef57614cee6148c0565b5b8135614cff848260208601614c71565b91505092915050565b60008060408385031215614d1f57614d1e6146d7565b5b600083013567ffffffffffffffff811115614d3d57614d3c6146dc565b5b614d49858286016149da565b925050602083013567ffffffffffffffff811115614d6a57614d696146dc565b5b614d7685828601614cda565b9150509250929050565b6000614d8b826147ec565b9050919050565b614d9b81614d80565b8114614da657600080fd5b50565b600081359050614db881614d92565b92915050565b60008060008060808587031215614dd857614dd76146d7565b5b6000614de687828801614da9565b9450506020614df787828801614da9565b9350506040614e0887828801614da9565b9250506060614e1987828801614da9565b91505092959194509250565b60008060008060008060c08789031215614e4257614e416146d7565b5b6000614e5089828a016146f8565b9650506020614e6189828a016146f8565b9550506040614e7289828a016146f8565b9450506060614e8389828a016146f8565b9350506080614e9489828a016146f8565b92505060a0614ea589828a016146f8565b9150509295509295509295565b60008060408385031215614ec957614ec86146d7565b5b6000614ed785828601614835565b9250506020614ee885828601614835565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f28602083614745565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f63616e6e6f7420626520736574206173207a65726f0000000000000000000000600082015250565b6000614f94601583614745565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061501157607f821691505b60208210810361502457615023614fca565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061509382614ba4565b915060ff82036150a6576150a5615059565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061510d602883614745565b9150615118826150b1565b604082019050919050565b6000602082019050818103600083015261513c81615100565b9050919050565b600061514e82614699565b915061515983614699565b925082820190508082111561517157615170615059565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151d3602383614745565b91506151de82615177565b604082019050919050565b60006020820190508181036000830152615202816151c6565b9050919050565b600061521482614699565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361524657615245615059565b5b600182019050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000615287600d83614745565b915061529282615251565b602082019050919050565b600060208201905081810360008301526152b68161527a565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b600061533f604583614745565b915061534a826152bd565b606082019050919050565b6000602082019050818103600083015261536e81615332565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153d1602583614745565b91506153dc82615375565b604082019050919050565b60006020820190508181036000830152615400816153c4565b9050919050565b7f6665657320746f6f206869676800000000000000000000000000000000000000600082015250565b600061543d600d83614745565b915061544882615407565b602082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006154cf602a83614745565b91506154da82615473565b604082019050919050565b600060208201905081810360008301526154fe816154c2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615561602683614745565b915061556c82615505565b604082019050919050565b6000602082019050818103600083015261559081615554565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155f3602483614745565b91506155fe82615597565b604082019050919050565b60006020820190508181036000830152615622816155e6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615685602283614745565b915061569082615629565b604082019050919050565b600060208201905081810360008301526156b481615678565b9050919050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b60006156f1600883614745565b91506156fc826156bb565b602082019050919050565b60006020820190508181036000830152615720816156e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615783602583614745565b915061578e82615727565b604082019050919050565b600060208201905081810360008301526157b281615776565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615815602383614745565b9150615820826157b9565b604082019050919050565b6000602082019050818103600083015261584481615808565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000615881601383614745565b915061588c8261584b565b602082019050919050565b600060208201905081810360008301526158b081615874565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000615913602b83614745565b915061591e826158b7565b604082019050919050565b6000602082019050818103600083015261594281615906565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b60006159a5602c83614745565b91506159b082615949565b604082019050919050565b600060208201905081810360008301526159d481615998565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615a37602483614745565b9150615a42826159db565b604082019050919050565b60006020820190508181036000830152615a6681615a2a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615ac9602683614745565b9150615ad482615a6d565b604082019050919050565b60006020820190508181036000830152615af881615abc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615b3982614699565b9150615b4483614699565b925082615b5457615b53615aff565b5b828204905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000615bbb603883614745565b9150615bc682615b5f565b604082019050919050565b60006020820190508181036000830152615bea81615bae565b9050919050565b6000606082019050615c0660008301866146a3565b615c1360208301856146a3565b615c2060408301846146a3565b949350505050565b6000615c3382614699565b9150615c3e83614699565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615c7757615c76615059565b5b828202905092915050565b6000615c8d82614699565b9150615c9883614699565b9250828203905081811115615cb057615caf615059565b5b92915050565b600081519050615cc58161481e565b92915050565b600060208284031215615ce157615ce06146d7565b5b6000615cef84828501615cb6565b91505092915050565b6000819050919050565b6000615d1d615d18615d1384615cf8565b614a51565b614699565b9050919050565b615d2d81615d02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d688161480c565b82525050565b6000615d7a8383615d5f565b60208301905092915050565b6000602082019050919050565b6000615d9e82615d33565b615da88185615d3e565b9350615db383615d4f565b8060005b83811015615de4578151615dcb8882615d6e565b9750615dd683615d86565b925050600181019050615db7565b5085935050505092915050565b600060a082019050615e0660008301886146a3565b615e136020830187615d24565b8181036040830152615e258186615d93565b9050615e346060830185614c1b565b615e4160808301846146a3565b9695505050505050565b600060c082019050615e606000830189614c1b565b615e6d60208301886146a3565b615e7a6040830187615d24565b615e876060830186615d24565b615e946080830185614c1b565b615ea160a08301846146a3565b979650505050505050565b600081519050615ebb816146e1565b92915050565b600080600060608486031215615eda57615ed96146d7565b5b6000615ee886828701615eac565b9350506020615ef986828701615eac565b9250506040615f0a86828701615eac565b9150509250925092565b6000608082019050615f296000830187615d24565b8181036020830152615f3b8186615d93565b9050615f4a6040830185614c1b565b615f5760608301846146a3565b95945050505050565b6000604082019050615f7560008301856146a3565b8181036020830152615f878184615d93565b9050939250505056fea2646970667358221220f7e8f09b1378f5f82c73a3f348f2cac83bf92c021f58de156e9381ad101c3c1f64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063743e540d116101f2578063bdc653ef1161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610e77578063f74c9f4714610ea0578063fb17e6dc14610ec9578063fb201b1d14610ef2576103ce565b8063e2f4560514610dcb578063e6c75f7114610df6578063e7f444b314610e21578063efcc1b2f14610e4c576103ce565b8063c49b9a80116100dc578063c49b9a8014610d0f578063ccb6135814610d38578063d0a3981414610d63578063dd62ed3e14610d8e576103ce565b8063bdc653ef14610c67578063c024666814610c92578063c05e8fa114610cbb578063c2b3e1c214610ce6576103ce565b8063a457c2d711610185578063b45e83f811610154578063b45e83f814610bab578063b62496f514610bd6578063b9e9370014610c13578063ba876bb914610c3e576103ce565b8063a457c2d714610add578063a9059cbb14610b1a578063a946163014610b57578063afc1687514610b80576103ce565b80638ee10823116101c15780638ee1082314610a3557806391d55f4114610a6057806395d89b4114610a895780639a7a23d614610ab4576103ce565b8063743e540d1461098b5780637506cbd8146109b457806385141a77146109df5780638da5cb5b14610a0a576103ce565b8063455a4396116102e25780636053a0e3116102755780636be63855116102445780636be63855146108e3578063706f69371461090e57806370a0823114610937578063715018a614610974576103ce565b80636053a0e314610827578063658c27a91461085257806365b8dbc01461088f57806368078952146108b8576103ce565b80634a74bb02116102b15780634a74bb021461076b5780634fbee193146107965780635aa821a9146107d35780635b89029c146107fe576103ce565b8063455a4396146106c357806347535d7b146106ec57806349928a501461071757806349bd5a5e14610740576103ce565b80631694505e1161035a57806329370cc61161032957806329370cc614610607578063313ce56714610630578063330f829d1461065b5780633950935114610686576103ce565b80631694505e1461053757806318160ddd146105625780631cdd3be31461058d57806323b872dd146105ca576103ce565b8063095ea7b311610396578063095ea7b31461047d578063099d0d30146104ba57806309e89af7146104e55780630b6bb6f51461050e576103ce565b806301143fea146103d357806302259e9e146103fe578063068dde721461042957806306fdde0314610452576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f09565b6040516103f591906146b2565b60405180910390f35b34801561040a57600080fd5b50610413610f0f565b60405161042091906146b2565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b919061470d565b610f15565b005b34801561045e57600080fd5b50610467610fde565b60405161047491906147ca565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f919061484a565b611070565b6040516104b191906148a5565b60405180910390f35b3480156104c657600080fd5b506104cf61108e565b6040516104dc91906146b2565b60405180910390f35b3480156104f157600080fd5b5061050c6004803603810190610507919061470d565b611094565b005b34801561051a57600080fd5b5061053560048036038101906105309190614a08565b61111a565b005b34801561054357600080fd5b5061054c611231565b6040516105599190614ab0565b60405180910390f35b34801561056e57600080fd5b50610577611257565b60405161058491906146b2565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614acb565b611261565b6040516105c191906148a5565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190614af8565b611281565b6040516105fe91906148a5565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190614b77565b611379565b005b34801561063c57600080fd5b50610645611449565b6040516106529190614bc0565b60405180910390f35b34801561066757600080fd5b50610670611452565b60405161067d91906146b2565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a8919061484a565b611458565b6040516106ba91906148a5565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190614bdb565b611504565b005b3480156106f857600080fd5b506107016115db565b60405161070e91906148a5565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190614acb565b6115ee565b005b34801561074c57600080fd5b5061075561171d565b6040516107629190614c2a565b60405180910390f35b34801561077757600080fd5b50610780611741565b60405161078d91906148a5565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b89190614acb565b611754565b6040516107ca91906148a5565b60405180910390f35b3480156107df57600080fd5b506107e86117aa565b6040516107f591906146b2565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614bdb565b6117b0565b005b34801561083357600080fd5b5061083c611887565b60405161084991906148a5565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190614acb565b61189a565b60405161088691906148a5565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614acb565b6118f0565b005b3480156108c457600080fd5b506108cd611abc565b6040516108da91906146b2565b60405180910390f35b3480156108ef57600080fd5b506108f8611ac2565b60405161090591906146b2565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614d08565b611ac8565b005b34801561094357600080fd5b5061095e60048036038101906109599190614acb565b611bc4565b60405161096b91906146b2565b60405180910390f35b34801561098057600080fd5b50610989611c0c565b005b34801561099757600080fd5b506109b260048036038101906109ad9190614dbe565b611c94565b005b3480156109c057600080fd5b506109c9611e1a565b6040516109d691906146b2565b60405180910390f35b3480156109eb57600080fd5b506109f4611e20565b604051610a019190614c2a565b60405180910390f35b348015610a1657600080fd5b50610a1f611e46565b604051610a2c9190614c2a565b60405180910390f35b348015610a4157600080fd5b50610a4a611e70565b604051610a5791906146b2565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a82919061470d565b611e7a565b005b348015610a9557600080fd5b50610a9e611f5f565b604051610aab91906147ca565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad69190614bdb565b611ff1565b005b348015610ae957600080fd5b50610b046004803603810190610aff919061484a565b612109565b604051610b1191906148a5565b60405180910390f35b348015610b2657600080fd5b50610b416004803603810190610b3c919061484a565b6121f4565b604051610b4e91906148a5565b60405180910390f35b348015610b6357600080fd5b50610b7e6004803603810190610b79919061470d565b612212565b005b348015610b8c57600080fd5b50610b956122f7565b604051610ba291906146b2565b60405180910390f35b348015610bb757600080fd5b50610bc06122fd565b604051610bcd91906146b2565b60405180910390f35b348015610be257600080fd5b50610bfd6004803603810190610bf89190614acb565b612303565b604051610c0a91906148a5565b60405180910390f35b348015610c1f57600080fd5b50610c28612323565b604051610c3591906146b2565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c609190614e25565b612329565b005b348015610c7357600080fd5b50610c7c61248a565b604051610c8991906146b2565b60405180910390f35b348015610c9e57600080fd5b50610cb96004803603810190610cb49190614bdb565b612494565b005b348015610cc757600080fd5b50610cd061264b565b604051610cdd91906146b2565b60405180910390f35b348015610cf257600080fd5b50610d0d6004803603810190610d08919061470d565b612651565b005b348015610d1b57600080fd5b50610d366004803603810190610d319190614b77565b6126d7565b005b348015610d4457600080fd5b50610d4d6127a7565b604051610d5a91906146b2565b60405180910390f35b348015610d6f57600080fd5b50610d786127ad565b604051610d8591906146b2565b60405180910390f35b348015610d9a57600080fd5b50610db56004803603810190610db09190614eb2565b6127b3565b604051610dc291906146b2565b60405180910390f35b348015610dd757600080fd5b50610de061283a565b604051610ded91906146b2565b60405180910390f35b348015610e0257600080fd5b50610e0b612840565b604051610e1891906146b2565b60405180910390f35b348015610e2d57600080fd5b50610e36612846565b604051610e4391906146b2565b60405180910390f35b348015610e5857600080fd5b50610e6161284c565b604051610e6e91906146b2565b60405180910390f35b348015610e8357600080fd5b50610e9e6004803603810190610e999190614acb565b612852565b005b348015610eac57600080fd5b50610ec76004803603810190610ec29190614e25565b612949565b005b348015610ed557600080fd5b50610ef06004803603810190610eeb919061470d565b612aaa565b005b348015610efe57600080fd5b50610f07612b8f565b005b60155481565b600a5481565b610f1d612c28565b73ffffffffffffffffffffffffffffffffffffffff16610f3b611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890614f3e565b60405180910390fd5b60008111610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614faa565b60405180910390fd5b80600f8190555050565b606060038054610fed90614ff9565b80601f016020809104026020016040519081016040528092919081815260200182805461101990614ff9565b80156110665780601f1061103b57610100808354040283529160200191611066565b820191906000526020600020905b81548152906001019060200180831161104957829003601f168201915b5050505050905090565b600061108461107d612c28565b8484612c30565b6001905092915050565b60175481565b61109c612c28565b73ffffffffffffffffffffffffffffffffffffffff166110ba611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614f3e565b60405180910390fd5b80600c8190555050565b611122612c28565b73ffffffffffffffffffffffffffffffffffffffff16611140611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614f3e565b60405180910390fd5b60005b81518160ff16101561122d57600160066000848460ff16815181106111c1576111c061502a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061122590615088565b915050611199565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600061128e848484612df9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112d9612c28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090615123565b60405180910390fd5b61136d85611365612c28565b858403612c30565b60019150509392505050565b611381612c28565b73ffffffffffffffffffffffffffffffffffffffff1661139f611e46565b73ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90614f3e565b60405180910390fd5b80600760156101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c08160405161143e91906148a5565b60405180910390a150565b60006009905090565b601a5481565b60006114fa611465612c28565b848460016000611473612c28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f59190615143565b612c30565b6001905092915050565b61150c612c28565b73ffffffffffffffffffffffffffffffffffffffff1661152a611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614f3e565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560149054906101000a900460ff1681565b6115f6612c28565b73ffffffffffffffffffffffffffffffffffffffff16611614611e46565b73ffffffffffffffffffffffffffffffffffffffff161461166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190614f3e565b60405180910390fd5b6001602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000007ed0a4c5245d272c6cd99e794d5b34ca8508978881565b600760169054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b6117b8612c28565b73ffffffffffffffffffffffffffffffffffffffff166117d6611e46565b73ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390614f3e565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760159054906101000a900460ff1681565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118f8612c28565b73ffffffffffffffffffffffffffffffffffffffff16611916611e46565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390614f3e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f3906151e9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60185481565b611ad0612c28565b73ffffffffffffffffffffffffffffffffffffffff16611aee611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b90614f3e565b60405180910390fd5b8051825114611b5257600080fd5b610258825110611b6157600080fd5b60005b8251811015611bbf57611bac33848381518110611b8457611b8361502a565b5b6020026020010151848481518110611b9f57611b9e61502a565b5b6020026020010151613793565b8080611bb790615209565b915050611b64565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c14612c28565b73ffffffffffffffffffffffffffffffffffffffff16611c32611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90614f3e565b60405180910390fd5b611c926000613a12565b565b611c9c612c28565b73ffffffffffffffffffffffffffffffffffffffff16611cba611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614f3e565b60405180910390fd5b83601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b601b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f54905090565b611e82612c28565b73ffffffffffffffffffffffffffffffffffffffff16611ea0611e46565b73ffffffffffffffffffffffffffffffffffffffff1614611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90614f3e565b60405180910390fd5b80600d81905550611f1860c8611f0a611257565b613ad890919063ffffffff16565b600d541015611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f539061529d565b60405180910390fd5b50565b606060048054611f6e90614ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9a90614ff9565b8015611fe75780601f10611fbc57610100808354040283529160200191611fe7565b820191906000526020600020905b815481529060010190602001808311611fca57829003601f168201915b5050505050905090565b611ff9612c28565b73ffffffffffffffffffffffffffffffffffffffff16612017611e46565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614f3e565b60405180910390fd5b7f0000000000000000000000007ed0a4c5245d272c6cd99e794d5b34ca8508978873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290615355565b60405180910390fd5b6121058282613aee565b5050565b60008060016000612118612c28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc906153e7565b60405180910390fd5b6121e96121e0612c28565b85858403612c30565b600191505092915050565b6000612208612201612c28565b8484612df9565b6001905092915050565b61221a612c28565b73ffffffffffffffffffffffffffffffffffffffff16612238611e46565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614f3e565b60405180910390fd5b80600b819055506122b060c86122a2611257565b613ad890919063ffffffff16565b600b5410156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb9061529d565b60405180910390fd5b50565b60135481565b601c5481565b60246020528060005260406000206000915054906101000a900460ff1681565b60165481565b612331612c28565b73ffffffffffffffffffffffffffffffffffffffff1661234f611e46565b73ffffffffffffffffffffffffffffffffffffffff16146123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c90614f3e565b60405180910390fd5b85601781905550846018819055508360198190555082601a8190555081601b8190555080601c81905550612436601c54612428601b5461241a601a5461240c6019546123fe601854601754613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b601d819055506014601d541115612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990615453565b60405180910390fd5b505050505050565b6000600e54905090565b61249c612c28565b73ffffffffffffffffffffffffffffffffffffffff166124ba611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790614f3e565b60405180910390fd5b801515602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906154e5565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161263f91906148a5565b60405180910390a25050565b60115481565b612659612c28565b73ffffffffffffffffffffffffffffffffffffffff16612677611e46565b73ffffffffffffffffffffffffffffffffffffffff16146126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614f3e565b60405180910390fd5b80600e8190555050565b6126df612c28565b73ffffffffffffffffffffffffffffffffffffffff166126fd611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90614f3e565b60405180910390fd5b80600760166101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161279c91906148a5565b60405180910390a150565b60105481565b601d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b600d5481565b60195481565b60145481565b61285a612c28565b73ffffffffffffffffffffffffffffffffffffffff16612878611e46565b73ffffffffffffffffffffffffffffffffffffffff16146128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c590614f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490615577565b60405180910390fd5b61294681613a12565b50565b612951612c28565b73ffffffffffffffffffffffffffffffffffffffff1661296f611e46565b73ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90614f3e565b60405180910390fd5b856010819055508460118190555083601281905550826013819055508160148190555080601581905550612a56601554612a48601454612a3a601354612a2c601254612a1e601154601054613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b613c2190919063ffffffff16565b60168190555060146016541115612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9990615453565b60405180910390fd5b505050505050565b612ab2612c28565b73ffffffffffffffffffffffffffffffffffffffff16612ad0611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614f3e565b60405180910390fd5b80600a81905550612b4860c8612b3a611257565b613ad890919063ffffffff16565b600a541015612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b839061529d565b60405180910390fd5b50565b612b97612c28565b73ffffffffffffffffffffffffffffffffffffffff16612bb5611e46565b73ffffffffffffffffffffffffffffffffffffffff1614612c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0290614f3e565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9690615609565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d059061569b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612dec91906146b2565b60405180910390a3505050565b8282600560149054906101000a900460ff1680612e5f5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612eb35750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee990615707565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890615799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc79061582b565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130745750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa90615897565b60405180910390fd5b600083036130cc576130c785856000613793565b61378c565b602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316f5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131c55750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561321057600b5483111561320f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320690615929565b60405180910390fd5b5b602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b35750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133095750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561335457600a54831115613353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334a906159bb565b60405180910390fd5b5b602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133f75750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561344d5750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b157600061345d85611bc4565b9050600d54848261346e9190615143565b11156134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a690615a4d565b60405180910390fd5b505b60006134bc30611bc4565b90506000600c548210159050600760149054906101000a900460ff1615801561352e5750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156135465750600760169054906101000a900460ff165b156135b757801561356057600c54915061355f82613c37565b5b6000479050600760159054906101000a900460ff1680156135825750600e5481115b156135b557600e548111156135b457600e5490506135b36135ae600f5483613ad890919063ffffffff16565b613d5d565b5b5b505b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561365b5750602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561377e576000602460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136df576136dc60646136ce60165489613da990919063ffffffff16565b613ad890919063ffffffff16565b90505b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561375c57613759606461374b601d5489613da990919063ffffffff16565b613ad890919063ffffffff16565b90505b61376f8187613dbf90919063ffffffff16565b955061377c883083613793565b505b613789878787613793565b50505b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f990615799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138689061582b565b60405180910390fd5b61387c838383613dd5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f990615adf565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139959190615143565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139f991906146b2565b60405180910390a3613a0c848484613dda565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183613ae69190615b2e565b905092915050565b801515602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7790615bd1565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613c2f9190615143565b905092915050565b6001600760146101000a81548160ff0219169083151502179055506000613c7d601d54613c6f60175485613da990919063ffffffff16565b613ad890919063ffffffff16565b90506000613c948284613dbf90919063ffffffff16565b90506000613cac600284613ad890919063ffffffff16565b90506000613cc38285613dbf90919063ffffffff16565b90506000479050613cd48330613ddf565b6000613ce98247613dbf90919063ffffffff16565b9050613cf58382614059565b613cfe8561413e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613d3193929190615bf1565b60405180910390a15050505050506000600760146101000a81548160ff02191690831515021790555050565b6001600760146101000a81548160ff0219169083151502179055506000811115613d8b57613d8a81614415565b5b6000600760146101000a81548160ff02191690831515021790555050565b60008183613db79190615c28565b905092915050565b60008183613dcd9190615c82565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613dfc57613dfb6148c5565b5b604051908082528060200260200182016040528015613e2a5781602001602082028036833780820191505090505b5090503081600081518110613e4257613e4161502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0d9190615ccb565b81600181518110613f2157613f2061502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082613f8830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166127b3565b1015613fbe57613fbd30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612c30565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401614022959493929190615df1565b600060405180830381600087803b15801561403c57600080fd5b505af1158015614050573d6000803e3d6000fd5b50505050505050565b61408630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c30565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806140d2611e46565b426040518863ffffffff1660e01b81526004016140f496959493929190615e4b565b60606040518083038185885af1158015614112573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141379190615ec1565b5050505050565b600047905061414d8230613ddf565b60006141628247613dbf90919063ffffffff16565b905060006141a3614180601754601d54613dbf90919063ffffffff16565b61419560195485613da990919063ffffffff16565b613ad890919063ffffffff16565b905060006141e46141c1601754601d54613dbf90919063ffffffff16565b6141d6601a5486613da990919063ffffffff16565b613ad890919063ffffffff16565b90506000614225614202601754601d54613dbf90919063ffffffff16565b614217601b5487613da990919063ffffffff16565b613ad890919063ffffffff16565b90506000614266614243601754601d54613dbf90919063ffffffff16565b614258601c5488613da990919063ffffffff16565b613ad890919063ffffffff16565b9050601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156142d0573d6000803e3d6000fd5b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015614339573d6000803e3d6000fd5b50602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156143a2573d6000803e3d6000fd5b50602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561440b573d6000803e3d6000fd5b5050505050505050565b6000600267ffffffffffffffff811115614432576144316148c5565b5b6040519080825280602002602001820160405280156144605781602001602082028036833780820191505090505b509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144f49190615ccb565b816000815181106145085761450761502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106145575761455661502a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661460b61012c42613c2190919063ffffffff16565b6040518663ffffffff1660e01b815260040161462a9493929190615f14565b6000604051808303818588803b15801561464357600080fd5b505af1158015614657573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea7828260405161468d929190615f60565b60405180910390a15050565b6000819050919050565b6146ac81614699565b82525050565b60006020820190506146c760008301846146a3565b92915050565b6000604051905090565b600080fd5b600080fd5b6146ea81614699565b81146146f557600080fd5b50565b600081359050614707816146e1565b92915050565b600060208284031215614723576147226146d7565b5b6000614731848285016146f8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614774578082015181840152602081019050614759565b60008484015250505050565b6000601f19601f8301169050919050565b600061479c8261473a565b6147a68185614745565b93506147b6818560208601614756565b6147bf81614780565b840191505092915050565b600060208201905081810360008301526147e48184614791565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614817826147ec565b9050919050565b6148278161480c565b811461483257600080fd5b50565b6000813590506148448161481e565b92915050565b60008060408385031215614861576148606146d7565b5b600061486f85828601614835565b9250506020614880858286016146f8565b9150509250929050565b60008115159050919050565b61489f8161488a565b82525050565b60006020820190506148ba6000830184614896565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148fd82614780565b810181811067ffffffffffffffff8211171561491c5761491b6148c5565b5b80604052505050565b600061492f6146cd565b905061493b82826148f4565b919050565b600067ffffffffffffffff82111561495b5761495a6148c5565b5b602082029050602081019050919050565b600080fd5b600061498461497f84614940565b614925565b905080838252602082019050602084028301858111156149a7576149a661496c565b5b835b818110156149d057806149bc8882614835565b8452602084019350506020810190506149a9565b5050509392505050565b600082601f8301126149ef576149ee6148c0565b5b81356149ff848260208601614971565b91505092915050565b600060208284031215614a1e57614a1d6146d7565b5b600082013567ffffffffffffffff811115614a3c57614a3b6146dc565b5b614a48848285016149da565b91505092915050565b6000819050919050565b6000614a76614a71614a6c846147ec565b614a51565b6147ec565b9050919050565b6000614a8882614a5b565b9050919050565b6000614a9a82614a7d565b9050919050565b614aaa81614a8f565b82525050565b6000602082019050614ac56000830184614aa1565b92915050565b600060208284031215614ae157614ae06146d7565b5b6000614aef84828501614835565b91505092915050565b600080600060608486031215614b1157614b106146d7565b5b6000614b1f86828701614835565b9350506020614b3086828701614835565b9250506040614b41868287016146f8565b9150509250925092565b614b548161488a565b8114614b5f57600080fd5b50565b600081359050614b7181614b4b565b92915050565b600060208284031215614b8d57614b8c6146d7565b5b6000614b9b84828501614b62565b91505092915050565b600060ff82169050919050565b614bba81614ba4565b82525050565b6000602082019050614bd56000830184614bb1565b92915050565b60008060408385031215614bf257614bf16146d7565b5b6000614c0085828601614835565b9250506020614c1185828601614b62565b9150509250929050565b614c248161480c565b82525050565b6000602082019050614c3f6000830184614c1b565b92915050565b600067ffffffffffffffff821115614c6057614c5f6148c5565b5b602082029050602081019050919050565b6000614c84614c7f84614c45565b614925565b90508083825260208201905060208402830185811115614ca757614ca661496c565b5b835b81811015614cd05780614cbc88826146f8565b845260208401935050602081019050614ca9565b5050509392505050565b600082601f830112614cef57614cee6148c0565b5b8135614cff848260208601614c71565b91505092915050565b60008060408385031215614d1f57614d1e6146d7565b5b600083013567ffffffffffffffff811115614d3d57614d3c6146dc565b5b614d49858286016149da565b925050602083013567ffffffffffffffff811115614d6a57614d696146dc565b5b614d7685828601614cda565b9150509250929050565b6000614d8b826147ec565b9050919050565b614d9b81614d80565b8114614da657600080fd5b50565b600081359050614db881614d92565b92915050565b60008060008060808587031215614dd857614dd76146d7565b5b6000614de687828801614da9565b9450506020614df787828801614da9565b9350506040614e0887828801614da9565b9250506060614e1987828801614da9565b91505092959194509250565b60008060008060008060c08789031215614e4257614e416146d7565b5b6000614e5089828a016146f8565b9650506020614e6189828a016146f8565b9550506040614e7289828a016146f8565b9450506060614e8389828a016146f8565b9350506080614e9489828a016146f8565b92505060a0614ea589828a016146f8565b9150509295509295509295565b60008060408385031215614ec957614ec86146d7565b5b6000614ed785828601614835565b9250506020614ee885828601614835565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f28602083614745565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f63616e6e6f7420626520736574206173207a65726f0000000000000000000000600082015250565b6000614f94601583614745565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061501157607f821691505b60208210810361502457615023614fca565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061509382614ba4565b915060ff82036150a6576150a5615059565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061510d602883614745565b9150615118826150b1565b604082019050919050565b6000602082019050818103600083015261513c81615100565b9050919050565b600061514e82614699565b915061515983614699565b925082820190508082111561517157615170615059565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151d3602383614745565b91506151de82615177565b604082019050919050565b60006020820190508181036000830152615202816151c6565b9050919050565b600061521482614699565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361524657615245615059565b5b600182019050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000615287600d83614745565b915061529282615251565b602082019050919050565b600060208201905081810360008301526152b68161527a565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b600061533f604583614745565b915061534a826152bd565b606082019050919050565b6000602082019050818103600083015261536e81615332565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153d1602583614745565b91506153dc82615375565b604082019050919050565b60006020820190508181036000830152615400816153c4565b9050919050565b7f6665657320746f6f206869676800000000000000000000000000000000000000600082015250565b600061543d600d83614745565b915061544882615407565b602082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006154cf602a83614745565b91506154da82615473565b604082019050919050565b600060208201905081810360008301526154fe816154c2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615561602683614745565b915061556c82615505565b604082019050919050565b6000602082019050818103600083015261559081615554565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155f3602483614745565b91506155fe82615597565b604082019050919050565b60006020820190508181036000830152615622816155e6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615685602283614745565b915061569082615629565b604082019050919050565b600060208201905081810360008301526156b481615678565b9050919050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b60006156f1600883614745565b91506156fc826156bb565b602082019050919050565b60006020820190508181036000830152615720816156e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615783602583614745565b915061578e82615727565b604082019050919050565b600060208201905081810360008301526157b281615776565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615815602383614745565b9150615820826157b9565b604082019050919050565b6000602082019050818103600083015261584481615808565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000615881601383614745565b915061588c8261584b565b602082019050919050565b600060208201905081810360008301526158b081615874565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000615913602b83614745565b915061591e826158b7565b604082019050919050565b6000602082019050818103600083015261594281615906565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b60006159a5602c83614745565b91506159b082615949565b604082019050919050565b600060208201905081810360008301526159d481615998565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615a37602483614745565b9150615a42826159db565b604082019050919050565b60006020820190508181036000830152615a6681615a2a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615ac9602683614745565b9150615ad482615a6d565b604082019050919050565b60006020820190508181036000830152615af881615abc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615b3982614699565b9150615b4483614699565b925082615b5457615b53615aff565b5b828204905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000615bbb603883614745565b9150615bc682615b5f565b604082019050919050565b60006020820190508181036000830152615bea81615bae565b9050919050565b6000606082019050615c0660008301866146a3565b615c1360208301856146a3565b615c2060408301846146a3565b949350505050565b6000615c3382614699565b9150615c3e83614699565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615c7757615c76615059565b5b828202905092915050565b6000615c8d82614699565b9150615c9883614699565b9250828203905081811115615cb057615caf615059565b5b92915050565b600081519050615cc58161481e565b92915050565b600060208284031215615ce157615ce06146d7565b5b6000615cef84828501615cb6565b91505092915050565b6000819050919050565b6000615d1d615d18615d1384615cf8565b614a51565b614699565b9050919050565b615d2d81615d02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d688161480c565b82525050565b6000615d7a8383615d5f565b60208301905092915050565b6000602082019050919050565b6000615d9e82615d33565b615da88185615d3e565b9350615db383615d4f565b8060005b83811015615de4578151615dcb8882615d6e565b9750615dd683615d86565b925050600181019050615db7565b5085935050505092915050565b600060a082019050615e0660008301886146a3565b615e136020830187615d24565b8181036040830152615e258186615d93565b9050615e346060830185614c1b565b615e4160808301846146a3565b9695505050505050565b600060c082019050615e606000830189614c1b565b615e6d60208301886146a3565b615e7a6040830187615d24565b615e876060830186615d24565b615e946080830185614c1b565b615ea160a08301846146a3565b979650505050505050565b600081519050615ebb816146e1565b92915050565b600080600060608486031215615eda57615ed96146d7565b5b6000615ee886828701615eac565b9350506020615ef986828701615eac565b9250506040615f0a86828701615eac565b9150509250925092565b6000608082019050615f296000830187615d24565b8181036020830152615f3b8186615d93565b9050615f4a6040830185614c1b565b615f5760608301846146a3565b95945050505050565b6000604082019050615f7560008301856146a3565b8181036020830152615f878184615d93565b9050939250505056fea2646970667358221220f7e8f09b1378f5f82c73a3f348f2cac83bf92c021f58de156e9381ad101c3c1f64736f6c63430008100033

Deployed Bytecode Sourcemap

38549:16741:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39585:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38995:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53331:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4678:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6844:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39661:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52932:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38354:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38635:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5797:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38940:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7495:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53169:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5640:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39785:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8396:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51302:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37934:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53656:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38683:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38808:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54409:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39064:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53514:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38766:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54546:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52073:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39461:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39703:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54860:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5968:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:94;;;;;;;;;;;;;:::i;:::-;;50977:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39827:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38861:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14637:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53060:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51433:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4897:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53829:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9114:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6308:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51854:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39502:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39870:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40670:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39620:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50393:576;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52690:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52388:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39422:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52810:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54681:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39381:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39906:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6546:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39132:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39195:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39743:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39543;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15537:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49824:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51628:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38274:72;;;;;;;;;;;;;:::i;:::-;;39585:28;;;;:::o;38995:62::-;;;;:::o;53331:171::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53429:1:::1;53417:9;:13;53409:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;53485:9;53467:15;:27;;;;53331:171:::0;:::o;4678:100::-;4732:13;4765:5;4758:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4678:100;:::o;6844:169::-;6927:4;6944:39;6953:12;:10;:12::i;:::-;6967:7;6976:6;6944:8;:39::i;:::-;7001:4;6994:11;;6844:169;;;;:::o;39661:35::-;;;;:::o;52932:116::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53032:8:::1;53011:18;:29;;;;52932:116:::0;:::o;38354:186::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38441:7:::1;38437:96;38458:6;:13;38454:1;:17;;;38437:96;;;38517:4;38493:10;:21;38504:6;38511:1;38504:9;;;;;;;;;;:::i;:::-;;;;;;;;38493:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38473:3;;;;;:::i;:::-;;;;38437:96;;;;38354:186:::0;:::o;38635:41::-;;;;;;;;;;;;;:::o;5797:108::-;5858:7;5885:12;;5878:19;;5797:108;:::o;38940:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;7495:492::-;7635:4;7652:36;7662:6;7670:9;7681:6;7652:9;:36::i;:::-;7701:24;7728:11;:19;7740:6;7728:19;;;;;;;;;;;;;;;:33;7748:12;:10;:12::i;:::-;7728:33;;;;;;;;;;;;;;;;7701:60;;7800:6;7780:16;:26;;7772:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7887:57;7896:6;7904:12;:10;:12::i;:::-;7937:6;7918:16;:25;7887:8;:57::i;:::-;7975:4;7968:11;;;7495:492;;;;;:::o;53169:150::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53256:8:::1;53239:14;;:25;;;;;;;;;;;;;;;;;;53280:31;53302:8;53280:31;;;;;;:::i;:::-;;;;;;;;53169:150:::0;:::o;5640:92::-;5698:5;5723:1;5716:8;;5640:92;:::o;39785:35::-;;;;:::o;8396:215::-;8484:4;8501:80;8510:12;:10;:12::i;:::-;8524:7;8570:10;8533:11;:25;8545:12;:10;:12::i;:::-;8533:25;;;;;;;;;;;;;;;:34;8559:7;8533:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8501:8;:80::i;:::-;8599:4;8592:11;;8396:215;;;;:::o;51302:123::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51412:5:::1;51386:14;:23;51401:7;51386:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;51302:123:::0;;:::o;37934:26::-;;;;;;;;;;;;;:::o;53656:165::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53762:4:::1;53729:20;:30;53750:8;53729:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;53809:4;53777:19;:29;53797:8;53777:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;53656:165:::0;:::o;38683:38::-;;;:::o;38808:40::-;;;;;;;;;;;;;:::o;54409:125::-;54474:4;54498:19;:28;54518:7;54498:28;;;;;;;;;;;;;;;;;;;;;;;;;54491:35;;54409:125;;;:::o;39064:61::-;;;;:::o;53514:134::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53635:5:::1;53602:20;:30;53623:8;53602:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;53514:134:::0;;:::o;38766:33::-;;;;;;;;;;;;;:::o;54546:127::-;54612:4;54636:20;:29;54657:7;54636:29;;;;;;;;;;;;;;;;;;;;;;;;;54629:36;;54546:127;;;:::o;52073:307::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52182:15:::1;;;;;;;;;;;52160:38;;:10;:38;;::::0;52152:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;52296:15;;;;;;;;;;;52254:59;;52276:10;52254:59;;;;;;;;;;;;52361:10;52324:15;;:48;;;;;;;;;;;;;;;;;;52073:307:::0;:::o;39461:34::-;;;;:::o;39703:33::-;;;;:::o;54860:377::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55024:15:::1;:22;55006:7;:14;:40;54998:49;;;::::0;::::1;;55083:3;55066:7;:14;:20;55058:29;;;::::0;::::1;;55104:9;55099:131;55123:7;:14;55119:1;:18;55099:131;;;55159:59;55175:10;55187:7;55195:1;55187:10;;;;;;;;:::i;:::-;;;;;;;;55199:15;55215:1;55199:18;;;;;;;;:::i;:::-;;;;;;;;55159:15;:59::i;:::-;55139:3;;;;;:::i;:::-;;;;55099:131;;;;54860:377:::0;;:::o;5968:127::-;6042:7;6069:9;:18;6079:7;6069:18;;;;;;;;;;;;;;;;6062:25;;5968:127;;;:::o;15288:94::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15353:21:::1;15371:1;15353:9;:21::i;:::-;15288:94::o:0;50977:317::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51162:11:::1;51144:15;;:29;;;;;;;;;;;;;;;;;;51202:11;51184:15;;:29;;;;;;;;;;;;;;;;;;51243:10;51224:16;;:29;;;;;;;;;;;;;;;;;;51276:10;51264:9;;:22;;;;;;;;;;;;;;;;;;50977:317:::0;;;;:::o;39827:36::-;;;;:::o;38861:70::-;;;;;;;;;;;;;:::o;14637:87::-;14683:7;14710:6;;;;;;;;;;;14703:13;;14637:87;:::o;53060:97::-;53107:7;53134:15;;53127:22;;53060:97;:::o;51433:187::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51525:9:::1;51508:14;:26;;;;51573:22;51591:3;51573:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;51555:14;;:40;;51547:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51433:187:::0;:::o;4897:104::-;4953:13;4986:7;4979:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4897:104;:::o;53829:254::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53936:13:::1;53928:21;;:4;:21;;::::0;53920:103:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;54034:41;54063:4;54069:5;54034:28;:41::i;:::-;53829:254:::0;;:::o;9114:413::-;9207:4;9224:24;9251:11;:25;9263:12;:10;:12::i;:::-;9251:25;;;;;;;;;;;;;;;:34;9277:7;9251:34;;;;;;;;;;;;;;;;9224:61;;9324:15;9304:16;:35;;9296:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9417:67;9426:12;:10;:12::i;:::-;9440:7;9468:15;9449:16;:34;9417:8;:67::i;:::-;9515:4;9508:11;;;9114:413;;;;:::o;6308:175::-;6394:4;6411:42;6421:12;:10;:12::i;:::-;6435:9;6446:6;6411:9;:42::i;:::-;6471:4;6464:11;;6308:175;;;;:::o;51854:209::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51954:15:::1;51928:23;:41;;;;52015:22;52033:3;52015:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;51988:23;;:49;;51980:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;51854:209:::0;:::o;39502:34::-;;;;:::o;39870:29::-;;;;:::o;40670:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;39620:32::-;;;;:::o;50393:576::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50569:7:::1;50550:16;:26;;;;50604:9;50587:14;:26;;;;50643:8;50624:16;:27;;;;50681:8;50662:16;:27;;;;50720:7;50700:17;:27;;;;50751:7;50738:10;:20;;;;50785:119;50893:10;;50785:103;50870:17;;50785:80;50848:16;;50785:58;50826:16;;50785:36;50806:14;;50785:16;;:20;;:36;;;;:::i;:::-;:40;;:58;;;;:::i;:::-;:62;;:80;;;;:::i;:::-;:84;;:103;;;;:::i;:::-;:107;;:119;;;;:::i;:::-;50769:13;:135;;;;50940:2;50923:13;;:19;;50915:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;50393:576:::0;;;;;;:::o;52690:108::-;52746:7;52773:17;;52766:24;;52690:108;:::o;52388:290::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52513:8:::1;52481:40;;:19;:28;52501:7;52481:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;52473:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;52610:8;52579:19;:28;52599:7;52579:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;52652:7;52636:34;;;52661:8;52636:34;;;;;;:::i;:::-;;;;;;;;52388:290:::0;;:::o;39422:32::-;;;;:::o;52810:114::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52908:8:::1;52888:17;:28;;;;52810:114:::0;:::o;54681:171::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54782:8:::1;54758:21;;:32;;;;;;;;;;;;;;;;;;54806:38;54835:8;54806:38;;;;;;:::i;:::-;;;;;;;;54681:171:::0;:::o;39381:34::-;;;;:::o;39906:33::-;;;;:::o;6546:151::-;6635:7;6662:11;:18;6674:5;6662:18;;;;;;;;;;;;;;;:27;6681:7;6662:27;;;;;;;;;;;;;;;;6655:34;;6546:151;;;;:::o;39132:56::-;;;;:::o;39195:52::-;;;;:::o;39743:35::-;;;;:::o;39543:::-;;;;:::o;15537:192::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15646:1:::1;15626:22;;:8;:22;;::::0;15618:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15702:19;15712:8;15702:9;:19::i;:::-;15537:192:::0;:::o;49824:561::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49998:7:::1;49980:15;:25;;;;50032:9;50016:13;:25;;;;50070:8;50052:15;:26;;;;50107:8;50089:15;:26;;;;50145:7;50126:16;:26;;;;50175:7;50163:9;:19;;;;50208:113;50311:9;;50208:98;50289:16;;50208:76;50268:15;;50208:55;50247:15;;50208:34;50228:13;;50208:15;;:19;;:34;;;;:::i;:::-;:38;;:55;;;;:::i;:::-;:59;;:76;;;;:::i;:::-;:80;;:98;;;;:::i;:::-;:102;;:113;;;;:::i;:::-;50193:12;:128;;;;50357:2;50341:12;;:18;;50333:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49824:561:::0;;;;;;:::o;51628:214::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51731:16:::1;51704:24;:43;;;;51794:22;51812:3;51794:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;51766:24;;:50;;51758:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51628:214:::0;:::o;38274:72::-;14868:12;:10;:12::i;:::-;14857:23;;:7;:5;:7::i;:::-;:23;;;14849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38334:4:::1;38325:6;;:13;;;;;;;;;;;;;;;;;;38274:72::o:0;3401:98::-;3454:7;3481:10;3474:17;;3401:98;:::o;11887:380::-;12040:1;12023:19;;:5;:19;;;12015:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12121:1;12102:21;;:7;:21;;;12094:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12205:6;12175:11;:18;12187:5;12175:18;;;;;;;;;;;;;;;:27;12194:7;12175:27;;;;;;;;;;;;;;;:36;;;;12243:7;12227:32;;12236:5;12227:32;;;12252:6;12227:32;;;;;;:::i;:::-;;;;;;;;11887:380;;;:::o;43067:2736::-;43167:4;43173:2;38076:6;;;;;;;;;;;:26;;;;38086:10;:16;38097:4;38086:16;;;;;;;;;;;;;;;;;;;;;;;;;38076:26;:44;;;;38106:10;:14;38117:2;38106:14;;;;;;;;;;;;;;;;;;;;;;;;;38076:44;38068:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43230:1:::1;43214:18;;:4;:18;;::::0;43206:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43307:1;43293:16;;:2;:16;;::::0;43285:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43369:14;:20;43384:4;43369:20;;;;;;;;;;;;;;;;;;;;;;;;;43368:21;:44;;;;;43394:14;:18;43409:2;43394:18;;;;;;;;;;;;;;;;;;;;;;;;;43393:19;43368:44;43360:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43462:1;43452:6;:11:::0;43449:92:::1;;43480:28;43496:4;43502:2;43506:1;43480:15;:28::i;:::-;43523:7;;43449:92;43564:25;:31;43590:4;43564:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;;43601:20;:26;43622:4;43601:26;;;;;;;;;;;;;;;;;;;;;;;;;43600:27;43564:64;:95;;;;;43634:20;:24;43655:2;43634:24;;;;;;;;;;;;;;;;;;;;;;;;;43633:25;43564:95;43561:215;;;43693:23;;43683:6;:33;;43675:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;43561:215;43791:25;:29;43817:2;43791:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;43826:20;:26;43847:4;43826:26;;;;;;;;;;;;;;;;;;;;;;;;;43825:27;43791:62;:93;;;;;43859:20;:24;43880:2;43859:24;;;;;;;;;;;;;;;;;;;;;;;;;43858:25;43791:93;43788:215;;;43918:24;;43908:6;:34;;43900:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;43788:215;44018:25;:29;44044:2;44018:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;44053:20;:26;44074:4;44053:26;;;;;;;;;;;;;;;;;;;;;;;;;44052:27;44018:62;:93;;;;;44086:20;:24;44107:2;44086:24;;;;;;;;;;;;;;;;;;;;;;;;;44085:25;44018:93;44015:336;;;44127:32;44162:13;44172:2;44162:9;:13::i;:::-;44127:48;;44253:14;;44243:6;44216:24;:33;;;;:::i;:::-;:51;;44190:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;44112:239;44015:336;44370:28;44401:24;44419:4;44401:9;:24::i;:::-;44370:55;;44446:24;44497:18;;44473:20;:42;;44446:69;;44539:16;;;;;;;;;;;44538:17;:50;;;;;44559:25;:29;44585:2;44559:29;;;;;;;;;;;;;;;;;;;;;;;;;44538:50;:75;;;;;44592:21;;;;;;;;;;;44538:75;44535:633;;;44633:19;44630:155;;;44696:18;;44673:41;;44733:36;44748:20;44733:14;:36::i;:::-;44630:155;44813:15;44831:21;44813:39;;44871:14;;;;;;;;;;;:45;;;;;44899:17;;44889:7;:27;44871:45;44867:290;;;44969:17;;44959:7;:27;44955:187;;;45021:17;;45011:27;;45079:43;45093:28;45105:15;;45093:7;:11;;:28;;;;:::i;:::-;45079:13;:43::i;:::-;44955:187;44867:290;44615:553;44535:633;45270:19;:25;45290:4;45270:25;;;;;;;;;;;;;;;;;;;;;;;;;45269:26;:54;;;;;45300:19;:23;45320:2;45300:23;;;;;;;;;;;;;;;;;;;;;;;;;45299:24;45269:54;45266:482;;;45340:12;45372:25;:31;45398:4;45372:31;;;;;;;;;;;;;;;;;;;;;;;;;45369:111;;;45431:33;45460:3;45431:24;45442:12;;45431:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45424:40;;45369:111;45499:25;:29;45525:2;45499:29;;;;;;;;;;;;;;;;;;;;;;;;;45496:110;;;45556:34;45586:3;45556:25;45567:13;;45556:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45549:41;;45496:110;45626:16;45637:4;45626:6;:10;;:16;;;;:::i;:::-;45617:25;;45657:42;45673:4;45687;45694;45657:15;:42::i;:::-;45325:423;45266:482;45760:33;45776:4;45782:2;45786:6;45760:15;:33::i;:::-;43195:2608;;38144:1;43067:2736:::0;;;;;:::o;10017:733::-;10175:1;10157:20;;:6;:20;;;10149:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10259:1;10238:23;;:9;:23;;;10230:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10314:47;10335:6;10343:9;10354:6;10314:20;:47::i;:::-;10374:21;10398:9;:17;10408:6;10398:17;;;;;;;;;;;;;;;;10374:41;;10451:6;10434:13;:23;;10426:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10572:6;10556:13;:22;10536:9;:17;10546:6;10536:17;;;;;;;;;;;;;;;:42;;;;10624:6;10600:9;:20;10610:9;10600:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10665:9;10648:35;;10657:6;10648:35;;;10676:6;10648:35;;;;;;:::i;:::-;;;;;;;;10696:46;10716:6;10724:9;10735:6;10696:19;:46::i;:::-;10138:612;10017:733;;;:::o;15737:173::-;15793:16;15812:6;;;;;;;;;;;15793:25;;15838:8;15829:6;;:17;;;;;;;;;;;;;;;;;;15893:8;15862:40;;15883:8;15862:40;;;;;;;;;;;;15782:128;15737:173;:::o;26928:98::-;26986:7;27017:1;27013;:5;;;;:::i;:::-;27006:12;;26928:98;;;;:::o;54091:306::-;54217:5;54182:40;;:25;:31;54208:4;54182:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;54174:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;54328:5;54294:25;:31;54320:4;54294:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;54383:5;54349:40;;54377:4;54349:40;;;;;;;;;;;;54091:306;;:::o;25791:98::-;25849:7;25880:1;25876;:5;;;;:::i;:::-;25869:12;;25791:98;;;;:::o;45811:1140::-;41447:4;41428:16;;:23;;;;;;;;;;;;;;;;;;45896::::1;45922:61;45969:13;;45922:42;45947:16;;45922:20;:24;;:42;;;;:::i;:::-;:46;;:61;;;;:::i;:::-;45896:87;;45994:20;46017:41;46042:15;46017:20;:24;;:41;;;;:::i;:::-;45994:64;;46120:12;46135:22;46155:1;46135:15;:19;;:22;;;;:::i;:::-;46120:37;;46168:17;46188:25;46208:4;46188:15;:19;;:25;;;;:::i;:::-;46168:45;;46491:22;46516:21;46491:46;;46582:37;46599:4;46613;46582:16;:37::i;:::-;46680:18;46701:41;46727:14;46701:21;:25;;:41;;;;:::i;:::-;46680:62;;46792:35;46805:9;46816:10;46792:12;:35::i;:::-;46840:34;46861:12;46840:20;:34::i;:::-;46900:43;46915:4;46921:10;46933:9;46900:43;;;;;;;;:::i;:::-;;;;;;;;45885:1066;;;;;;41493:5:::0;41474:16;;:24;;;;;;;;;;;;;;;;;;45811:1140;:::o;48389:135::-;41447:4;41428:16;;:23;;;;;;;;;;;;;;;;;;48469:1:::1;48460:6;:10;48456:61;;;48484:24;48501:6;48484:16;:24::i;:::-;48456:61;41493:5:::0;41474:16;;:24;;;;;;;;;;;;;;;;;;48389:135;:::o;26529:98::-;26587:7;26618:1;26614;:5;;;;:::i;:::-;26607:12;;26529:98;;;;:::o;26172:::-;26230:7;26261:1;26257;:5;;;;:::i;:::-;26250:12;;26172:98;;;;:::o;12867:125::-;;;;:::o;13596:124::-;;;;:::o;49121:695::-;49260:21;49298:1;49284:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49260:40;;49329:4;49311;49316:1;49311:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;49355:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49345:4;49350:1;49345:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;49446:11;49393:50;49411:4;49426:15;;;;;;;;;;;49393:9;:50::i;:::-;:64;49390:156;;;49472:62;49489:4;49504:15;;;;;;;;;;;49531:1;49522:11;49472:8;:62::i;:::-;49390:156;49584:15;;;;;;;;;;;:66;;;49665:11;49691:1;49735:4;49754:3;49772:15;49584:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49189:627;49121:695;;:::o;47863:513::-;48011:62;48028:4;48043:15;;;;;;;;;;;48061:11;48011:8;:62::i;:::-;48116:15;;;;;;;;;;;:31;;;48155:9;48188:4;48208:11;48234:1;48277;48320:7;:5;:7::i;:::-;48342:15;48116:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47863:513;;:::o;46959:896::-;47029:25;47057:21;47029:49;;47089:44;47106:11;47127:4;47089:16;:44::i;:::-;47144:24;47171:44;47197:17;47171:21;:25;;:44;;;;:::i;:::-;47144:71;;47226:22;47251:79;47294:35;47312:16;;47294:13;;:17;;:35;;;;:::i;:::-;47251:38;47272:16;;47251;:20;;:38;;;;:::i;:::-;:42;;:79;;;;:::i;:::-;47226:104;;47341:22;47366:79;47409:35;47427:16;;47409:13;;:17;;:35;;;;:::i;:::-;47366:38;47387:16;;47366;:20;;:38;;;;:::i;:::-;:42;;:79;;;;:::i;:::-;47341:104;;47456:16;47475:80;47519:35;47537:16;;47519:13;;:17;;:35;;;;:::i;:::-;47475:39;47496:17;;47475:16;:20;;:39;;;;:::i;:::-;:43;;:80;;;;:::i;:::-;47456:99;;47566:16;47585:73;47622:35;47640:16;;47622:13;;:17;;:35;;;;:::i;:::-;47585:32;47606:10;;47585:16;:20;;:32;;;;:::i;:::-;:36;;:73;;;;:::i;:::-;47566:92;;47669:15;;;;;;;;;;;:24;;:40;47694:14;47669:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47720:15;;;;;;;;;;;:24;;:40;47745:14;47720:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47771:16;;;;;;;;;;;:25;;:35;47797:8;47771:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47817:9;;;;;;;;;;;:18;;:28;47836:8;47817:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47018:837;;;;;;46959:896;:::o;48536:577::-;48657:21;48695:1;48681:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48657:40;;48718:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48708:4;48713:1;48708:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48769:4;48751;48756:1;48751:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48811:15;;;;;;;;;;;:66;;;48885:6;48907:1;48954:4;48973:10;;;;;;;;;;;49014:24;49034:3;49014:15;:19;;:24;;;;:::i;:::-;48811:238;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49075:30;49092:6;49100:4;49075:30;;;;;;;:::i;:::-;;;;;;;;48586:527;48536:577;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:99::-;1429:6;1463:5;1457:12;1447:22;;1377:99;;;:::o;1482:169::-;1566:11;1600:6;1595:3;1588:19;1640:4;1635:3;1631:14;1616:29;;1482:169;;;;:::o;1657:246::-;1738:1;1748:113;1762:6;1759:1;1756:13;1748:113;;;1847:1;1842:3;1838:11;1832:18;1828:1;1823:3;1819:11;1812:39;1784:2;1781:1;1777:10;1772:15;;1748:113;;;1895:1;1886:6;1881:3;1877:16;1870:27;1719:184;1657:246;;;:::o;1909:102::-;1950:6;2001:2;1997:7;1992:2;1985:5;1981:14;1977:28;1967:38;;1909:102;;;:::o;2017:377::-;2105:3;2133:39;2166:5;2133:39;:::i;:::-;2188:71;2252:6;2247:3;2188:71;:::i;:::-;2181:78;;2268:65;2326:6;2321:3;2314:4;2307:5;2303:16;2268:65;:::i;:::-;2358:29;2380:6;2358:29;:::i;:::-;2353:3;2349:39;2342:46;;2109:285;2017:377;;;;:::o;2400:313::-;2513:4;2551:2;2540:9;2536:18;2528:26;;2600:9;2594:4;2590:20;2586:1;2575:9;2571:17;2564:47;2628:78;2701:4;2692:6;2628:78;:::i;:::-;2620:86;;2400:313;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:117::-;4242:1;4239;4232:12;4256:180;4304:77;4301:1;4294:88;4401:4;4398:1;4391:15;4425:4;4422:1;4415:15;4442:281;4525:27;4547:4;4525:27;:::i;:::-;4517:6;4513:40;4655:6;4643:10;4640:22;4619:18;4607:10;4604:34;4601:62;4598:88;;;4666:18;;:::i;:::-;4598:88;4706:10;4702:2;4695:22;4485:238;4442:281;;:::o;4729:129::-;4763:6;4790:20;;:::i;:::-;4780:30;;4819:33;4847:4;4839:6;4819:33;:::i;:::-;4729:129;;;:::o;4864:311::-;4941:4;5031:18;5023:6;5020:30;5017:56;;;5053:18;;:::i;:::-;5017:56;5103:4;5095:6;5091:17;5083:25;;5163:4;5157;5153:15;5145:23;;4864:311;;;:::o;5181:117::-;5290:1;5287;5280:12;5321:710;5417:5;5442:81;5458:64;5515:6;5458:64;:::i;:::-;5442:81;:::i;:::-;5433:90;;5543:5;5572:6;5565:5;5558:21;5606:4;5599:5;5595:16;5588:23;;5659:4;5651:6;5647:17;5639:6;5635:30;5688:3;5680:6;5677:15;5674:122;;;5707:79;;:::i;:::-;5674:122;5822:6;5805:220;5839:6;5834:3;5831:15;5805:220;;;5914:3;5943:37;5976:3;5964:10;5943:37;:::i;:::-;5938:3;5931:50;6010:4;6005:3;6001:14;5994:21;;5881:144;5865:4;5860:3;5856:14;5849:21;;5805:220;;;5809:21;5423:608;;5321:710;;;;;:::o;6054:370::-;6125:5;6174:3;6167:4;6159:6;6155:17;6151:27;6141:122;;6182:79;;:::i;:::-;6141:122;6299:6;6286:20;6324:94;6414:3;6406:6;6399:4;6391:6;6387:17;6324:94;:::i;:::-;6315:103;;6131:293;6054:370;;;;:::o;6430:539::-;6514:6;6563:2;6551:9;6542:7;6538:23;6534:32;6531:119;;;6569:79;;:::i;:::-;6531:119;6717:1;6706:9;6702:17;6689:31;6747:18;6739:6;6736:30;6733:117;;;6769:79;;:::i;:::-;6733:117;6874:78;6944:7;6935:6;6924:9;6920:22;6874:78;:::i;:::-;6864:88;;6660:302;6430:539;;;;:::o;6975:60::-;7003:3;7024:5;7017:12;;6975:60;;;:::o;7041:142::-;7091:9;7124:53;7142:34;7151:24;7169:5;7151:24;:::i;:::-;7142:34;:::i;:::-;7124:53;:::i;:::-;7111:66;;7041:142;;;:::o;7189:126::-;7239:9;7272:37;7303:5;7272:37;:::i;:::-;7259:50;;7189:126;;;:::o;7321:153::-;7398:9;7431:37;7462:5;7431:37;:::i;:::-;7418:50;;7321:153;;;:::o;7480:185::-;7594:64;7652:5;7594:64;:::i;:::-;7589:3;7582:77;7480:185;;:::o;7671:276::-;7791:4;7829:2;7818:9;7814:18;7806:26;;7842:98;7937:1;7926:9;7922:17;7913:6;7842:98;:::i;:::-;7671:276;;;;:::o;7953:329::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:53;8257:7;8248:6;8237:9;8233:22;8212:53;:::i;:::-;8202:63;;8158:117;7953:329;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:116::-;8983:21;8998:5;8983:21;:::i;:::-;8976:5;8973:32;8963:60;;9019:1;9016;9009:12;8963:60;8913:116;:::o;9035:133::-;9078:5;9116:6;9103:20;9094:29;;9132:30;9156:5;9132:30;:::i;:::-;9035:133;;;;:::o;9174:323::-;9230:6;9279:2;9267:9;9258:7;9254:23;9250:32;9247:119;;;9285:79;;:::i;:::-;9247:119;9405:1;9430:50;9472:7;9463:6;9452:9;9448:22;9430:50;:::i;:::-;9420:60;;9376:114;9174:323;;;;:::o;9503:86::-;9538:7;9578:4;9571:5;9567:16;9556:27;;9503:86;;;:::o;9595:112::-;9678:22;9694:5;9678:22;:::i;:::-;9673:3;9666:35;9595:112;;:::o;9713:214::-;9802:4;9840:2;9829:9;9825:18;9817:26;;9853:67;9917:1;9906:9;9902:17;9893:6;9853:67;:::i;:::-;9713:214;;;;:::o;9933:468::-;9998:6;10006;10055:2;10043:9;10034:7;10030:23;10026:32;10023:119;;;10061:79;;:::i;:::-;10023:119;10181:1;10206:53;10251:7;10242:6;10231:9;10227:22;10206:53;:::i;:::-;10196:63;;10152:117;10308:2;10334:50;10376:7;10367:6;10356:9;10352:22;10334:50;:::i;:::-;10324:60;;10279:115;9933:468;;;;;:::o;10407:118::-;10494:24;10512:5;10494:24;:::i;:::-;10489:3;10482:37;10407:118;;:::o;10531:222::-;10624:4;10662:2;10651:9;10647:18;10639:26;;10675:71;10743:1;10732:9;10728:17;10719:6;10675:71;:::i;:::-;10531:222;;;;:::o;10759:311::-;10836:4;10926:18;10918:6;10915:30;10912:56;;;10948:18;;:::i;:::-;10912:56;10998:4;10990:6;10986:17;10978:25;;11058:4;11052;11048:15;11040:23;;10759:311;;;:::o;11093:710::-;11189:5;11214:81;11230:64;11287:6;11230:64;:::i;:::-;11214:81;:::i;:::-;11205:90;;11315:5;11344:6;11337:5;11330:21;11378:4;11371:5;11367:16;11360:23;;11431:4;11423:6;11419:17;11411:6;11407:30;11460:3;11452:6;11449:15;11446:122;;;11479:79;;:::i;:::-;11446:122;11594:6;11577:220;11611:6;11606:3;11603:15;11577:220;;;11686:3;11715:37;11748:3;11736:10;11715:37;:::i;:::-;11710:3;11703:50;11782:4;11777:3;11773:14;11766:21;;11653:144;11637:4;11632:3;11628:14;11621:21;;11577:220;;;11581:21;11195:608;;11093:710;;;;;:::o;11826:370::-;11897:5;11946:3;11939:4;11931:6;11927:17;11923:27;11913:122;;11954:79;;:::i;:::-;11913:122;12071:6;12058:20;12096:94;12186:3;12178:6;12171:4;12163:6;12159:17;12096:94;:::i;:::-;12087:103;;11903:293;11826:370;;;;:::o;12202:894::-;12320:6;12328;12377:2;12365:9;12356:7;12352:23;12348:32;12345:119;;;12383:79;;:::i;:::-;12345:119;12531:1;12520:9;12516:17;12503:31;12561:18;12553:6;12550:30;12547:117;;;12583:79;;:::i;:::-;12547:117;12688:78;12758:7;12749:6;12738:9;12734:22;12688:78;:::i;:::-;12678:88;;12474:302;12843:2;12832:9;12828:18;12815:32;12874:18;12866:6;12863:30;12860:117;;;12896:79;;:::i;:::-;12860:117;13001:78;13071:7;13062:6;13051:9;13047:22;13001:78;:::i;:::-;12991:88;;12786:303;12202:894;;;;;:::o;13102:104::-;13147:7;13176:24;13194:5;13176:24;:::i;:::-;13165:35;;13102:104;;;:::o;13212:138::-;13293:32;13319:5;13293:32;:::i;:::-;13286:5;13283:43;13273:71;;13340:1;13337;13330:12;13273:71;13212:138;:::o;13356:155::-;13410:5;13448:6;13435:20;13426:29;;13464:41;13499:5;13464:41;:::i;:::-;13356:155;;;;:::o;13517:829::-;13635:6;13643;13651;13659;13708:3;13696:9;13687:7;13683:23;13679:33;13676:120;;;13715:79;;:::i;:::-;13676:120;13835:1;13860:61;13913:7;13904:6;13893:9;13889:22;13860:61;:::i;:::-;13850:71;;13806:125;13970:2;13996:61;14049:7;14040:6;14029:9;14025:22;13996:61;:::i;:::-;13986:71;;13941:126;14106:2;14132:61;14185:7;14176:6;14165:9;14161:22;14132:61;:::i;:::-;14122:71;;14077:126;14242:2;14268:61;14321:7;14312:6;14301:9;14297:22;14268:61;:::i;:::-;14258:71;;14213:126;13517:829;;;;;;;:::o;14352:1057::-;14456:6;14464;14472;14480;14488;14496;14545:3;14533:9;14524:7;14520:23;14516:33;14513:120;;;14552:79;;:::i;:::-;14513:120;14672:1;14697:53;14742:7;14733:6;14722:9;14718:22;14697:53;:::i;:::-;14687:63;;14643:117;14799:2;14825:53;14870:7;14861:6;14850:9;14846:22;14825:53;:::i;:::-;14815:63;;14770:118;14927:2;14953:53;14998:7;14989:6;14978:9;14974:22;14953:53;:::i;:::-;14943:63;;14898:118;15055:2;15081:53;15126:7;15117:6;15106:9;15102:22;15081:53;:::i;:::-;15071:63;;15026:118;15183:3;15210:53;15255:7;15246:6;15235:9;15231:22;15210:53;:::i;:::-;15200:63;;15154:119;15312:3;15339:53;15384:7;15375:6;15364:9;15360:22;15339:53;:::i;:::-;15329:63;;15283:119;14352:1057;;;;;;;;:::o;15415:474::-;15483:6;15491;15540:2;15528:9;15519:7;15515:23;15511:32;15508:119;;;15546:79;;:::i;:::-;15508:119;15666:1;15691:53;15736:7;15727:6;15716:9;15712:22;15691:53;:::i;:::-;15681:63;;15637:117;15793:2;15819:53;15864:7;15855:6;15844:9;15840:22;15819:53;:::i;:::-;15809:63;;15764:118;15415:474;;;;;:::o;15895:182::-;16035:34;16031:1;16023:6;16019:14;16012:58;15895:182;:::o;16083:366::-;16225:3;16246:67;16310:2;16305:3;16246:67;:::i;:::-;16239:74;;16322:93;16411:3;16322:93;:::i;:::-;16440:2;16435:3;16431:12;16424:19;;16083:366;;;:::o;16455:419::-;16621:4;16659:2;16648:9;16644:18;16636:26;;16708:9;16702:4;16698:20;16694:1;16683:9;16679:17;16672:47;16736:131;16862:4;16736:131;:::i;:::-;16728:139;;16455:419;;;:::o;16880:171::-;17020:23;17016:1;17008:6;17004:14;16997:47;16880:171;:::o;17057:366::-;17199:3;17220:67;17284:2;17279:3;17220:67;:::i;:::-;17213:74;;17296:93;17385:3;17296:93;:::i;:::-;17414:2;17409:3;17405:12;17398:19;;17057:366;;;:::o;17429:419::-;17595:4;17633:2;17622:9;17618:18;17610:26;;17682:9;17676:4;17672:20;17668:1;17657:9;17653:17;17646:47;17710:131;17836:4;17710:131;:::i;:::-;17702:139;;17429:419;;;:::o;17854:180::-;17902:77;17899:1;17892:88;17999:4;17996:1;17989:15;18023:4;18020:1;18013:15;18040:320;18084:6;18121:1;18115:4;18111:12;18101:22;;18168:1;18162:4;18158:12;18189:18;18179:81;;18245:4;18237:6;18233:17;18223:27;;18179:81;18307:2;18299:6;18296:14;18276:18;18273:38;18270:84;;18326:18;;:::i;:::-;18270:84;18091:269;18040:320;;;:::o;18366:180::-;18414:77;18411:1;18404:88;18511:4;18508:1;18501:15;18535:4;18532:1;18525:15;18552:180;18600:77;18597:1;18590:88;18697:4;18694:1;18687:15;18721:4;18718:1;18711:15;18738:167;18775:3;18798:22;18814:5;18798:22;:::i;:::-;18789:31;;18842:4;18835:5;18832:15;18829:41;;18850:18;;:::i;:::-;18829:41;18897:1;18890:5;18886:13;18879:20;;18738:167;;;:::o;18911:227::-;19051:34;19047:1;19039:6;19035:14;19028:58;19120:10;19115:2;19107:6;19103:15;19096:35;18911:227;:::o;19144:366::-;19286:3;19307:67;19371:2;19366:3;19307:67;:::i;:::-;19300:74;;19383:93;19472:3;19383:93;:::i;:::-;19501:2;19496:3;19492:12;19485:19;;19144:366;;;:::o;19516:419::-;19682:4;19720:2;19709:9;19705:18;19697:26;;19769:9;19763:4;19759:20;19755:1;19744:9;19740:17;19733:47;19797:131;19923:4;19797:131;:::i;:::-;19789:139;;19516:419;;;:::o;19941:191::-;19981:3;20000:20;20018:1;20000:20;:::i;:::-;19995:25;;20034:20;20052:1;20034:20;:::i;:::-;20029:25;;20077:1;20074;20070:9;20063:16;;20098:3;20095:1;20092:10;20089:36;;;20105:18;;:::i;:::-;20089:36;19941:191;;;;:::o;20138:222::-;20278:34;20274:1;20266:6;20262:14;20255:58;20347:5;20342:2;20334:6;20330:15;20323:30;20138:222;:::o;20366:366::-;20508:3;20529:67;20593:2;20588:3;20529:67;:::i;:::-;20522:74;;20605:93;20694:3;20605:93;:::i;:::-;20723:2;20718:3;20714:12;20707:19;;20366:366;;;:::o;20738:419::-;20904:4;20942:2;20931:9;20927:18;20919:26;;20991:9;20985:4;20981:20;20977:1;20966:9;20962:17;20955:47;21019:131;21145:4;21019:131;:::i;:::-;21011:139;;20738:419;;;:::o;21163:233::-;21202:3;21225:24;21243:5;21225:24;:::i;:::-;21216:33;;21271:66;21264:5;21261:77;21258:103;;21341:18;;:::i;:::-;21258:103;21388:1;21381:5;21377:13;21370:20;;21163:233;;;:::o;21402:163::-;21542:15;21538:1;21530:6;21526:14;21519:39;21402:163;:::o;21571:366::-;21713:3;21734:67;21798:2;21793:3;21734:67;:::i;:::-;21727:74;;21810:93;21899:3;21810:93;:::i;:::-;21928:2;21923:3;21919:12;21912:19;;21571:366;;;:::o;21943:419::-;22109:4;22147:2;22136:9;22132:18;22124:26;;22196:9;22190:4;22186:20;22182:1;22171:9;22167:17;22160:47;22224:131;22350:4;22224:131;:::i;:::-;22216:139;;21943:419;;;:::o;22368:293::-;22508:34;22504:1;22496:6;22492:14;22485:58;22577:34;22572:2;22564:6;22560:15;22553:59;22646:7;22641:2;22633:6;22629:15;22622:32;22368:293;:::o;22667:366::-;22809:3;22830:67;22894:2;22889:3;22830:67;:::i;:::-;22823:74;;22906:93;22995:3;22906:93;:::i;:::-;23024:2;23019:3;23015:12;23008:19;;22667:366;;;:::o;23039:419::-;23205:4;23243:2;23232:9;23228:18;23220:26;;23292:9;23286:4;23282:20;23278:1;23267:9;23263:17;23256:47;23320:131;23446:4;23320:131;:::i;:::-;23312:139;;23039:419;;;:::o;23464:224::-;23604:34;23600:1;23592:6;23588:14;23581:58;23673:7;23668:2;23660:6;23656:15;23649:32;23464:224;:::o;23694:366::-;23836:3;23857:67;23921:2;23916:3;23857:67;:::i;:::-;23850:74;;23933:93;24022:3;23933:93;:::i;:::-;24051:2;24046:3;24042:12;24035:19;;23694:366;;;:::o;24066:419::-;24232:4;24270:2;24259:9;24255:18;24247:26;;24319:9;24313:4;24309:20;24305:1;24294:9;24290:17;24283:47;24347:131;24473:4;24347:131;:::i;:::-;24339:139;;24066:419;;;:::o;24491:163::-;24631:15;24627:1;24619:6;24615:14;24608:39;24491:163;:::o;24660:366::-;24802:3;24823:67;24887:2;24882:3;24823:67;:::i;:::-;24816:74;;24899:93;24988:3;24899:93;:::i;:::-;25017:2;25012:3;25008:12;25001:19;;24660:366;;;:::o;25032:419::-;25198:4;25236:2;25225:9;25221:18;25213:26;;25285:9;25279:4;25275:20;25271:1;25260:9;25256:17;25249:47;25313:131;25439:4;25313:131;:::i;:::-;25305:139;;25032:419;;;:::o;25457:229::-;25597:34;25593:1;25585:6;25581:14;25574:58;25666:12;25661:2;25653:6;25649:15;25642:37;25457:229;:::o;25692:366::-;25834:3;25855:67;25919:2;25914:3;25855:67;:::i;:::-;25848:74;;25931:93;26020:3;25931:93;:::i;:::-;26049:2;26044:3;26040:12;26033:19;;25692:366;;;:::o;26064:419::-;26230:4;26268:2;26257:9;26253:18;26245:26;;26317:9;26311:4;26307:20;26303:1;26292:9;26288:17;26281:47;26345:131;26471:4;26345:131;:::i;:::-;26337:139;;26064:419;;;:::o;26489:225::-;26629:34;26625:1;26617:6;26613:14;26606:58;26698:8;26693:2;26685:6;26681:15;26674:33;26489:225;:::o;26720:366::-;26862:3;26883:67;26947:2;26942:3;26883:67;:::i;:::-;26876:74;;26959:93;27048:3;26959:93;:::i;:::-;27077:2;27072:3;27068:12;27061:19;;26720:366;;;:::o;27092:419::-;27258:4;27296:2;27285:9;27281:18;27273:26;;27345:9;27339:4;27335:20;27331:1;27320:9;27316:17;27309:47;27373:131;27499:4;27373:131;:::i;:::-;27365:139;;27092:419;;;:::o;27517:223::-;27657:34;27653:1;27645:6;27641:14;27634:58;27726:6;27721:2;27713:6;27709:15;27702:31;27517:223;:::o;27746:366::-;27888:3;27909:67;27973:2;27968:3;27909:67;:::i;:::-;27902:74;;27985:93;28074:3;27985:93;:::i;:::-;28103:2;28098:3;28094:12;28087:19;;27746:366;;;:::o;28118:419::-;28284:4;28322:2;28311:9;28307:18;28299:26;;28371:9;28365:4;28361:20;28357:1;28346:9;28342:17;28335:47;28399:131;28525:4;28399:131;:::i;:::-;28391:139;;28118:419;;;:::o;28543:221::-;28683:34;28679:1;28671:6;28667:14;28660:58;28752:4;28747:2;28739:6;28735:15;28728:29;28543:221;:::o;28770:366::-;28912:3;28933:67;28997:2;28992:3;28933:67;:::i;:::-;28926:74;;29009:93;29098:3;29009:93;:::i;:::-;29127:2;29122:3;29118:12;29111:19;;28770:366;;;:::o;29142:419::-;29308:4;29346:2;29335:9;29331:18;29323:26;;29395:9;29389:4;29385:20;29381:1;29370:9;29366:17;29359:47;29423:131;29549:4;29423:131;:::i;:::-;29415:139;;29142:419;;;:::o;29567:158::-;29707:10;29703:1;29695:6;29691:14;29684:34;29567:158;:::o;29731:365::-;29873:3;29894:66;29958:1;29953:3;29894:66;:::i;:::-;29887:73;;29969:93;30058:3;29969:93;:::i;:::-;30087:2;30082:3;30078:12;30071:19;;29731:365;;;:::o;30102:419::-;30268:4;30306:2;30295:9;30291:18;30283:26;;30355:9;30349:4;30345:20;30341:1;30330:9;30326:17;30319:47;30383:131;30509:4;30383:131;:::i;:::-;30375:139;;30102:419;;;:::o;30527:224::-;30667:34;30663:1;30655:6;30651:14;30644:58;30736:7;30731:2;30723:6;30719:15;30712:32;30527:224;:::o;30757:366::-;30899:3;30920:67;30984:2;30979:3;30920:67;:::i;:::-;30913:74;;30996:93;31085:3;30996:93;:::i;:::-;31114:2;31109:3;31105:12;31098:19;;30757:366;;;:::o;31129:419::-;31295:4;31333:2;31322:9;31318:18;31310:26;;31382:9;31376:4;31372:20;31368:1;31357:9;31353:17;31346:47;31410:131;31536:4;31410:131;:::i;:::-;31402:139;;31129:419;;;:::o;31554:222::-;31694:34;31690:1;31682:6;31678:14;31671:58;31763:5;31758:2;31750:6;31746:15;31739:30;31554:222;:::o;31782:366::-;31924:3;31945:67;32009:2;32004:3;31945:67;:::i;:::-;31938:74;;32021:93;32110:3;32021:93;:::i;:::-;32139:2;32134:3;32130:12;32123:19;;31782:366;;;:::o;32154:419::-;32320:4;32358:2;32347:9;32343:18;32335:26;;32407:9;32401:4;32397:20;32393:1;32382:9;32378:17;32371:47;32435:131;32561:4;32435:131;:::i;:::-;32427:139;;32154:419;;;:::o;32579:169::-;32719:21;32715:1;32707:6;32703:14;32696:45;32579:169;:::o;32754:366::-;32896:3;32917:67;32981:2;32976:3;32917:67;:::i;:::-;32910:74;;32993:93;33082:3;32993:93;:::i;:::-;33111:2;33106:3;33102:12;33095:19;;32754:366;;;:::o;33126:419::-;33292:4;33330:2;33319:9;33315:18;33307:26;;33379:9;33373:4;33369:20;33365:1;33354:9;33350:17;33343:47;33407:131;33533:4;33407:131;:::i;:::-;33399:139;;33126:419;;;:::o;33551:230::-;33691:34;33687:1;33679:6;33675:14;33668:58;33760:13;33755:2;33747:6;33743:15;33736:38;33551:230;:::o;33787:366::-;33929:3;33950:67;34014:2;34009:3;33950:67;:::i;:::-;33943:74;;34026:93;34115:3;34026:93;:::i;:::-;34144:2;34139:3;34135:12;34128:19;;33787:366;;;:::o;34159:419::-;34325:4;34363:2;34352:9;34348:18;34340:26;;34412:9;34406:4;34402:20;34398:1;34387:9;34383:17;34376:47;34440:131;34566:4;34440:131;:::i;:::-;34432:139;;34159:419;;;:::o;34584:231::-;34724:34;34720:1;34712:6;34708:14;34701:58;34793:14;34788:2;34780:6;34776:15;34769:39;34584:231;:::o;34821:366::-;34963:3;34984:67;35048:2;35043:3;34984:67;:::i;:::-;34977:74;;35060:93;35149:3;35060:93;:::i;:::-;35178:2;35173:3;35169:12;35162:19;;34821:366;;;:::o;35193:419::-;35359:4;35397:2;35386:9;35382:18;35374:26;;35446:9;35440:4;35436:20;35432:1;35421:9;35417:17;35410:47;35474:131;35600:4;35474:131;:::i;:::-;35466:139;;35193:419;;;:::o;35618:223::-;35758:34;35754:1;35746:6;35742:14;35735:58;35827:6;35822:2;35814:6;35810:15;35803:31;35618:223;:::o;35847:366::-;35989:3;36010:67;36074:2;36069:3;36010:67;:::i;:::-;36003:74;;36086:93;36175:3;36086:93;:::i;:::-;36204:2;36199:3;36195:12;36188:19;;35847:366;;;:::o;36219:419::-;36385:4;36423:2;36412:9;36408:18;36400:26;;36472:9;36466:4;36462:20;36458:1;36447:9;36443:17;36436:47;36500:131;36626:4;36500:131;:::i;:::-;36492:139;;36219:419;;;:::o;36644:225::-;36784:34;36780:1;36772:6;36768:14;36761:58;36853:8;36848:2;36840:6;36836:15;36829:33;36644:225;:::o;36875:366::-;37017:3;37038:67;37102:2;37097:3;37038:67;:::i;:::-;37031:74;;37114:93;37203:3;37114:93;:::i;:::-;37232:2;37227:3;37223:12;37216:19;;36875:366;;;:::o;37247:419::-;37413:4;37451:2;37440:9;37436:18;37428:26;;37500:9;37494:4;37490:20;37486:1;37475:9;37471:17;37464:47;37528:131;37654:4;37528:131;:::i;:::-;37520:139;;37247:419;;;:::o;37672:180::-;37720:77;37717:1;37710:88;37817:4;37814:1;37807:15;37841:4;37838:1;37831:15;37858:185;37898:1;37915:20;37933:1;37915:20;:::i;:::-;37910:25;;37949:20;37967:1;37949:20;:::i;:::-;37944:25;;37988:1;37978:35;;37993:18;;:::i;:::-;37978:35;38035:1;38032;38028:9;38023:14;;37858:185;;;;:::o;38049:243::-;38189:34;38185:1;38177:6;38173:14;38166:58;38258:26;38253:2;38245:6;38241:15;38234:51;38049:243;:::o;38298:366::-;38440:3;38461:67;38525:2;38520:3;38461:67;:::i;:::-;38454:74;;38537:93;38626:3;38537:93;:::i;:::-;38655:2;38650:3;38646:12;38639:19;;38298:366;;;:::o;38670:419::-;38836:4;38874:2;38863:9;38859:18;38851:26;;38923:9;38917:4;38913:20;38909:1;38898:9;38894:17;38887:47;38951:131;39077:4;38951:131;:::i;:::-;38943:139;;38670:419;;;:::o;39095:442::-;39244:4;39282:2;39271:9;39267:18;39259:26;;39295:71;39363:1;39352:9;39348:17;39339:6;39295:71;:::i;:::-;39376:72;39444:2;39433:9;39429:18;39420:6;39376:72;:::i;:::-;39458;39526:2;39515:9;39511:18;39502:6;39458:72;:::i;:::-;39095:442;;;;;;:::o;39543:348::-;39583:7;39606:20;39624:1;39606:20;:::i;:::-;39601:25;;39640:20;39658:1;39640:20;:::i;:::-;39635:25;;39828:1;39760:66;39756:74;39753:1;39750:81;39745:1;39738:9;39731:17;39727:105;39724:131;;;39835:18;;:::i;:::-;39724:131;39883:1;39880;39876:9;39865:20;;39543:348;;;;:::o;39897:194::-;39937:4;39957:20;39975:1;39957:20;:::i;:::-;39952:25;;39991:20;40009:1;39991:20;:::i;:::-;39986:25;;40035:1;40032;40028:9;40020:17;;40059:1;40053:4;40050:11;40047:37;;;40064:18;;:::i;:::-;40047:37;39897:194;;;;:::o;40097:143::-;40154:5;40185:6;40179:13;40170:22;;40201:33;40228:5;40201:33;:::i;:::-;40097:143;;;;:::o;40246:351::-;40316:6;40365:2;40353:9;40344:7;40340:23;40336:32;40333:119;;;40371:79;;:::i;:::-;40333:119;40491:1;40516:64;40572:7;40563:6;40552:9;40548:22;40516:64;:::i;:::-;40506:74;;40462:128;40246:351;;;;:::o;40603:85::-;40648:7;40677:5;40666:16;;40603:85;;;:::o;40694:158::-;40752:9;40785:61;40803:42;40812:32;40838:5;40812:32;:::i;:::-;40803:42;:::i;:::-;40785:61;:::i;:::-;40772:74;;40694:158;;;:::o;40858:147::-;40953:45;40992:5;40953:45;:::i;:::-;40948:3;40941:58;40858:147;;:::o;41011:114::-;41078:6;41112:5;41106:12;41096:22;;41011:114;;;:::o;41131:184::-;41230:11;41264:6;41259:3;41252:19;41304:4;41299:3;41295:14;41280:29;;41131:184;;;;:::o;41321:132::-;41388:4;41411:3;41403:11;;41441:4;41436:3;41432:14;41424:22;;41321:132;;;:::o;41459:108::-;41536:24;41554:5;41536:24;:::i;:::-;41531:3;41524:37;41459:108;;:::o;41573:179::-;41642:10;41663:46;41705:3;41697:6;41663:46;:::i;:::-;41741:4;41736:3;41732:14;41718:28;;41573:179;;;;:::o;41758:113::-;41828:4;41860;41855:3;41851:14;41843:22;;41758:113;;;:::o;41907:732::-;42026:3;42055:54;42103:5;42055:54;:::i;:::-;42125:86;42204:6;42199:3;42125:86;:::i;:::-;42118:93;;42235:56;42285:5;42235:56;:::i;:::-;42314:7;42345:1;42330:284;42355:6;42352:1;42349:13;42330:284;;;42431:6;42425:13;42458:63;42517:3;42502:13;42458:63;:::i;:::-;42451:70;;42544:60;42597:6;42544:60;:::i;:::-;42534:70;;42390:224;42377:1;42374;42370:9;42365:14;;42330:284;;;42334:14;42630:3;42623:10;;42031:608;;;41907:732;;;;:::o;42645:831::-;42908:4;42946:3;42935:9;42931:19;42923:27;;42960:71;43028:1;43017:9;43013:17;43004:6;42960:71;:::i;:::-;43041:80;43117:2;43106:9;43102:18;43093:6;43041:80;:::i;:::-;43168:9;43162:4;43158:20;43153:2;43142:9;43138:18;43131:48;43196:108;43299:4;43290:6;43196:108;:::i;:::-;43188:116;;43314:72;43382:2;43371:9;43367:18;43358:6;43314:72;:::i;:::-;43396:73;43464:3;43453:9;43449:19;43440:6;43396:73;:::i;:::-;42645:831;;;;;;;;:::o;43482:807::-;43731:4;43769:3;43758:9;43754:19;43746:27;;43783:71;43851:1;43840:9;43836:17;43827:6;43783:71;:::i;:::-;43864:72;43932:2;43921:9;43917:18;43908:6;43864:72;:::i;:::-;43946:80;44022:2;44011:9;44007:18;43998:6;43946:80;:::i;:::-;44036;44112:2;44101:9;44097:18;44088:6;44036:80;:::i;:::-;44126:73;44194:3;44183:9;44179:19;44170:6;44126:73;:::i;:::-;44209;44277:3;44266:9;44262:19;44253:6;44209:73;:::i;:::-;43482:807;;;;;;;;;:::o;44295:143::-;44352:5;44383:6;44377:13;44368:22;;44399:33;44426:5;44399:33;:::i;:::-;44295:143;;;;:::o;44444:663::-;44532:6;44540;44548;44597:2;44585:9;44576:7;44572:23;44568:32;44565:119;;;44603:79;;:::i;:::-;44565:119;44723:1;44748:64;44804:7;44795:6;44784:9;44780:22;44748:64;:::i;:::-;44738:74;;44694:128;44861:2;44887:64;44943:7;44934:6;44923:9;44919:22;44887:64;:::i;:::-;44877:74;;44832:129;45000:2;45026:64;45082:7;45073:6;45062:9;45058:22;45026:64;:::i;:::-;45016:74;;44971:129;44444:663;;;;;:::o;45113:720::-;45348:4;45386:3;45375:9;45371:19;45363:27;;45400:79;45476:1;45465:9;45461:17;45452:6;45400:79;:::i;:::-;45526:9;45520:4;45516:20;45511:2;45500:9;45496:18;45489:48;45554:108;45657:4;45648:6;45554:108;:::i;:::-;45546:116;;45672:72;45740:2;45729:9;45725:18;45716:6;45672:72;:::i;:::-;45754;45822:2;45811:9;45807:18;45798:6;45754:72;:::i;:::-;45113:720;;;;;;;:::o;45839:483::-;46010:4;46048:2;46037:9;46033:18;46025:26;;46061:71;46129:1;46118:9;46114:17;46105:6;46061:71;:::i;:::-;46179:9;46173:4;46169:20;46164:2;46153:9;46149:18;46142:48;46207:108;46310:4;46301:6;46207:108;:::i;:::-;46199:116;;45839:483;;;;;:::o

Swarm Source

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