ETH Price: $2,422.75 (+2.62%)

Token

OmNomNom ($NOM)
 

Overview

Max Total Supply

1,000,000,000 $NOM

Holders

37

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 12 Decimals)

Balance
1,981,718.842402752209 $NOM

Value
$0.00
0x15e6f23a1ee10d13b79a836f43d293ce150b66a3
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OmNomNom

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-31
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.13;

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

/**
 * @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 this function
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

    /**
     * @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 _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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

/**
 * @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 OmNomNom is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private inSwapAndLiquify;

    bool public swapAndLiquifyEnabled = true;

    uint256 public maxSellTransactionAmount = 1000000000 * (10**12);
    uint256 public maxBuyTransactionAmount = 1000000000 * (10**12);
    uint256 public swapTokensAtAmount = 500000 * (10**12);

    uint256 public liquidityBuyFee = 1;
    uint256 public teamBuyFee = 4;
    uint256 public apeBurnBuyFee = 0;
    uint256 public totalBuyFees = liquidityBuyFee.add(teamBuyFee).add(apeBurnBuyFee);

    uint256 public liquiditySellFee = 0;
    uint256 public teamSellFee = 5;
    uint256 public apeBurnSellFee = 0;
    uint256 public totalSellFees = liquiditySellFee.add(teamSellFee).add(apeBurnSellFee);

    address public immutable ApeCoin = address(0x4d224452801ACEd8B2F0aebE155379bb5D594381); //ApeCoin contract address
    address payable public teamWallet = payable(0xB0C1f550Dbba6fD5032d3aCAD80F05a3D6eff382);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

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

    uint256 private buyBackUpperLimit = 50000000000000000; // 0.05 Ether
    uint256 public _buybackDivisor = 10;
    
    bool public buyBackEnabled = true;

    event BuyBackEnabledUpdated(bool enabled);

    event SwapETHForTokens(uint256 amountIn, address[] path);

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensIntoLiqudity,
        uint256 ethReceived
    );

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

    constructor() ERC20("OmNomNom", "$NOM") {

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap v2 router address
         // 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(teamWallet, true);
        excludeFromFees(address(this), true);
        
        /*
            an internal function that is only called here,
            and CANNOT be called ever again
        */
        _createInitialSupply(owner(), 1000000000 * (10**12));
    }

    receive() external payable {

  	}

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "OmNomNom: 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, "OmNomNom: Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
   
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "OmNomNom: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "OmNomNom: 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 setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

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

        if(automatedMarketMakerPairs[to] && (!_isExcludedFromFees[from]) && (!_isExcludedFromFees[to])){
            require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }
        
    	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 > uint256(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); 
            
        }

        super._transfer(from, to, amount);

    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityBuyFee).div(totalBuyFees);
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.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); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

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

        // swap and Send eth to team wallet
        uint256 balanceBeforeSwap = address(this).balance;
        swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity));
         uint256 balanceAfterSwap = address(this).balance.sub(balanceBeforeSwap);
        teamWallet.transfer(balanceAfterSwap.mul(teamBuyFee).div(teamBuyFee.add(apeBurnBuyFee)));
        
        emit SwapAndLiquify(half, newBalance); 
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        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,
            address(this),
            block.timestamp
        );
        
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        
        // 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] = ApeCoin;

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

    function swapTokensForApeCoin(uint256 tokenAmount) private {

        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = ApeCoin;

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

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function setMaxSellTransaction(uint256 _maxSellTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxSellTxAmount;
        require(maxSellTransactionAmount >= totalSupply().div(300), "value is too low");
    }
    
    function setMaxBuyTransaction(uint256 _maxBuyTxAmount) public onlyOwner {
        maxBuyTransactionAmount = _maxBuyTxAmount;
        require(maxBuyTransactionAmount >= totalSupply().div(300), "value is too low");
    }

    function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner {
        swapTokensAtAmount = _newAmount;
    }

    function setBuybackDivisor(uint256 divisor) external onlyOwner{
       _buybackDivisor = divisor;
    }

    function setBuybackUpperLimit(uint256 newLimit) external onlyOwner{
       buyBackUpperLimit = newLimit;
    }

    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }

    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }

  
}

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":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":"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":[],"name":"ApeCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buybackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apeBurnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apeBurnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setBuybackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTxAmount","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","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":"teamBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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"},{"stateMutability":"payable","type":"receive"}]

60e06040526001600660156101000a81548160ff021916908315150217905550683635c9adc5dea00000600755683635c9adc5dea000006008556706f05b59d3b200006009556001600a556004600b556000600c556200008d600c5462000079600b54600a546200054b60201b62001c781790919060201c565b6200054b60201b62001c781790919060201c565b600d556000600e556005600f556000601055620000d8601054620000c4600f54600e546200054b60201b62001c781790919060201c565b6200054b60201b62001c781790919060201c565b601155734d224452801aced8b2f0aebe155379bb5d59438173ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1681525073b0c1f550dbba6fd5032d3acad80f05a3d6eff382601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660c09073ffffffffffffffffffffffffffffffffffffffff1681525066b1a2bc2ec50000601555600a6016556001601760006101000a81548160ff021916908315150217905550348015620001e457600080fd5b506040518060400160405280600881526020017f4f6d4e6f6d4e6f6d0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f244e4f4d0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200026992919062000ae2565b5080600490805190602001906200028292919062000ae2565b505050620002a5620002996200056360201b60201c565b6200056b60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000332919062000bfc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c0919062000bfc565b6040518363ffffffff1660e01b8152600401620003df92919062000c3f565b6020604051808303816000875af1158015620003ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000425919062000bfc565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620004af8160016200063160201b60201c565b620004d1620004c36200076760201b60201c565b60016200079160201b60201c565b62000506601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079160201b60201c565b620005193060016200079160201b60201c565b620005436200052d6200076760201b60201c565b683635c9adc5dea000006200096060201b60201c565b505062001019565b600081836200055b919062000ca5565b905092915050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620006c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006bd9062000daf565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007a16200056360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007c76200076760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008179062000e21565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620008b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ac9062000eb9565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000954919062000ef8565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c99062000f65565b60405180910390fd5b620009e66000838362000ad860201b60201c565b8060026000828254620009fa919062000ca5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a51919062000ca5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab8919062000f98565b60405180910390a362000ad46000838362000add60201b60201c565b5050565b505050565b505050565b82805462000af09062000fe4565b90600052602060002090601f01602090048101928262000b14576000855562000b60565b82601f1062000b2f57805160ff191683800117855562000b60565b8280016001018555821562000b60579182015b8281111562000b5f57825182559160200191906001019062000b42565b5b50905062000b6f919062000b73565b5090565b5b8082111562000b8e57600081600090555060010162000b74565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bc48262000b97565b9050919050565b62000bd68162000bb7565b811462000be257600080fd5b50565b60008151905062000bf68162000bcb565b92915050565b60006020828403121562000c155762000c1462000b92565b5b600062000c258482850162000be5565b91505092915050565b62000c398162000bb7565b82525050565b600060408201905062000c56600083018562000c2e565b62000c65602083018462000c2e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb28262000c6c565b915062000cbf8362000c6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000cf75762000cf662000c76565b5b828201905092915050565b600082825260208201905092915050565b7f4f6d4e6f6d4e6f6d3a204175746f6d61746564206d61726b6574206d616b657260008201527f207061697220697320616c72656164792073657420746f20746861742076616c60208201527f7565000000000000000000000000000000000000000000000000000000000000604082015250565b600062000d9760428362000d02565b915062000da48262000d13565b606082019050919050565b6000602082019050818103600083015262000dca8162000d88565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0960208362000d02565b915062000e168262000dd1565b602082019050919050565b6000602082019050818103600083015262000e3c8162000dfa565b9050919050565b7f4f6d4e6f6d4e6f6d3a204163636f756e7420697320616c72656164792074686560008201527f2076616c7565206f6620276578636c7564656427000000000000000000000000602082015250565b600062000ea160348362000d02565b915062000eae8262000e43565b604082019050919050565b6000602082019050818103600083015262000ed48162000e92565b9050919050565b60008115159050919050565b62000ef28162000edb565b82525050565b600060208201905062000f0f600083018462000ee7565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f4d601f8362000d02565b915062000f5a8262000f15565b602082019050919050565b6000602082019050818103600083015262000f808162000f3e565b9050919050565b62000f928162000c6c565b82525050565b600060208201905062000faf600083018462000f87565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ffd57607f821691505b60208210810362001013576200101262000fb5565b5b50919050565b60805160a05160c05161449c6200105e60003960008181610cb101526130bf015260008181611ad2015261300e015260008181610ee6015261157e015261449c6000f3fe6080604052600436106102815760003560e01c806370a082311161014f578063b3b5e043116100c1578063ccb613581161007a578063ccb61358146109ad578063d0a39814146109d8578063d9671ba014610a03578063dd62ed3e14610a2e578063e2f4560514610a6b578063f2fde38b14610a9657610288565b8063b3b5e0431461089f578063b62496f5146108c8578063b9e9370014610905578063bdc653ef14610930578063c02466681461095b578063c49b9a801461098457610288565b80639303e1ce116101135780639303e1ce1461077b57806395d89b41146107a65780639a7a23d6146107d1578063a1e2745f146107fa578063a457c2d714610825578063a9059cbb1461086257610288565b806370a08231146106aa578063715018a6146106e7578063750c11b6146106fe57806382d2a4bb146107275780638da5cb5b1461075057610288565b80632a6986b8116101f35780634fbee193116101ac5780634fbee1931461059a57806359927044146105d75780635aa821a9146106025780635c38ffe21461062d5780636053a0e31461065657806365b8dbc01461068157610288565b80632a6986b814610488578063313ce567146104b357806339509351146104de5780634198d1bb1461051b57806349bd5a5e146105445780634a74bb021461056f57610288565b806318160ddd1161024557806318160ddd1461037657806319998bbb146103a15780631d38ff96146103cc57806323b872dd146103f757806327c8f8351461043457806329370cc61461045f57610288565b806302259e9e1461028d57806306fdde03146102b8578063095ea7b3146102e3578063099d0d30146103205780631694505e1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610abf565b6040516102af919061319a565b60405180910390f35b3480156102c457600080fd5b506102cd610ac5565b6040516102da919061324e565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906132ff565b610b57565b604051610317919061335a565b60405180910390f35b34801561032c57600080fd5b50610335610b75565b604051610342919061319a565b60405180910390f35b34801561035757600080fd5b50610360610b7b565b60405161036d91906133d4565b60405180910390f35b34801561038257600080fd5b5061038b610ba1565b604051610398919061319a565b60405180910390f35b3480156103ad57600080fd5b506103b6610bab565b6040516103c3919061319a565b60405180910390f35b3480156103d857600080fd5b506103e1610bb1565b6040516103ee919061319a565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906133ef565b610bb7565b60405161042b919061335a565b60405180910390f35b34801561044057600080fd5b50610449610caf565b6040516104569190613451565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613498565b610cd3565b005b34801561049457600080fd5b5061049d610da3565b6040516104aa919061319a565b60405180910390f35b3480156104bf57600080fd5b506104c8610da9565b6040516104d591906134e1565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906132ff565b610db2565b604051610512919061335a565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906134fc565b610e5e565b005b34801561055057600080fd5b50610559610ee4565b6040516105669190613451565b60405180910390f35b34801561057b57600080fd5b50610584610f08565b604051610591919061335a565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613529565b610f1b565b6040516105ce919061335a565b60405180910390f35b3480156105e357600080fd5b506105ec610f71565b6040516105f99190613577565b60405180910390f35b34801561060e57600080fd5b50610617610f97565b604051610624919061319a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906134fc565b610f9d565b005b34801561066257600080fd5b5061066b611083565b604051610678919061335a565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613529565b611096565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190613529565b611262565b6040516106de919061319a565b60405180910390f35b3480156106f357600080fd5b506106fc6112aa565b005b34801561070a57600080fd5b50610725600480360381019061072091906134fc565b611332565b005b34801561073357600080fd5b5061074e600480360381019061074991906134fc565b6113b8565b005b34801561075c57600080fd5b5061076561143e565b6040516107729190613451565b60405180910390f35b34801561078757600080fd5b50610790611468565b60405161079d919061319a565b60405180910390f35b3480156107b257600080fd5b506107bb61146e565b6040516107c8919061324e565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613592565b611500565b005b34801561080657600080fd5b5061080f611618565b60405161081c919061319a565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906132ff565b61161e565b604051610859919061335a565b60405180910390f35b34801561086e57600080fd5b50610889600480360381019061088491906132ff565b611709565b604051610896919061335a565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c191906134fc565b611727565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613529565b61180d565b6040516108fc919061335a565b60405180910390f35b34801561091157600080fd5b5061091a61182d565b604051610927919061319a565b60405180910390f35b34801561093c57600080fd5b50610945611833565b604051610952919061319a565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190613592565b61183d565b005b34801561099057600080fd5b506109ab60048036038101906109a69190613498565b6119f4565b005b3480156109b957600080fd5b506109c2611ac4565b6040516109cf919061319a565b60405180910390f35b3480156109e457600080fd5b506109ed611aca565b6040516109fa919061319a565b60405180910390f35b348015610a0f57600080fd5b50610a18611ad0565b604051610a259190613451565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a5091906135d2565b611af4565b604051610a62919061319a565b60405180910390f35b348015610a7757600080fd5b50610a80611b7b565b604051610a8d919061319a565b60405180910390f35b348015610aa257600080fd5b50610abd6004803603810190610ab89190613529565b611b81565b005b60075481565b606060038054610ad490613641565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090613641565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b6b610b64611c8e565b8484611c96565b6001905092915050565b600e5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f5481565b600b5481565b6000610bc4848484611e5f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c0f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906136e4565b60405180910390fd5b610ca385610c9b611c8e565b858403611c96565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610cdb611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610cf961143e565b73ffffffffffffffffffffffffffffffffffffffff1614610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4690613750565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610d98919061335a565b60405180910390a150565b60105481565b6000600c905090565b6000610e54610dbf611c8e565b848460016000610dcd611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4f919061379f565b611c96565b6001905092915050565b610e66611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610e8461143e565b73ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190613750565b60405180910390fd5b8060168190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fa5611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610fc361143e565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613750565b60405180910390fd5b8060078190555061103c61012c61102e610ba1565b6124be90919063ffffffff16565b6007541015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613841565b60405180910390fd5b50565b601760009054906101000a900460ff1681565b61109e611c8e565b73ffffffffffffffffffffffffffffffffffffffff166110bc61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613750565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906138d3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112b2611c8e565b73ffffffffffffffffffffffffffffffffffffffff166112d061143e565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90613750565b60405180910390fd5b61133060006124d4565b565b61133a611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661135861143e565b73ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613750565b60405180910390fd5b8060098190555050565b6113c0611c8e565b73ffffffffffffffffffffffffffffffffffffffff166113de61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613750565b60405180910390fd5b8060158190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b60606004805461147d90613641565b80601f01602080910402602001604051908101604052809291908181526020018280546114a990613641565b80156114f65780601f106114cb576101008083540402835291602001916114f6565b820191906000526020600020905b8154815290600101906020018083116114d957829003601f168201915b5050505050905090565b611508611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661152661143e565b73ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613750565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116019061398b565b60405180910390fd5b611614828261259a565b5050565b600c5481565b6000806001600061162d611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613a1d565b60405180910390fd5b6116fe6116f5611c8e565b85858403611c96565b600191505092915050565b600061171d611716611c8e565b8484611e5f565b6001905092915050565b61172f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661174d61143e565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613750565b60405180910390fd5b806008819055506117c661012c6117b8610ba1565b6124be90919063ffffffff16565b600854101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613841565b60405180910390fd5b50565b60146020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6000601554905090565b611845611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661186361143e565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613750565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613aaf565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119e8919061335a565b60405180910390a25050565b6119fc611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611a1a61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790613750565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ab9919061335a565b60405180910390a150565b600a5481565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611b89611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611ba761143e565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390613b41565b60405180910390fd5b611c75816124d4565b50565b60008183611c86919061379f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90613bd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90613c65565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e52919061319a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490613d89565b60405180910390fd5b60008103611f5657611f51838360006126cd565b6124b9565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ff95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561204f5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561209a57600854811115612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613e1b565b60405180910390fd5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121935750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121de576007548111156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490613ead565b60405180910390fd5b5b60006121e930611262565b905060006009548210159050600660149054906101000a900460ff1615801561225b5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156122735750600660159054906101000a900460ff165b156122e457801561228d57600954915061228c8261294c565b5b6000479050601760009054906101000a900460ff1680156122af575060155481115b156122e2576015548111156122c45760155490505b6122e16122dc601654836124be90919063ffffffff16565b612b2c565b5b505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123885750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ab576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561240c5761240960646123fb600d5487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561248957612486606461247860115487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b61249c8185612b8e90919063ffffffff16565b93506124a98630836126cd565b505b6124b68585856126cd565b50505b505050565b600081836124cc9190613efc565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361262c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262390613fc5565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a290613d89565b60405180910390fd5b6127b6838383612ba4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614057565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128cf919061379f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612933919061319a565b60405180910390a3612946848484612ba9565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612992600d54612984600a5485612b7890919063ffffffff16565b6124be90919063ffffffff16565b905060006129aa6002836124be90919063ffffffff16565b905060006129c18284612b8e90919063ffffffff16565b905060004790506129d183612bae565b60006129e68247612b8e90919063ffffffff16565b90506129f28382612e27565b6000479050612a12612a0d8789612b8e90919063ffffffff16565b612bae565b6000612a278247612b8e90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612aa2612a7f600c54600b54611c7890919063ffffffff16565b612a94600b5486612b7890919063ffffffff16565b6124be90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612acd573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868684604051612aff929190614077565b60405180910390a1505050505050506000600660146101000a81548160ff02191690831515021790555050565b6001600660146101000a81548160ff0219169083151502179055506000811115612b5a57612b5981612edf565b5b6000600660146101000a81548160ff02191690831515021790555050565b60008183612b8691906140a0565b905092915050565b60008183612b9c91906140fa565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcb57612bca61412e565b5b604051908082528060200260200182016040528015612bf95781602001602082028036833780820191505090505b5090503081600081518110612c1157612c1061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc91906141a1565b81600181518110612cf057612cef61415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081612d5730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611af4565b1015612d8d57612d8c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611c96565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612df19594939291906142c7565b600060405180830381600087803b158015612e0b57600080fd5b505af1158015612e1f573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612e7361143e565b426040518863ffffffff1660e01b8152600401612e9596959493929190614321565b60606040518083038185885af1158015612eb3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed89190614397565b5050505050565b6000600267ffffffffffffffff811115612efc57612efb61412e565b5b604051908082528060200260200182016040528015612f2a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbe91906141a1565b81600081518110612fd257612fd161415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106130415761304061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006130f361012c42611c7890919063ffffffff16565b6040518663ffffffff1660e01b815260040161311294939291906143ea565b6000604051808303818588803b15801561312b57600080fd5b505af115801561313f573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613175929190614436565b60405180910390a15050565b6000819050919050565b61319481613181565b82525050565b60006020820190506131af600083018461318b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131ef5780820151818401526020810190506131d4565b838111156131fe576000848401525b50505050565b6000601f19601f8301169050919050565b6000613220826131b5565b61322a81856131c0565b935061323a8185602086016131d1565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132a082613275565b9050919050565b6132b081613295565b81146132bb57600080fd5b50565b6000813590506132cd816132a7565b92915050565b6132dc81613181565b81146132e757600080fd5b50565b6000813590506132f9816132d3565b92915050565b6000806040838503121561331657613315613270565b5b6000613324858286016132be565b9250506020613335858286016132ea565b9150509250929050565b60008115159050919050565b6133548161333f565b82525050565b600060208201905061336f600083018461334b565b92915050565b6000819050919050565b600061339a61339561339084613275565b613375565b613275565b9050919050565b60006133ac8261337f565b9050919050565b60006133be826133a1565b9050919050565b6133ce816133b3565b82525050565b60006020820190506133e960008301846133c5565b92915050565b60008060006060848603121561340857613407613270565b5b6000613416868287016132be565b9350506020613427868287016132be565b9250506040613438868287016132ea565b9150509250925092565b61344b81613295565b82525050565b60006020820190506134666000830184613442565b92915050565b6134758161333f565b811461348057600080fd5b50565b6000813590506134928161346c565b92915050565b6000602082840312156134ae576134ad613270565b5b60006134bc84828501613483565b91505092915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613270565b5b6000613520848285016132ea565b91505092915050565b60006020828403121561353f5761353e613270565b5b600061354d848285016132be565b91505092915050565b600061356182613275565b9050919050565b61357181613556565b82525050565b600060208201905061358c6000830184613568565b92915050565b600080604083850312156135a9576135a8613270565b5b60006135b7858286016132be565b92505060206135c885828601613483565b9150509250929050565b600080604083850312156135e9576135e8613270565b5b60006135f7858286016132be565b9250506020613608858286016132be565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061365957607f821691505b60208210810361366c5761366b613612565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136ce6028836131c0565b91506136d982613672565b604082019050919050565b600060208201905081810360008301526136fd816136c1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373a6020836131c0565b915061374582613704565b602082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137aa82613181565b91506137b583613181565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ea576137e9613770565b5b828201905092915050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b600061382b6010836131c0565b9150613836826137f5565b602082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b7f4f6d4e6f6d4e6f6d3a2054686520726f7574657220616c72656164792068617360008201527f2074686174206164647265737300000000000000000000000000000000000000602082015250565b60006138bd602d836131c0565b91506138c882613861565b604082019050919050565b600060208201905081810360008301526138ec816138b0565b9050919050565b7f4f6d4e6f6d4e6f6d3a205468652050616e63616b65537761702070616972206360008201527f616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d60208201527f61726b65744d616b657250616972730000000000000000000000000000000000604082015250565b6000613975604f836131c0565b9150613980826138f3565b606082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a076025836131c0565b9150613a12826139ab565b604082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4f6d4e6f6d4e6f6d3a204163636f756e7420697320616c72656164792074686560008201527f2076616c7565206f6620276578636c7564656427000000000000000000000000602082015250565b6000613a996034836131c0565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b2b6026836131c0565b9150613b3682613acf565b604082019050919050565b60006020820190508181036000830152613b5a81613b1e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bbd6024836131c0565b9150613bc882613b61565b604082019050919050565b60006020820190508181036000830152613bec81613bb0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c4f6022836131c0565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ce16025836131c0565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d736023836131c0565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000613e05602b836131c0565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613e97602c836131c0565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f0782613181565b9150613f1283613181565b925082613f2257613f21613ecd565b5b828204905092915050565b7f4f6d4e6f6d4e6f6d3a204175746f6d61746564206d61726b6574206d616b657260008201527f207061697220697320616c72656164792073657420746f20746861742076616c60208201527f7565000000000000000000000000000000000000000000000000000000000000604082015250565b6000613faf6042836131c0565b9150613fba82613f2d565b606082019050919050565b60006020820190508181036000830152613fde81613fa2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006140416026836131c0565b915061404c82613fe5565b604082019050919050565b6000602082019050818103600083015261407081614034565b9050919050565b600060408201905061408c600083018561318b565b614099602083018461318b565b9392505050565b60006140ab82613181565b91506140b683613181565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ef576140ee613770565b5b828202905092915050565b600061410582613181565b915061411083613181565b92508282101561412357614122613770565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061419b816132a7565b92915050565b6000602082840312156141b7576141b6613270565b5b60006141c58482850161418c565b91505092915050565b6000819050919050565b60006141f36141ee6141e9846141ce565b613375565b613181565b9050919050565b614203816141d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61423e81613295565b82525050565b60006142508383614235565b60208301905092915050565b6000602082019050919050565b600061427482614209565b61427e8185614214565b935061428983614225565b8060005b838110156142ba5781516142a18882614244565b97506142ac8361425c565b92505060018101905061428d565b5085935050505092915050565b600060a0820190506142dc600083018861318b565b6142e960208301876141fa565b81810360408301526142fb8186614269565b905061430a6060830185613442565b614317608083018461318b565b9695505050505050565b600060c0820190506143366000830189613442565b614343602083018861318b565b61435060408301876141fa565b61435d60608301866141fa565b61436a6080830185613442565b61437760a083018461318b565b979650505050505050565b600081519050614391816132d3565b92915050565b6000806000606084860312156143b0576143af613270565b5b60006143be86828701614382565b93505060206143cf86828701614382565b92505060406143e086828701614382565b9150509250925092565b60006080820190506143ff60008301876141fa565b81810360208301526144118186614269565b90506144206040830185613442565b61442d606083018461318b565b95945050505050565b600060408201905061444b600083018561318b565b818103602083015261445d8184614269565b9050939250505056fea264697066735822122025b0d061ebf237067d3fa0cca69646e55abb33a902c2daace7c032836a7d983764736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c806370a082311161014f578063b3b5e043116100c1578063ccb613581161007a578063ccb61358146109ad578063d0a39814146109d8578063d9671ba014610a03578063dd62ed3e14610a2e578063e2f4560514610a6b578063f2fde38b14610a9657610288565b8063b3b5e0431461089f578063b62496f5146108c8578063b9e9370014610905578063bdc653ef14610930578063c02466681461095b578063c49b9a801461098457610288565b80639303e1ce116101135780639303e1ce1461077b57806395d89b41146107a65780639a7a23d6146107d1578063a1e2745f146107fa578063a457c2d714610825578063a9059cbb1461086257610288565b806370a08231146106aa578063715018a6146106e7578063750c11b6146106fe57806382d2a4bb146107275780638da5cb5b1461075057610288565b80632a6986b8116101f35780634fbee193116101ac5780634fbee1931461059a57806359927044146105d75780635aa821a9146106025780635c38ffe21461062d5780636053a0e31461065657806365b8dbc01461068157610288565b80632a6986b814610488578063313ce567146104b357806339509351146104de5780634198d1bb1461051b57806349bd5a5e146105445780634a74bb021461056f57610288565b806318160ddd1161024557806318160ddd1461037657806319998bbb146103a15780631d38ff96146103cc57806323b872dd146103f757806327c8f8351461043457806329370cc61461045f57610288565b806302259e9e1461028d57806306fdde03146102b8578063095ea7b3146102e3578063099d0d30146103205780631694505e1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610abf565b6040516102af919061319a565b60405180910390f35b3480156102c457600080fd5b506102cd610ac5565b6040516102da919061324e565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906132ff565b610b57565b604051610317919061335a565b60405180910390f35b34801561032c57600080fd5b50610335610b75565b604051610342919061319a565b60405180910390f35b34801561035757600080fd5b50610360610b7b565b60405161036d91906133d4565b60405180910390f35b34801561038257600080fd5b5061038b610ba1565b604051610398919061319a565b60405180910390f35b3480156103ad57600080fd5b506103b6610bab565b6040516103c3919061319a565b60405180910390f35b3480156103d857600080fd5b506103e1610bb1565b6040516103ee919061319a565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906133ef565b610bb7565b60405161042b919061335a565b60405180910390f35b34801561044057600080fd5b50610449610caf565b6040516104569190613451565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613498565b610cd3565b005b34801561049457600080fd5b5061049d610da3565b6040516104aa919061319a565b60405180910390f35b3480156104bf57600080fd5b506104c8610da9565b6040516104d591906134e1565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906132ff565b610db2565b604051610512919061335a565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906134fc565b610e5e565b005b34801561055057600080fd5b50610559610ee4565b6040516105669190613451565b60405180910390f35b34801561057b57600080fd5b50610584610f08565b604051610591919061335a565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613529565b610f1b565b6040516105ce919061335a565b60405180910390f35b3480156105e357600080fd5b506105ec610f71565b6040516105f99190613577565b60405180910390f35b34801561060e57600080fd5b50610617610f97565b604051610624919061319a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906134fc565b610f9d565b005b34801561066257600080fd5b5061066b611083565b604051610678919061335a565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613529565b611096565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190613529565b611262565b6040516106de919061319a565b60405180910390f35b3480156106f357600080fd5b506106fc6112aa565b005b34801561070a57600080fd5b50610725600480360381019061072091906134fc565b611332565b005b34801561073357600080fd5b5061074e600480360381019061074991906134fc565b6113b8565b005b34801561075c57600080fd5b5061076561143e565b6040516107729190613451565b60405180910390f35b34801561078757600080fd5b50610790611468565b60405161079d919061319a565b60405180910390f35b3480156107b257600080fd5b506107bb61146e565b6040516107c8919061324e565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613592565b611500565b005b34801561080657600080fd5b5061080f611618565b60405161081c919061319a565b60405180910390f35b34801561083157600080fd5b5061084c600480360381019061084791906132ff565b61161e565b604051610859919061335a565b60405180910390f35b34801561086e57600080fd5b50610889600480360381019061088491906132ff565b611709565b604051610896919061335a565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c191906134fc565b611727565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613529565b61180d565b6040516108fc919061335a565b60405180910390f35b34801561091157600080fd5b5061091a61182d565b604051610927919061319a565b60405180910390f35b34801561093c57600080fd5b50610945611833565b604051610952919061319a565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190613592565b61183d565b005b34801561099057600080fd5b506109ab60048036038101906109a69190613498565b6119f4565b005b3480156109b957600080fd5b506109c2611ac4565b6040516109cf919061319a565b60405180910390f35b3480156109e457600080fd5b506109ed611aca565b6040516109fa919061319a565b60405180910390f35b348015610a0f57600080fd5b50610a18611ad0565b604051610a259190613451565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a5091906135d2565b611af4565b604051610a62919061319a565b60405180910390f35b348015610a7757600080fd5b50610a80611b7b565b604051610a8d919061319a565b60405180910390f35b348015610aa257600080fd5b50610abd6004803603810190610ab89190613529565b611b81565b005b60075481565b606060038054610ad490613641565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090613641565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b6b610b64611c8e565b8484611c96565b6001905092915050565b600e5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f5481565b600b5481565b6000610bc4848484611e5f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c0f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906136e4565b60405180910390fd5b610ca385610c9b611c8e565b858403611c96565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610cdb611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610cf961143e565b73ffffffffffffffffffffffffffffffffffffffff1614610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4690613750565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610d98919061335a565b60405180910390a150565b60105481565b6000600c905090565b6000610e54610dbf611c8e565b848460016000610dcd611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4f919061379f565b611c96565b6001905092915050565b610e66611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610e8461143e565b73ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190613750565b60405180910390fd5b8060168190555050565b7f000000000000000000000000b9b15bdcb7814cfb279669830b47988e9599fd1181565b600660159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fa5611c8e565b73ffffffffffffffffffffffffffffffffffffffff16610fc361143e565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613750565b60405180910390fd5b8060078190555061103c61012c61102e610ba1565b6124be90919063ffffffff16565b6007541015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613841565b60405180910390fd5b50565b601760009054906101000a900460ff1681565b61109e611c8e565b73ffffffffffffffffffffffffffffffffffffffff166110bc61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613750565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611199906138d3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112b2611c8e565b73ffffffffffffffffffffffffffffffffffffffff166112d061143e565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90613750565b60405180910390fd5b61133060006124d4565b565b61133a611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661135861143e565b73ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613750565b60405180910390fd5b8060098190555050565b6113c0611c8e565b73ffffffffffffffffffffffffffffffffffffffff166113de61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90613750565b60405180910390fd5b8060158190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b60606004805461147d90613641565b80601f01602080910402602001604051908101604052809291908181526020018280546114a990613641565b80156114f65780601f106114cb576101008083540402835291602001916114f6565b820191906000526020600020905b8154815290600101906020018083116114d957829003601f168201915b5050505050905090565b611508611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661152661143e565b73ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613750565b60405180910390fd5b7f000000000000000000000000b9b15bdcb7814cfb279669830b47988e9599fd1173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116019061398b565b60405180910390fd5b611614828261259a565b5050565b600c5481565b6000806001600061162d611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613a1d565b60405180910390fd5b6116fe6116f5611c8e565b85858403611c96565b600191505092915050565b600061171d611716611c8e565b8484611e5f565b6001905092915050565b61172f611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661174d61143e565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613750565b60405180910390fd5b806008819055506117c661012c6117b8610ba1565b6124be90919063ffffffff16565b600854101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613841565b60405180910390fd5b50565b60146020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6000601554905090565b611845611c8e565b73ffffffffffffffffffffffffffffffffffffffff1661186361143e565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613750565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613aaf565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119e8919061335a565b60405180910390a25050565b6119fc611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611a1a61143e565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790613750565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ab9919061335a565b60405180910390a150565b600a5481565b60115481565b7f0000000000000000000000004d224452801aced8b2f0aebe155379bb5d59438181565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611b89611c8e565b73ffffffffffffffffffffffffffffffffffffffff16611ba761143e565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390613b41565b60405180910390fd5b611c75816124d4565b50565b60008183611c86919061379f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90613bd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90613c65565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e52919061319a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490613d89565b60405180910390fd5b60008103611f5657611f51838360006126cd565b6124b9565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ff95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561204f5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561209a57600854811115612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613e1b565b60405180910390fd5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121935750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121de576007548111156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490613ead565b60405180910390fd5b5b60006121e930611262565b905060006009548210159050600660149054906101000a900460ff1615801561225b5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156122735750600660159054906101000a900460ff165b156122e457801561228d57600954915061228c8261294c565b5b6000479050601760009054906101000a900460ff1680156122af575060155481115b156122e2576015548111156122c45760155490505b6122e16122dc601654836124be90919063ffffffff16565b612b2c565b5b505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123885750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ab576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561240c5761240960646123fb600d5487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561248957612486606461247860115487612b7890919063ffffffff16565b6124be90919063ffffffff16565b90505b61249c8185612b8e90919063ffffffff16565b93506124a98630836126cd565b505b6124b68585856126cd565b50505b505050565b600081836124cc9190613efc565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361262c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262390613fc5565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390613cf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a290613d89565b60405180910390fd5b6127b6838383612ba4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614057565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128cf919061379f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612933919061319a565b60405180910390a3612946848484612ba9565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612992600d54612984600a5485612b7890919063ffffffff16565b6124be90919063ffffffff16565b905060006129aa6002836124be90919063ffffffff16565b905060006129c18284612b8e90919063ffffffff16565b905060004790506129d183612bae565b60006129e68247612b8e90919063ffffffff16565b90506129f28382612e27565b6000479050612a12612a0d8789612b8e90919063ffffffff16565b612bae565b6000612a278247612b8e90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612aa2612a7f600c54600b54611c7890919063ffffffff16565b612a94600b5486612b7890919063ffffffff16565b6124be90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612acd573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868684604051612aff929190614077565b60405180910390a1505050505050506000600660146101000a81548160ff02191690831515021790555050565b6001600660146101000a81548160ff0219169083151502179055506000811115612b5a57612b5981612edf565b5b6000600660146101000a81548160ff02191690831515021790555050565b60008183612b8691906140a0565b905092915050565b60008183612b9c91906140fa565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcb57612bca61412e565b5b604051908082528060200260200182016040528015612bf95781602001602082028036833780820191505090505b5090503081600081518110612c1157612c1061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdc91906141a1565b81600181518110612cf057612cef61415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081612d5730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611af4565b1015612d8d57612d8c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611c96565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612df19594939291906142c7565b600060405180830381600087803b158015612e0b57600080fd5b505af1158015612e1f573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612e7361143e565b426040518863ffffffff1660e01b8152600401612e9596959493929190614321565b60606040518083038185885af1158015612eb3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed89190614397565b5050505050565b6000600267ffffffffffffffff811115612efc57612efb61412e565b5b604051908082528060200260200182016040528015612f2a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbe91906141a1565b81600081518110612fd257612fd161415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000004d224452801aced8b2f0aebe155379bb5d594381816001815181106130415761304061415d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6130f361012c42611c7890919063ffffffff16565b6040518663ffffffff1660e01b815260040161311294939291906143ea565b6000604051808303818588803b15801561312b57600080fd5b505af115801561313f573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613175929190614436565b60405180910390a15050565b6000819050919050565b61319481613181565b82525050565b60006020820190506131af600083018461318b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131ef5780820151818401526020810190506131d4565b838111156131fe576000848401525b50505050565b6000601f19601f8301169050919050565b6000613220826131b5565b61322a81856131c0565b935061323a8185602086016131d1565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132a082613275565b9050919050565b6132b081613295565b81146132bb57600080fd5b50565b6000813590506132cd816132a7565b92915050565b6132dc81613181565b81146132e757600080fd5b50565b6000813590506132f9816132d3565b92915050565b6000806040838503121561331657613315613270565b5b6000613324858286016132be565b9250506020613335858286016132ea565b9150509250929050565b60008115159050919050565b6133548161333f565b82525050565b600060208201905061336f600083018461334b565b92915050565b6000819050919050565b600061339a61339561339084613275565b613375565b613275565b9050919050565b60006133ac8261337f565b9050919050565b60006133be826133a1565b9050919050565b6133ce816133b3565b82525050565b60006020820190506133e960008301846133c5565b92915050565b60008060006060848603121561340857613407613270565b5b6000613416868287016132be565b9350506020613427868287016132be565b9250506040613438868287016132ea565b9150509250925092565b61344b81613295565b82525050565b60006020820190506134666000830184613442565b92915050565b6134758161333f565b811461348057600080fd5b50565b6000813590506134928161346c565b92915050565b6000602082840312156134ae576134ad613270565b5b60006134bc84828501613483565b91505092915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613270565b5b6000613520848285016132ea565b91505092915050565b60006020828403121561353f5761353e613270565b5b600061354d848285016132be565b91505092915050565b600061356182613275565b9050919050565b61357181613556565b82525050565b600060208201905061358c6000830184613568565b92915050565b600080604083850312156135a9576135a8613270565b5b60006135b7858286016132be565b92505060206135c885828601613483565b9150509250929050565b600080604083850312156135e9576135e8613270565b5b60006135f7858286016132be565b9250506020613608858286016132be565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061365957607f821691505b60208210810361366c5761366b613612565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136ce6028836131c0565b91506136d982613672565b604082019050919050565b600060208201905081810360008301526136fd816136c1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373a6020836131c0565b915061374582613704565b602082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137aa82613181565b91506137b583613181565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ea576137e9613770565b5b828201905092915050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b600061382b6010836131c0565b9150613836826137f5565b602082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b7f4f6d4e6f6d4e6f6d3a2054686520726f7574657220616c72656164792068617360008201527f2074686174206164647265737300000000000000000000000000000000000000602082015250565b60006138bd602d836131c0565b91506138c882613861565b604082019050919050565b600060208201905081810360008301526138ec816138b0565b9050919050565b7f4f6d4e6f6d4e6f6d3a205468652050616e63616b65537761702070616972206360008201527f616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d60208201527f61726b65744d616b657250616972730000000000000000000000000000000000604082015250565b6000613975604f836131c0565b9150613980826138f3565b606082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a076025836131c0565b9150613a12826139ab565b604082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4f6d4e6f6d4e6f6d3a204163636f756e7420697320616c72656164792074686560008201527f2076616c7565206f6620276578636c7564656427000000000000000000000000602082015250565b6000613a996034836131c0565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b2b6026836131c0565b9150613b3682613acf565b604082019050919050565b60006020820190508181036000830152613b5a81613b1e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bbd6024836131c0565b9150613bc882613b61565b604082019050919050565b60006020820190508181036000830152613bec81613bb0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c4f6022836131c0565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ce16025836131c0565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d736023836131c0565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000613e05602b836131c0565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613e97602c836131c0565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f0782613181565b9150613f1283613181565b925082613f2257613f21613ecd565b5b828204905092915050565b7f4f6d4e6f6d4e6f6d3a204175746f6d61746564206d61726b6574206d616b657260008201527f207061697220697320616c72656164792073657420746f20746861742076616c60208201527f7565000000000000000000000000000000000000000000000000000000000000604082015250565b6000613faf6042836131c0565b9150613fba82613f2d565b606082019050919050565b60006020820190508181036000830152613fde81613fa2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006140416026836131c0565b915061404c82613fe5565b604082019050919050565b6000602082019050818103600083015261407081614034565b9050919050565b600060408201905061408c600083018561318b565b614099602083018461318b565b9392505050565b60006140ab82613181565b91506140b683613181565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ef576140ee613770565b5b828202905092915050565b600061410582613181565b915061411083613181565b92508282101561412357614122613770565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061419b816132a7565b92915050565b6000602082840312156141b7576141b6613270565b5b60006141c58482850161418c565b91505092915050565b6000819050919050565b60006141f36141ee6141e9846141ce565b613375565b613181565b9050919050565b614203816141d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61423e81613295565b82525050565b60006142508383614235565b60208301905092915050565b6000602082019050919050565b600061427482614209565b61427e8185614214565b935061428983614225565b8060005b838110156142ba5781516142a18882614244565b97506142ac8361425c565b92505060018101905061428d565b5085935050505092915050565b600060a0820190506142dc600083018861318b565b6142e960208301876141fa565b81810360408301526142fb8186614269565b905061430a6060830185613442565b614317608083018461318b565b9695505050505050565b600060c0820190506143366000830189613442565b614343602083018861318b565b61435060408301876141fa565b61435d60608301866141fa565b61436a6080830185613442565b61437760a083018461318b565b979650505050505050565b600081519050614391816132d3565b92915050565b6000806000606084860312156143b0576143af613270565b5b60006143be86828701614382565b93505060206143cf86828701614382565b92505060406143e086828701614382565b9150509250925092565b60006080820190506143ff60008301876141fa565b81810360208301526144118186614269565b90506144206040830185613442565b61442d606083018461318b565b95945050505050565b600060408201905061444b600083018561318b565b818103602083015261445d8184614269565b9050939250505056fea264697066735822122025b0d061ebf237067d3fa0cca69646e55abb33a902c2daace7c032836a7d983764736f6c634300080d0033

Deployed Bytecode Sourcemap

39725:12146:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39985:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5581:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7748:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40391:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39803:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6701:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40433:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40227:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8399:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40817:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51712:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40470:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6543:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9300:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51363:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39851:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39936:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44373:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40723:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40055:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50769:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41364:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43133:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6872:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17118:94;;;;;;;;;;;;;:::i;:::-;;51236:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51476:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16467:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41316:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5800:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43769:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40263:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10018:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7212:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51007:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41175:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40302:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51596:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43458:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44509:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40186:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40510:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40603:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7450:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40124:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17367:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39985:63;;;;:::o;5581:100::-;5635:13;5668:5;5661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;:::o;7748:169::-;7831:4;7848:39;7857:12;:10;:12::i;:::-;7871:7;7880:6;7848:8;:39::i;:::-;7905:4;7898:11;;7748:169;;;;:::o;40391:35::-;;;;:::o;39803:41::-;;;;;;;;;;;;;:::o;6701:108::-;6762:7;6789:12;;6782:19;;6701:108;:::o;40433:30::-;;;;:::o;40227:29::-;;;;:::o;8399:492::-;8539:4;8556:36;8566:6;8574:9;8585:6;8556:9;:36::i;:::-;8605:24;8632:11;:19;8644:6;8632:19;;;;;;;;;;;;;;;:33;8652:12;:10;:12::i;:::-;8632:33;;;;;;;;;;;;;;;;8605:60;;8704:6;8684:16;:26;;8676:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8791:57;8800:6;8808:12;:10;:12::i;:::-;8841:6;8822:16;:25;8791:8;:57::i;:::-;8879:4;8872:11;;;8399:492;;;;;:::o;40817:81::-;;;:::o;51712:150::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51799:8:::1;51782:14;;:25;;;;;;;;;;;;;;;;;;51823:31;51845:8;51823:31;;;;;;:::i;:::-;;;;;;;;51712:150:::0;:::o;40470:33::-;;;;:::o;6543:93::-;6601:5;6626:2;6619:9;;6543:93;:::o;9300:215::-;9388:4;9405:80;9414:12;:10;:12::i;:::-;9428:7;9474:10;9437:11;:25;9449:12;:10;:12::i;:::-;9437:25;;;;;;;;;;;;;;;:34;9463:7;9437:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9405:8;:80::i;:::-;9503:4;9496:11;;9300:215;;;;:::o;51363:105::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51453:7:::1;51435:15;:25;;;;51363:105:::0;:::o;39851:38::-;;;:::o;39936:40::-;;;;;;;;;;;;;:::o;44373:125::-;44438:4;44462:19;:28;44482:7;44462:28;;;;;;;;;;;;;;;;;;;;;;;;;44455:35;;44373:125;;;:::o;40723:87::-;;;;;;;;;;;;;:::o;40055:62::-;;;;:::o;50769:226::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50881:16:::1;50854:24;:43;;;;50944:22;50962:3;50944:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;50916:24;;:50;;50908:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;50769:226:::0;:::o;41364:33::-;;;;;;;;;;;;;:::o;43133:317::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43242:15:::1;;;;;;;;;;;43220:38;;:10;:38;;::::0;43212:96:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43366:15;;;;;;;;;;;43324:59;;43346:10;43324:59;;;;;;;;;;;;43431:10;43394:15;;:48;;;;;;;;;;;;;;;;;;43133:317:::0;:::o;6872:127::-;6946:7;6973:9;:18;6983:7;6973:18;;;;;;;;;;;;;;;;6966:25;;6872:127;;;:::o;17118:94::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17183:21:::1;17201:1;17183:9;:21::i;:::-;17118:94::o:0;51236:119::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51337:10:::1;51316:18;:31;;;;51236:119:::0;:::o;51476:112::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51572:8:::1;51552:17;:28;;;;51476:112:::0;:::o;16467:87::-;16513:7;16540:6;;;;;;;;;;;16533:13;;16467:87;:::o;41316:35::-;;;;:::o;5800:104::-;5856:13;5889:7;5882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5800:104;:::o;43769:266::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43876:13:::1;43868:21;;:4;:21;;::::0;43860:113:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43986:41;44015:4;44021:5;43986:28;:41::i;:::-;43769:266:::0;;:::o;40263:32::-;;;;:::o;10018:413::-;10111:4;10128:24;10155:11;:25;10167:12;:10;:12::i;:::-;10155:25;;;;;;;;;;;;;;;:34;10181:7;10155:34;;;;;;;;;;;;;;;;10128:61;;10228:15;10208:16;:35;;10200:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10321:67;10330:12;:10;:12::i;:::-;10344:7;10372:15;10353:16;:34;10321:8;:67::i;:::-;10419:4;10412:11;;;10018:413;;;;:::o;7212:175::-;7298:4;7315:42;7325:12;:10;:12::i;:::-;7339:9;7350:6;7315:9;:42::i;:::-;7375:4;7368:11;;7212:175;;;;:::o;51007:221::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51116:15:::1;51090:23;:41;;;;51177:22;51195:3;51177:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;51150:23;;:49;;51142:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51007:221:::0;:::o;41175:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;40302:80::-;;;;:::o;51596:108::-;51652:7;51679:17;;51672:24;;51596:108;:::o;43458:300::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43583:8:::1;43551:40;;:19;:28;43571:7;43551:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;43543:105:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43690:8;43659:19;:28;43679:7;43659:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43732:7;43716:34;;;43741:8;43716:34;;;;;;:::i;:::-;;;;;;;;43458:300:::0;;:::o;44509:171::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44610:8:::1;44586:21;;:32;;;;;;;;;;;;;;;;;;44634:38;44663:8;44634:38;;;;;;:::i;:::-;;;;;;;;44509:171:::0;:::o;40186:34::-;;;;:::o;40510:84::-;;;;:::o;40603:86::-;;;:::o;7450:151::-;7539:7;7566:11;:18;7578:5;7566:18;;;;;;;;;;;;;;;:27;7585:7;7566:27;;;;;;;;;;;;;;;;7559:34;;7450:151;;;;:::o;40124:53::-;;;;:::o;17367:192::-;16698:12;:10;:12::i;:::-;16687:23;;:7;:5;:7::i;:::-;:23;;;16679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17476:1:::1;17456:22;;:8;:22;;::::0;17448:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17532:19;17542:8;17532:9;:19::i;:::-;17367:192:::0;:::o;27621:98::-;27679:7;27710:1;27706;:5;;;;:::i;:::-;27699:12;;27621:98;;;;:::o;102:::-;155:7;182:10;175:17;;102:98;:::o;13717:380::-;13870:1;13853:19;;:5;:19;;;13845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13951:1;13932:21;;:7;:21;;;13924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14035:6;14005:11;:18;14017:5;14005:18;;;;;;;;;;;;;;;:27;14024:7;14005:27;;;;;;;;;;;;;;;:36;;;;14073:7;14057:32;;14066:5;14057:32;;;14082:6;14057:32;;;;;;:::i;:::-;;;;;;;;13717:380;;;:::o;44688:2255::-;44836:1;44820:18;;:4;:18;;;44812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44913:1;44899:16;;:2;:16;;;44891:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44981:1;44971:6;:11;44968:92;;44999:28;45015:4;45021:2;45025:1;44999:15;:28::i;:::-;45042:7;;44968:92;45083:25;:31;45109:4;45083:31;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;;45120:19;:25;45140:4;45120:25;;;;;;;;;;;;;;;;;;;;;;;;;45119:26;45083:63;:93;;;;;45152:19;:23;45172:2;45152:23;;;;;;;;;;;;;;;;;;;;;;;;;45151:24;45083:93;45080:213;;;45210:23;;45200:6;:33;;45192:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;45080:213;45308:25;:29;45334:2;45308:29;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;45343:19;:25;45363:4;45343:25;;;;;;;;;;;;;;;;;;;;;;;;;45342:26;45308:61;:91;;;;;45375:19;:23;45395:2;45375:23;;;;;;;;;;;;;;;;;;;;;;;;;45374:24;45308:91;45305:213;;;45433:24;;45423:6;:34;;45415:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;45305:213;45535:28;45566:24;45584:4;45566:9;:24::i;:::-;45535:55;;45611:24;45662:18;;45638:20;:42;;45611:69;;45704:16;;;;;;;;;;;45703:17;:50;;;;;45724:25;:29;45750:2;45724:29;;;;;;;;;;;;;;;;;;;;;;;;;45703:50;:75;;;;;45757:21;;;;;;;;;;;45703:75;45700:621;;;45798:19;45795:157;;;45861:18;;45838:41;;45898:36;45913:20;45898:14;:36::i;:::-;45795:157;45980:15;45998:21;45980:39;;46038:14;;;;;;;;;;;:54;;;;;46074:17;;46056:7;:36;46038:54;46034:274;;;46145:17;;46135:7;:27;46131:81;;;46195:17;;46185:27;;46131:81;46249:43;46263:28;46275:15;;46263:7;:11;;:28;;;;:::i;:::-;46249:13;:43::i;:::-;46034:274;45780:541;45700:621;46423:19;:25;46443:4;46423:25;;;;;;;;;;;;;;;;;;;;;;;;;46422:26;:54;;;;;46453:19;:23;46473:2;46453:23;;;;;;;;;;;;;;;;;;;;;;;;;46452:24;46422:54;46419:469;;;46494:12;46524:25;:31;46550:4;46524:31;;;;;;;;;;;;;;;;;;;;;;;;;46521:110;;;46582:33;46611:3;46582:24;46593:12;;46582:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46574:41;;46521:110;46650:25;:29;46676:2;46650:29;;;;;;;;;;;;;;;;;;;;;;;;;46647:109;;;46706:34;46736:3;46706:25;46717:13;;46706:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46698:42;;46647:109;46788:16;46799:4;46788:6;:10;;:16;;;;:::i;:::-;46779:25;;46819:42;46835:4;46849;46856;46819:15;:42::i;:::-;46479:409;46419:469;46900:33;46916:4;46922:2;46926:6;46900:15;:33::i;:::-;44801:2142;;44688:2255;;;;:::o;28758:98::-;28816:7;28847:1;28843;:5;;;;:::i;:::-;28836:12;;28758:98;;;;:::o;17567:173::-;17623:16;17642:6;;;;;;;;;;;17623:25;;17668:8;17659:6;;:17;;;;;;;;;;;;;;;;;;17723:8;17692:40;;17713:8;17692:40;;;;;;;;;;;;17612:128;17567:173;:::o;44043:318::-;44169:5;44134:40;;:25;:31;44160:4;44134:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;44126:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;44290:5;44256:25;:31;44282:4;44256:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44347:5;44313:40;;44341:4;44313:40;;;;;;;;;;;;44043:318;;:::o;10921:733::-;11079:1;11061:20;;:6;:20;;;11053:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11163:1;11142:23;;:9;:23;;;11134:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11218:47;11239:6;11247:9;11258:6;11218:20;:47::i;:::-;11278:21;11302:9;:17;11312:6;11302:17;;;;;;;;;;;;;;;;11278:41;;11355:6;11338:13;:23;;11330:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11476:6;11460:13;:22;11440:9;:17;11450:6;11440:17;;;;;;;;;;;;;;;:42;;;;11528:6;11504:9;:20;11514:9;11504:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11569:9;11552:35;;11561:6;11552:35;;;11580:6;11552:35;;;;;;:::i;:::-;;;;;;;;11600:46;11620:6;11628:9;11639:6;11600:19;:46::i;:::-;11042:612;10921:733;;;:::o;46952:1439::-;42070:4;42051:16;;:23;;;;;;;;;;;;;;;;;;47037:26:::1;47066:59;47112:12;;47066:41;47091:15;;47066:20;:24;;:41;;;;:::i;:::-;:45;;:59;;;;:::i;:::-;47037:88;;47194:12;47209:25;47232:1;47209:18;:22;;:25;;;;:::i;:::-;47194:40;;47245:17;47265:28;47288:4;47265:18;:22;;:28;;;;:::i;:::-;47245:48;;47571:22;47596:21;47571:46;;47662:22;47679:4;47662:16;:22::i;:::-;47815:18;47836:41;47862:14;47836:21;:25;;:41;;;;:::i;:::-;47815:62;;47927:35;47940:9;47951:10;47927:12;:35::i;:::-;48020:25;48048:21;48020:49;;48080:62;48097:44;48122:18;48097:20;:24;;:44;;;;:::i;:::-;48080:16;:62::i;:::-;48154:24;48181:44;48207:17;48181:21;:25;;:44;;;;:::i;:::-;48154:71;;48236:10;;;;;;;;;;;:19;;:88;48256:67;48293:29;48308:13;;48293:10;;:14;;:29;;;;:::i;:::-;48256:32;48277:10;;48256:16;:20;;:32;;;;:::i;:::-;:36;;:67;;;;:::i;:::-;48236:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48350:32;48365:4;48371:10;48350:32;;;;;;;:::i;:::-;;;;;;;;47026:1365;;;;;;;42116:5:::0;42097:16;;:24;;;;;;;;;;;;;;;;;;46952:1439;:::o;49500:135::-;42070:4;42051:16;;:23;;;;;;;;;;;;;;;;;;49580:1:::1;49571:6;:10;49567:61;;;49595:24;49612:6;49595:16;:24::i;:::-;49567:61;42116:5:::0;42097:16;;:24;;;;;;;;;;;;;;;;;;49500:135;:::o;28359:98::-;28417:7;28448:1;28444;:5;;;;:::i;:::-;28437:12;;28359:98;;;;:::o;28002:::-;28060:7;28091:1;28087;:5;;;;:::i;:::-;28080:12;;28002:98;;;;:::o;14697:125::-;;;;:::o;15426:124::-;;;;:::o;48399:694::-;48527:21;48565:1;48551:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48527:40;;48596:4;48578;48583:1;48578:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48622:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48612:4;48617:1;48612:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48713:11;48660:50;48678:4;48693:15;;;;;;;;;;;48660:9;:50::i;:::-;:64;48657:156;;;48739:62;48756:4;48771:15;;;;;;;;;;;48798:1;48789:11;48739:8;:62::i;:::-;48657:156;48851:15;;;;;;;;;;;:66;;;48932:11;48958:1;49002:4;49029;49049:15;48851:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48454:639;48399:694;:::o;49101:391::-;49222:15;;;;;;;;;;;:31;;;49261:9;49294:4;49314:11;49340:1;49383;49426:7;:5;:7::i;:::-;49448:15;49222:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49101:391;;:::o;49643:572::-;49764:21;49802:1;49788:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49764:40;;49825:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49815:4;49820:1;49815:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;49868:7;49858:4;49863:1;49858:7;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;49912:15;;;;;;;;;;;:66;;;49986:6;50008:1;50055:4;50074:11;50116:24;50136:3;50116:15;:19;;:24;;;;:::i;:::-;49912:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50177:30;50194:6;50202:4;50177:30;;;;;;;:::i;:::-;;;;;;;;49693:522;49643:572;:::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:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:118::-;5536:24;5554:5;5536:24;:::i;:::-;5531:3;5524:37;5449:118;;:::o;5573:222::-;5666:4;5704:2;5693:9;5689:18;5681:26;;5717:71;5785:1;5774:9;5770:17;5761:6;5717:71;:::i;:::-;5573:222;;;;:::o;5801:116::-;5871:21;5886:5;5871:21;:::i;:::-;5864:5;5861:32;5851:60;;5907:1;5904;5897:12;5851:60;5801:116;:::o;5923:133::-;5966:5;6004:6;5991:20;5982:29;;6020:30;6044:5;6020:30;:::i;:::-;5923:133;;;;:::o;6062:323::-;6118:6;6167:2;6155:9;6146:7;6142:23;6138:32;6135:119;;;6173:79;;:::i;:::-;6135:119;6293:1;6318:50;6360:7;6351:6;6340:9;6336:22;6318:50;:::i;:::-;6308:60;;6264:114;6062:323;;;;:::o;6391:86::-;6426:7;6466:4;6459:5;6455:16;6444:27;;6391:86;;;:::o;6483:112::-;6566:22;6582:5;6566:22;:::i;:::-;6561:3;6554:35;6483:112;;:::o;6601:214::-;6690:4;6728:2;6717:9;6713:18;6705:26;;6741:67;6805:1;6794:9;6790:17;6781:6;6741:67;:::i;:::-;6601:214;;;;:::o;6821:329::-;6880:6;6929:2;6917:9;6908:7;6904:23;6900:32;6897:119;;;6935:79;;:::i;:::-;6897:119;7055:1;7080:53;7125:7;7116:6;7105:9;7101:22;7080:53;:::i;:::-;7070:63;;7026:117;6821:329;;;;:::o;7156:::-;7215:6;7264:2;7252:9;7243:7;7239:23;7235:32;7232:119;;;7270:79;;:::i;:::-;7232:119;7390:1;7415:53;7460:7;7451:6;7440:9;7436:22;7415:53;:::i;:::-;7405:63;;7361:117;7156:329;;;;:::o;7491:104::-;7536:7;7565:24;7583:5;7565:24;:::i;:::-;7554:35;;7491:104;;;:::o;7601:142::-;7704:32;7730:5;7704:32;:::i;:::-;7699:3;7692:45;7601:142;;:::o;7749:254::-;7858:4;7896:2;7885:9;7881:18;7873:26;;7909:87;7993:1;7982:9;7978:17;7969:6;7909:87;:::i;:::-;7749:254;;;;:::o;8009:468::-;8074:6;8082;8131:2;8119:9;8110:7;8106:23;8102:32;8099:119;;;8137:79;;:::i;:::-;8099:119;8257:1;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8228:117;8384:2;8410:50;8452:7;8443:6;8432:9;8428:22;8410:50;:::i;:::-;8400:60;;8355:115;8009:468;;;;;:::o;8483:474::-;8551:6;8559;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:53;8804:7;8795:6;8784:9;8780:22;8759:53;:::i;:::-;8749:63;;8705:117;8861:2;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8832:118;8483:474;;;;;:::o;8963:180::-;9011:77;9008:1;9001:88;9108:4;9105:1;9098:15;9132:4;9129:1;9122:15;9149:320;9193:6;9230:1;9224:4;9220:12;9210:22;;9277:1;9271:4;9267:12;9298:18;9288:81;;9354:4;9346:6;9342:17;9332:27;;9288:81;9416:2;9408:6;9405:14;9385:18;9382:38;9379:84;;9435:18;;:::i;:::-;9379:84;9200:269;9149:320;;;:::o;9475:227::-;9615:34;9611:1;9603:6;9599:14;9592:58;9684:10;9679:2;9671:6;9667:15;9660:35;9475:227;:::o;9708:366::-;9850:3;9871:67;9935:2;9930:3;9871:67;:::i;:::-;9864:74;;9947:93;10036:3;9947:93;:::i;:::-;10065:2;10060:3;10056:12;10049:19;;9708:366;;;:::o;10080:419::-;10246:4;10284:2;10273:9;10269:18;10261:26;;10333:9;10327:4;10323:20;10319:1;10308:9;10304:17;10297:47;10361:131;10487:4;10361:131;:::i;:::-;10353:139;;10080:419;;;:::o;10505:182::-;10645:34;10641:1;10633:6;10629:14;10622:58;10505:182;:::o;10693:366::-;10835:3;10856:67;10920:2;10915:3;10856:67;:::i;:::-;10849:74;;10932:93;11021:3;10932:93;:::i;:::-;11050:2;11045:3;11041:12;11034:19;;10693:366;;;:::o;11065:419::-;11231:4;11269:2;11258:9;11254:18;11246:26;;11318:9;11312:4;11308:20;11304:1;11293:9;11289:17;11282:47;11346:131;11472:4;11346:131;:::i;:::-;11338:139;;11065:419;;;:::o;11490:180::-;11538:77;11535:1;11528:88;11635:4;11632:1;11625:15;11659:4;11656:1;11649:15;11676:305;11716:3;11735:20;11753:1;11735:20;:::i;:::-;11730:25;;11769:20;11787:1;11769:20;:::i;:::-;11764:25;;11923:1;11855:66;11851:74;11848:1;11845:81;11842:107;;;11929:18;;:::i;:::-;11842:107;11973:1;11970;11966:9;11959:16;;11676:305;;;;:::o;11987:166::-;12127:18;12123:1;12115:6;12111:14;12104:42;11987:166;:::o;12159:366::-;12301:3;12322:67;12386:2;12381:3;12322:67;:::i;:::-;12315:74;;12398:93;12487:3;12398:93;:::i;:::-;12516:2;12511:3;12507:12;12500:19;;12159:366;;;:::o;12531:419::-;12697:4;12735:2;12724:9;12720:18;12712:26;;12784:9;12778:4;12774:20;12770:1;12759:9;12755:17;12748:47;12812:131;12938:4;12812:131;:::i;:::-;12804:139;;12531:419;;;:::o;12956:232::-;13096:34;13092:1;13084:6;13080:14;13073:58;13165:15;13160:2;13152:6;13148:15;13141:40;12956:232;:::o;13194:366::-;13336:3;13357:67;13421:2;13416:3;13357:67;:::i;:::-;13350:74;;13433:93;13522:3;13433:93;:::i;:::-;13551:2;13546:3;13542:12;13535:19;;13194:366;;;:::o;13566:419::-;13732:4;13770:2;13759:9;13755:18;13747:26;;13819:9;13813:4;13809:20;13805:1;13794:9;13790:17;13783:47;13847:131;13973:4;13847:131;:::i;:::-;13839:139;;13566:419;;;:::o;13991:303::-;14131:34;14127:1;14119:6;14115:14;14108:58;14200:34;14195:2;14187:6;14183:15;14176:59;14269:17;14264:2;14256:6;14252:15;14245:42;13991:303;:::o;14300:366::-;14442:3;14463:67;14527:2;14522:3;14463:67;:::i;:::-;14456:74;;14539:93;14628:3;14539:93;:::i;:::-;14657:2;14652:3;14648:12;14641:19;;14300:366;;;:::o;14672:419::-;14838:4;14876:2;14865:9;14861:18;14853:26;;14925:9;14919:4;14915:20;14911:1;14900:9;14896:17;14889:47;14953:131;15079:4;14953:131;:::i;:::-;14945:139;;14672:419;;;:::o;15097:224::-;15237:34;15233:1;15225:6;15221:14;15214:58;15306:7;15301:2;15293:6;15289:15;15282:32;15097:224;:::o;15327:366::-;15469:3;15490:67;15554:2;15549:3;15490:67;:::i;:::-;15483:74;;15566:93;15655:3;15566:93;:::i;:::-;15684:2;15679:3;15675:12;15668:19;;15327:366;;;:::o;15699:419::-;15865:4;15903:2;15892:9;15888:18;15880:26;;15952:9;15946:4;15942:20;15938:1;15927:9;15923:17;15916:47;15980:131;16106:4;15980:131;:::i;:::-;15972:139;;15699:419;;;:::o;16124:239::-;16264:34;16260:1;16252:6;16248:14;16241:58;16333:22;16328:2;16320:6;16316:15;16309:47;16124:239;:::o;16369:366::-;16511:3;16532:67;16596:2;16591:3;16532:67;:::i;:::-;16525:74;;16608:93;16697:3;16608:93;:::i;:::-;16726:2;16721:3;16717:12;16710:19;;16369:366;;;:::o;16741:419::-;16907:4;16945:2;16934:9;16930:18;16922:26;;16994:9;16988:4;16984:20;16980:1;16969:9;16965:17;16958:47;17022:131;17148:4;17022:131;:::i;:::-;17014:139;;16741:419;;;:::o;17166:225::-;17306:34;17302:1;17294:6;17290:14;17283:58;17375:8;17370:2;17362:6;17358:15;17351:33;17166:225;:::o;17397:366::-;17539:3;17560:67;17624:2;17619:3;17560:67;:::i;:::-;17553:74;;17636:93;17725:3;17636:93;:::i;:::-;17754:2;17749:3;17745:12;17738:19;;17397:366;;;:::o;17769:419::-;17935:4;17973:2;17962:9;17958:18;17950:26;;18022:9;18016:4;18012:20;18008:1;17997:9;17993:17;17986:47;18050:131;18176:4;18050:131;:::i;:::-;18042:139;;17769:419;;;:::o;18194:223::-;18334:34;18330:1;18322:6;18318:14;18311:58;18403:6;18398:2;18390:6;18386:15;18379:31;18194:223;:::o;18423:366::-;18565:3;18586:67;18650:2;18645:3;18586:67;:::i;:::-;18579:74;;18662:93;18751:3;18662:93;:::i;:::-;18780:2;18775:3;18771:12;18764:19;;18423:366;;;:::o;18795:419::-;18961:4;18999:2;18988:9;18984:18;18976:26;;19048:9;19042:4;19038:20;19034:1;19023:9;19019:17;19012:47;19076:131;19202:4;19076:131;:::i;:::-;19068:139;;18795:419;;;:::o;19220:221::-;19360:34;19356:1;19348:6;19344:14;19337:58;19429:4;19424:2;19416:6;19412:15;19405:29;19220:221;:::o;19447:366::-;19589:3;19610:67;19674:2;19669:3;19610:67;:::i;:::-;19603:74;;19686:93;19775:3;19686:93;:::i;:::-;19804:2;19799:3;19795:12;19788:19;;19447:366;;;:::o;19819:419::-;19985:4;20023:2;20012:9;20008:18;20000:26;;20072:9;20066:4;20062:20;20058:1;20047:9;20043:17;20036:47;20100:131;20226:4;20100:131;:::i;:::-;20092:139;;19819:419;;;:::o;20244:224::-;20384:34;20380:1;20372:6;20368:14;20361:58;20453:7;20448:2;20440:6;20436:15;20429:32;20244:224;:::o;20474:366::-;20616:3;20637:67;20701:2;20696:3;20637:67;:::i;:::-;20630:74;;20713:93;20802:3;20713:93;:::i;:::-;20831:2;20826:3;20822:12;20815:19;;20474:366;;;:::o;20846:419::-;21012:4;21050:2;21039:9;21035:18;21027:26;;21099:9;21093:4;21089:20;21085:1;21074:9;21070:17;21063:47;21127:131;21253:4;21127:131;:::i;:::-;21119:139;;20846:419;;;:::o;21271:222::-;21411:34;21407:1;21399:6;21395:14;21388:58;21480:5;21475:2;21467:6;21463:15;21456:30;21271:222;:::o;21499:366::-;21641:3;21662:67;21726:2;21721:3;21662:67;:::i;:::-;21655:74;;21738:93;21827:3;21738:93;:::i;:::-;21856:2;21851:3;21847:12;21840:19;;21499:366;;;:::o;21871:419::-;22037:4;22075:2;22064:9;22060:18;22052:26;;22124:9;22118:4;22114:20;22110:1;22099:9;22095:17;22088:47;22152:131;22278:4;22152:131;:::i;:::-;22144:139;;21871:419;;;:::o;22296:230::-;22436:34;22432:1;22424:6;22420:14;22413:58;22505:13;22500:2;22492:6;22488:15;22481:38;22296:230;:::o;22532:366::-;22674:3;22695:67;22759:2;22754:3;22695:67;:::i;:::-;22688:74;;22771:93;22860:3;22771:93;:::i;:::-;22889:2;22884:3;22880:12;22873:19;;22532:366;;;:::o;22904:419::-;23070:4;23108:2;23097:9;23093:18;23085:26;;23157:9;23151:4;23147:20;23143:1;23132:9;23128:17;23121:47;23185:131;23311:4;23185:131;:::i;:::-;23177:139;;22904:419;;;:::o;23329:231::-;23469:34;23465:1;23457:6;23453:14;23446:58;23538:14;23533:2;23525:6;23521:15;23514:39;23329:231;:::o;23566:366::-;23708:3;23729:67;23793:2;23788:3;23729:67;:::i;:::-;23722:74;;23805:93;23894:3;23805:93;:::i;:::-;23923:2;23918:3;23914:12;23907:19;;23566:366;;;:::o;23938:419::-;24104:4;24142:2;24131:9;24127:18;24119:26;;24191:9;24185:4;24181:20;24177:1;24166:9;24162:17;24155:47;24219:131;24345:4;24219:131;:::i;:::-;24211:139;;23938:419;;;:::o;24363:180::-;24411:77;24408:1;24401:88;24508:4;24505:1;24498:15;24532:4;24529:1;24522:15;24549:185;24589:1;24606:20;24624:1;24606:20;:::i;:::-;24601:25;;24640:20;24658:1;24640:20;:::i;:::-;24635:25;;24679:1;24669:35;;24684:18;;:::i;:::-;24669:35;24726:1;24723;24719:9;24714:14;;24549:185;;;;:::o;24740:290::-;24880:34;24876:1;24868:6;24864:14;24857:58;24949:34;24944:2;24936:6;24932:15;24925:59;25018:4;25013:2;25005:6;25001:15;24994:29;24740:290;:::o;25036:366::-;25178:3;25199:67;25263:2;25258:3;25199:67;:::i;:::-;25192:74;;25275:93;25364:3;25275:93;:::i;:::-;25393:2;25388:3;25384:12;25377:19;;25036:366;;;:::o;25408:419::-;25574:4;25612:2;25601:9;25597:18;25589:26;;25661:9;25655:4;25651:20;25647:1;25636:9;25632:17;25625:47;25689:131;25815:4;25689:131;:::i;:::-;25681:139;;25408:419;;;:::o;25833:225::-;25973:34;25969:1;25961:6;25957:14;25950:58;26042:8;26037:2;26029:6;26025:15;26018:33;25833:225;:::o;26064:366::-;26206:3;26227:67;26291:2;26286:3;26227:67;:::i;:::-;26220:74;;26303:93;26392:3;26303:93;:::i;:::-;26421:2;26416:3;26412:12;26405:19;;26064:366;;;:::o;26436:419::-;26602:4;26640:2;26629:9;26625:18;26617:26;;26689:9;26683:4;26679:20;26675:1;26664:9;26660:17;26653:47;26717:131;26843:4;26717:131;:::i;:::-;26709:139;;26436:419;;;:::o;26861:332::-;26982:4;27020:2;27009:9;27005:18;26997:26;;27033:71;27101:1;27090:9;27086:17;27077:6;27033:71;:::i;:::-;27114:72;27182:2;27171:9;27167:18;27158:6;27114:72;:::i;:::-;26861:332;;;;;:::o;27199:348::-;27239:7;27262:20;27280:1;27262:20;:::i;:::-;27257:25;;27296:20;27314:1;27296:20;:::i;:::-;27291:25;;27484:1;27416:66;27412:74;27409:1;27406:81;27401:1;27394:9;27387:17;27383:105;27380:131;;;27491:18;;:::i;:::-;27380:131;27539:1;27536;27532:9;27521:20;;27199:348;;;;:::o;27553:191::-;27593:4;27613:20;27631:1;27613:20;:::i;:::-;27608:25;;27647:20;27665:1;27647:20;:::i;:::-;27642:25;;27686:1;27683;27680:8;27677:34;;;27691:18;;:::i;:::-;27677:34;27736:1;27733;27729:9;27721:17;;27553:191;;;;:::o;27750:180::-;27798:77;27795:1;27788:88;27895:4;27892:1;27885:15;27919:4;27916:1;27909:15;27936:180;27984:77;27981:1;27974:88;28081:4;28078:1;28071:15;28105:4;28102:1;28095:15;28122:143;28179:5;28210:6;28204:13;28195:22;;28226:33;28253:5;28226:33;:::i;:::-;28122:143;;;;:::o;28271:351::-;28341:6;28390:2;28378:9;28369:7;28365:23;28361:32;28358:119;;;28396:79;;:::i;:::-;28358:119;28516:1;28541:64;28597:7;28588:6;28577:9;28573:22;28541:64;:::i;:::-;28531:74;;28487:128;28271:351;;;;:::o;28628:85::-;28673:7;28702:5;28691:16;;28628:85;;;:::o;28719:158::-;28777:9;28810:61;28828:42;28837:32;28863:5;28837:32;:::i;:::-;28828:42;:::i;:::-;28810:61;:::i;:::-;28797:74;;28719:158;;;:::o;28883:147::-;28978:45;29017:5;28978:45;:::i;:::-;28973:3;28966:58;28883:147;;:::o;29036:114::-;29103:6;29137:5;29131:12;29121:22;;29036:114;;;:::o;29156:184::-;29255:11;29289:6;29284:3;29277:19;29329:4;29324:3;29320:14;29305:29;;29156:184;;;;:::o;29346:132::-;29413:4;29436:3;29428:11;;29466:4;29461:3;29457:14;29449:22;;29346:132;;;:::o;29484:108::-;29561:24;29579:5;29561:24;:::i;:::-;29556:3;29549:37;29484:108;;:::o;29598:179::-;29667:10;29688:46;29730:3;29722:6;29688:46;:::i;:::-;29766:4;29761:3;29757:14;29743:28;;29598:179;;;;:::o;29783:113::-;29853:4;29885;29880:3;29876:14;29868:22;;29783:113;;;:::o;29932:732::-;30051:3;30080:54;30128:5;30080:54;:::i;:::-;30150:86;30229:6;30224:3;30150:86;:::i;:::-;30143:93;;30260:56;30310:5;30260:56;:::i;:::-;30339:7;30370:1;30355:284;30380:6;30377:1;30374:13;30355:284;;;30456:6;30450:13;30483:63;30542:3;30527:13;30483:63;:::i;:::-;30476:70;;30569:60;30622:6;30569:60;:::i;:::-;30559:70;;30415:224;30402:1;30399;30395:9;30390:14;;30355:284;;;30359:14;30655:3;30648:10;;30056:608;;;29932:732;;;;:::o;30670:831::-;30933:4;30971:3;30960:9;30956:19;30948:27;;30985:71;31053:1;31042:9;31038:17;31029:6;30985:71;:::i;:::-;31066:80;31142:2;31131:9;31127:18;31118:6;31066:80;:::i;:::-;31193:9;31187:4;31183:20;31178:2;31167:9;31163:18;31156:48;31221:108;31324:4;31315:6;31221:108;:::i;:::-;31213:116;;31339:72;31407:2;31396:9;31392:18;31383:6;31339:72;:::i;:::-;31421:73;31489:3;31478:9;31474:19;31465:6;31421:73;:::i;:::-;30670:831;;;;;;;;:::o;31507:807::-;31756:4;31794:3;31783:9;31779:19;31771:27;;31808:71;31876:1;31865:9;31861:17;31852:6;31808:71;:::i;:::-;31889:72;31957:2;31946:9;31942:18;31933:6;31889:72;:::i;:::-;31971:80;32047:2;32036:9;32032:18;32023:6;31971:80;:::i;:::-;32061;32137:2;32126:9;32122:18;32113:6;32061:80;:::i;:::-;32151:73;32219:3;32208:9;32204:19;32195:6;32151:73;:::i;:::-;32234;32302:3;32291:9;32287:19;32278:6;32234:73;:::i;:::-;31507:807;;;;;;;;;:::o;32320:143::-;32377:5;32408:6;32402:13;32393:22;;32424:33;32451:5;32424:33;:::i;:::-;32320:143;;;;:::o;32469:663::-;32557:6;32565;32573;32622:2;32610:9;32601:7;32597:23;32593:32;32590:119;;;32628:79;;:::i;:::-;32590:119;32748:1;32773:64;32829:7;32820:6;32809:9;32805:22;32773:64;:::i;:::-;32763:74;;32719:128;32886:2;32912:64;32968:7;32959:6;32948:9;32944:22;32912:64;:::i;:::-;32902:74;;32857:129;33025:2;33051:64;33107:7;33098:6;33087:9;33083:22;33051:64;:::i;:::-;33041:74;;32996:129;32469:663;;;;;:::o;33138:720::-;33373:4;33411:3;33400:9;33396:19;33388:27;;33425:79;33501:1;33490:9;33486:17;33477:6;33425:79;:::i;:::-;33551:9;33545:4;33541:20;33536:2;33525:9;33521:18;33514:48;33579:108;33682:4;33673:6;33579:108;:::i;:::-;33571:116;;33697:72;33765:2;33754:9;33750:18;33741:6;33697:72;:::i;:::-;33779;33847:2;33836:9;33832:18;33823:6;33779:72;:::i;:::-;33138:720;;;;;;;:::o;33864:483::-;34035:4;34073:2;34062:9;34058:18;34050:26;;34086:71;34154:1;34143:9;34139:17;34130:6;34086:71;:::i;:::-;34204:9;34198:4;34194:20;34189:2;34178:9;34174:18;34167:48;34232:108;34335:4;34326:6;34232:108;:::i;:::-;34224:116;;33864:483;;;;;:::o

Swarm Source

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