ETH Price: $2,745.58 (+3.00%)

Token

‘Hype-AI’ (’HYPE’)
 

Overview

Max Total Supply

1,000,000 ’HYPE’

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
zero2100.eth
Balance
12.938458981 ’HYPE’

Value
$0.00
0x00dacf5e7a1e6dc92bf31b2374118433d53a70b4
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:
LiquidityGeneratorToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-09-20
*/

// Dependency file: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.8.0;

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


// Dependency file: @openzeppelin/contracts/utils/Context.sol


// pragma solidity ^0.8.0;

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

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


// Dependency file: @openzeppelin/contracts/access/Ownable.sol


// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/utils/Context.sol";

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


// Dependency file: @openzeppelin/contracts/utils/math/SafeMath.sol


// pragma solidity ^0.8.0;

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


// Dependency file: @openzeppelin/contracts/utils/Address.sol


// pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// Dependency file: contracts/interfaces/IUniswapV2Router02.sol

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// Dependency file: contracts/interfaces/IUniswapV2Factory.sol

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


// Dependency file: contracts/BaseToken.sol

// pragma solidity =0.8.4;

enum TokenType {
    standard,
    antiBotStandard,
    liquidityGenerator,
    antiBotLiquidityGenerator,
    baby,
    antiBotBaby,
    buybackBaby,
    antiBotBuybackBaby
}

abstract contract BaseToken {
    event TokenCreated(
        address indexed owner,
        address indexed token,
        TokenType tokenType,
        uint256 version
    );
}


// Root file: contracts/liquidity-generator/LiquidityGeneratorToken.sol

pragma solidity =0.8.4;

// import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
// import "@openzeppelin/contracts/access/Ownable.sol";
// import "@openzeppelin/contracts/utils/math/SafeMath.sol";
// import "@openzeppelin/contracts/utils/Address.sol";
// import "contracts/interfaces/IUniswapV2Router02.sol";
// import "contracts/interfaces/IUniswapV2Factory.sol";
// import "contracts/BaseToken.sol";

contract LiquidityGeneratorToken is IERC20, Ownable, BaseToken {
    using SafeMath for uint256;
    using Address for address;

    uint256 public constant VERSION = 2;

    uint256 public constant MAX_FEE = 10**4 / 4;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 public _taxFee;
    uint256 private _previousTaxFee;

    uint256 public _liquidityFee;
    uint256 private _previousLiquidityFee;

    uint256 public _charityFee;
    uint256 private _previousCharityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public _charityAddress;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;

    uint256 private numTokensSellToAddToLiquidity;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyAmountUpdated(uint256 amount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        address router_,
        address charityAddress_,
        uint16 taxFeeBps_,
        uint16 liquidityFeeBps_,
        uint16 charityFeeBps_,
        address serviceFeeReceiver_,
        uint256 serviceFee_
    ) payable {
        if (charityAddress_ == address(0)) {
            require(
                charityFeeBps_ == 0,
                "Cant set both charity address to address 0 and charity percent more than 0"
            );
        }
        require(
            taxFeeBps_ + liquidityFeeBps_ + charityFeeBps_ <= MAX_FEE,
            "Total fee is over 25%"
        );

        _name = name_;
        _symbol = symbol_;
        _decimals = 9;

        _tTotal = totalSupply_;
        _rTotal = (MAX - (MAX % _tTotal));

        _taxFee = taxFeeBps_;
        _previousTaxFee = _taxFee;

        _liquidityFee = liquidityFeeBps_;
        _previousLiquidityFee = _liquidityFee;

        _charityAddress = charityAddress_;
        _charityFee = charityFeeBps_;
        _previousCharityFee = _charityFee;

        numTokensSellToAddToLiquidity = totalSupply_.div(10**3); // 0.1%

        swapAndLiquifyEnabled = true;

        _rOwned[owner()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), owner(), _tTotal);

        emit TokenCreated(
            owner(),
            address(this),
            TokenType.liquidityGenerator,
            VERSION
        );

        payable(serviceFeeReceiver_).transfer(serviceFee_);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tCharity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeCharityFee(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function setTaxFeePercent(uint256 taxFeeBps) external onlyOwner {
        _taxFee = taxFeeBps;
        require(
            _taxFee + _liquidityFee + _charityFee <= MAX_FEE,
            "Total fee is over 25%"
        );
    }

    function setLiquidityFeePercent(uint256 liquidityFeeBps)
        external
        onlyOwner
    {
        _liquidityFee = liquidityFeeBps;
        require(
            _taxFee + _liquidityFee + _charityFee <= MAX_FEE,
            "Total fee is over 25%"
        );
    }

    function setCharityFeePercent(uint256 charityFeeBps) external onlyOwner {
        _charityFee = charityFeeBps;
        require(
            _taxFee + _liquidityFee + _charityFee <= MAX_FEE,
            "Total fee is over 25%"
        );
    }

    function setSwapBackSettings(uint256 _amount) external onlyOwner {
        require(
            _amount >= totalSupply().mul(5).div(10**4),
            "Swapback amount should be at least 0.05% of total supply"
        );
        numTokensSellToAddToLiquidity = _amount;
        emit SwapAndLiquifyAmountUpdated(_amount);
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tCharity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tCharity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity,
            tCharity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tCharityFee = calculateCharityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(
            tCharityFee
        );
        return (tTransferAmount, tFee, tLiquidity, tCharityFee);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 tCharity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(
            rCharity
        );
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function _takeCharityFee(uint256 tCharity) private {
        if (tCharity > 0) {
            uint256 currentRate = _getRate();
            uint256 rCharity = tCharity.mul(currentRate);
            _rOwned[_charityAddress] = _rOwned[_charityAddress].add(rCharity);
            if (_isExcluded[_charityAddress])
                _tOwned[_charityAddress] = _tOwned[_charityAddress].add(
                    tCharity
                );
            emit Transfer(_msgSender(), _charityAddress, tCharity);
        }
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**4);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**4);
    }

    function calculateCharityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        if (_charityAddress == address(0)) return 0;
        return _amount.mul(_charityFee).div(10**4);
    }

    function removeAllFee() private {
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousCharityFee = _charityFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _charityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _charityFee = _previousCharityFee;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.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);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tCharity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeCharityFee(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tCharity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeCharityFee(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tCharity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeCharityFee(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"address","name":"router_","type":"address"},{"internalType":"address","name":"charityAddress_","type":"address"},{"internalType":"uint16","name":"taxFeeBps_","type":"uint16"},{"internalType":"uint16","name":"liquidityFeeBps_","type":"uint16"},{"internalType":"uint16","name":"charityFeeBps_","type":"uint16"},{"internalType":"address","name":"serviceFeeReceiver_","type":"address"},{"internalType":"uint256","name":"serviceFee_","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndLiquifyAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"}],"name":"TokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFeeBps","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFeeBps","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFeeBps","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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"},{"stateMutability":"payable","type":"receive"}]

60806040526040516200611c3803806200611c83398181016040528101906200002991906200097f565b620000496200003d620006df60201b60201c565b620006e760201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415620000ca5760008361ffff1614620000c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c09062000b7c565b60405180910390fd5b5b6109c4838587620000dc919062000c4d565b620000e8919062000c4d565b61ffff16111562000130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001279062000b9e565b60405180910390fd5b89600a908051906020019062000148929190620007ec565b5088600b908051906020019062000161929190620007ec565b506009600c60006101000a81548160ff021916908360ff1602179055508760078190555060075460001962000197919062000e16565b600019620001a6919062000cc4565b6008819055508461ffff16600d81905550600d54600e819055508361ffff16600f81905550600f5460108190555085601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508261ffff16601181905550601154601281905550620002456103e889620007ab60201b62001ea91790919060201c565b60168190555060016015806101000a81548160ff021916908315150217905550600854600160006200027c620007c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008790508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030657600080fd5b505afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062000953565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a457600080fd5b505afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000953565b6040518363ffffffff1660e01b8152600401620003fe92919062000b22565b602060405180830381600087803b1580156200041957600080fd5b505af11580156200042e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000454919062000953565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004eb620007c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005a4620007c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000605919062000bc0565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff1662000634620007c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff167f56358b41df5fa59f5639228f0930994cbdde383c8a8fd74e06c04e1deebe35626002806040516200067e92919062000b4f565b60405180910390a38273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015620006cd573d6000803e3d6000fd5b5050505050505050505050506200104d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183620007bb919062000c8c565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620007fa9062000daa565b90600052602060002090601f0160209004810192826200081e57600085556200086a565b82601f106200083957805160ff19168380011785556200086a565b828001600101855582156200086a579182015b82811115620008695782518255916020019190600101906200084c565b5b5090506200087991906200087d565b5090565b5b80821115620008985760008160009055506001016200087e565b5090565b6000620008b3620008ad8462000c06565b62000bdd565b905082815260208101848484011115620008cc57600080fd5b620008d984828562000d74565b509392505050565b600081519050620008f28162000fff565b92915050565b600082601f8301126200090a57600080fd5b81516200091c8482602086016200089c565b91505092915050565b600081519050620009368162001019565b92915050565b6000815190506200094d8162001033565b92915050565b6000602082840312156200096657600080fd5b60006200097684828501620008e1565b91505092915050565b6000806000806000806000806000806101408b8d031215620009a057600080fd5b60008b015167ffffffffffffffff811115620009bb57600080fd5b620009c98d828e01620008f8565b9a505060208b015167ffffffffffffffff811115620009e757600080fd5b620009f58d828e01620008f8565b995050604062000a088d828e016200093c565b985050606062000a1b8d828e01620008e1565b975050608062000a2e8d828e01620008e1565b96505060a062000a418d828e0162000925565b95505060c062000a548d828e0162000925565b94505060e062000a678d828e0162000925565b93505061010062000a7b8d828e01620008e1565b92505061012062000a8f8d828e016200093c565b9150509295989b9194979a5092959850565b62000aac8162000cff565b82525050565b62000abd8162000d60565b82525050565b600062000ad2604a8362000c3c565b915062000adf8262000f4a565b606082019050919050565b600062000af960158362000c3c565b915062000b068262000fbf565b602082019050919050565b62000b1c8162000d56565b82525050565b600060408201905062000b39600083018562000aa1565b62000b48602083018462000aa1565b9392505050565b600060408201905062000b66600083018562000ab2565b62000b75602083018462000b11565b9392505050565b6000602082019050818103600083015262000b978162000ac3565b9050919050565b6000602082019050818103600083015262000bb98162000aea565b9050919050565b600060208201905062000bd7600083018462000b11565b92915050565b600062000be962000bfc565b905062000bf7828262000de0565b919050565b6000604051905090565b600067ffffffffffffffff82111562000c245762000c2362000f0a565b5b62000c2f8262000f39565b9050602081019050919050565b600082825260208201905092915050565b600062000c5a8262000d28565b915062000c678362000d28565b92508261ffff0382111562000c815762000c8062000e4e565b5b828201905092915050565b600062000c998262000d56565b915062000ca68362000d56565b92508262000cb95762000cb862000e7d565b5b828204905092915050565b600062000cd18262000d56565b915062000cde8362000d56565b92508282101562000cf45762000cf362000e4e565b5b828203905092915050565b600062000d0c8262000d36565b9050919050565b600081905062000d238262000fe8565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062000d6d8262000d13565b9050919050565b60005b8381101562000d9457808201518184015260208101905062000d77565b8381111562000da4576000848401525b50505050565b6000600282049050600182168062000dc357607f821691505b6020821081141562000dda5762000dd962000edb565b5b50919050565b62000deb8262000f39565b810181811067ffffffffffffffff8211171562000e0d5762000e0c62000f0a565b5b80604052505050565b600062000e238262000d56565b915062000e308362000d56565b92508262000e435762000e4262000e7d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f43616e742073657420626f74682063686172697479206164647265737320746f60008201527f2061646472657373203020616e6420636861726974792070657263656e74206d60208201527f6f7265207468616e203000000000000000000000000000000000000000000000604082015250565b7f546f74616c20666565206973206f766572203235250000000000000000000000600082015250565b6008811062000ffc5762000ffb62000eac565b5b50565b6200100a8162000cff565b81146200101657600080fd5b50565b620010248162000d28565b81146200103057600080fd5b50565b6200103e8162000d56565b81146200104a57600080fd5b50565b6150bf806200105d6000396000f3fe6080604052600436106102135760003560e01c80634a74bb02116101185780638ee88c53116100a0578063af41063b1161006f578063af41063b146107e6578063bc063e1a1461080f578063dd62ed3e1461083a578063f2fde38b14610877578063ffa1ad74146108a05761021a565b80638ee88c531461071857806395d89b4114610741578063a457c2d71461076c578063a9059cbb146107a95761021a565b806370a08231116100e757806370a0823114610633578063715018a614610670578063796431d01461068757806388f82020146106b05780638da5cb5b146106ed5761021a565b80634a74bb021461057757806352390c02146105a25780635342acb4146105cb5780636bc87c3a146106085761021a565b8063313ce5671161019b5780633bd5d1731161016a5780633bd5d1731461049257806340f8007a146104bb578063437823ec146104e65780634549b0391461050f57806349bd5a5e1461054c5761021a565b8063313ce567146103d65780633685d41914610401578063395093511461042a5780633b124fe7146104675761021a565b80631694505e116101e25780631694505e146102db57806318160ddd1461030657806319a8ac9e1461033157806323b872dd1461035c5780632d838119146103995761021a565b8063061c82d01461021f57806306fdde0314610248578063095ea7b31461027357806313114a9d146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061427d565b6108cb565b005b34801561025457600080fd5b5061025d6109b2565b60405161026a91906146c2565b60405180910390f35b34801561027f57600080fd5b5061029a60048036038101906102959190614241565b610a44565b6040516102a7919061468c565b60405180910390f35b3480156102bc57600080fd5b506102c5610a62565b6040516102d29190614884565b60405180910390f35b3480156102e757600080fd5b506102f0610a6c565b6040516102fd91906146a7565b60405180910390f35b34801561031257600080fd5b5061031b610a92565b6040516103289190614884565b60405180910390f35b34801561033d57600080fd5b50610346610a9c565b6040516103539190614610565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e91906141f2565b610ac2565b604051610390919061468c565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb919061427d565b610b9b565b6040516103cd9190614884565b60405180910390f35b3480156103e257600080fd5b506103eb610c09565b6040516103f89190614930565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190614164565b610c20565b005b34801561043657600080fd5b50610451600480360381019061044c9190614241565b610fee565b60405161045e919061468c565b60405180910390f35b34801561047357600080fd5b5061047c6110a1565b6040516104899190614884565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b4919061427d565b6110a7565b005b3480156104c757600080fd5b506104d0611223565b6040516104dd9190614884565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190614164565b611229565b005b34801561051b57600080fd5b50610536600480360381019061053191906142a6565b611300565b6040516105439190614884565b60405180910390f35b34801561055857600080fd5b50610561611386565b60405161056e9190614610565b60405180910390f35b34801561058357600080fd5b5061058c6113ac565b604051610599919061468c565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190614164565b6113bd565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190614164565b611658565b6040516105ff919061468c565b60405180910390f35b34801561061457600080fd5b5061061d6116ae565b60405161062a9190614884565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190614164565b6116b4565b6040516106679190614884565b60405180910390f35b34801561067c57600080fd5b5061068561179f565b005b34801561069357600080fd5b506106ae60048036038101906106a9919061427d565b611827565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190614164565b611955565b6040516106e4919061468c565b60405180910390f35b3480156106f957600080fd5b506107026119ab565b60405161070f9190614610565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061427d565b6119d4565b005b34801561074d57600080fd5b50610756611abb565b60405161076391906146c2565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190614241565b611b4d565b6040516107a0919061468c565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190614241565b611c1a565b6040516107dd919061468c565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061427d565b611c38565b005b34801561081b57600080fd5b50610824611d1f565b6040516108319190614884565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906141b6565b611d25565b60405161086e9190614884565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614164565b611dac565b005b3480156108ac57600080fd5b506108b5611ea4565b6040516108c29190614884565b60405180910390f35b6108d3611ebf565b73ffffffffffffffffffffffffffffffffffffffff166108f16119ab565b73ffffffffffffffffffffffffffffffffffffffff1614610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e906147c4565b60405180910390fd5b80600d819055506109c4601154600f54600d5461096491906149a0565b61096e91906149a0565b11156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690614784565b60405180910390fd5b50565b6060600a80546109c190614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546109ed90614b73565b8015610a3a5780601f10610a0f57610100808354040283529160200191610a3a565b820191906000526020600020905b815481529060010190602001808311610a1d57829003601f168201915b5050505050905090565b6000610a58610a51611ebf565b8484611ec7565b6001905092915050565b6000600954905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610acf848484612092565b610b9084610adb611ebf565b610b8b8560405180606001604052806028815260200161503d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b41611ebf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461232f9092919063ffffffff16565b611ec7565b600190509392505050565b6000600854821115610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990614704565b60405180910390fd5b6000610bec612384565b9050610c018184611ea990919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b610c28611ebf565b73ffffffffffffffffffffffffffffffffffffffff16610c466119ab565b73ffffffffffffffffffffffffffffffffffffffff1614610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c93906147c4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90614764565b60405180910390fd5b60005b600680549050811015610fea578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fd75760066001600680549050610de49190614a81565b81548110610e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fea565b8080610fe290614ba5565b915050610d2b565b5050565b6000611097610ffb611ebf565b84611092856003600061100c611ebf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b611ec7565b6001905092915050565b600d5481565b60006110b1611ebf565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790614864565b60405180910390fd5b600061114b836123c5565b50505050505090506111a581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111fd8160085461242d90919063ffffffff16565b600881905550611218836009546123af90919063ffffffff16565b600981905550505050565b60115481565b611231611ebf565b73ffffffffffffffffffffffffffffffffffffffff1661124f6119ab565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906147c4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600754831115611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e906147a4565b60405180910390fd5b81611368576000611357846123c5565b505050505050905080915050611380565b6000611373846123c5565b5050505050915050809150505b92915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6113c5611ebf565b73ffffffffffffffffffffffffffffffffffffffff166113e36119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906147c4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90614764565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561159a57611556600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9b565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561174f57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061179a565b611797600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9b565b90505b919050565b6117a7611ebf565b73ffffffffffffffffffffffffffffffffffffffff166117c56119ab565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906147c4565b60405180910390fd5b6118256000612443565b565b61182f611ebf565b73ffffffffffffffffffffffffffffffffffffffff1661184d6119ab565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a906147c4565b60405180910390fd5b6118d26127106118c460056118b6610a92565b61250790919063ffffffff16565b611ea990919063ffffffff16565b811015611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90614824565b60405180910390fd5b806016819055507ff7edd1a72d399eb95c56c07c5a26f00a9096735269c96c75caa8fc4e15bcd5d28160405161194a9190614884565b60405180910390a150565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119dc611ebf565b73ffffffffffffffffffffffffffffffffffffffff166119fa6119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a47906147c4565b60405180910390fd5b80600f819055506109c4601154600f54600d54611a6d91906149a0565b611a7791906149a0565b1115611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90614784565b60405180910390fd5b50565b6060600b8054611aca90614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611af690614b73565b8015611b435780601f10611b1857610100808354040283529160200191611b43565b820191906000526020600020905b815481529060010190602001808311611b2657829003601f168201915b5050505050905090565b6000611c10611b5a611ebf565b84611c0b856040518060600160405280602581526020016150656025913960036000611b84611ebf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461232f9092919063ffffffff16565b611ec7565b6001905092915050565b6000611c2e611c27611ebf565b8484612092565b6001905092915050565b611c40611ebf565b73ffffffffffffffffffffffffffffffffffffffff16611c5e6119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab906147c4565b60405180910390fd5b806011819055506109c4601154600f54600d54611cd191906149a0565b611cdb91906149a0565b1115611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1390614784565b60405180910390fd5b50565b6109c481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611db4611ebf565b73ffffffffffffffffffffffffffffffffffffffff16611dd26119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906147c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90614724565b60405180910390fd5b611ea181612443565b50565b600281565b60008183611eb791906149f6565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e90614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e90614744565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120859190614884565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990614804565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612169906146e4565b60405180910390fd5b600081116121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac906147e4565b60405180910390fd5b60006121c0306116b4565b9050600060165482101590508080156121e65750601560149054906101000a900460ff16155b80156122405750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612256575060158054906101000a900460ff165b1561226a5760165491506122698261251d565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123115750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231b57600090505b612327868686846125f3565b505050505050565b6000838311158290612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e91906146c2565b60405180910390fd5b5082840390509392505050565b6000806000612391612904565b915091506123a88183611ea990919063ffffffff16565b9250505090565b600081836123bd91906149a0565b905092915050565b60008060008060008060008060008060006123df8c612c4f565b935093509350935060008060006124008f8787876123fb612384565b612cce565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000818361243b9190614a81565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836125159190614a27565b905092915050565b6001601560146101000a81548160ff021916908315150217905550600061254e600283611ea990919063ffffffff16565b90506000612565828461242d90919063ffffffff16565b9050600047905061257583612d82565b600061258a824761242d90919063ffffffff16565b90506125968382613046565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516125c9939291906148f9565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b8061260157612600613135565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a45750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126b9576126b484848461316a565b6128f0565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561275c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127715761276c8484846133d8565b6128ef565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128155750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282a57612825848484613646565b6128ee565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128cc5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e1576128dc84848461381f565b6128ed565b6128ec848484613646565b5b5b5b5b806128fe576128fd613b22565b5b50505050565b600080600060085490506000600754905060005b600680549050811015612c1257826001600060068481548110612964577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612a785750816002600060068481548110612a10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a8f5760085460075494509450505050612c4b565b612b456001600060068481548110612ad0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461242d90919063ffffffff16565b9250612bfd6002600060068481548110612b88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361242d90919063ffffffff16565b91508080612c0a90614ba5565b915050612918565b50612c2a600754600854611ea990919063ffffffff16565b821015612c4257600854600754935093505050612c4b565b81819350935050505b9091565b6000806000806000612c6086613b3f565b90506000612c6d87613b71565b90506000612c7a88613ba3565b90506000612cb582612ca785612c99888e61242d90919063ffffffff16565b61242d90919063ffffffff16565b61242d90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612ce7858a61250790919063ffffffff16565b90506000612cfe868a61250790919063ffffffff16565b90506000612d15878a61250790919063ffffffff16565b90506000612d2c888a61250790919063ffffffff16565b90506000612d6782612d5985612d4b888a61242d90919063ffffffff16565b61242d90919063ffffffff16565b61242d90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff811115612dc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612df35781602001602082028036833780820191505090505b5090503081600081518110612e31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ed357600080fd5b505afa158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b919061418d565b81600181518110612f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fac30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161301095949392919061489f565b600060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b505050505050565b61307330601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016130dc9695949392919061462b565b6060604051808303818588803b1580156130f557600080fd5b505af1158015613109573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061312e91906142e2565b5050505050565b600d54600e81905550600f546010819055506011546012819055506000600d819055506000600f819055506000601181905550565b600080600080600080600061317e886123c5565b96509650965096509650965096506131de88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335482613c35565b61335d81613dda565b61336785846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516133c49190614884565b60405180910390a350505050505050505050565b60008060008060008060006133ec886123c5565b965096509650965096509650965061344c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e184600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135c282613c35565b6135cb81613dda565b6135d585846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136329190614884565b60405180910390a350505050505050505050565b600080600080600080600061365a886123c5565b96509650965096509650965096506136ba87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379b82613c35565b6137a481613dda565b6137ae85846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161380b9190614884565b60405180910390a350505050505050505050565b6000806000806000806000613833886123c5565b965096509650965096509650965061389388600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139bd84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9e82613c35565b613aa781613dda565b613ab185846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b0e9190614884565b60405180910390a350505050505050505050565b600e54600d81905550601054600f81905550601254601181905550565b6000613b6a612710613b5c600d548561250790919063ffffffff16565b611ea990919063ffffffff16565b9050919050565b6000613b9c612710613b8e600f548561250790919063ffffffff16565b611ea990919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c045760009050613c30565b613c2d612710613c1f6011548561250790919063ffffffff16565b611ea990919063ffffffff16565b90505b919050565b6000613c3f612384565b90506000613c56828461250790919063ffffffff16565b9050613caa81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dd557613d9183600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60008111156140be576000613ded612384565b90506000613e04828461250790919063ffffffff16565b9050613e7a8160016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b60016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561402d57613fc78360026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b60026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661406e611ebf565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140b39190614884565b60405180910390a350505b50565b6140d68260085461242d90919063ffffffff16565b6008819055506140f1816009546123af90919063ffffffff16565b6009819055505050565b60008135905061410a81614ff7565b92915050565b60008151905061411f81614ff7565b92915050565b6000813590506141348161500e565b92915050565b60008135905061414981615025565b92915050565b60008151905061415e81615025565b92915050565b60006020828403121561417657600080fd5b6000614184848285016140fb565b91505092915050565b60006020828403121561419f57600080fd5b60006141ad84828501614110565b91505092915050565b600080604083850312156141c957600080fd5b60006141d7858286016140fb565b92505060206141e8858286016140fb565b9150509250929050565b60008060006060848603121561420757600080fd5b6000614215868287016140fb565b9350506020614226868287016140fb565b92505060406142378682870161413a565b9150509250925092565b6000806040838503121561425457600080fd5b6000614262858286016140fb565b92505060206142738582860161413a565b9150509250929050565b60006020828403121561428f57600080fd5b600061429d8482850161413a565b91505092915050565b600080604083850312156142b957600080fd5b60006142c78582860161413a565b92505060206142d885828601614125565b9150509250929050565b6000806000606084860312156142f757600080fd5b60006143058682870161414f565b93505060206143168682870161414f565b92505060406143278682870161414f565b9150509250925092565b600061433d8383614349565b60208301905092915050565b61435281614ab5565b82525050565b61436181614ab5565b82525050565b60006143728261495b565b61437c818561497e565b93506143878361494b565b8060005b838110156143b857815161439f8882614331565b97506143aa83614971565b92505060018101905061438b565b5085935050505092915050565b6143ce81614ac7565b82525050565b6143dd81614b0a565b82525050565b6143ec81614b2e565b82525050565b60006143fd82614966565b614407818561498f565b9350614417818560208601614b40565b61442081614c7b565b840191505092915050565b600061443860238361498f565b915061444382614c8c565b604082019050919050565b600061445b602a8361498f565b915061446682614cdb565b604082019050919050565b600061447e60268361498f565b915061448982614d2a565b604082019050919050565b60006144a160228361498f565b91506144ac82614d79565b604082019050919050565b60006144c4601b8361498f565b91506144cf82614dc8565b602082019050919050565b60006144e760158361498f565b91506144f282614df1565b602082019050919050565b600061450a601f8361498f565b915061451582614e1a565b602082019050919050565b600061452d60208361498f565b915061453882614e43565b602082019050919050565b600061455060298361498f565b915061455b82614e6c565b604082019050919050565b600061457360258361498f565b915061457e82614ebb565b604082019050919050565b600061459660388361498f565b91506145a182614f0a565b604082019050919050565b60006145b960248361498f565b91506145c482614f59565b604082019050919050565b60006145dc602c8361498f565b91506145e782614fa8565b604082019050919050565b6145fb81614af3565b82525050565b61460a81614afd565b82525050565b60006020820190506146256000830184614358565b92915050565b600060c0820190506146406000830189614358565b61464d60208301886145f2565b61465a60408301876143e3565b61466760608301866143e3565b6146746080830185614358565b61468160a08301846145f2565b979650505050505050565b60006020820190506146a160008301846143c5565b92915050565b60006020820190506146bc60008301846143d4565b92915050565b600060208201905081810360008301526146dc81846143f2565b905092915050565b600060208201905081810360008301526146fd8161442b565b9050919050565b6000602082019050818103600083015261471d8161444e565b9050919050565b6000602082019050818103600083015261473d81614471565b9050919050565b6000602082019050818103600083015261475d81614494565b9050919050565b6000602082019050818103600083015261477d816144b7565b9050919050565b6000602082019050818103600083015261479d816144da565b9050919050565b600060208201905081810360008301526147bd816144fd565b9050919050565b600060208201905081810360008301526147dd81614520565b9050919050565b600060208201905081810360008301526147fd81614543565b9050919050565b6000602082019050818103600083015261481d81614566565b9050919050565b6000602082019050818103600083015261483d81614589565b9050919050565b6000602082019050818103600083015261485d816145ac565b9050919050565b6000602082019050818103600083015261487d816145cf565b9050919050565b600060208201905061489960008301846145f2565b92915050565b600060a0820190506148b460008301886145f2565b6148c160208301876143e3565b81810360408301526148d38186614367565b90506148e26060830185614358565b6148ef60808301846145f2565b9695505050505050565b600060608201905061490e60008301866145f2565b61491b60208301856145f2565b61492860408301846145f2565b949350505050565b60006020820190506149456000830184614601565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149ab82614af3565b91506149b683614af3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149eb576149ea614bee565b5b828201905092915050565b6000614a0182614af3565b9150614a0c83614af3565b925082614a1c57614a1b614c1d565b5b828204905092915050565b6000614a3282614af3565b9150614a3d83614af3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a7657614a75614bee565b5b828202905092915050565b6000614a8c82614af3565b9150614a9783614af3565b925082821015614aaa57614aa9614bee565b5b828203905092915050565b6000614ac082614ad3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b1582614b1c565b9050919050565b6000614b2782614ad3565b9050919050565b6000614b3982614af3565b9050919050565b60005b83811015614b5e578082015181840152602081019050614b43565b83811115614b6d576000848401525b50505050565b60006002820490506001821680614b8b57607f821691505b60208210811415614b9f57614b9e614c4c565b5b50919050565b6000614bb082614af3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614be357614be2614bee565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f546f74616c20666565206973206f766572203235250000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f537761706261636b20616d6f756e742073686f756c64206265206174206c656160008201527f737420302e303525206f6620746f74616c20737570706c790000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61500081614ab5565b811461500b57600080fd5b50565b61501781614ac7565b811461502257600080fd5b50565b61502e81614af3565b811461503957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220911815fa6969203c73e520565cdedd1e51ef86b2eb597062869671f9ff575b0d64736f6c634300080400330000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000f03a883ee51ea3e10ebdd436b70db6dd7a1cf31b000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000f03a883ee51ea3e10ebdd436b70db6dd7a1cf31b00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000de28098487970652d4149e2809900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae2809948595045e2809900000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102135760003560e01c80634a74bb02116101185780638ee88c53116100a0578063af41063b1161006f578063af41063b146107e6578063bc063e1a1461080f578063dd62ed3e1461083a578063f2fde38b14610877578063ffa1ad74146108a05761021a565b80638ee88c531461071857806395d89b4114610741578063a457c2d71461076c578063a9059cbb146107a95761021a565b806370a08231116100e757806370a0823114610633578063715018a614610670578063796431d01461068757806388f82020146106b05780638da5cb5b146106ed5761021a565b80634a74bb021461057757806352390c02146105a25780635342acb4146105cb5780636bc87c3a146106085761021a565b8063313ce5671161019b5780633bd5d1731161016a5780633bd5d1731461049257806340f8007a146104bb578063437823ec146104e65780634549b0391461050f57806349bd5a5e1461054c5761021a565b8063313ce567146103d65780633685d41914610401578063395093511461042a5780633b124fe7146104675761021a565b80631694505e116101e25780631694505e146102db57806318160ddd1461030657806319a8ac9e1461033157806323b872dd1461035c5780632d838119146103995761021a565b8063061c82d01461021f57806306fdde0314610248578063095ea7b31461027357806313114a9d146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061427d565b6108cb565b005b34801561025457600080fd5b5061025d6109b2565b60405161026a91906146c2565b60405180910390f35b34801561027f57600080fd5b5061029a60048036038101906102959190614241565b610a44565b6040516102a7919061468c565b60405180910390f35b3480156102bc57600080fd5b506102c5610a62565b6040516102d29190614884565b60405180910390f35b3480156102e757600080fd5b506102f0610a6c565b6040516102fd91906146a7565b60405180910390f35b34801561031257600080fd5b5061031b610a92565b6040516103289190614884565b60405180910390f35b34801561033d57600080fd5b50610346610a9c565b6040516103539190614610565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e91906141f2565b610ac2565b604051610390919061468c565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb919061427d565b610b9b565b6040516103cd9190614884565b60405180910390f35b3480156103e257600080fd5b506103eb610c09565b6040516103f89190614930565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190614164565b610c20565b005b34801561043657600080fd5b50610451600480360381019061044c9190614241565b610fee565b60405161045e919061468c565b60405180910390f35b34801561047357600080fd5b5061047c6110a1565b6040516104899190614884565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b4919061427d565b6110a7565b005b3480156104c757600080fd5b506104d0611223565b6040516104dd9190614884565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190614164565b611229565b005b34801561051b57600080fd5b50610536600480360381019061053191906142a6565b611300565b6040516105439190614884565b60405180910390f35b34801561055857600080fd5b50610561611386565b60405161056e9190614610565b60405180910390f35b34801561058357600080fd5b5061058c6113ac565b604051610599919061468c565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190614164565b6113bd565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190614164565b611658565b6040516105ff919061468c565b60405180910390f35b34801561061457600080fd5b5061061d6116ae565b60405161062a9190614884565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190614164565b6116b4565b6040516106679190614884565b60405180910390f35b34801561067c57600080fd5b5061068561179f565b005b34801561069357600080fd5b506106ae60048036038101906106a9919061427d565b611827565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190614164565b611955565b6040516106e4919061468c565b60405180910390f35b3480156106f957600080fd5b506107026119ab565b60405161070f9190614610565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061427d565b6119d4565b005b34801561074d57600080fd5b50610756611abb565b60405161076391906146c2565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190614241565b611b4d565b6040516107a0919061468c565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190614241565b611c1a565b6040516107dd919061468c565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061427d565b611c38565b005b34801561081b57600080fd5b50610824611d1f565b6040516108319190614884565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906141b6565b611d25565b60405161086e9190614884565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614164565b611dac565b005b3480156108ac57600080fd5b506108b5611ea4565b6040516108c29190614884565b60405180910390f35b6108d3611ebf565b73ffffffffffffffffffffffffffffffffffffffff166108f16119ab565b73ffffffffffffffffffffffffffffffffffffffff1614610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e906147c4565b60405180910390fd5b80600d819055506109c4601154600f54600d5461096491906149a0565b61096e91906149a0565b11156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690614784565b60405180910390fd5b50565b6060600a80546109c190614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546109ed90614b73565b8015610a3a5780601f10610a0f57610100808354040283529160200191610a3a565b820191906000526020600020905b815481529060010190602001808311610a1d57829003601f168201915b5050505050905090565b6000610a58610a51611ebf565b8484611ec7565b6001905092915050565b6000600954905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610acf848484612092565b610b9084610adb611ebf565b610b8b8560405180606001604052806028815260200161503d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b41611ebf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461232f9092919063ffffffff16565b611ec7565b600190509392505050565b6000600854821115610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990614704565b60405180910390fd5b6000610bec612384565b9050610c018184611ea990919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b610c28611ebf565b73ffffffffffffffffffffffffffffffffffffffff16610c466119ab565b73ffffffffffffffffffffffffffffffffffffffff1614610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c93906147c4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90614764565b60405180910390fd5b60005b600680549050811015610fea578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fd75760066001600680549050610de49190614a81565b81548110610e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fea565b8080610fe290614ba5565b915050610d2b565b5050565b6000611097610ffb611ebf565b84611092856003600061100c611ebf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b611ec7565b6001905092915050565b600d5481565b60006110b1611ebf565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790614864565b60405180910390fd5b600061114b836123c5565b50505050505090506111a581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111fd8160085461242d90919063ffffffff16565b600881905550611218836009546123af90919063ffffffff16565b600981905550505050565b60115481565b611231611ebf565b73ffffffffffffffffffffffffffffffffffffffff1661124f6119ab565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906147c4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600754831115611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e906147a4565b60405180910390fd5b81611368576000611357846123c5565b505050505050905080915050611380565b6000611373846123c5565b5050505050915050809150505b92915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6113c5611ebf565b73ffffffffffffffffffffffffffffffffffffffff166113e36119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906147c4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90614764565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561159a57611556600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9b565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561174f57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061179a565b611797600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9b565b90505b919050565b6117a7611ebf565b73ffffffffffffffffffffffffffffffffffffffff166117c56119ab565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906147c4565b60405180910390fd5b6118256000612443565b565b61182f611ebf565b73ffffffffffffffffffffffffffffffffffffffff1661184d6119ab565b73ffffffffffffffffffffffffffffffffffffffff16146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a906147c4565b60405180910390fd5b6118d26127106118c460056118b6610a92565b61250790919063ffffffff16565b611ea990919063ffffffff16565b811015611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90614824565b60405180910390fd5b806016819055507ff7edd1a72d399eb95c56c07c5a26f00a9096735269c96c75caa8fc4e15bcd5d28160405161194a9190614884565b60405180910390a150565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119dc611ebf565b73ffffffffffffffffffffffffffffffffffffffff166119fa6119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a47906147c4565b60405180910390fd5b80600f819055506109c4601154600f54600d54611a6d91906149a0565b611a7791906149a0565b1115611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90614784565b60405180910390fd5b50565b6060600b8054611aca90614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611af690614b73565b8015611b435780601f10611b1857610100808354040283529160200191611b43565b820191906000526020600020905b815481529060010190602001808311611b2657829003601f168201915b5050505050905090565b6000611c10611b5a611ebf565b84611c0b856040518060600160405280602581526020016150656025913960036000611b84611ebf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461232f9092919063ffffffff16565b611ec7565b6001905092915050565b6000611c2e611c27611ebf565b8484612092565b6001905092915050565b611c40611ebf565b73ffffffffffffffffffffffffffffffffffffffff16611c5e6119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab906147c4565b60405180910390fd5b806011819055506109c4601154600f54600d54611cd191906149a0565b611cdb91906149a0565b1115611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1390614784565b60405180910390fd5b50565b6109c481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611db4611ebf565b73ffffffffffffffffffffffffffffffffffffffff16611dd26119ab565b73ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906147c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90614724565b60405180910390fd5b611ea181612443565b50565b600281565b60008183611eb791906149f6565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e90614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e90614744565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120859190614884565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990614804565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612169906146e4565b60405180910390fd5b600081116121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac906147e4565b60405180910390fd5b60006121c0306116b4565b9050600060165482101590508080156121e65750601560149054906101000a900460ff16155b80156122405750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612256575060158054906101000a900460ff165b1561226a5760165491506122698261251d565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123115750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231b57600090505b612327868686846125f3565b505050505050565b6000838311158290612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e91906146c2565b60405180910390fd5b5082840390509392505050565b6000806000612391612904565b915091506123a88183611ea990919063ffffffff16565b9250505090565b600081836123bd91906149a0565b905092915050565b60008060008060008060008060008060006123df8c612c4f565b935093509350935060008060006124008f8787876123fb612384565b612cce565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000818361243b9190614a81565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836125159190614a27565b905092915050565b6001601560146101000a81548160ff021916908315150217905550600061254e600283611ea990919063ffffffff16565b90506000612565828461242d90919063ffffffff16565b9050600047905061257583612d82565b600061258a824761242d90919063ffffffff16565b90506125968382613046565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516125c9939291906148f9565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b8061260157612600613135565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a45750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126b9576126b484848461316a565b6128f0565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561275c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127715761276c8484846133d8565b6128ef565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128155750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282a57612825848484613646565b6128ee565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128cc5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e1576128dc84848461381f565b6128ed565b6128ec848484613646565b5b5b5b5b806128fe576128fd613b22565b5b50505050565b600080600060085490506000600754905060005b600680549050811015612c1257826001600060068481548110612964577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612a785750816002600060068481548110612a10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a8f5760085460075494509450505050612c4b565b612b456001600060068481548110612ad0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461242d90919063ffffffff16565b9250612bfd6002600060068481548110612b88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361242d90919063ffffffff16565b91508080612c0a90614ba5565b915050612918565b50612c2a600754600854611ea990919063ffffffff16565b821015612c4257600854600754935093505050612c4b565b81819350935050505b9091565b6000806000806000612c6086613b3f565b90506000612c6d87613b71565b90506000612c7a88613ba3565b90506000612cb582612ca785612c99888e61242d90919063ffffffff16565b61242d90919063ffffffff16565b61242d90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612ce7858a61250790919063ffffffff16565b90506000612cfe868a61250790919063ffffffff16565b90506000612d15878a61250790919063ffffffff16565b90506000612d2c888a61250790919063ffffffff16565b90506000612d6782612d5985612d4b888a61242d90919063ffffffff16565b61242d90919063ffffffff16565b61242d90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff811115612dc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612df35781602001602082028036833780820191505090505b5090503081600081518110612e31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ed357600080fd5b505afa158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b919061418d565b81600181518110612f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fac30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161301095949392919061489f565b600060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b505050505050565b61307330601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016130dc9695949392919061462b565b6060604051808303818588803b1580156130f557600080fd5b505af1158015613109573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061312e91906142e2565b5050505050565b600d54600e81905550600f546010819055506011546012819055506000600d819055506000600f819055506000601181905550565b600080600080600080600061317e886123c5565b96509650965096509650965096506131de88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335482613c35565b61335d81613dda565b61336785846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516133c49190614884565b60405180910390a350505050505050505050565b60008060008060008060006133ec886123c5565b965096509650965096509650965061344c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e184600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135c282613c35565b6135cb81613dda565b6135d585846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136329190614884565b60405180910390a350505050505050505050565b600080600080600080600061365a886123c5565b96509650965096509650965096506136ba87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379b82613c35565b6137a481613dda565b6137ae85846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161380b9190614884565b60405180910390a350505050505050505050565b6000806000806000806000613833886123c5565b965096509650965096509650965061389388600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242d90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139bd84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9e82613c35565b613aa781613dda565b613ab185846140c1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b0e9190614884565b60405180910390a350505050505050505050565b600e54600d81905550601054600f81905550601254601181905550565b6000613b6a612710613b5c600d548561250790919063ffffffff16565b611ea990919063ffffffff16565b9050919050565b6000613b9c612710613b8e600f548561250790919063ffffffff16565b611ea990919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613c045760009050613c30565b613c2d612710613c1f6011548561250790919063ffffffff16565b611ea990919063ffffffff16565b90505b919050565b6000613c3f612384565b90506000613c56828461250790919063ffffffff16565b9050613caa81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dd557613d9183600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60008111156140be576000613ded612384565b90506000613e04828461250790919063ffffffff16565b9050613e7a8160016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b60016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561402d57613fc78360026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123af90919063ffffffff16565b60026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661406e611ebf565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140b39190614884565b60405180910390a350505b50565b6140d68260085461242d90919063ffffffff16565b6008819055506140f1816009546123af90919063ffffffff16565b6009819055505050565b60008135905061410a81614ff7565b92915050565b60008151905061411f81614ff7565b92915050565b6000813590506141348161500e565b92915050565b60008135905061414981615025565b92915050565b60008151905061415e81615025565b92915050565b60006020828403121561417657600080fd5b6000614184848285016140fb565b91505092915050565b60006020828403121561419f57600080fd5b60006141ad84828501614110565b91505092915050565b600080604083850312156141c957600080fd5b60006141d7858286016140fb565b92505060206141e8858286016140fb565b9150509250929050565b60008060006060848603121561420757600080fd5b6000614215868287016140fb565b9350506020614226868287016140fb565b92505060406142378682870161413a565b9150509250925092565b6000806040838503121561425457600080fd5b6000614262858286016140fb565b92505060206142738582860161413a565b9150509250929050565b60006020828403121561428f57600080fd5b600061429d8482850161413a565b91505092915050565b600080604083850312156142b957600080fd5b60006142c78582860161413a565b92505060206142d885828601614125565b9150509250929050565b6000806000606084860312156142f757600080fd5b60006143058682870161414f565b93505060206143168682870161414f565b92505060406143278682870161414f565b9150509250925092565b600061433d8383614349565b60208301905092915050565b61435281614ab5565b82525050565b61436181614ab5565b82525050565b60006143728261495b565b61437c818561497e565b93506143878361494b565b8060005b838110156143b857815161439f8882614331565b97506143aa83614971565b92505060018101905061438b565b5085935050505092915050565b6143ce81614ac7565b82525050565b6143dd81614b0a565b82525050565b6143ec81614b2e565b82525050565b60006143fd82614966565b614407818561498f565b9350614417818560208601614b40565b61442081614c7b565b840191505092915050565b600061443860238361498f565b915061444382614c8c565b604082019050919050565b600061445b602a8361498f565b915061446682614cdb565b604082019050919050565b600061447e60268361498f565b915061448982614d2a565b604082019050919050565b60006144a160228361498f565b91506144ac82614d79565b604082019050919050565b60006144c4601b8361498f565b91506144cf82614dc8565b602082019050919050565b60006144e760158361498f565b91506144f282614df1565b602082019050919050565b600061450a601f8361498f565b915061451582614e1a565b602082019050919050565b600061452d60208361498f565b915061453882614e43565b602082019050919050565b600061455060298361498f565b915061455b82614e6c565b604082019050919050565b600061457360258361498f565b915061457e82614ebb565b604082019050919050565b600061459660388361498f565b91506145a182614f0a565b604082019050919050565b60006145b960248361498f565b91506145c482614f59565b604082019050919050565b60006145dc602c8361498f565b91506145e782614fa8565b604082019050919050565b6145fb81614af3565b82525050565b61460a81614afd565b82525050565b60006020820190506146256000830184614358565b92915050565b600060c0820190506146406000830189614358565b61464d60208301886145f2565b61465a60408301876143e3565b61466760608301866143e3565b6146746080830185614358565b61468160a08301846145f2565b979650505050505050565b60006020820190506146a160008301846143c5565b92915050565b60006020820190506146bc60008301846143d4565b92915050565b600060208201905081810360008301526146dc81846143f2565b905092915050565b600060208201905081810360008301526146fd8161442b565b9050919050565b6000602082019050818103600083015261471d8161444e565b9050919050565b6000602082019050818103600083015261473d81614471565b9050919050565b6000602082019050818103600083015261475d81614494565b9050919050565b6000602082019050818103600083015261477d816144b7565b9050919050565b6000602082019050818103600083015261479d816144da565b9050919050565b600060208201905081810360008301526147bd816144fd565b9050919050565b600060208201905081810360008301526147dd81614520565b9050919050565b600060208201905081810360008301526147fd81614543565b9050919050565b6000602082019050818103600083015261481d81614566565b9050919050565b6000602082019050818103600083015261483d81614589565b9050919050565b6000602082019050818103600083015261485d816145ac565b9050919050565b6000602082019050818103600083015261487d816145cf565b9050919050565b600060208201905061489960008301846145f2565b92915050565b600060a0820190506148b460008301886145f2565b6148c160208301876143e3565b81810360408301526148d38186614367565b90506148e26060830185614358565b6148ef60808301846145f2565b9695505050505050565b600060608201905061490e60008301866145f2565b61491b60208301856145f2565b61492860408301846145f2565b949350505050565b60006020820190506149456000830184614601565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149ab82614af3565b91506149b683614af3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149eb576149ea614bee565b5b828201905092915050565b6000614a0182614af3565b9150614a0c83614af3565b925082614a1c57614a1b614c1d565b5b828204905092915050565b6000614a3282614af3565b9150614a3d83614af3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a7657614a75614bee565b5b828202905092915050565b6000614a8c82614af3565b9150614a9783614af3565b925082821015614aaa57614aa9614bee565b5b828203905092915050565b6000614ac082614ad3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b1582614b1c565b9050919050565b6000614b2782614ad3565b9050919050565b6000614b3982614af3565b9050919050565b60005b83811015614b5e578082015181840152602081019050614b43565b83811115614b6d576000848401525b50505050565b60006002820490506001821680614b8b57607f821691505b60208210811415614b9f57614b9e614c4c565b5b50919050565b6000614bb082614af3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614be357614be2614bee565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f546f74616c20666565206973206f766572203235250000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f537761706261636b20616d6f756e742073686f756c64206265206174206c656160008201527f737420302e303525206f6620746f74616c20737570706c790000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61500081614ab5565b811461500b57600080fd5b50565b61501781614ac7565b811461502257600080fd5b50565b61502e81614af3565b811461503957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220911815fa6969203c73e520565cdedd1e51ef86b2eb597062869671f9ff575b0d64736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000f03a883ee51ea3e10ebdd436b70db6dd7a1cf31b000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000f03a883ee51ea3e10ebdd436b70db6dd7a1cf31b00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000de28098487970652d4149e2809900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae2809948595045e2809900000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): ‘Hype-AI’
Arg [1] : symbol_ (string): ’HYPE’
Arg [2] : totalSupply_ (uint256): 1000000000000000
Arg [3] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [4] : charityAddress_ (address): 0xF03a883EE51Ea3E10ebdd436b70dB6Dd7a1Cf31b
Arg [5] : taxFeeBps_ (uint16): 100
Arg [6] : liquidityFeeBps_ (uint16): 200
Arg [7] : charityFeeBps_ (uint16): 200
Arg [8] : serviceFeeReceiver_ (address): 0xF03a883EE51Ea3E10ebdd436b70dB6Dd7a1Cf31b
Arg [9] : serviceFee_ (uint256): 200

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [4] : 000000000000000000000000f03a883ee51ea3e10ebdd436b70db6dd7a1cf31b
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [6] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [7] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [8] : 000000000000000000000000f03a883ee51ea3e10ebdd436b70db6dd7a1cf31b
Arg [9] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [11] : e28098487970652d4149e2809900000000000000000000000000000000000000
Arg [12] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [13] : e2809948595045e2809900000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

28808:22911:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38285:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32566:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33551:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35050:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29821:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32843:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29904:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33752:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36065:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32752:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36849:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34206:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29594:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35145:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29744:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38166:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35574:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29869:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29971:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36395:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44410:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29663:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32946:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5525:94;;;;;;;;;;;;;:::i;:::-;;39068:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34922:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4874:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38525:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32657:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34514:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33152:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38812:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28989:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33359:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5774:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28945:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38285:232;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38370:9:::1;38360:7;:19;;;;29023:9;38438:11;;38422:13;;38412:7;;:23;;;;:::i;:::-;:37;;;;:::i;:::-;:48;;38390:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;38285:232:::0;:::o;32566:83::-;32603:13;32636:5;32629:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32566:83;:::o;33551:193::-;33653:4;33675:39;33684:12;:10;:12::i;:::-;33698:7;33707:6;33675:8;:39::i;:::-;33732:4;33725:11;;33551:193;;;;:::o;35050:87::-;35092:7;35119:10;;35112:17;;35050:87;:::o;29821:41::-;;;;;;;;;;;;;:::o;32843:95::-;32896:7;32923;;32916:14;;32843:95;:::o;29904:30::-;;;;;;;;;;;;;:::o;33752:446::-;33884:4;33901:36;33911:6;33919:9;33930:6;33901:9;:36::i;:::-;33948:220;33971:6;33992:12;:10;:12::i;:::-;34019:138;34075:6;34019:138;;;;;;;;;;;;;;;;;:11;:19;34031:6;34019:19;;;;;;;;;;;;;;;:33;34039:12;:10;:12::i;:::-;34019:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;33948:8;:220::i;:::-;34186:4;34179:11;;33752:446;;;;;:::o;36065:322::-;36159:7;36217;;36206;:18;;36184:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36305:19;36327:10;:8;:10::i;:::-;36305:32;;36355:24;36367:11;36355:7;:11;;:24;;;;:::i;:::-;36348:31;;;36065:322;;;:::o;32752:83::-;32793:5;32818:9;;;;;;;;;;;32811:16;;32752:83;:::o;36849:477::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36929:11:::1;:20;36941:7;36929:20;;;;;;;;;;;;;;;;;;;;;;;;;36921:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36997:9;36992:327;37016:9;:16;;;;37012:1;:20;36992:327;;;37074:7;37058:23;;:9;37068:1;37058:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;37054:254;;;37117:9;37146:1;37127:9;:16;;;;:20;;;;:::i;:::-;37117:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37102:9;37112:1;37102:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37186:1;37167:7;:16;37175:7;37167:16;;;;;;;;;;;;;;;:20;;;;37229:5;37206:11;:20;37218:7;37206:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37253:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37287:5;;37054:254;37034:3;;;;;:::i;:::-;;;;36992:327;;;;36849:477:::0;:::o;34206:300::-;34321:4;34343:133;34366:12;:10;:12::i;:::-;34393:7;34415:50;34454:10;34415:11;:25;34427:12;:10;:12::i;:::-;34415:25;;;;;;;;;;;;;;;:34;34441:7;34415:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;34343:8;:133::i;:::-;34494:4;34487:11;;34206:300;;;;:::o;29594:22::-;;;;:::o;35145:421::-;35197:14;35214:12;:10;:12::i;:::-;35197:29;;35260:11;:19;35272:6;35260:19;;;;;;;;;;;;;;;;;;;;;;;;;35259:20;35237:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;35363:15;35394:19;35405:7;35394:10;:19::i;:::-;35362:51;;;;;;;;35442:28;35462:7;35442;:15;35450:6;35442:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35424:7;:15;35432:6;35424:15;;;;;;;;;;;;;;;:46;;;;35491:20;35503:7;35491;;:11;;:20;;;;:::i;:::-;35481:7;:30;;;;35535:23;35550:7;35535:10;;:14;;:23;;;;:::i;:::-;35522:10;:36;;;;35145:421;;;:::o;29744:26::-;;;;:::o;38166:111::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38265:4:::1;38235:18;:27;38254:7;38235:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;38166:111:::0;:::o;35574:483::-;35692:7;35736;;35725;:18;;35717:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35795:17;35790:260;;35830:15;35861:19;35872:7;35861:10;:19::i;:::-;35829:51;;;;;;;;35902:7;35895:14;;;;;35790:260;35945:23;35982:19;35993:7;35982:10;:19::i;:::-;35942:59;;;;;;;;36023:15;36016:22;;;35574:483;;;;;:::o;29869:28::-;;;;;;;;;;;;;:::o;29971:33::-;;;;;;;;;;;;:::o;36395:446::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36590:11:::1;:20;36602:7;36590:20;;;;;;;;;;;;;;;;;;;;;;;;;36589:21;36581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36676:1;36657:7;:16;36665:7;36657:16;;;;;;;;;;;;;;;;:20;36653:109;;;36713:37;36733:7;:16;36741:7;36733:16;;;;;;;;;;;;;;;;36713:19;:37::i;:::-;36694:7;:16;36702:7;36694:16;;;;;;;;;;;;;;;:56;;;;36653:109;36795:4;36772:11;:20;36784:7;36772:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;36810:9;36825:7;36810:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36395:446:::0;:::o;44410:124::-;44475:4;44499:18;:27;44518:7;44499:27;;;;;;;;;;;;;;;;;;;;;;;;;44492:34;;44410:124;;;:::o;29663:28::-;;;;:::o;32946:198::-;33012:7;33036:11;:20;33048:7;33036:20;;;;;;;;;;;;;;;;;;;;;;;;;33032:49;;;33065:7;:16;33073:7;33065:16;;;;;;;;;;;;;;;;33058:23;;;;33032:49;33099:37;33119:7;:16;33127:7;33119:16;;;;;;;;;;;;;;;;33099:19;:37::i;:::-;33092:44;;32946:198;;;;:::o;5525:94::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5590:21:::1;5608:1;5590:9;:21::i;:::-;5525:94::o:0;39068:334::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39177:31:::1;39202:5;39177:20;39195:1;39177:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;39166:7;:42;;39144:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;39335:7;39303:29;:39;;;;39358:36;39386:7;39358:36;;;;;;:::i;:::-;;;;;;;;39068:334:::0;:::o;34922:120::-;34990:4;35014:11;:20;35026:7;35014:20;;;;;;;;;;;;;;;;;;;;;;;;;35007:27;;34922:120;;;:::o;4874:87::-;4920:7;4947:6;;;;;;;;;;;4940:13;;4874:87;:::o;38525:279::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38651:15:::1;38635:13;:31;;;;29023:9;38725:11;;38709:13;;38699:7;;:23;;;;:::i;:::-;:37;;;;:::i;:::-;:48;;38677:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;38525:279:::0;:::o;32657:87::-;32696:13;32729:7;32722:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32657:87;:::o;34514:400::-;34634:4;34656:228;34679:12;:10;:12::i;:::-;34706:7;34728:145;34785:15;34728:145;;;;;;;;;;;;;;;;;:11;:25;34740:12;:10;:12::i;:::-;34728:25;;;;;;;;;;;;;;;:34;34754:7;34728:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;34656:8;:228::i;:::-;34902:4;34895:11;;34514:400;;;;:::o;33152:199::-;33257:4;33279:42;33289:12;:10;:12::i;:::-;33303:9;33314:6;33279:9;:42::i;:::-;33339:4;33332:11;;33152:199;;;;:::o;38812:248::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38909:13:::1;38895:11;:27;;;;29023:9;38981:11;;38965:13;;38955:7;;:23;;;;:::i;:::-;:37;;;;:::i;:::-;:48;;38933:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;38812:248:::0;:::o;28989:43::-;29023:9;28989:43;:::o;33359:184::-;33476:7;33508:11;:18;33520:5;33508:18;;;;;;;;;;;;;;;:27;33527:7;33508:27;;;;;;;;;;;;;;;;33501:34;;33359:184;;;;:::o;5774:192::-;5105:12;:10;:12::i;:::-;5094:23;;:7;:5;:7::i;:::-;:23;;;5086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5883:1:::1;5863:22;;:8;:22;;;;5855:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5939:19;5949:8;5939:9;:19::i;:::-;5774:192:::0;:::o;28945:35::-;28979:1;28945:35;:::o;10097:98::-;10155:7;10186:1;10182;:5;;;;:::i;:::-;10175:12;;10097:98;;;;:::o;3592:::-;3645:7;3672:10;3665:17;;3592:98;:::o;44542:371::-;44686:1;44669:19;;:5;:19;;;;44661:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44767:1;44748:21;;:7;:21;;;;44740:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44851:6;44821:11;:18;44833:5;44821:18;;;;;;;;;;;;;;;:27;44840:7;44821:27;;;;;;;;;;;;;;;:36;;;;44889:7;44873:32;;44882:5;44873:32;;;44898:6;44873:32;;;;;;:::i;:::-;;;;;;;;44542:371;;;:::o;44921:1531::-;45059:1;45043:18;;:4;:18;;;;45035:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45136:1;45122:16;;:2;:16;;;;45114:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45206:1;45197:6;:10;45189:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45548:28;45579:24;45597:4;45579:9;:24::i;:::-;45548:55;;45616:24;45680:29;;45643:20;:66;;45616:93;;45738:19;:53;;;;;45775:16;;;;;;;;;;;45774:17;45738:53;:91;;;;;45816:13;;;;;;;;;;;45808:21;;:4;:21;;;;45738:91;:129;;;;;45846:21;;;;;;;;;;45738:129;45720:318;;;45917:29;;45894:52;;45990:36;46005:20;45990:14;:36::i;:::-;45720:318;46111:12;46126:4;46111:19;;46231:18;:24;46250:4;46231:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;46259:18;:22;46278:2;46259:22;;;;;;;;;;;;;;;;;;;;;;;;;46231:50;46227:98;;;46308:5;46298:15;;46227:98;46403:41;46418:4;46424:2;46428:6;46436:7;46403:14;:41::i;:::-;44921:1531;;;;;;:::o;11239:240::-;11359:7;11417:1;11412;:6;;11420:12;11404:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11459:1;11455;:5;11448:12;;11239:240;;;;;:::o;41746:164::-;41788:7;41809:15;41826;41845:19;:17;:19::i;:::-;41808:56;;;;41882:20;41894:7;41882;:11;;:20;;;;:::i;:::-;41875:27;;;;41746:164;:::o;8960:98::-;9018:7;9049:1;9045;:5;;;;:::i;:::-;9038:12;;8960:98;;;;:::o;39658:841::-;39758:7;39780;39802;39824;39846;39868;39890;39940:23;39978:12;40005:18;40038:16;40068:20;40080:7;40068:11;:20::i;:::-;39925:163;;;;;;;;40100:15;40117:23;40142:12;40158:136;40184:7;40206:4;40225:10;40250:8;40273:10;:8;:10::i;:::-;40158:11;:136::i;:::-;40099:195;;;;;;40327:7;40349:15;40379:4;40398:15;40428:4;40447:10;40472:8;40305:186;;;;;;;;;;;;;;;;;;;;;39658:841;;;;;;;;;:::o;9341:98::-;9399:7;9430:1;9426;:5;;;;:::i;:::-;9419:12;;9341:98;;;;:::o;5974:173::-;6030:16;6049:6;;;;;;;;;;;6030:25;;6075:8;6066:6;;:17;;;;;;;;;;;;;;;;;;6130:8;6099:40;;6120:8;6099:40;;;;;;;;;;;;5974:173;;:::o;9698:98::-;9756:7;9787:1;9783;:5;;;;:::i;:::-;9776:12;;9698:98;;;;:::o;46460:977::-;30379:4;30360:16;;:23;;;;;;;;;;;;;;;;;;46596:12:::1;46611:27;46636:1;46611:20;:24;;:27;;;;:::i;:::-;46596:42;;46649:17;46669:30;46694:4;46669:20;:24;;:30;;;;:::i;:::-;46649:50;;46977:22;47002:21;46977:46;;47068:22;47085:4;47068:16;:22::i;:::-;47221:18;47242:41;47268:14;47242:21;:25;;:41;;;;:::i;:::-;47221:62;;47333:35;47346:9;47357:10;47333:12;:35::i;:::-;47386:43;47401:4;47407:10;47419:9;47386:43;;;;;;;;:::i;:::-;;;;;;;;30394:1;;;;30425:5:::0;30406:16;;:24;;;;;;;;;;;;;;;;;;46460:977;:::o;48644:838::-;48800:7;48795:28;;48809:14;:12;:14::i;:::-;48795:28;48840:11;:19;48852:6;48840:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;48864:11;:22;48876:9;48864:22;;;;;;;;;;;;;;;;;;;;;;;;;48863:23;48840:46;48836:597;;;48903:48;48925:6;48933:9;48944:6;48903:21;:48::i;:::-;48836:597;;;48974:11;:19;48986:6;48974:19;;;;;;;;;;;;;;;;;;;;;;;;;48973:20;:46;;;;;48997:11;:22;49009:9;48997:22;;;;;;;;;;;;;;;;;;;;;;;;;48973:46;48969:464;;;49036:46;49056:6;49064:9;49075:6;49036:19;:46::i;:::-;48969:464;;;49105:11;:19;49117:6;49105:19;;;;;;;;;;;;;;;;;;;;;;;;;49104:20;:47;;;;;49129:11;:22;49141:9;49129:22;;;;;;;;;;;;;;;;;;;;;;;;;49128:23;49104:47;49100:333;;;49168:44;49186:6;49194:9;49205:6;49168:17;:44::i;:::-;49100:333;;;49234:11;:19;49246:6;49234:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;49257:11;:22;49269:9;49257:22;;;;;;;;;;;;;;;;;;;;;;;;;49234:45;49230:203;;;49296:48;49318:6;49326:9;49337:6;49296:21;:48::i;:::-;49230:203;;;49377:44;49395:6;49403:9;49414:6;49377:17;:44::i;:::-;49230:203;49100:333;48969:464;48836:597;49450:7;49445:29;;49459:15;:13;:15::i;:::-;49445:29;48644:838;;;;:::o;41918:605::-;41969:7;41978;41998:15;42016:7;;41998:25;;42034:15;42052:7;;42034:25;;42075:9;42070:338;42094:9;:16;;;;42090:1;:20;42070:338;;;42178:7;42154;:21;42162:9;42172:1;42162:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42154:21;;;;;;;;;;;;;;;;:31;:83;;;;42230:7;42206;:21;42214:9;42224:1;42214:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42206:21;;;;;;;;;;;;;;;;:31;42154:83;42132:146;;;42261:7;;42270;;42253:25;;;;;;;;;42132:146;42303:34;42315:7;:21;42323:9;42333:1;42323:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42315:21;;;;;;;;;;;;;;;;42303:7;:11;;:34;;;;:::i;:::-;42293:44;;42362:34;42374:7;:21;42382:9;42392:1;42382:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42374:21;;;;;;;;;;;;;;;;42362:7;:11;;:34;;;;:::i;:::-;42352:44;;42112:3;;;;;:::i;:::-;;;;42070:338;;;;42432:20;42444:7;;42432;;:11;;:20;;;;:::i;:::-;42422:7;:30;42418:61;;;42462:7;;42471;;42454:25;;;;;;;;42418:61;42498:7;42507;42490:25;;;;;;41918:605;;;:::o;40507:549::-;40608:7;40630;40652;40674;40709:12;40724:24;40740:7;40724:15;:24::i;:::-;40709:39;;40759:18;40780:30;40802:7;40780:21;:30::i;:::-;40759:51;;40821:19;40843:28;40863:7;40843:19;:28::i;:::-;40821:50;;40882:23;40908:74;40960:11;40908:33;40930:10;40908:17;40920:4;40908:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:74;;;;:::i;:::-;40882:100;;41001:15;41018:4;41024:10;41036:11;40993:55;;;;;;;;;;;;40507:549;;;;;:::o;41064:674::-;41290:7;41312;41334;41369:15;41387:24;41399:11;41387:7;:11;;:24;;;;:::i;:::-;41369:42;;41422:12;41437:21;41446:11;41437:4;:8;;:21;;;;:::i;:::-;41422:36;;41469:18;41490:27;41505:11;41490:10;:14;;:27;;;;:::i;:::-;41469:48;;41528:16;41547:25;41560:11;41547:8;:12;;:25;;;;:::i;:::-;41528:44;;41583:23;41609:71;41661:8;41609:33;41631:10;41609:17;41621:4;41609:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:71;;;;:::i;:::-;41583:97;;41699:7;41708:15;41725:4;41691:39;;;;;;;;;;;41064:674;;;;;;;;;:::o;47445:589::-;47571:21;47609:1;47595:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47571:40;;47640:4;47622;47627:1;47622:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;47666:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47656:4;47661:1;47656:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;47701:62;47718:4;47733:15;;;;;;;;;;;47751:11;47701:8;:62::i;:::-;47802:15;;;;;;;;;;;:66;;;47883:11;47909:1;47953:4;47980;48000:15;47802:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47445:589;;:::o;48042:521::-;48190:62;48207:4;48222:15;;;;;;;;;;;48240:11;48190:8;:62::i;:::-;48295:15;;;;;;;;;;;:31;;;48334:9;48367:4;48387:11;48413:1;48456;48507:6;48529:15;48295:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48042:521;;:::o;43979:246::-;44040:7;;44022:15;:25;;;;44082:13;;44058:21;:37;;;;44128:11;;44106:19;:33;;;;44162:1;44152:7;:11;;;;44190:1;44174:13;:17;;;;44216:1;44202:11;:15;;;;43979:246::o;50963:753::-;51114:15;51144:23;51182:12;51209:23;51247:12;51274:18;51307:16;51337:19;51348:7;51337:10;:19::i;:::-;51099:257;;;;;;;;;;;;;;51385:28;51405:7;51385;:15;51393:6;51385:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51367:7;:15;51375:6;51367:15;;;;;;;;;;;;;;;:46;;;;51442:28;51462:7;51442;:15;51450:6;51442:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51424:7;:15;51432:6;51424:15;;;;;;;;;;;;;;;:46;;;;51502:39;51525:15;51502:7;:18;51510:9;51502:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51481:7;:18;51489:9;51481:18;;;;;;;;;;;;;;;:60;;;;51552:26;51567:10;51552:14;:26::i;:::-;51589:25;51605:8;51589:15;:25::i;:::-;51625:23;51637:4;51643;51625:11;:23::i;:::-;51681:9;51664:44;;51673:6;51664:44;;;51692:15;51664:44;;;;;;:::i;:::-;;;;;;;;50963:753;;;;;;;;;;:::o;50190:765::-;50339:15;50369:23;50407:12;50434:23;50472:12;50499:18;50532:16;50562:19;50573:7;50562:10;:19::i;:::-;50324:257;;;;;;;;;;;;;;50610:28;50630:7;50610;:15;50618:6;50610:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;50592:7;:15;50600:6;50592:15;;;;;;;;;;;;;;;:46;;;;50670:39;50693:15;50670:7;:18;50678:9;50670:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50649:7;:18;50657:9;50649:18;;;;;;;;;;;;;;;:60;;;;50741:39;50764:15;50741:7;:18;50749:9;50741:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50720:7;:18;50728:9;50720:18;;;;;;;;;;;;;;;:60;;;;50791:26;50806:10;50791:14;:26::i;:::-;50828:25;50844:8;50828:15;:25::i;:::-;50864:23;50876:4;50882;50864:11;:23::i;:::-;50920:9;50903:44;;50912:6;50903:44;;;50931:15;50903:44;;;;;;:::i;:::-;;;;;;;;50190:765;;;;;;;;;;:::o;49490:692::-;49637:15;49667:23;49705:12;49732:23;49770:12;49797:18;49830:16;49860:19;49871:7;49860:10;:19::i;:::-;49622:257;;;;;;;;;;;;;;49908:28;49928:7;49908;:15;49916:6;49908:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49890:7;:15;49898:6;49890:15;;;;;;;;;;;;;;;:46;;;;49968:39;49991:15;49968:7;:18;49976:9;49968:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49947:7;:18;49955:9;49947:18;;;;;;;;;;;;;;;:60;;;;50018:26;50033:10;50018:14;:26::i;:::-;50055:25;50071:8;50055:15;:25::i;:::-;50091:23;50103:4;50109;50091:11;:23::i;:::-;50147:9;50130:44;;50139:6;50130:44;;;50158:15;50130:44;;;;;;:::i;:::-;;;;;;;;49490:692;;;;;;;;;;:::o;37334:824::-;37485:15;37515:23;37553:12;37580:23;37618:12;37645:18;37678:16;37708:19;37719:7;37708:10;:19::i;:::-;37470:257;;;;;;;;;;;;;;37756:28;37776:7;37756;:15;37764:6;37756:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37738:7;:15;37746:6;37738:15;;;;;;;;;;;;;;;:46;;;;37813:28;37833:7;37813;:15;37821:6;37813:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37795:7;:15;37803:6;37795:15;;;;;;;;;;;;;;;:46;;;;37873:39;37896:15;37873:7;:18;37881:9;37873:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37852:7;:18;37860:9;37852:18;;;;;;;;;;;;;;;:60;;;;37944:39;37967:15;37944:7;:18;37952:9;37944:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37923:7;:18;37931:9;37923:18;;;;;;;;;;;;;;;:60;;;;37994:26;38009:10;37994:14;:26::i;:::-;38031:25;38047:8;38031:15;:25::i;:::-;38067:23;38079:4;38085;38067:11;:23::i;:::-;38123:9;38106:44;;38115:6;38106:44;;;38134:15;38106:44;;;;;;:::i;:::-;;;;;;;;37334:824;;;;;;;;;;:::o;44233:169::-;44287:15;;44277:7;:25;;;;44329:21;;44313:13;:37;;;;44375:19;;44361:11;:33;;;;44233:169::o;43427:130::-;43491:7;43518:31;43543:5;43518:20;43530:7;;43518;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;43511:38;;43427:130;;;:::o;43565:174::-;43662:7;43694:37;43725:5;43694:26;43706:13;;43694:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;43687:44;;43565:174;;;:::o;43747:224::-;43842:7;43898:1;43871:29;;:15;;;;;;;;;;;:29;;;43867:43;;;43909:1;43902:8;;;;43867:43;43928:35;43957:5;43928:24;43940:11;;43928:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;43921:42;;43747:224;;;;:::o;42531:355::-;42594:19;42616:10;:8;:10::i;:::-;42594:32;;42637:18;42658:27;42673:11;42658:10;:14;;:27;;;;:::i;:::-;42637:48;;42721:38;42748:10;42721:7;:22;42737:4;42721:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;42696:7;:22;42712:4;42696:22;;;;;;;;;;;;;;;:63;;;;42774:11;:26;42794:4;42774:26;;;;;;;;;;;;;;;;;;;;;;;;;42770:108;;;42840:38;42867:10;42840:7;:22;42856:4;42840:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;42815:7;:22;42831:4;42815:22;;;;;;;;;;;;;;;:63;;;;42770:108;42531:355;;;:::o;42894:525::-;42971:1;42960:8;:12;42956:456;;;42989:19;43011:10;:8;:10::i;:::-;42989:32;;43036:16;43055:25;43068:11;43055:8;:12;;:25;;;;:::i;:::-;43036:44;;43122:38;43151:8;43122:7;:24;43130:15;;;;;;;;;;;43122:24;;;;;;;;;;;;;;;;:28;;:38;;;;:::i;:::-;43095:7;:24;43103:15;;;;;;;;;;;43095:24;;;;;;;;;;;;;;;:65;;;;43179:11;:28;43191:15;;;;;;;;;;;43179:28;;;;;;;;;;;;;;;;;;;;;;;;;43175:156;;;43253:78;43304:8;43253:7;:24;43261:15;;;;;;;;;;;43253:24;;;;;;;;;;;;;;;;:28;;:78;;;;:::i;:::-;43226:7;:24;43234:15;;;;;;;;;;;43226:24;;;;;;;;;;;;;;;:105;;;;43175:156;43374:15;;;;;;;;;;;43351:49;;43360:12;:10;:12::i;:::-;43351:49;;;43391:8;43351:49;;;;;;:::i;:::-;;;;;;;;42956:456;;;42894:525;:::o;39503:147::-;39581:17;39593:4;39581:7;;:11;;:17;;;;:::i;:::-;39571:7;:27;;;;39622:20;39637:4;39622:10;;:14;;:20;;;;:::i;:::-;39609:10;:33;;;;39503:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;2331:6;2339;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:262::-;2735:6;2784:2;2772:9;2763:7;2759:23;2755:32;2752:2;;;2800:1;2797;2790:12;2752:2;2843:1;2868:53;2913:7;2904:6;2893:9;2889:22;2868:53;:::i;:::-;2858:63;;2814:117;2742:196;;;;:::o;2944:401::-;3009:6;3017;3066:2;3054:9;3045:7;3041:23;3037:32;3034:2;;;3082:1;3079;3072:12;3034:2;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:50;3320:7;3311:6;3300:9;3296:22;3278:50;:::i;:::-;3268:60;;3223:115;3024:321;;;;;:::o;3351:596::-;3439:6;3447;3455;3504:2;3492:9;3483:7;3479:23;3475:32;3472:2;;;3520:1;3517;3510:12;3472:2;3563:1;3588:64;3644:7;3635:6;3624:9;3620:22;3588:64;:::i;:::-;3578:74;;3534:128;3701:2;3727:64;3783:7;3774:6;3763:9;3759:22;3727:64;:::i;:::-;3717:74;;3672:129;3840:2;3866:64;3922:7;3913:6;3902:9;3898:22;3866:64;:::i;:::-;3856:74;;3811:129;3462:485;;;;;:::o;3953:179::-;4022:10;4043:46;4085:3;4077:6;4043:46;:::i;:::-;4121:4;4116:3;4112:14;4098:28;;4033:99;;;;:::o;4138:108::-;4215:24;4233:5;4215:24;:::i;:::-;4210:3;4203:37;4193:53;;:::o;4252:118::-;4339:24;4357:5;4339:24;:::i;:::-;4334:3;4327:37;4317:53;;:::o;4406:732::-;4525:3;4554:54;4602:5;4554:54;:::i;:::-;4624:86;4703:6;4698:3;4624:86;:::i;:::-;4617:93;;4734:56;4784:5;4734:56;:::i;:::-;4813:7;4844:1;4829:284;4854:6;4851:1;4848:13;4829:284;;;4930:6;4924:13;4957:63;5016:3;5001:13;4957:63;:::i;:::-;4950:70;;5043:60;5096:6;5043:60;:::i;:::-;5033:70;;4889:224;4876:1;4873;4869:9;4864:14;;4829:284;;;4833:14;5129:3;5122:10;;4530:608;;;;;;;:::o;5144:109::-;5225:21;5240:5;5225:21;:::i;:::-;5220:3;5213:34;5203:50;;:::o;5259:185::-;5373:64;5431:5;5373:64;:::i;:::-;5368:3;5361:77;5351:93;;:::o;5450:147::-;5545:45;5584:5;5545:45;:::i;:::-;5540:3;5533:58;5523:74;;:::o;5603:364::-;5691:3;5719:39;5752:5;5719:39;:::i;:::-;5774:71;5838:6;5833:3;5774:71;:::i;:::-;5767:78;;5854:52;5899:6;5894:3;5887:4;5880:5;5876:16;5854:52;:::i;:::-;5931:29;5953:6;5931:29;:::i;:::-;5926:3;5922:39;5915:46;;5695:272;;;;;:::o;5973:366::-;6115:3;6136:67;6200:2;6195:3;6136:67;:::i;:::-;6129:74;;6212:93;6301:3;6212:93;:::i;:::-;6330:2;6325:3;6321:12;6314:19;;6119:220;;;:::o;6345:366::-;6487:3;6508:67;6572:2;6567:3;6508:67;:::i;:::-;6501:74;;6584:93;6673:3;6584:93;:::i;:::-;6702:2;6697:3;6693:12;6686:19;;6491:220;;;:::o;6717:366::-;6859:3;6880:67;6944:2;6939:3;6880:67;:::i;:::-;6873:74;;6956:93;7045:3;6956:93;:::i;:::-;7074:2;7069:3;7065:12;7058:19;;6863:220;;;:::o;7089:366::-;7231:3;7252:67;7316:2;7311:3;7252:67;:::i;:::-;7245:74;;7328:93;7417:3;7328:93;:::i;:::-;7446:2;7441:3;7437:12;7430:19;;7235:220;;;:::o;7461:366::-;7603:3;7624:67;7688:2;7683:3;7624:67;:::i;:::-;7617:74;;7700:93;7789:3;7700:93;:::i;:::-;7818:2;7813:3;7809:12;7802:19;;7607:220;;;:::o;7833:366::-;7975:3;7996:67;8060:2;8055:3;7996:67;:::i;:::-;7989:74;;8072:93;8161:3;8072:93;:::i;:::-;8190:2;8185:3;8181:12;8174:19;;7979:220;;;:::o;8205:366::-;8347:3;8368:67;8432:2;8427:3;8368:67;:::i;:::-;8361:74;;8444:93;8533:3;8444:93;:::i;:::-;8562:2;8557:3;8553:12;8546:19;;8351:220;;;:::o;8577:366::-;8719:3;8740:67;8804:2;8799:3;8740:67;:::i;:::-;8733:74;;8816:93;8905:3;8816:93;:::i;:::-;8934:2;8929:3;8925:12;8918:19;;8723:220;;;:::o;8949:366::-;9091:3;9112:67;9176:2;9171:3;9112:67;:::i;:::-;9105:74;;9188:93;9277:3;9188:93;:::i;:::-;9306:2;9301:3;9297:12;9290:19;;9095:220;;;:::o;9321:366::-;9463:3;9484:67;9548:2;9543:3;9484:67;:::i;:::-;9477:74;;9560:93;9649:3;9560:93;:::i;:::-;9678:2;9673:3;9669:12;9662:19;;9467:220;;;:::o;9693:366::-;9835:3;9856:67;9920:2;9915:3;9856:67;:::i;:::-;9849:74;;9932:93;10021:3;9932:93;:::i;:::-;10050:2;10045:3;10041:12;10034:19;;9839:220;;;:::o;10065:366::-;10207:3;10228:67;10292:2;10287:3;10228:67;:::i;:::-;10221:74;;10304:93;10393:3;10304:93;:::i;:::-;10422:2;10417:3;10413:12;10406:19;;10211:220;;;:::o;10437:366::-;10579:3;10600:67;10664:2;10659:3;10600:67;:::i;:::-;10593:74;;10676:93;10765:3;10676:93;:::i;:::-;10794:2;10789:3;10785:12;10778:19;;10583:220;;;:::o;10809:118::-;10896:24;10914:5;10896:24;:::i;:::-;10891:3;10884:37;10874:53;;:::o;10933:112::-;11016:22;11032:5;11016:22;:::i;:::-;11011:3;11004:35;10994:51;;:::o;11051:222::-;11144:4;11182:2;11171:9;11167:18;11159:26;;11195:71;11263:1;11252:9;11248:17;11239:6;11195:71;:::i;:::-;11149:124;;;;:::o;11279:807::-;11528:4;11566:3;11555:9;11551:19;11543:27;;11580:71;11648:1;11637:9;11633:17;11624:6;11580:71;:::i;:::-;11661:72;11729:2;11718:9;11714:18;11705:6;11661:72;:::i;:::-;11743:80;11819:2;11808:9;11804:18;11795:6;11743:80;:::i;:::-;11833;11909:2;11898:9;11894:18;11885:6;11833:80;:::i;:::-;11923:73;11991:3;11980:9;11976:19;11967:6;11923:73;:::i;:::-;12006;12074:3;12063:9;12059:19;12050:6;12006:73;:::i;:::-;11533:553;;;;;;;;;:::o;12092:210::-;12179:4;12217:2;12206:9;12202:18;12194:26;;12230:65;12292:1;12281:9;12277:17;12268:6;12230:65;:::i;:::-;12184:118;;;;:::o;12308:276::-;12428:4;12466:2;12455:9;12451:18;12443:26;;12479:98;12574:1;12563:9;12559:17;12550:6;12479:98;:::i;:::-;12433:151;;;;:::o;12590:313::-;12703:4;12741:2;12730:9;12726:18;12718:26;;12790:9;12784:4;12780:20;12776:1;12765:9;12761:17;12754:47;12818:78;12891:4;12882:6;12818:78;:::i;:::-;12810:86;;12708:195;;;;:::o;12909:419::-;13075:4;13113:2;13102:9;13098:18;13090:26;;13162:9;13156:4;13152:20;13148:1;13137:9;13133:17;13126:47;13190:131;13316:4;13190:131;:::i;:::-;13182:139;;13080:248;;;:::o;13334:419::-;13500:4;13538:2;13527:9;13523:18;13515:26;;13587:9;13581:4;13577:20;13573:1;13562:9;13558:17;13551:47;13615:131;13741:4;13615:131;:::i;:::-;13607:139;;13505:248;;;:::o;13759:419::-;13925:4;13963:2;13952:9;13948:18;13940:26;;14012:9;14006:4;14002:20;13998:1;13987:9;13983:17;13976:47;14040:131;14166:4;14040:131;:::i;:::-;14032:139;;13930:248;;;:::o;14184:419::-;14350:4;14388:2;14377:9;14373:18;14365:26;;14437:9;14431:4;14427:20;14423:1;14412:9;14408:17;14401:47;14465:131;14591:4;14465:131;:::i;:::-;14457:139;;14355:248;;;:::o;14609:419::-;14775:4;14813:2;14802:9;14798:18;14790:26;;14862:9;14856:4;14852:20;14848:1;14837:9;14833:17;14826:47;14890:131;15016:4;14890:131;:::i;:::-;14882:139;;14780:248;;;:::o;15034:419::-;15200:4;15238:2;15227:9;15223:18;15215:26;;15287:9;15281:4;15277:20;15273:1;15262:9;15258:17;15251:47;15315:131;15441:4;15315:131;:::i;:::-;15307:139;;15205:248;;;:::o;15459:419::-;15625:4;15663:2;15652:9;15648:18;15640:26;;15712:9;15706:4;15702:20;15698:1;15687:9;15683:17;15676:47;15740:131;15866:4;15740:131;:::i;:::-;15732:139;;15630:248;;;:::o;15884:419::-;16050:4;16088:2;16077:9;16073:18;16065:26;;16137:9;16131:4;16127:20;16123:1;16112:9;16108:17;16101:47;16165:131;16291:4;16165:131;:::i;:::-;16157:139;;16055:248;;;:::o;16309:419::-;16475:4;16513:2;16502:9;16498:18;16490:26;;16562:9;16556:4;16552:20;16548:1;16537:9;16533:17;16526:47;16590:131;16716:4;16590:131;:::i;:::-;16582:139;;16480:248;;;:::o;16734:419::-;16900:4;16938:2;16927:9;16923:18;16915:26;;16987:9;16981:4;16977:20;16973:1;16962:9;16958:17;16951:47;17015:131;17141:4;17015:131;:::i;:::-;17007:139;;16905:248;;;:::o;17159:419::-;17325:4;17363:2;17352:9;17348:18;17340:26;;17412:9;17406:4;17402:20;17398:1;17387:9;17383:17;17376:47;17440:131;17566:4;17440:131;:::i;:::-;17432:139;;17330:248;;;:::o;17584:419::-;17750:4;17788:2;17777:9;17773:18;17765:26;;17837:9;17831:4;17827:20;17823:1;17812:9;17808:17;17801:47;17865:131;17991:4;17865:131;:::i;:::-;17857:139;;17755:248;;;:::o;18009:419::-;18175:4;18213:2;18202:9;18198:18;18190:26;;18262:9;18256:4;18252:20;18248:1;18237:9;18233:17;18226:47;18290:131;18416:4;18290:131;:::i;:::-;18282:139;;18180:248;;;:::o;18434:222::-;18527:4;18565:2;18554:9;18550:18;18542:26;;18578:71;18646:1;18635:9;18631:17;18622:6;18578:71;:::i;:::-;18532:124;;;;:::o;18662:831::-;18925:4;18963:3;18952:9;18948:19;18940:27;;18977:71;19045:1;19034:9;19030:17;19021:6;18977:71;:::i;:::-;19058:80;19134:2;19123:9;19119:18;19110:6;19058:80;:::i;:::-;19185:9;19179:4;19175:20;19170:2;19159:9;19155:18;19148:48;19213:108;19316:4;19307:6;19213:108;:::i;:::-;19205:116;;19331:72;19399:2;19388:9;19384:18;19375:6;19331:72;:::i;:::-;19413:73;19481:3;19470:9;19466:19;19457:6;19413:73;:::i;:::-;18930:563;;;;;;;;:::o;19499:442::-;19648:4;19686:2;19675:9;19671:18;19663:26;;19699:71;19767:1;19756:9;19752:17;19743:6;19699:71;:::i;:::-;19780:72;19848:2;19837:9;19833:18;19824:6;19780:72;:::i;:::-;19862;19930:2;19919:9;19915:18;19906:6;19862:72;:::i;:::-;19653:288;;;;;;:::o;19947:214::-;20036:4;20074:2;20063:9;20059:18;20051:26;;20087:67;20151:1;20140:9;20136:17;20127:6;20087:67;:::i;:::-;20041:120;;;;:::o;20167:132::-;20234:4;20257:3;20249:11;;20287:4;20282:3;20278:14;20270:22;;20239:60;;;:::o;20305:114::-;20372:6;20406:5;20400:12;20390:22;;20379:40;;;:::o;20425:99::-;20477:6;20511:5;20505:12;20495:22;;20484:40;;;:::o;20530:113::-;20600:4;20632;20627:3;20623:14;20615:22;;20605:38;;;:::o;20649:184::-;20748:11;20782:6;20777:3;20770:19;20822:4;20817:3;20813:14;20798:29;;20760:73;;;;:::o;20839:169::-;20923:11;20957:6;20952:3;20945:19;20997:4;20992:3;20988:14;20973:29;;20935:73;;;;:::o;21014:305::-;21054:3;21073:20;21091:1;21073:20;:::i;:::-;21068:25;;21107:20;21125:1;21107:20;:::i;:::-;21102:25;;21261:1;21193:66;21189:74;21186:1;21183:81;21180:2;;;21267:18;;:::i;:::-;21180:2;21311:1;21308;21304:9;21297:16;;21058:261;;;;:::o;21325:185::-;21365:1;21382:20;21400:1;21382:20;:::i;:::-;21377:25;;21416:20;21434:1;21416:20;:::i;:::-;21411:25;;21455:1;21445:2;;21460:18;;:::i;:::-;21445:2;21502:1;21499;21495:9;21490:14;;21367:143;;;;:::o;21516:348::-;21556:7;21579:20;21597:1;21579:20;:::i;:::-;21574:25;;21613:20;21631:1;21613:20;:::i;:::-;21608:25;;21801:1;21733:66;21729:74;21726:1;21723:81;21718:1;21711:9;21704:17;21700:105;21697:2;;;21808:18;;:::i;:::-;21697:2;21856:1;21853;21849:9;21838:20;;21564:300;;;;:::o;21870:191::-;21910:4;21930:20;21948:1;21930:20;:::i;:::-;21925:25;;21964:20;21982:1;21964:20;:::i;:::-;21959:25;;22003:1;22000;21997:8;21994:2;;;22008:18;;:::i;:::-;21994:2;22053:1;22050;22046:9;22038:17;;21915:146;;;;:::o;22067:96::-;22104:7;22133:24;22151:5;22133:24;:::i;:::-;22122:35;;22112:51;;;:::o;22169:90::-;22203:7;22246:5;22239:13;22232:21;22221:32;;22211:48;;;:::o;22265:126::-;22302:7;22342:42;22335:5;22331:54;22320:65;;22310:81;;;:::o;22397:77::-;22434:7;22463:5;22452:16;;22442:32;;;:::o;22480:86::-;22515:7;22555:4;22548:5;22544:16;22533:27;;22523:43;;;:::o;22572:180::-;22649:9;22682:64;22740:5;22682:64;:::i;:::-;22669:77;;22659:93;;;:::o;22758:140::-;22835:9;22868:24;22886:5;22868:24;:::i;:::-;22855:37;;22845:53;;;:::o;22904:121::-;22962:9;22995:24;23013:5;22995:24;:::i;:::-;22982:37;;22972:53;;;:::o;23031:307::-;23099:1;23109:113;23123:6;23120:1;23117:13;23109:113;;;23208:1;23203:3;23199:11;23193:18;23189:1;23184:3;23180:11;23173:39;23145:2;23142:1;23138:10;23133:15;;23109:113;;;23240:6;23237:1;23234:13;23231:2;;;23320:1;23311:6;23306:3;23302:16;23295:27;23231:2;23080:258;;;;:::o;23344:320::-;23388:6;23425:1;23419:4;23415:12;23405:22;;23472:1;23466:4;23462:12;23493:18;23483:2;;23549:4;23541:6;23537:17;23527:27;;23483:2;23611;23603:6;23600:14;23580:18;23577:38;23574:2;;;23630:18;;:::i;:::-;23574:2;23395:269;;;;:::o;23670:233::-;23709:3;23732:24;23750:5;23732:24;:::i;:::-;23723:33;;23778:66;23771:5;23768:77;23765:2;;;23848:18;;:::i;:::-;23765:2;23895:1;23888:5;23884:13;23877:20;;23713:190;;;:::o;23909:180::-;23957:77;23954:1;23947:88;24054:4;24051:1;24044:15;24078:4;24075:1;24068:15;24095:180;24143:77;24140:1;24133:88;24240:4;24237:1;24230:15;24264:4;24261:1;24254:15;24281:180;24329:77;24326:1;24319:88;24426:4;24423:1;24416:15;24450:4;24447:1;24440:15;24467:102;24508:6;24559:2;24555:7;24550:2;24543:5;24539:14;24535:28;24525:38;;24515:54;;;:::o;24575:222::-;24715:34;24711:1;24703:6;24699:14;24692:58;24784:5;24779:2;24771:6;24767:15;24760:30;24681:116;:::o;24803:229::-;24943:34;24939:1;24931:6;24927:14;24920:58;25012:12;25007:2;24999:6;24995:15;24988:37;24909:123;:::o;25038:225::-;25178:34;25174:1;25166:6;25162:14;25155:58;25247:8;25242:2;25234:6;25230:15;25223:33;25144:119;:::o;25269:221::-;25409:34;25405:1;25397:6;25393:14;25386:58;25478:4;25473:2;25465:6;25461:15;25454:29;25375:115;:::o;25496:177::-;25636:29;25632:1;25624:6;25620:14;25613:53;25602:71;:::o;25679:171::-;25819:23;25815:1;25807:6;25803:14;25796:47;25785:65;:::o;25856:181::-;25996:33;25992:1;25984:6;25980:14;25973:57;25962:75;:::o;26043:182::-;26183:34;26179:1;26171:6;26167:14;26160:58;26149:76;:::o;26231:228::-;26371:34;26367:1;26359:6;26355:14;26348:58;26440:11;26435:2;26427:6;26423:15;26416:36;26337:122;:::o;26465:224::-;26605:34;26601:1;26593:6;26589:14;26582:58;26674:7;26669:2;26661:6;26657:15;26650:32;26571:118;:::o;26695:243::-;26835:34;26831:1;26823:6;26819:14;26812:58;26904:26;26899:2;26891:6;26887:15;26880:51;26801:137;:::o;26944:223::-;27084:34;27080:1;27072:6;27068:14;27061:58;27153:6;27148:2;27140:6;27136:15;27129:31;27050:117;:::o;27173:231::-;27313:34;27309:1;27301:6;27297:14;27290:58;27382:14;27377:2;27369:6;27365:15;27358:39;27279:125;:::o;27410:122::-;27483:24;27501:5;27483:24;:::i;:::-;27476:5;27473:35;27463:2;;27522:1;27519;27512:12;27463:2;27453:79;:::o;27538:116::-;27608:21;27623:5;27608:21;:::i;:::-;27601:5;27598:32;27588:2;;27644:1;27641;27634:12;27588:2;27578:76;:::o;27660:122::-;27733:24;27751:5;27733:24;:::i;:::-;27726:5;27723:35;27713:2;;27772:1;27769;27762:12;27713:2;27703:79;:::o

Swarm Source

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