ETH Price: $2,586.76 (+0.02%)

Token

Bull Tech (BULL)
 

Overview

Max Total Supply

1,000,000,000 BULL

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,594,141.242587909 BULL

Value
$0.00
0x2E385361B2c5F4fd378CCde0Bab02ceEBdf59b8b
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:
BULLTECH

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-10
*/

/**
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⠋⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠙⢿⣿
⣿⡇⠀⠘⠿⠿⣿⣿⣿⡿⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⢿⣿⣿⣿⡿⠿⠃⠀⢘⣿
⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⣿
⣿⣿⣿⣿⣦⣤⣀⣀⣀⣀⠀⣿⣿⣿⣿⣿⣿⣿⣿⠀⢀⣀⣀⣀⣤⣴⣾⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠛⢻⣿⣿⣿⣿⣿⣿⡿⠛⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⣀⣿⣿⣿⣿⣿⣿⣀⣀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢹⣿⣿⡟⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⣿⣿⣿⠀⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣈⠙⠛⢁⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
BULL TECH

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.16;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

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

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

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract BULLTECH is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>
    string private _name = "Bull Tech";
    string private _symbol = "BULL";
    uint8 private _decimals = 9;
    uint256 private _supply = 1_000_000_000;
    uint256 public taxForMarketing = 30;
    uint256 public maxTxAmount = 20_000_000 * 10 ** _decimals;
    uint256 public maxWalletAmount = 20_000_000 * 10 ** _decimals;
    address public marketingWallet = 0xc4c7C6e810dc97905B7fE7CfCCB1f6cB337A7f11;
    // TOKENOMICS END ============================================================>

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping(address => bool) public bots;

    uint256 private _marketingReserves = 0;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 public _numTokensSellToAddToETH = 100_000 * 10 ** _decimals;
    bool inSwapAndLiquify;

    uint32 private _blackListTime = 1699653600;

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

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

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

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

        uniswapV2Router = _uniswapV2Router;

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

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

        if (
            (from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify
        ) {
            if (from != uniswapV2Pair) {
                if (balanceOf(address(this)) >= _numTokensSellToAddToETH) {
                    _swapTokensForEth(balanceOf(address(this)));
                    bool sent = payable(marketingWallet).send(
                        address(this).balance
                    );
                    require(sent, "Failed to send ETH");
                }
            }

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

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

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

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

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

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

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            (block.timestamp + 300)
        );
    }

    function _addLiquidity(
        uint256 tokenAmount,
        uint256 ethAmount
    ) private lockTheSwap {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function changeMarketingWallet(address newWallet) public onlyOwner {
        marketingWallet = newWallet;
    }

    function changeTaxForMarketing(uint256 _taxForMarketing) public onlyOwner {
        require(
            _taxForMarketing <= 100,
            "ERC20: total tax must not be greater than 100"
        );

        taxForMarketing = _taxForMarketing;
    }

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

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

    function changeNumberTokenSellToAddToETH(uint256 _num) public onlyOwner {
        _numTokensSellToAddToETH = _num;
    }

    function changeBlackListTime(uint32 _time) public onlyOwner {
        _blackListTime = _time;
    }

    function addBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function delBots(address[] memory notbot) public onlyOwner {
        for (uint i = 0; i < notbot.length; i++) {
            bots[notbot[i]] = false;
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":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":"_numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_time","type":"uint32"}],"name":"changeBlackListTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"changeNumberTokenSellToAddToETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"changeTaxForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600981526020017f42756c6c20546563680000000000000000000000000000000000000000000000815250600690816200004a919062000b2c565b506040518060400160405280600481526020017f42554c4c000000000000000000000000000000000000000000000000000000008152506007908162000091919062000b2c565b506009600860006101000a81548160ff021916908360ff160217905550633b9aca00600955601e600a55600860009054906101000a900460ff16600a620000d9919062000da3565b6301312d00620000ea919062000df4565b600b55600860009054906101000a900460ff16600a6200010b919062000da3565b6301312d006200011c919062000df4565b600c5573c4c7c6e810dc97905b7fe7cfccb1f6cb337a7f11600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f55600860009054906101000a900460ff16600a62000197919062000da3565b620186a0620001a7919062000df4565b60115563654ea7e0601260016101000a81548163ffffffff021916908363ffffffff160217905550348015620001dc57600080fd5b5060068054620001ec906200091b565b80601f01602080910402602001604051908101604052809291908181526020018280546200021a906200091b565b80156200026b5780601f106200023f576101008083540402835291602001916200026b565b820191906000526020600020905b8154815290600101906020018083116200024d57829003601f168201915b5050505050600780546200027f906200091b565b80601f0160208091040260200160405190810160405280929190818152602001828054620002ad906200091b565b8015620002fe5780601f10620002d257610100808354040283529160200191620002fe565b820191906000526020600020905b815481529060010190602001808311620002e057829003601f168201915b5050505050816003908162000314919062000b2c565b50806004908162000326919062000b2c565b505050620003496200033d6200069f60201b60201c565b620006a760201b60201c565b6200038733600860009054906101000a900460ff16600a6200036c919062000da3565b6009546200037b919062000df4565b6200076d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000412919062000ebf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a0919062000ebf565b6040518363ffffffff1660e01b8152600401620004bf92919062000f02565b6020604051808303816000875af1158015620004df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000505919062000ebf565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016010600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200101b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d69062000f90565b60405180910390fd5b8060026000828254620007f3919062000fb2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008a6919062000ffe565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200093457607f821691505b6020821081036200094a5762000949620008ec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000975565b620009c0868362000975565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a0d62000a0762000a0184620009d8565b620009e2565b620009d8565b9050919050565b6000819050919050565b62000a2983620009ec565b62000a4162000a388262000a14565b84845462000982565b825550505050565b600090565b62000a5862000a49565b62000a6581848462000a1e565b505050565b5b8181101562000a8d5762000a8160008262000a4e565b60018101905062000a6b565b5050565b601f82111562000adc5762000aa68162000950565b62000ab18462000965565b8101602085101562000ac1578190505b62000ad962000ad08562000965565b83018262000a6a565b50505b505050565b600082821c905092915050565b600062000b016000198460080262000ae1565b1980831691505092915050565b600062000b1c838362000aee565b9150826002028217905092915050565b62000b3782620008b2565b67ffffffffffffffff81111562000b535762000b52620008bd565b5b62000b5f82546200091b565b62000b6c82828562000a91565b600060209050601f83116001811462000ba4576000841562000b8f578287015190505b62000b9b858262000b0e565b86555062000c0b565b601f19841662000bb48662000950565b60005b8281101562000bde5784890151825560018201915060208501945060208101905062000bb7565b8683101562000bfe578489015162000bfa601f89168262000aee565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ca15780860481111562000c795762000c7862000c13565b5b600185161562000c895780820291505b808102905062000c998562000c42565b945062000c59565b94509492505050565b60008262000cbc576001905062000d8f565b8162000ccc576000905062000d8f565b816001811462000ce5576002811462000cf05762000d26565b600191505062000d8f565b60ff84111562000d055762000d0462000c13565b5b8360020a91508482111562000d1f5762000d1e62000c13565b5b5062000d8f565b5060208310610133831016604e8410600b841016171562000d605782820a90508381111562000d5a5762000d5962000c13565b5b62000d8f565b62000d6f848484600162000c4f565b9250905081840481111562000d895762000d8862000c13565b5b81810290505b9392505050565b600060ff82169050919050565b600062000db082620009d8565b915062000dbd8362000d96565b925062000dec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000caa565b905092915050565b600062000e0182620009d8565b915062000e0e83620009d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e4a5762000e4962000c13565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e878262000e5a565b9050919050565b62000e998162000e7a565b811462000ea557600080fd5b50565b60008151905062000eb98162000e8e565b92915050565b60006020828403121562000ed85762000ed762000e55565b5b600062000ee88482850162000ea8565b91505092915050565b62000efc8162000e7a565b82525050565b600060408201905062000f19600083018562000ef1565b62000f28602083018462000ef1565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f78601f8362000f2f565b915062000f858262000f40565b602082019050919050565b6000602082019050818103600083015262000fab8162000f69565b9050919050565b600062000fbf82620009d8565b915062000fcc83620009d8565b925082820190508082111562000fe75762000fe662000c13565b5b92915050565b62000ff881620009d8565b82525050565b600060208201905062001015600083018462000fed565b92915050565b60805160a051612e24620010796000396000818161096e015281816112b201528181611307015281816113750152818161157d015261164b015260008181610834015281816118eb015281816119cc01526119f30152612e246000f3fe6080604052600436106101d15760003560e01c806375f0a874116100f7578063aa4bde2811610095578063d7fdd19f11610064578063d7fdd19f14610697578063dd62ed3e146106c0578063eac05ab5146106fd578063f2fde38b14610728576101d8565b8063aa4bde28146105dd578063bb85c6d114610608578063bfd7928414610631578063d34628cc1461066e576101d8565b80638da5cb5b116100d15780638da5cb5b1461050d57806395d89b4114610538578063a457c2d714610563578063a9059cbb146105a0576101d8565b806375f0a8741461048e57806381bfdcca146104b95780638c0b5e22146104e2576101d8565b806331c2d8471161016f578063677daa571161013e578063677daa57146103e85780636c2fd3241461041157806370a082311461043a578063715018a614610477576101d8565b806331c2d8471461032c578063395093511461035557806349bd5a5e14610392578063527ffabd146103bd576101d8565b80631694505e116101ab5780631694505e1461026e57806318160ddd1461029957806323b872dd146102c4578063313ce56714610301576101d8565b8063019a9c30146101dd57806306fdde0314610206578063095ea7b314610231576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190611d61565b610751565b005b34801561021257600080fd5b5061021b61077d565b6040516102289190611e1e565b60405180910390f35b34801561023d57600080fd5b5061025860048036038101906102539190611ed4565b61080f565b6040516102659190611f2f565b60405180910390f35b34801561027a57600080fd5b50610283610832565b6040516102909190611fa9565b60405180910390f35b3480156102a557600080fd5b506102ae610856565b6040516102bb9190611fd3565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190611fee565b610860565b6040516102f89190611f2f565b60405180910390f35b34801561030d57600080fd5b5061031661088f565b604051610323919061205d565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e91906121c0565b610898565b005b34801561036157600080fd5b5061037c60048036038101906103779190611ed4565b610935565b6040516103899190611f2f565b60405180910390f35b34801561039e57600080fd5b506103a761096c565b6040516103b49190612218565b60405180910390f35b3480156103c957600080fd5b506103d2610990565b6040516103df9190611fd3565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612233565b610996565b005b34801561041d57600080fd5b5061043860048036038101906104339190612233565b6109a8565b005b34801561044657600080fd5b50610461600480360381019061045c9190612260565b6109fe565b60405161046e9190611fd3565b60405180910390f35b34801561048357600080fd5b5061048c610a46565b005b34801561049a57600080fd5b506104a3610a5a565b6040516104b09190612218565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612233565b610a80565b005b3480156104ee57600080fd5b506104f7610a92565b6040516105049190611fd3565b60405180910390f35b34801561051957600080fd5b50610522610a98565b60405161052f9190612218565b60405180910390f35b34801561054457600080fd5b5061054d610ac2565b60405161055a9190611e1e565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190611ed4565b610b54565b6040516105979190611f2f565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190611ed4565b610bcb565b6040516105d49190611f2f565b60405180910390f35b3480156105e957600080fd5b506105f2610bee565b6040516105ff9190611fd3565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612260565b610bf4565b005b34801561063d57600080fd5b5061065860048036038101906106539190612260565b610c40565b6040516106659190611f2f565b60405180910390f35b34801561067a57600080fd5b50610695600480360381019061069091906121c0565b610c60565b005b3480156106a357600080fd5b506106be60048036038101906106b99190612233565b610cfd565b005b3480156106cc57600080fd5b506106e760048036038101906106e2919061228d565b610d0f565b6040516106f49190611fd3565b60405180910390f35b34801561070957600080fd5b50610712610d96565b60405161071f9190611fd3565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190612260565b610d9c565b005b610759610e1f565b80601260016101000a81548163ffffffff021916908363ffffffff16021790555050565b60606003805461078c906122fc565b80601f01602080910402602001604051908101604052809291908181526020018280546107b8906122fc565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b60008061081a610e9d565b9050610827818585610ea5565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60008061086b610e9d565b905061087885828561106e565b6108838585856110fa565b60019150509392505050565b60006009905090565b6108a0610e1f565b60005b8151811015610931576000600e60008484815181106108c5576108c461232d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109299061238b565b9150506108a3565b5050565b600080610940610e9d565b90506109618185856109528589610d0f565b61095c91906123d3565b610ea5565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5481565b61099e610e1f565b80600b8190555050565b6109b0610e1f565b60648111156109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90612479565b60405180910390fd5b80600a8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4e610e1f565b610a58600061176b565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a88610e1f565b80600c8190555050565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ad1906122fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610afd906122fc565b8015610b4a5780601f10610b1f57610100808354040283529160200191610b4a565b820191906000526020600020905b815481529060010190602001808311610b2d57829003601f168201915b5050505050905090565b600080610b5f610e9d565b90506000610b6d8286610d0f565b905083811015610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba99061250b565b60405180910390fd5b610bbf8286868403610ea5565b60019250505092915050565b600080610bd6610e9d565b9050610be38185856110fa565b600191505092915050565b600c5481565b610bfc610e1f565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b610c68610e1f565b60005b8151811015610cf9576001600e6000848481518110610c8d57610c8c61232d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610cf19061238b565b915050610c6b565b5050565b610d05610e1f565b8060118190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b610da4610e1f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a9061259d565b60405180910390fd5b610e1c8161176b565b50565b610e27610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610e45610a98565b73ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290612609565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b9061269b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061272d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110619190611fd3565b60405180910390a3505050565b600061107a8484610d0f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110f457818110156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90612799565b60405180910390fd5b6110f38484848403610ea5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111609061282b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf906128bd565b60405180910390fd5b806111e2846109fe565b1015611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a9061294f565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a7906129bb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061135557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561136e5750601260009054906101000a900460ff16155b1561175a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611486576011546113d2306109fe565b10611485576113e86113e3306109fe565b611831565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90612a27565b60405180910390fd5b505b5b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115295750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561153657819050611749565b600b5482111561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290612ab9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162757600c546115da846109fe565b836115e591906123d3565b1115611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90612b4b565b60405180910390fd5b5b601260019054906101000a900463ffffffff1663ffffffff164210801561169957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156116f7576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006064600a54846117099190612b6b565b6117139190612bf4565b905080836117219190612c25565b915080600f600082825461173591906123d3565b92505081905550611747853083611ab1565b505b611754848483611ab1565b50611766565b611765838383611ab1565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156118695761186861207d565b5b6040519080825280602002602001820160405280156118975781602001602082028036833780820191505090505b50905030816000815181106118af576118ae61232d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190612c6e565b8160018151811061198c5761198b61232d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506119f1307f000000000000000000000000000000000000000000000000000000000000000084610ea5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611a4091906123d3565b6040518663ffffffff1660e01b8152600401611a60959493929190612d94565b600060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b50505050506000601260006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b179061282b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b86906128bd565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c9061294f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d039190611fd3565b60405180910390a350505050565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b611d3e81611d25565b8114611d4957600080fd5b50565b600081359050611d5b81611d35565b92915050565b600060208284031215611d7757611d76611d1b565b5b6000611d8584828501611d4c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc8578082015181840152602081019050611dad565b60008484015250505050565b6000601f19601f8301169050919050565b6000611df082611d8e565b611dfa8185611d99565b9350611e0a818560208601611daa565b611e1381611dd4565b840191505092915050565b60006020820190508181036000830152611e388184611de5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e6b82611e40565b9050919050565b611e7b81611e60565b8114611e8657600080fd5b50565b600081359050611e9881611e72565b92915050565b6000819050919050565b611eb181611e9e565b8114611ebc57600080fd5b50565b600081359050611ece81611ea8565b92915050565b60008060408385031215611eeb57611eea611d1b565b5b6000611ef985828601611e89565b9250506020611f0a85828601611ebf565b9150509250929050565b60008115159050919050565b611f2981611f14565b82525050565b6000602082019050611f446000830184611f20565b92915050565b6000819050919050565b6000611f6f611f6a611f6584611e40565b611f4a565b611e40565b9050919050565b6000611f8182611f54565b9050919050565b6000611f9382611f76565b9050919050565b611fa381611f88565b82525050565b6000602082019050611fbe6000830184611f9a565b92915050565b611fcd81611e9e565b82525050565b6000602082019050611fe86000830184611fc4565b92915050565b60008060006060848603121561200757612006611d1b565b5b600061201586828701611e89565b935050602061202686828701611e89565b925050604061203786828701611ebf565b9150509250925092565b600060ff82169050919050565b61205781612041565b82525050565b6000602082019050612072600083018461204e565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120b582611dd4565b810181811067ffffffffffffffff821117156120d4576120d361207d565b5b80604052505050565b60006120e7611d11565b90506120f382826120ac565b919050565b600067ffffffffffffffff8211156121135761211261207d565b5b602082029050602081019050919050565b600080fd5b600061213c612137846120f8565b6120dd565b9050808382526020820190506020840283018581111561215f5761215e612124565b5b835b8181101561218857806121748882611e89565b845260208401935050602081019050612161565b5050509392505050565b600082601f8301126121a7576121a6612078565b5b81356121b7848260208601612129565b91505092915050565b6000602082840312156121d6576121d5611d1b565b5b600082013567ffffffffffffffff8111156121f4576121f3611d20565b5b61220084828501612192565b91505092915050565b61221281611e60565b82525050565b600060208201905061222d6000830184612209565b92915050565b60006020828403121561224957612248611d1b565b5b600061225784828501611ebf565b91505092915050565b60006020828403121561227657612275611d1b565b5b600061228484828501611e89565b91505092915050565b600080604083850312156122a4576122a3611d1b565b5b60006122b285828601611e89565b92505060206122c385828601611e89565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061231457607f821691505b602082108103612327576123266122cd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061239682611e9e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123c8576123c761235c565b5b600182019050919050565b60006123de82611e9e565b91506123e983611e9e565b92508282019050808211156124015761240061235c565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b6000612463602d83611d99565b915061246e82612407565b604082019050919050565b6000602082019050818103600083015261249281612456565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006124f5602583611d99565b915061250082612499565b604082019050919050565b60006020820190508181036000830152612524816124e8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612587602683611d99565b91506125928261252b565b604082019050919050565b600060208201905081810360008301526125b68161257a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125f3602083611d99565b91506125fe826125bd565b602082019050919050565b60006020820190508181036000830152612622816125e6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612685602483611d99565b915061269082612629565b604082019050919050565b600060208201905081810360008301526126b481612678565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612717602283611d99565b9150612722826126bb565b604082019050919050565b600060208201905081810360008301526127468161270a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612783601d83611d99565b915061278e8261274d565b602082019050919050565b600060208201905081810360008301526127b281612776565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612815602583611d99565b9150612820826127b9565b604082019050919050565b6000602082019050818103600083015261284481612808565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006128a7602383611d99565b91506128b28261284b565b604082019050919050565b600060208201905081810360008301526128d68161289a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612939602683611d99565b9150612944826128dd565b604082019050919050565b600060208201905081810360008301526129688161292c565b9050919050565b7f45524332303a20596f752061726520626f740000000000000000000000000000600082015250565b60006129a5601283611d99565b91506129b08261296f565b602082019050919050565b600060208201905081810360008301526129d481612998565b9050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b6000612a11601283611d99565b9150612a1c826129db565b602082019050919050565b60006020820190508181036000830152612a4081612a04565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612aa3603983611d99565b9150612aae82612a47565b604082019050919050565b60006020820190508181036000830152612ad281612a96565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612b35603683611d99565b9150612b4082612ad9565b604082019050919050565b60006020820190508181036000830152612b6481612b28565b9050919050565b6000612b7682611e9e565b9150612b8183611e9e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bba57612bb961235c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bff82611e9e565b9150612c0a83611e9e565b925082612c1a57612c19612bc5565b5b828204905092915050565b6000612c3082611e9e565b9150612c3b83611e9e565b9250828203905081811115612c5357612c5261235c565b5b92915050565b600081519050612c6881611e72565b92915050565b600060208284031215612c8457612c83611d1b565b5b6000612c9284828501612c59565b91505092915050565b6000819050919050565b6000612cc0612cbb612cb684612c9b565b611f4a565b611e9e565b9050919050565b612cd081612ca5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d0b81611e60565b82525050565b6000612d1d8383612d02565b60208301905092915050565b6000602082019050919050565b6000612d4182612cd6565b612d4b8185612ce1565b9350612d5683612cf2565b8060005b83811015612d87578151612d6e8882612d11565b9750612d7983612d29565b925050600181019050612d5a565b5085935050505092915050565b600060a082019050612da96000830188611fc4565b612db66020830187612cc7565b8181036040830152612dc88186612d36565b9050612dd76060830185612209565b612de46080830184611fc4565b969550505050505056fea2646970667358221220b13e60465f5fb018cdddc665082e32f757fa04e898adf77a186c83ec1fed83a764736f6c63430008100033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c806375f0a874116100f7578063aa4bde2811610095578063d7fdd19f11610064578063d7fdd19f14610697578063dd62ed3e146106c0578063eac05ab5146106fd578063f2fde38b14610728576101d8565b8063aa4bde28146105dd578063bb85c6d114610608578063bfd7928414610631578063d34628cc1461066e576101d8565b80638da5cb5b116100d15780638da5cb5b1461050d57806395d89b4114610538578063a457c2d714610563578063a9059cbb146105a0576101d8565b806375f0a8741461048e57806381bfdcca146104b95780638c0b5e22146104e2576101d8565b806331c2d8471161016f578063677daa571161013e578063677daa57146103e85780636c2fd3241461041157806370a082311461043a578063715018a614610477576101d8565b806331c2d8471461032c578063395093511461035557806349bd5a5e14610392578063527ffabd146103bd576101d8565b80631694505e116101ab5780631694505e1461026e57806318160ddd1461029957806323b872dd146102c4578063313ce56714610301576101d8565b8063019a9c30146101dd57806306fdde0314610206578063095ea7b314610231576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190611d61565b610751565b005b34801561021257600080fd5b5061021b61077d565b6040516102289190611e1e565b60405180910390f35b34801561023d57600080fd5b5061025860048036038101906102539190611ed4565b61080f565b6040516102659190611f2f565b60405180910390f35b34801561027a57600080fd5b50610283610832565b6040516102909190611fa9565b60405180910390f35b3480156102a557600080fd5b506102ae610856565b6040516102bb9190611fd3565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190611fee565b610860565b6040516102f89190611f2f565b60405180910390f35b34801561030d57600080fd5b5061031661088f565b604051610323919061205d565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e91906121c0565b610898565b005b34801561036157600080fd5b5061037c60048036038101906103779190611ed4565b610935565b6040516103899190611f2f565b60405180910390f35b34801561039e57600080fd5b506103a761096c565b6040516103b49190612218565b60405180910390f35b3480156103c957600080fd5b506103d2610990565b6040516103df9190611fd3565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612233565b610996565b005b34801561041d57600080fd5b5061043860048036038101906104339190612233565b6109a8565b005b34801561044657600080fd5b50610461600480360381019061045c9190612260565b6109fe565b60405161046e9190611fd3565b60405180910390f35b34801561048357600080fd5b5061048c610a46565b005b34801561049a57600080fd5b506104a3610a5a565b6040516104b09190612218565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612233565b610a80565b005b3480156104ee57600080fd5b506104f7610a92565b6040516105049190611fd3565b60405180910390f35b34801561051957600080fd5b50610522610a98565b60405161052f9190612218565b60405180910390f35b34801561054457600080fd5b5061054d610ac2565b60405161055a9190611e1e565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190611ed4565b610b54565b6040516105979190611f2f565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190611ed4565b610bcb565b6040516105d49190611f2f565b60405180910390f35b3480156105e957600080fd5b506105f2610bee565b6040516105ff9190611fd3565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612260565b610bf4565b005b34801561063d57600080fd5b5061065860048036038101906106539190612260565b610c40565b6040516106659190611f2f565b60405180910390f35b34801561067a57600080fd5b50610695600480360381019061069091906121c0565b610c60565b005b3480156106a357600080fd5b506106be60048036038101906106b99190612233565b610cfd565b005b3480156106cc57600080fd5b506106e760048036038101906106e2919061228d565b610d0f565b6040516106f49190611fd3565b60405180910390f35b34801561070957600080fd5b50610712610d96565b60405161071f9190611fd3565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190612260565b610d9c565b005b610759610e1f565b80601260016101000a81548163ffffffff021916908363ffffffff16021790555050565b60606003805461078c906122fc565b80601f01602080910402602001604051908101604052809291908181526020018280546107b8906122fc565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b60008061081a610e9d565b9050610827818585610ea5565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60008061086b610e9d565b905061087885828561106e565b6108838585856110fa565b60019150509392505050565b60006009905090565b6108a0610e1f565b60005b8151811015610931576000600e60008484815181106108c5576108c461232d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109299061238b565b9150506108a3565b5050565b600080610940610e9d565b90506109618185856109528589610d0f565b61095c91906123d3565b610ea5565b600191505092915050565b7f000000000000000000000000b0a9eec4936952e766e30f5f8eec815a06069cba81565b600a5481565b61099e610e1f565b80600b8190555050565b6109b0610e1f565b60648111156109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90612479565b60405180910390fd5b80600a8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4e610e1f565b610a58600061176b565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a88610e1f565b80600c8190555050565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ad1906122fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610afd906122fc565b8015610b4a5780601f10610b1f57610100808354040283529160200191610b4a565b820191906000526020600020905b815481529060010190602001808311610b2d57829003601f168201915b5050505050905090565b600080610b5f610e9d565b90506000610b6d8286610d0f565b905083811015610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba99061250b565b60405180910390fd5b610bbf8286868403610ea5565b60019250505092915050565b600080610bd6610e9d565b9050610be38185856110fa565b600191505092915050565b600c5481565b610bfc610e1f565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b610c68610e1f565b60005b8151811015610cf9576001600e6000848481518110610c8d57610c8c61232d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610cf19061238b565b915050610c6b565b5050565b610d05610e1f565b8060118190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b610da4610e1f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a9061259d565b60405180910390fd5b610e1c8161176b565b50565b610e27610e9d565b73ffffffffffffffffffffffffffffffffffffffff16610e45610a98565b73ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290612609565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b9061269b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061272d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110619190611fd3565b60405180910390a3505050565b600061107a8484610d0f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110f457818110156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90612799565b60405180910390fd5b6110f38484848403610ea5565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111609061282b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf906128bd565b60405180910390fd5b806111e2846109fe565b1015611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a9061294f565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a7906129bb565b60405180910390fd5b7f000000000000000000000000b0a9eec4936952e766e30f5f8eec815a06069cba73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061135557507f000000000000000000000000b0a9eec4936952e766e30f5f8eec815a06069cba73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561136e5750601260009054906101000a900460ff16155b1561175a577f000000000000000000000000b0a9eec4936952e766e30f5f8eec815a06069cba73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611486576011546113d2306109fe565b10611485576113e86113e3306109fe565b611831565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90612a27565b60405180910390fd5b505b5b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115295750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561153657819050611749565b600b5482111561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290612ab9565b60405180910390fd5b7f000000000000000000000000b0a9eec4936952e766e30f5f8eec815a06069cba73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361162757600c546115da846109fe565b836115e591906123d3565b1115611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90612b4b565b60405180910390fd5b5b601260019054906101000a900463ffffffff1663ffffffff164210801561169957507f000000000000000000000000b0a9eec4936952e766e30f5f8eec815a06069cba73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156116f7576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006064600a54846117099190612b6b565b6117139190612bf4565b905080836117219190612c25565b915080600f600082825461173591906123d3565b92505081905550611747853083611ab1565b505b611754848483611ab1565b50611766565b611765838383611ab1565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156118695761186861207d565b5b6040519080825280602002602001820160405280156118975781602001602082028036833780820191505090505b50905030816000815181106118af576118ae61232d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190612c6e565b8160018151811061198c5761198b61232d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506119f1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610ea5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611a4091906123d3565b6040518663ffffffff1660e01b8152600401611a60959493929190612d94565b600060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b50505050506000601260006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b179061282b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b86906128bd565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c9061294f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d039190611fd3565b60405180910390a350505050565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b611d3e81611d25565b8114611d4957600080fd5b50565b600081359050611d5b81611d35565b92915050565b600060208284031215611d7757611d76611d1b565b5b6000611d8584828501611d4c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc8578082015181840152602081019050611dad565b60008484015250505050565b6000601f19601f8301169050919050565b6000611df082611d8e565b611dfa8185611d99565b9350611e0a818560208601611daa565b611e1381611dd4565b840191505092915050565b60006020820190508181036000830152611e388184611de5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e6b82611e40565b9050919050565b611e7b81611e60565b8114611e8657600080fd5b50565b600081359050611e9881611e72565b92915050565b6000819050919050565b611eb181611e9e565b8114611ebc57600080fd5b50565b600081359050611ece81611ea8565b92915050565b60008060408385031215611eeb57611eea611d1b565b5b6000611ef985828601611e89565b9250506020611f0a85828601611ebf565b9150509250929050565b60008115159050919050565b611f2981611f14565b82525050565b6000602082019050611f446000830184611f20565b92915050565b6000819050919050565b6000611f6f611f6a611f6584611e40565b611f4a565b611e40565b9050919050565b6000611f8182611f54565b9050919050565b6000611f9382611f76565b9050919050565b611fa381611f88565b82525050565b6000602082019050611fbe6000830184611f9a565b92915050565b611fcd81611e9e565b82525050565b6000602082019050611fe86000830184611fc4565b92915050565b60008060006060848603121561200757612006611d1b565b5b600061201586828701611e89565b935050602061202686828701611e89565b925050604061203786828701611ebf565b9150509250925092565b600060ff82169050919050565b61205781612041565b82525050565b6000602082019050612072600083018461204e565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120b582611dd4565b810181811067ffffffffffffffff821117156120d4576120d361207d565b5b80604052505050565b60006120e7611d11565b90506120f382826120ac565b919050565b600067ffffffffffffffff8211156121135761211261207d565b5b602082029050602081019050919050565b600080fd5b600061213c612137846120f8565b6120dd565b9050808382526020820190506020840283018581111561215f5761215e612124565b5b835b8181101561218857806121748882611e89565b845260208401935050602081019050612161565b5050509392505050565b600082601f8301126121a7576121a6612078565b5b81356121b7848260208601612129565b91505092915050565b6000602082840312156121d6576121d5611d1b565b5b600082013567ffffffffffffffff8111156121f4576121f3611d20565b5b61220084828501612192565b91505092915050565b61221281611e60565b82525050565b600060208201905061222d6000830184612209565b92915050565b60006020828403121561224957612248611d1b565b5b600061225784828501611ebf565b91505092915050565b60006020828403121561227657612275611d1b565b5b600061228484828501611e89565b91505092915050565b600080604083850312156122a4576122a3611d1b565b5b60006122b285828601611e89565b92505060206122c385828601611e89565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061231457607f821691505b602082108103612327576123266122cd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061239682611e9e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123c8576123c761235c565b5b600182019050919050565b60006123de82611e9e565b91506123e983611e9e565b92508282019050808211156124015761240061235c565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b6000612463602d83611d99565b915061246e82612407565b604082019050919050565b6000602082019050818103600083015261249281612456565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006124f5602583611d99565b915061250082612499565b604082019050919050565b60006020820190508181036000830152612524816124e8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612587602683611d99565b91506125928261252b565b604082019050919050565b600060208201905081810360008301526125b68161257a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006125f3602083611d99565b91506125fe826125bd565b602082019050919050565b60006020820190508181036000830152612622816125e6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612685602483611d99565b915061269082612629565b604082019050919050565b600060208201905081810360008301526126b481612678565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612717602283611d99565b9150612722826126bb565b604082019050919050565b600060208201905081810360008301526127468161270a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612783601d83611d99565b915061278e8261274d565b602082019050919050565b600060208201905081810360008301526127b281612776565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612815602583611d99565b9150612820826127b9565b604082019050919050565b6000602082019050818103600083015261284481612808565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006128a7602383611d99565b91506128b28261284b565b604082019050919050565b600060208201905081810360008301526128d68161289a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612939602683611d99565b9150612944826128dd565b604082019050919050565b600060208201905081810360008301526129688161292c565b9050919050565b7f45524332303a20596f752061726520626f740000000000000000000000000000600082015250565b60006129a5601283611d99565b91506129b08261296f565b602082019050919050565b600060208201905081810360008301526129d481612998565b9050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b6000612a11601283611d99565b9150612a1c826129db565b602082019050919050565b60006020820190508181036000830152612a4081612a04565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612aa3603983611d99565b9150612aae82612a47565b604082019050919050565b60006020820190508181036000830152612ad281612a96565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612b35603683611d99565b9150612b4082612ad9565b604082019050919050565b60006020820190508181036000830152612b6481612b28565b9050919050565b6000612b7682611e9e565b9150612b8183611e9e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bba57612bb961235c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bff82611e9e565b9150612c0a83611e9e565b925082612c1a57612c19612bc5565b5b828204905092915050565b6000612c3082611e9e565b9150612c3b83611e9e565b9250828203905081811115612c5357612c5261235c565b5b92915050565b600081519050612c6881611e72565b92915050565b600060208284031215612c8457612c83611d1b565b5b6000612c9284828501612c59565b91505092915050565b6000819050919050565b6000612cc0612cbb612cb684612c9b565b611f4a565b611e9e565b9050919050565b612cd081612ca5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d0b81611e60565b82525050565b6000612d1d8383612d02565b60208301905092915050565b6000602082019050919050565b6000612d4182612cd6565b612d4b8185612ce1565b9350612d5683612cf2565b8060005b83811015612d87578151612d6e8882612d11565b9750612d7983612d29565b925050600181019050612d5a565b5085935050505092915050565b600060a082019050612da96000830188611fc4565b612db66020830187612cc7565b8181036040830152612dc88186612d36565b9050612dd76060830185612209565b612de46080830184611fc4565b969550505050505056fea2646970667358221220b13e60465f5fb018cdddc665082e32f757fa04e898adf77a186c83ec1fed83a764736f6c63430008100033

Deployed Bytecode Sourcemap

29271:7476:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36258:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19095:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21294:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29901:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20199:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22102:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20042:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36539:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23811:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29959:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29558:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35874:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35608:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19260:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16354:103;;;;;;;;;;;;;:::i;:::-;;29732:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35993:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29600:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15706:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18919:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22902:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20754:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29664:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35487:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30006:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36367:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36128:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20372:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30154:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16612:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36258:101;15592:13;:11;:13::i;:::-;36346:5:::1;36329:14;;:22;;;;;;;;;;;;;;;;;;36258:101:::0;:::o;19095:102::-;19151:13;19184:5;19177:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19095:102;:::o;21294:228::-;21404:4;21421:13;21437:12;:10;:12::i;:::-;21421:28;;21460:32;21469:5;21476:7;21485:6;21460:8;:32::i;:::-;21510:4;21503:11;;;21294:228;;;;:::o;29901:51::-;;;:::o;20199:110::-;20262:7;20289:12;;20282:19;;20199:110;:::o;22102:297::-;22235:4;22252:15;22270:12;:10;:12::i;:::-;22252:30;;22293:38;22309:4;22315:7;22324:6;22293:15;:38::i;:::-;22342:27;22352:4;22358:2;22362:6;22342:9;:27::i;:::-;22387:4;22380:11;;;22102:297;;;;;:::o;20042:92::-;20100:5;20125:1;20118:8;;20042:92;:::o;36539:168::-;15592:13;:11;:13::i;:::-;36614:6:::1;36609:91;36630:6;:13;36626:1;:17;36609:91;;;36683:5;36665:4;:15;36670:6;36677:1;36670:9;;;;;;;;:::i;:::-;;;;;;;;36665:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;36645:3;;;;;:::i;:::-;;;;36609:91;;;;36539:168:::0;:::o;23811:265::-;23926:4;23943:13;23959:12;:10;:12::i;:::-;23943:28;;23982:64;23991:5;23998:7;24035:10;24007:25;24017:5;24024:7;24007:9;:25::i;:::-;:38;;;;:::i;:::-;23982:8;:64::i;:::-;24064:4;24057:11;;;23811:265;;;;:::o;29959:38::-;;;:::o;29558:35::-;;;;:::o;35874:111::-;15592:13;:11;:13::i;:::-;35965:12:::1;35951:11;:26;;;;35874:111:::0;:::o;35608:258::-;15592:13;:11;:13::i;:::-;35735:3:::1;35715:16;:23;;35693:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;35842:16;35824:15;:34;;;;35608:258:::0;:::o;19260:143::-;19350:7;19377:9;:18;19387:7;19377:18;;;;;;;;;;;;;;;;19370:25;;19260:143;;;:::o;16354:103::-;15592:13;:11;:13::i;:::-;16419:30:::1;16446:1;16419:18;:30::i;:::-;16354:103::o:0;29732:75::-;;;;;;;;;;;;;:::o;35993:127::-;15592:13;:11;:13::i;:::-;36096:16:::1;36078:15;:34;;;;35993:127:::0;:::o;29600:57::-;;;;:::o;15706:87::-;15752:7;15779:6;;;;;;;;;;;15772:13;;15706:87;:::o;18919:106::-;18977:13;19010:7;19003:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18919:106;:::o;22902:500::-;23022:4;23039:13;23055:12;:10;:12::i;:::-;23039:28;;23078:24;23105:25;23115:5;23122:7;23105:9;:25::i;:::-;23078:52;;23183:15;23163:16;:35;;23141:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;23299:60;23308:5;23315:7;23343:15;23324:16;:34;23299:8;:60::i;:::-;23390:4;23383:11;;;;22902:500;;;;:::o;20754:220::-;20860:4;20877:13;20893:12;:10;:12::i;:::-;20877:28;;20916;20926:5;20933:2;20937:6;20916:9;:28::i;:::-;20962:4;20955:11;;;20754:220;;;;:::o;29664:61::-;;;;:::o;35487:113::-;15592:13;:11;:13::i;:::-;35583:9:::1;35565:15;;:27;;;;;;;;;;;;;;;;;;35487:113:::0;:::o;30006:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;36367:164::-;15592:13;:11;:13::i;:::-;36441:6:::1;36436:88;36457:5;:12;36453:1;:16;36436:88;;;36508:4;36491;:14;36496:5;36502:1;36496:8;;;;;;;;:::i;:::-;;;;;;;;36491:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36471:3;;;;;:::i;:::-;;;;36436:88;;;;36367:164:::0;:::o;36128:122::-;15592:13;:11;:13::i;:::-;36238:4:::1;36211:24;:31;;;;36128:122:::0;:::o;20372:176::-;20486:7;20513:11;:18;20525:5;20513:18;;;;;;;;;;;;;;;:27;20532:7;20513:27;;;;;;;;;;;;;;;;20506:34;;20372:176;;;;:::o;30154:67::-;;;;:::o;16612:238::-;15592:13;:11;:13::i;:::-;16735:1:::1;16715:22;;:8;:22;;::::0;16693:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16814:28;16833:8;16814:18;:28::i;:::-;16612:238:::0;:::o;15871:132::-;15946:12;:10;:12::i;:::-;15935:23;;:7;:5;:7::i;:::-;:23;;;15927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15871:132::o;14499:98::-;14552:7;14579:10;14572:17;;14499:98;:::o;26111:380::-;26264:1;26247:19;;:5;:19;;;26239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26345:1;26326:21;;:7;:21;;;26318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26429:6;26399:11;:18;26411:5;26399:18;;;;;;;;;;;;;;;:27;26418:7;26399:27;;;;;;;;;;;;;;;:36;;;;26467:7;26451:32;;26460:5;26451:32;;;26476:6;26451:32;;;;;;:::i;:::-;;;;;;;;26111:380;;;:::o;26782:502::-;26917:24;26944:25;26954:5;26961:7;26944:9;:25::i;:::-;26917:52;;27004:17;26984:16;:37;26980:297;;27084:6;27064:16;:26;;27038:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27199:51;27208:5;27215:7;27243:6;27224:16;:25;27199:8;:51::i;:::-;26980:297;26906:378;26782:502;;;:::o;31941:2144::-;32089:1;32073:18;;:4;:18;;;32065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32166:1;32152:16;;:2;:16;;;32144:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32260:6;32241:15;32251:4;32241:9;:15::i;:::-;:25;;32219:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;32352:4;:10;32357:4;32352:10;;;;;;;;;;;;;;;;;;;;;;;;;32351:11;32343:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32425:13;32417:21;;:4;:21;;;:44;;;;32448:13;32442:19;;:2;:19;;;32417:44;32416:67;;;;;32467:16;;;;;;;;;;;32466:17;32416:67;32398:1680;;;32522:13;32514:21;;:4;:21;;;32510:398;;32588:24;;32560;32578:4;32560:9;:24::i;:::-;:52;32556:337;;32637:43;32655:24;32673:4;32655:9;:24::i;:::-;32637:17;:43::i;:::-;32703:9;32723:15;;;;;;;;;;;32715:29;;:100;32771:21;32715:100;;;;;;;;;;;;;;;;;;;;;;;32703:112;;32846:4;32838:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;32614:279;32556:337;32510:398;32924:22;32965:18;:24;32984:4;32965:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;32993:18;:22;33012:2;32993:22;;;;;;;;;;;;;;;;;;;;;;;;;32965:50;32961:984;;;33053:6;33036:23;;32961:984;;;33140:11;;33130:6;:21;;33100:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;33283:13;33275:21;;:4;:21;;;33271:253;;33383:15;;33365:13;33375:2;33365:9;:13::i;:::-;33356:6;:22;;;;:::i;:::-;33355:43;;33321:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;33271:253;33564:14;;;;;;;;;;;33546:32;;:15;:32;:57;;;;;33590:13;33582:21;;:4;:21;;;33546:57;33542:121;;;33639:4;33628;:8;33633:2;33628:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;33542:121;33683:22;33738:3;33719:15;;33710:6;:24;;;;:::i;:::-;33709:32;;;;:::i;:::-;33683:59;;33787:14;33778:6;:23;;;;:::i;:::-;33761:40;;33842:14;33820:18;;:36;;;;;;;:::i;:::-;;;;;;;;33877:52;33893:4;33907;33914:14;33877:15;:52::i;:::-;33081:864;32961:984;33959:41;33975:4;33981:2;33985:14;33959:15;:41::i;:::-;32495:1517;32398:1680;;;34033:33;34049:4;34055:2;34059:6;34033:15;:33::i;:::-;32398:1680;31941:2144;;;:::o;17010:191::-;17084:16;17103:6;;;;;;;;;;;17084:25;;17129:8;17120:6;;:17;;;;;;;;;;;;;;;;;;17184:8;17153:40;;17174:8;17153:40;;;;;;;;;;;;17073:128;17010:191;:::o;34575:496::-;30497:4;30478:16;;:23;;;;;;;;;;;;;;;;;;34654:21:::1;34692:1;34678:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34654:40;;34723:4;34705;34710:1;34705:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34749:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34739:4;34744:1;34739:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34784:62;34801:4;34816:15;34834:11;34784:8;:62::i;:::-;34859:15;:66;;;34940:11;34966:1;34982:4;35009;35048:3;35030:15;:21;;;;:::i;:::-;34859:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34643:428;30543:5:::0;30524:16;;:24;;;;;;;;;;;;;;;;;;34575:496;:::o;27292:776::-;27439:1;27423:18;;:4;:18;;;27415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27516:1;27502:16;;:2;:16;;;27494:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27571:19;27593:9;:15;27603:4;27593:15;;;;;;;;;;;;;;;;27571:37;;27656:6;27641:11;:21;;27619:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;27796:6;27782:11;:20;27764:9;:15;27774:4;27764:15;;;;;;;;;;;;;;;:38;;;;27999:6;27982:9;:13;27992:2;27982:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;28049:2;28034:26;;28043:4;28034:26;;;28053:6;28034:26;;;;;;:::i;:::-;;;;;;;;27404:664;27292:776;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:93;370:7;410:10;403:5;399:22;388:33;;334:93;;;:::o;433:120::-;505:23;522:5;505:23;:::i;:::-;498:5;495:34;485:62;;543:1;540;533:12;485:62;433:120;:::o;559:137::-;604:5;642:6;629:20;620:29;;658:32;684:5;658:32;:::i;:::-;559:137;;;;:::o;702:327::-;760:6;809:2;797:9;788:7;784:23;780:32;777:119;;;815:79;;:::i;:::-;777:119;935:1;960:52;1004:7;995:6;984:9;980:22;960:52;:::i;:::-;950:62;;906:116;702:327;;;;:::o;1035:99::-;1087:6;1121:5;1115:12;1105:22;;1035:99;;;:::o;1140:169::-;1224:11;1258:6;1253:3;1246:19;1298:4;1293:3;1289:14;1274:29;;1140:169;;;;:::o;1315:246::-;1396:1;1406:113;1420:6;1417:1;1414:13;1406:113;;;1505:1;1500:3;1496:11;1490:18;1486:1;1481:3;1477:11;1470:39;1442:2;1439:1;1435:10;1430:15;;1406:113;;;1553:1;1544:6;1539:3;1535:16;1528:27;1377:184;1315:246;;;:::o;1567:102::-;1608:6;1659:2;1655:7;1650:2;1643:5;1639:14;1635:28;1625:38;;1567:102;;;:::o;1675:377::-;1763:3;1791:39;1824:5;1791:39;:::i;:::-;1846:71;1910:6;1905:3;1846:71;:::i;:::-;1839:78;;1926:65;1984:6;1979:3;1972:4;1965:5;1961:16;1926:65;:::i;:::-;2016:29;2038:6;2016:29;:::i;:::-;2011:3;2007:39;2000:46;;1767:285;1675:377;;;;:::o;2058:313::-;2171:4;2209:2;2198:9;2194:18;2186:26;;2258:9;2252:4;2248:20;2244:1;2233:9;2229:17;2222:47;2286:78;2359:4;2350:6;2286:78;:::i;:::-;2278:86;;2058:313;;;;:::o;2377:126::-;2414:7;2454:42;2447:5;2443:54;2432:65;;2377:126;;;:::o;2509:96::-;2546:7;2575:24;2593:5;2575:24;:::i;:::-;2564:35;;2509:96;;;:::o;2611:122::-;2684:24;2702:5;2684:24;:::i;:::-;2677:5;2674:35;2664:63;;2723:1;2720;2713:12;2664:63;2611:122;:::o;2739:139::-;2785:5;2823:6;2810:20;2801:29;;2839:33;2866:5;2839:33;:::i;:::-;2739:139;;;;:::o;2884:77::-;2921:7;2950:5;2939:16;;2884:77;;;:::o;2967:122::-;3040:24;3058:5;3040:24;:::i;:::-;3033:5;3030:35;3020:63;;3079:1;3076;3069:12;3020:63;2967:122;:::o;3095:139::-;3141:5;3179:6;3166:20;3157:29;;3195:33;3222:5;3195:33;:::i;:::-;3095:139;;;;:::o;3240:474::-;3308:6;3316;3365:2;3353:9;3344:7;3340:23;3336:32;3333:119;;;3371:79;;:::i;:::-;3333:119;3491:1;3516:53;3561:7;3552:6;3541:9;3537:22;3516:53;:::i;:::-;3506:63;;3462:117;3618:2;3644:53;3689:7;3680:6;3669:9;3665:22;3644:53;:::i;:::-;3634:63;;3589:118;3240:474;;;;;:::o;3720:90::-;3754:7;3797:5;3790:13;3783:21;3772:32;;3720:90;;;:::o;3816:109::-;3897:21;3912:5;3897:21;:::i;:::-;3892:3;3885:34;3816:109;;:::o;3931:210::-;4018:4;4056:2;4045:9;4041:18;4033:26;;4069:65;4131:1;4120:9;4116:17;4107:6;4069:65;:::i;:::-;3931:210;;;;:::o;4147:60::-;4175:3;4196:5;4189:12;;4147:60;;;:::o;4213:142::-;4263:9;4296:53;4314:34;4323:24;4341:5;4323:24;:::i;:::-;4314:34;:::i;:::-;4296:53;:::i;:::-;4283:66;;4213:142;;;:::o;4361:126::-;4411:9;4444:37;4475:5;4444:37;:::i;:::-;4431:50;;4361:126;;;:::o;4493:152::-;4569:9;4602:37;4633:5;4602:37;:::i;:::-;4589:50;;4493:152;;;:::o;4651:183::-;4764:63;4821:5;4764:63;:::i;:::-;4759:3;4752:76;4651:183;;:::o;4840:274::-;4959:4;4997:2;4986:9;4982:18;4974:26;;5010:97;5104:1;5093:9;5089:17;5080:6;5010:97;:::i;:::-;4840:274;;;;:::o;5120:118::-;5207:24;5225:5;5207:24;:::i;:::-;5202:3;5195:37;5120:118;;:::o;5244:222::-;5337:4;5375:2;5364:9;5360:18;5352:26;;5388:71;5456:1;5445:9;5441:17;5432:6;5388:71;:::i;:::-;5244:222;;;;:::o;5472:619::-;5549:6;5557;5565;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5867:2;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5838:118;5995:2;6021:53;6066:7;6057:6;6046:9;6042:22;6021:53;:::i;:::-;6011:63;;5966:118;5472:619;;;;;:::o;6097:86::-;6132:7;6172:4;6165:5;6161:16;6150:27;;6097:86;;;:::o;6189:112::-;6272:22;6288:5;6272:22;:::i;:::-;6267:3;6260:35;6189:112;;:::o;6307:214::-;6396:4;6434:2;6423:9;6419:18;6411:26;;6447:67;6511:1;6500:9;6496:17;6487:6;6447:67;:::i;:::-;6307:214;;;;:::o;6527:117::-;6636:1;6633;6626:12;6650:180;6698:77;6695:1;6688:88;6795:4;6792:1;6785:15;6819:4;6816:1;6809:15;6836:281;6919:27;6941:4;6919:27;:::i;:::-;6911:6;6907:40;7049:6;7037:10;7034:22;7013:18;7001:10;6998:34;6995:62;6992:88;;;7060:18;;:::i;:::-;6992:88;7100:10;7096:2;7089:22;6879:238;6836:281;;:::o;7123:129::-;7157:6;7184:20;;:::i;:::-;7174:30;;7213:33;7241:4;7233:6;7213:33;:::i;:::-;7123:129;;;:::o;7258:311::-;7335:4;7425:18;7417:6;7414:30;7411:56;;;7447:18;;:::i;:::-;7411:56;7497:4;7489:6;7485:17;7477:25;;7557:4;7551;7547:15;7539:23;;7258:311;;;:::o;7575:117::-;7684:1;7681;7674:12;7715:710;7811:5;7836:81;7852:64;7909:6;7852:64;:::i;:::-;7836:81;:::i;:::-;7827:90;;7937:5;7966:6;7959:5;7952:21;8000:4;7993:5;7989:16;7982:23;;8053:4;8045:6;8041:17;8033:6;8029:30;8082:3;8074:6;8071:15;8068:122;;;8101:79;;:::i;:::-;8068:122;8216:6;8199:220;8233:6;8228:3;8225:15;8199:220;;;8308:3;8337:37;8370:3;8358:10;8337:37;:::i;:::-;8332:3;8325:50;8404:4;8399:3;8395:14;8388:21;;8275:144;8259:4;8254:3;8250:14;8243:21;;8199:220;;;8203:21;7817:608;;7715:710;;;;;:::o;8448:370::-;8519:5;8568:3;8561:4;8553:6;8549:17;8545:27;8535:122;;8576:79;;:::i;:::-;8535:122;8693:6;8680:20;8718:94;8808:3;8800:6;8793:4;8785:6;8781:17;8718:94;:::i;:::-;8709:103;;8525:293;8448:370;;;;:::o;8824:539::-;8908:6;8957:2;8945:9;8936:7;8932:23;8928:32;8925:119;;;8963:79;;:::i;:::-;8925:119;9111:1;9100:9;9096:17;9083:31;9141:18;9133:6;9130:30;9127:117;;;9163:79;;:::i;:::-;9127:117;9268:78;9338:7;9329:6;9318:9;9314:22;9268:78;:::i;:::-;9258:88;;9054:302;8824:539;;;;:::o;9369:118::-;9456:24;9474:5;9456:24;:::i;:::-;9451:3;9444:37;9369:118;;:::o;9493:222::-;9586:4;9624:2;9613:9;9609:18;9601:26;;9637:71;9705:1;9694:9;9690:17;9681:6;9637:71;:::i;:::-;9493:222;;;;:::o;9721:329::-;9780:6;9829:2;9817:9;9808:7;9804:23;9800:32;9797:119;;;9835:79;;:::i;:::-;9797:119;9955:1;9980:53;10025:7;10016:6;10005:9;10001:22;9980:53;:::i;:::-;9970:63;;9926:117;9721:329;;;;:::o;10056:::-;10115:6;10164:2;10152:9;10143:7;10139:23;10135:32;10132:119;;;10170:79;;:::i;:::-;10132:119;10290:1;10315:53;10360:7;10351:6;10340:9;10336:22;10315:53;:::i;:::-;10305:63;;10261:117;10056:329;;;;:::o;10391:474::-;10459:6;10467;10516:2;10504:9;10495:7;10491:23;10487:32;10484:119;;;10522:79;;:::i;:::-;10484:119;10642:1;10667:53;10712:7;10703:6;10692:9;10688:22;10667:53;:::i;:::-;10657:63;;10613:117;10769:2;10795:53;10840:7;10831:6;10820:9;10816:22;10795:53;:::i;:::-;10785:63;;10740:118;10391:474;;;;;:::o;10871:180::-;10919:77;10916:1;10909:88;11016:4;11013:1;11006:15;11040:4;11037:1;11030:15;11057:320;11101:6;11138:1;11132:4;11128:12;11118:22;;11185:1;11179:4;11175:12;11206:18;11196:81;;11262:4;11254:6;11250:17;11240:27;;11196:81;11324:2;11316:6;11313:14;11293:18;11290:38;11287:84;;11343:18;;:::i;:::-;11287:84;11108:269;11057:320;;;:::o;11383:180::-;11431:77;11428:1;11421:88;11528:4;11525:1;11518:15;11552:4;11549:1;11542:15;11569:180;11617:77;11614:1;11607:88;11714:4;11711:1;11704:15;11738:4;11735:1;11728:15;11755:233;11794:3;11817:24;11835:5;11817:24;:::i;:::-;11808:33;;11863:66;11856:5;11853:77;11850:103;;11933:18;;:::i;:::-;11850:103;11980:1;11973:5;11969:13;11962:20;;11755:233;;;:::o;11994:191::-;12034:3;12053:20;12071:1;12053:20;:::i;:::-;12048:25;;12087:20;12105:1;12087:20;:::i;:::-;12082:25;;12130:1;12127;12123:9;12116:16;;12151:3;12148:1;12145:10;12142:36;;;12158:18;;:::i;:::-;12142:36;11994:191;;;;:::o;12191:232::-;12331:34;12327:1;12319:6;12315:14;12308:58;12400:15;12395:2;12387:6;12383:15;12376:40;12191:232;:::o;12429:366::-;12571:3;12592:67;12656:2;12651:3;12592:67;:::i;:::-;12585:74;;12668:93;12757:3;12668:93;:::i;:::-;12786:2;12781:3;12777:12;12770:19;;12429:366;;;:::o;12801:419::-;12967:4;13005:2;12994:9;12990:18;12982:26;;13054:9;13048:4;13044:20;13040:1;13029:9;13025:17;13018:47;13082:131;13208:4;13082:131;:::i;:::-;13074:139;;12801:419;;;:::o;13226:224::-;13366:34;13362:1;13354:6;13350:14;13343:58;13435:7;13430:2;13422:6;13418:15;13411:32;13226:224;:::o;13456:366::-;13598:3;13619:67;13683:2;13678:3;13619:67;:::i;:::-;13612:74;;13695:93;13784:3;13695:93;:::i;:::-;13813:2;13808:3;13804:12;13797:19;;13456:366;;;:::o;13828:419::-;13994:4;14032:2;14021:9;14017:18;14009:26;;14081:9;14075:4;14071:20;14067:1;14056:9;14052:17;14045:47;14109:131;14235:4;14109:131;:::i;:::-;14101:139;;13828:419;;;:::o;14253:225::-;14393:34;14389:1;14381:6;14377:14;14370:58;14462:8;14457:2;14449:6;14445:15;14438:33;14253:225;:::o;14484:366::-;14626:3;14647:67;14711:2;14706:3;14647:67;:::i;:::-;14640:74;;14723:93;14812:3;14723:93;:::i;:::-;14841:2;14836:3;14832:12;14825:19;;14484:366;;;:::o;14856:419::-;15022:4;15060:2;15049:9;15045:18;15037:26;;15109:9;15103:4;15099:20;15095:1;15084:9;15080:17;15073:47;15137:131;15263:4;15137:131;:::i;:::-;15129:139;;14856:419;;;:::o;15281:182::-;15421:34;15417:1;15409:6;15405:14;15398:58;15281:182;:::o;15469:366::-;15611:3;15632:67;15696:2;15691:3;15632:67;:::i;:::-;15625:74;;15708:93;15797:3;15708:93;:::i;:::-;15826:2;15821:3;15817:12;15810:19;;15469:366;;;:::o;15841:419::-;16007:4;16045:2;16034:9;16030:18;16022:26;;16094:9;16088:4;16084:20;16080:1;16069:9;16065:17;16058:47;16122:131;16248:4;16122:131;:::i;:::-;16114:139;;15841:419;;;:::o;16266:223::-;16406:34;16402:1;16394:6;16390:14;16383:58;16475:6;16470:2;16462:6;16458:15;16451:31;16266:223;:::o;16495:366::-;16637:3;16658:67;16722:2;16717:3;16658:67;:::i;:::-;16651:74;;16734:93;16823:3;16734:93;:::i;:::-;16852:2;16847:3;16843:12;16836:19;;16495:366;;;:::o;16867:419::-;17033:4;17071:2;17060:9;17056:18;17048:26;;17120:9;17114:4;17110:20;17106:1;17095:9;17091:17;17084:47;17148:131;17274:4;17148:131;:::i;:::-;17140:139;;16867:419;;;:::o;17292:221::-;17432:34;17428:1;17420:6;17416:14;17409:58;17501:4;17496:2;17488:6;17484:15;17477:29;17292:221;:::o;17519:366::-;17661:3;17682:67;17746:2;17741:3;17682:67;:::i;:::-;17675:74;;17758:93;17847:3;17758:93;:::i;:::-;17876:2;17871:3;17867:12;17860:19;;17519:366;;;:::o;17891:419::-;18057:4;18095:2;18084:9;18080:18;18072:26;;18144:9;18138:4;18134:20;18130:1;18119:9;18115:17;18108:47;18172:131;18298:4;18172:131;:::i;:::-;18164:139;;17891:419;;;:::o;18316:179::-;18456:31;18452:1;18444:6;18440:14;18433:55;18316:179;:::o;18501:366::-;18643:3;18664:67;18728:2;18723:3;18664:67;:::i;:::-;18657:74;;18740:93;18829:3;18740:93;:::i;:::-;18858:2;18853:3;18849:12;18842:19;;18501:366;;;:::o;18873:419::-;19039:4;19077:2;19066:9;19062:18;19054:26;;19126:9;19120:4;19116:20;19112:1;19101:9;19097:17;19090:47;19154:131;19280:4;19154:131;:::i;:::-;19146:139;;18873:419;;;:::o;19298:224::-;19438:34;19434:1;19426:6;19422:14;19415:58;19507:7;19502:2;19494:6;19490:15;19483:32;19298:224;:::o;19528:366::-;19670:3;19691:67;19755:2;19750:3;19691:67;:::i;:::-;19684:74;;19767:93;19856:3;19767:93;:::i;:::-;19885:2;19880:3;19876:12;19869:19;;19528:366;;;:::o;19900:419::-;20066:4;20104:2;20093:9;20089:18;20081:26;;20153:9;20147:4;20143:20;20139:1;20128:9;20124:17;20117:47;20181:131;20307:4;20181:131;:::i;:::-;20173:139;;19900:419;;;:::o;20325:222::-;20465:34;20461:1;20453:6;20449:14;20442:58;20534:5;20529:2;20521:6;20517:15;20510:30;20325:222;:::o;20553:366::-;20695:3;20716:67;20780:2;20775:3;20716:67;:::i;:::-;20709:74;;20792:93;20881:3;20792:93;:::i;:::-;20910:2;20905:3;20901:12;20894:19;;20553:366;;;:::o;20925:419::-;21091:4;21129:2;21118:9;21114:18;21106:26;;21178:9;21172:4;21168:20;21164:1;21153:9;21149:17;21142:47;21206:131;21332:4;21206:131;:::i;:::-;21198:139;;20925:419;;;:::o;21350:225::-;21490:34;21486:1;21478:6;21474:14;21467:58;21559:8;21554:2;21546:6;21542:15;21535:33;21350:225;:::o;21581:366::-;21723:3;21744:67;21808:2;21803:3;21744:67;:::i;:::-;21737:74;;21820:93;21909:3;21820:93;:::i;:::-;21938:2;21933:3;21929:12;21922:19;;21581:366;;;:::o;21953:419::-;22119:4;22157:2;22146:9;22142:18;22134:26;;22206:9;22200:4;22196:20;22192:1;22181:9;22177:17;22170:47;22234:131;22360:4;22234:131;:::i;:::-;22226:139;;21953:419;;;:::o;22378:168::-;22518:20;22514:1;22506:6;22502:14;22495:44;22378:168;:::o;22552:366::-;22694:3;22715:67;22779:2;22774:3;22715:67;:::i;:::-;22708:74;;22791:93;22880:3;22791:93;:::i;:::-;22909:2;22904:3;22900:12;22893:19;;22552:366;;;:::o;22924:419::-;23090:4;23128:2;23117:9;23113:18;23105:26;;23177:9;23171:4;23167:20;23163:1;23152:9;23148:17;23141:47;23205:131;23331:4;23205:131;:::i;:::-;23197:139;;22924:419;;;:::o;23349:168::-;23489:20;23485:1;23477:6;23473:14;23466:44;23349:168;:::o;23523:366::-;23665:3;23686:67;23750:2;23745:3;23686:67;:::i;:::-;23679:74;;23762:93;23851:3;23762:93;:::i;:::-;23880:2;23875:3;23871:12;23864:19;;23523:366;;;:::o;23895:419::-;24061:4;24099:2;24088:9;24084:18;24076:26;;24148:9;24142:4;24138:20;24134:1;24123:9;24119:17;24112:47;24176:131;24302:4;24176:131;:::i;:::-;24168:139;;23895:419;;;:::o;24320:244::-;24460:34;24456:1;24448:6;24444:14;24437:58;24529:27;24524:2;24516:6;24512:15;24505:52;24320:244;:::o;24570:366::-;24712:3;24733:67;24797:2;24792:3;24733:67;:::i;:::-;24726:74;;24809:93;24898:3;24809:93;:::i;:::-;24927:2;24922:3;24918:12;24911:19;;24570:366;;;:::o;24942:419::-;25108:4;25146:2;25135:9;25131:18;25123:26;;25195:9;25189:4;25185:20;25181:1;25170:9;25166:17;25159:47;25223:131;25349:4;25223:131;:::i;:::-;25215:139;;24942:419;;;:::o;25367:241::-;25507:34;25503:1;25495:6;25491:14;25484:58;25576:24;25571:2;25563:6;25559:15;25552:49;25367:241;:::o;25614:366::-;25756:3;25777:67;25841:2;25836:3;25777:67;:::i;:::-;25770:74;;25853:93;25942:3;25853:93;:::i;:::-;25971:2;25966:3;25962:12;25955:19;;25614:366;;;:::o;25986:419::-;26152:4;26190:2;26179:9;26175:18;26167:26;;26239:9;26233:4;26229:20;26225:1;26214:9;26210:17;26203:47;26267:131;26393:4;26267:131;:::i;:::-;26259:139;;25986:419;;;:::o;26411:348::-;26451:7;26474:20;26492:1;26474:20;:::i;:::-;26469:25;;26508:20;26526:1;26508:20;:::i;:::-;26503:25;;26696:1;26628:66;26624:74;26621:1;26618:81;26613:1;26606:9;26599:17;26595:105;26592:131;;;26703:18;;:::i;:::-;26592:131;26751:1;26748;26744:9;26733:20;;26411:348;;;;:::o;26765:180::-;26813:77;26810:1;26803:88;26910:4;26907:1;26900:15;26934:4;26931:1;26924:15;26951:185;26991:1;27008:20;27026:1;27008:20;:::i;:::-;27003:25;;27042:20;27060:1;27042:20;:::i;:::-;27037:25;;27081:1;27071:35;;27086:18;;:::i;:::-;27071:35;27128:1;27125;27121:9;27116:14;;26951:185;;;;:::o;27142:194::-;27182:4;27202:20;27220:1;27202:20;:::i;:::-;27197:25;;27236:20;27254:1;27236:20;:::i;:::-;27231:25;;27280:1;27277;27273:9;27265:17;;27304:1;27298:4;27295:11;27292:37;;;27309:18;;:::i;:::-;27292:37;27142:194;;;;:::o;27342:143::-;27399:5;27430:6;27424:13;27415:22;;27446:33;27473:5;27446:33;:::i;:::-;27342:143;;;;:::o;27491:351::-;27561:6;27610:2;27598:9;27589:7;27585:23;27581:32;27578:119;;;27616:79;;:::i;:::-;27578:119;27736:1;27761:64;27817:7;27808:6;27797:9;27793:22;27761:64;:::i;:::-;27751:74;;27707:128;27491:351;;;;:::o;27848:85::-;27893:7;27922:5;27911:16;;27848:85;;;:::o;27939:158::-;27997:9;28030:61;28048:42;28057:32;28083:5;28057:32;:::i;:::-;28048:42;:::i;:::-;28030:61;:::i;:::-;28017:74;;27939:158;;;:::o;28103:147::-;28198:45;28237:5;28198:45;:::i;:::-;28193:3;28186:58;28103:147;;:::o;28256:114::-;28323:6;28357:5;28351:12;28341:22;;28256:114;;;:::o;28376:184::-;28475:11;28509:6;28504:3;28497:19;28549:4;28544:3;28540:14;28525:29;;28376:184;;;;:::o;28566:132::-;28633:4;28656:3;28648:11;;28686:4;28681:3;28677:14;28669:22;;28566:132;;;:::o;28704:108::-;28781:24;28799:5;28781:24;:::i;:::-;28776:3;28769:37;28704:108;;:::o;28818:179::-;28887:10;28908:46;28950:3;28942:6;28908:46;:::i;:::-;28986:4;28981:3;28977:14;28963:28;;28818:179;;;;:::o;29003:113::-;29073:4;29105;29100:3;29096:14;29088:22;;29003:113;;;:::o;29152:732::-;29271:3;29300:54;29348:5;29300:54;:::i;:::-;29370:86;29449:6;29444:3;29370:86;:::i;:::-;29363:93;;29480:56;29530:5;29480:56;:::i;:::-;29559:7;29590:1;29575:284;29600:6;29597:1;29594:13;29575:284;;;29676:6;29670:13;29703:63;29762:3;29747:13;29703:63;:::i;:::-;29696:70;;29789:60;29842:6;29789:60;:::i;:::-;29779:70;;29635:224;29622:1;29619;29615:9;29610:14;;29575:284;;;29579:14;29875:3;29868:10;;29276:608;;;29152:732;;;;:::o;29890:831::-;30153:4;30191:3;30180:9;30176:19;30168:27;;30205:71;30273:1;30262:9;30258:17;30249:6;30205:71;:::i;:::-;30286:80;30362:2;30351:9;30347:18;30338:6;30286:80;:::i;:::-;30413:9;30407:4;30403:20;30398:2;30387:9;30383:18;30376:48;30441:108;30544:4;30535:6;30441:108;:::i;:::-;30433:116;;30559:72;30627:2;30616:9;30612:18;30603:6;30559:72;:::i;:::-;30641:73;30709:3;30698:9;30694:19;30685:6;30641:73;:::i;:::-;29890:831;;;;;;;;:::o

Swarm Source

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