ETH Price: $3,109.29 (+1.55%)
Gas: 4 Gwei

Token

Phil and Friends (Phil)
 

Overview

Max Total Supply

100,000,000 Phil

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000969655 Phil

Value
$0.00
0xa2f0d9bbfaefaf69178f77e856ce4202dbada99a
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:
PHIL

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-29
*/

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * 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) public 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
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        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 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 virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/Token.sol



/**

Website: https://www.philandfriends.xyz/
Telegram: https://t.me/philandfriends
Twitter: https://twitter.com/PhiltheFoxeth

*/

pragma solidity ^0.8.0;





contract PHIL is ERC20, Ownable {
    uint256 public immutable initialSupply;
    uint256 public immutable percentageBase;
    uint256 public disabledBlocks;
    uint256 public blockStart;
    uint256 public timeStart;
    address public routerAddress;

    uint256 public maxTax;
    uint256 public buyTax;
    uint256 public sellTax;
    address public taxWallet;

    uint256 public maxWallet;
    uint256 public maxTx;
    uint256 public txCooldown;

    bool public isMaxWalletEnabled;
    bool public isMaxTxEnabled;
    bool public isTxCooldownEnabled;

    uint256 public taxCollected;
    uint256 public taxThreshold;
    uint256 public lastTaxBlock;

    mapping(address => uint256) public lastTxTimestamp;
    mapping(address => bool) public exempt;
    mapping(address => bool) public dex;

    constructor(
        address _router,
        address _taxReceiver,
        address[] memory wallets,
        uint256[] memory tokenAmounts,
        uint256 initialLiquidity
    ) payable ERC20("Phil and Friends", "Phil") Ownable() {
        initialSupply = 100_000_000 ether;
        percentageBase = 100_000;

        disabledBlocks = 4;
        routerAddress = _router;

        maxTax = 10_000; // 10%
        buyTax = 3_000; // 3%
        sellTax = 3_000; // 3%

        taxWallet = _taxReceiver;
        maxWallet = 4_000; // 4%
        maxTx = 1_000; // 1%
        txCooldown = 5 seconds;
        taxThreshold = 5 minutes;

        isMaxWalletEnabled = true;
        isMaxTxEnabled = true;
        isTxCooldownEnabled = true;

        exempt[address(this)] = true;

        require(wallets.length == tokenAmounts.length, "Invalid input.");
        for (uint256 i = 0; i < wallets.length; i++) {
            require(
                tokenAmounts[i] <= (initialSupply * maxWallet) / percentageBase,
                "Invalid token amount."
            );
            _mint(wallets[i], tokenAmounts[i]);
        }

        _mint(address(this), initialLiquidity);
        require(
            totalSupply() == initialSupply,
            "Initial supply does not match."
        );
    }

    function addInitialLiquidity(
    ) external payable onlyOwner {
        require(blockStart == 0, "Liquidity already added.");
        require(timeStart == 0, "Liquidity already added.");
        IUniswapV2Router02 router = IUniswapV2Router02(routerAddress);
        _approve(address(this), routerAddress, ~uint256(0));
        address pair = IUniswapV2Factory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        dex[pair] = true;
        router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            msg.sender,
            block.timestamp + 15 minutes
        );
        blockStart = block.number;
        timeStart = block.timestamp;
    }

    function setBuyTax(uint256 _tax) external onlyOwner {
        require(_tax <= maxTax, "Tax exceeds maxTax.");
        buyTax = _tax;
    }

    function setSellTax(uint256 _tax) external onlyOwner {
        require(_tax <= maxTax, "Tax exceeds maxTax.");
        sellTax = _tax;
    }

    function setMaxWalletEnabled(bool _enabled) external onlyOwner {
        isMaxWalletEnabled = _enabled;
    }

    function setMaxTxEnabled(bool _enabled) external onlyOwner {
        isMaxTxEnabled = _enabled;
    }

    function setTxCooldownEnabled(bool _enabled) external onlyOwner {
        isTxCooldownEnabled = _enabled;
    }

		function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        uint256 transferAmount = amount;
        if (blockStart == 0 || timeStart == 0) {
            require(
                from == address(this) || to == address(this),
                "Liquidity not added."
            );
        }
        bool isBeforeFx = block.number <= blockStart + disabledBlocks;
        if (dex[from] || dex[to]) {
            uint256 taxRate;
            if (exempt[from] || exempt[to]) {
                taxRate = 0;
            } else if (isBeforeFx && dex[from] && !exempt[to]) {
                taxRate = 95_000; // 95%
            } else if (dex[from]) {
                taxRate = buyTax;
            } else if (dex[to]) {
                taxRate = sellTax;
            } else {
                taxRate = 0;
            }
            uint256 taxAmount = (amount * taxRate) / percentageBase;
            transferAmount = amount - taxAmount;
            super._transfer(from, address(this), taxAmount);
            taxCollected += taxAmount;
            if (!isBeforeFx && !exempt[from]) {
                require(
                    !isMaxTxEnabled ||
                        (dex[to] && from == address(this)) ||
                        amount <= (maxTx * initialSupply) / percentageBase,
                    "Transfer amount exceeds maxTx."
                );
                if (dex[from] || dex[to]) {
                    require(
                        !isTxCooldownEnabled ||
                            dex[from] ||
                            (dex[to] && from == address(this)) ||
                            block.timestamp - lastTxTimestamp[from] >=
                            txCooldown,
                        "Transfer cooldown not expired."
                    );
                    lastTxTimestamp[from] = block.timestamp;
                }
            }
        }
        if (!isBeforeFx && !dex[to] && !exempt[to]) {
            require(
                isMaxWalletEnabled ||
                    dex[to] ||
                    to == address(this) ||
                    balanceOf(to) + transferAmount <=
                    (maxWallet * initialSupply) / percentageBase,
                "Recipient wallet balance exceeds maxWallet."
            );
        }
        if (
            !dex[from] &&
            taxCollected > 0 &&
            block.timestamp - lastTaxBlock > taxThreshold
        ) {
            lastTaxBlock = block.timestamp;
            uint256 toSwap = taxCollected;
            taxCollected = 0;
            _swapTokensToEth(toSwap, taxWallet);
        }
        super._transfer(from, to, transferAmount);
    }

    function _swapTokensToEth(uint256 tokenAmount, address recipient) private {
        if (tokenAmount > balanceOf(address(this))) {
            tokenAmount = balanceOf(address(this));
        }
        IUniswapV2Router02 router = IUniswapV2Router02(routerAddress);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETH(
            tokenAmount,
            0,
            path,
            recipient,
            block.timestamp + 15 minutes
        );
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_taxReceiver","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"internalType":"uint256","name":"initialLiquidity","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"addInitialLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dex","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disabledBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxTxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTxCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTaxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTxTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"percentageBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMaxTxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTxCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeStart","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":"txCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260405162004af238038062004af2833981810160405281019062000029919062000933565b6040518060400160405280601081526020017f5068696c20616e6420467269656e6473000000000000000000000000000000008152506040518060400160405280600481526020017f5068696c000000000000000000000000000000000000000000000000000000008152508160039081620000a6919062000c23565b508060049081620000b8919062000c23565b505050620000db620000cf6200040860201b60201c565b6200040f60201b60201c565b6a52b7d2dcc80cd2e400000060808181525050620186a060a0818152505060046006819055508460095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612710600a81905550610bb8600b81905550610bb8600c8190555083600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fa0600e819055506103e8600f81905550600560108190555061012c601381905550600160115f6101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff021916908315150217905550600160165f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508151835114620002ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a29062000d65565b60405180910390fd5b5f5b8351811015620003945760a051600e54608051620002cc919062000db2565b620002d8919062000e29565b838281518110620002ee57620002ed62000e60565b5b602002602001015111156200033a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003319062000edb565b60405180910390fd5b6200038684828151811062000354576200035362000e60565b5b602002602001015184838151811062000372576200037162000e60565b5b6020026020010151620004d260201b60201c565b8080600101915050620002ad565b50620003a73082620004d260201b60201c565b608051620003ba6200063760201b60201c565b14620003fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f49062000f49565b60405180910390fd5b50505050506200103d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000543576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200053a9062000fb7565b60405180910390fd5b620005565f83836200064060201b60201c565b8060025f82825462000569919062000fd7565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000618919062001022565b60405180910390a3620006335f83836200064560201b60201c565b5050565b5f600254905090565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000686826200065b565b9050919050565b62000698816200067a565b8114620006a3575f80fd5b50565b5f81519050620006b6816200068d565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200070882620006c0565b810181811067ffffffffffffffff821117156200072a5762000729620006d0565b5b80604052505050565b5f6200073e6200064a565b90506200074c8282620006fd565b919050565b5f67ffffffffffffffff8211156200076e576200076d620006d0565b5b602082029050602081019050919050565b5f80fd5b5f62000799620007938462000751565b62000733565b90508083825260208201905060208402830185811115620007bf57620007be6200077f565b5b835b81811015620007ec5780620007d78882620006a6565b845260208401935050602081019050620007c1565b5050509392505050565b5f82601f8301126200080d576200080c620006bc565b5b81516200081f84826020860162000783565b91505092915050565b5f67ffffffffffffffff821115620008455762000844620006d0565b5b602082029050602081019050919050565b5f819050919050565b6200086a8162000856565b811462000875575f80fd5b50565b5f8151905062000888816200085f565b92915050565b5f620008a46200089e8462000828565b62000733565b90508083825260208201905060208402830185811115620008ca57620008c96200077f565b5b835b81811015620008f75780620008e2888262000878565b845260208401935050602081019050620008cc565b5050509392505050565b5f82601f830112620009185762000917620006bc565b5b81516200092a8482602086016200088e565b91505092915050565b5f805f805f60a086880312156200094f576200094e62000653565b5b5f6200095e88828901620006a6565b95505060206200097188828901620006a6565b945050604086015167ffffffffffffffff81111562000995576200099462000657565b5b620009a388828901620007f6565b935050606086015167ffffffffffffffff811115620009c757620009c662000657565b5b620009d58882890162000901565b9250506080620009e88882890162000878565b9150509295509295909350565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a4457607f821691505b60208210810362000a5a5762000a59620009ff565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000abe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a81565b62000aca868362000a81565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000b0b62000b0562000aff8462000856565b62000ae2565b62000856565b9050919050565b5f819050919050565b62000b268362000aeb565b62000b3e62000b358262000b12565b84845462000a8d565b825550505050565b5f90565b62000b5462000b46565b62000b6181848462000b1b565b505050565b5b8181101562000b885762000b7c5f8262000b4a565b60018101905062000b67565b5050565b601f82111562000bd75762000ba18162000a60565b62000bac8462000a72565b8101602085101562000bbc578190505b62000bd462000bcb8562000a72565b83018262000b66565b50505b505050565b5f82821c905092915050565b5f62000bf95f198460080262000bdc565b1980831691505092915050565b5f62000c13838362000be8565b9150826002028217905092915050565b62000c2e82620009f5565b67ffffffffffffffff81111562000c4a5762000c49620006d0565b5b62000c56825462000a2c565b62000c6382828562000b8c565b5f60209050601f83116001811462000c99575f841562000c84578287015190505b62000c90858262000c06565b86555062000cff565b601f19841662000ca98662000a60565b5f5b8281101562000cd25784890151825560018201915060208501945060208101905062000cab565b8683101562000cf2578489015162000cee601f89168262000be8565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f496e76616c696420696e7075742e0000000000000000000000000000000000005f82015250565b5f62000d4d600e8362000d07565b915062000d5a8262000d17565b602082019050919050565b5f6020820190508181035f83015262000d7e8162000d3f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000dbe8262000856565b915062000dcb8362000856565b925082820262000ddb8162000856565b9150828204841483151762000df55762000df462000d85565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000e358262000856565b915062000e428362000856565b92508262000e555762000e5462000dfc565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420746f6b656e20616d6f756e742e00000000000000000000005f82015250565b5f62000ec360158362000d07565b915062000ed08262000e8d565b602082019050919050565b5f6020820190508181035f83015262000ef48162000eb5565b9050919050565b7f496e697469616c20737570706c7920646f6573206e6f74206d617463682e00005f82015250565b5f62000f31601e8362000d07565b915062000f3e8262000efb565b602082019050919050565b5f6020820190508181035f83015262000f628162000f23565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000f9f601f8362000d07565b915062000fac8262000f69565b602082019050919050565b5f6020820190508181035f83015262000fd08162000f91565b9050919050565b5f62000fe38262000856565b915062000ff08362000856565b92508282019050808211156200100b576200100a62000d85565b5b92915050565b6200101c8162000856565b82525050565b5f602082019050620010375f83018462001011565b92915050565b60805160a051613a70620010825f395f8181610e1601528181611a5401528181611bb7015261200101525f8181610eba01528181611bd801526120220152613a705ff3fe60806040526004361061026a575f3560e01c80637437681e11610143578063a614ff75116100b5578063dcafac0911610079578063dcafac09146108ed578063dd62ed3e14610917578063f1320af214610953578063f2fde38b1461098f578063f8b45b05146109b7578063fd74d294146109e157610271565b8063a614ff751461080f578063a9059cbb14610837578063ae4abdc914610873578063cc1776d31461089b578063dc1052e2146108c557610271565b8063843da24811610107578063843da248146107035780638cd09d501461072d5780638da5cb5b14610755578063916a47f71461077f57806395d89b41146107a9578063a457c2d7146107d357610271565b80637437681e146106315780637514ac241461065b57806377d1440d146106855780637aceaa33146106af5780637b2feaaa146106d957610271565b806339509351116101dc5780634af90a57116101a05780634af90a57146105395780634f7041a514610563578063541958ff1461058d5780636d8813c5146105b557806370a08231146105df578063715018a61461061b57610271565b806339509351146104475780633ccfd60b1461048357806342966c68146104995780634551bbe9146104c15780634a0da673146104fd57610271565b806322ab155e1161022e57806322ab155e1461033957806323b872dd146103635780632dc0562d1461039f578063313ce567146103c95780633268cc56146103f3578063378dc3dc1461041d57610271565b80630210a83d14610275578063046a2a801461027f57806306fdde03146102a9578063095ea7b3146102d357806318160ddd1461030f57610271565b3661027157005b5f80fd5b61027d610a0b565b005b34801561028a575f80fd5b50610293610d47565b6040516102a091906128be565b60405180910390f35b3480156102b4575f80fd5b506102bd610d59565b6040516102ca9190612961565b60405180910390f35b3480156102de575f80fd5b506102f960048036038101906102f49190612a1f565b610de9565b60405161030691906128be565b60405180910390f35b34801561031a575f80fd5b50610323610e0b565b6040516103309190612a6c565b60405180910390f35b348015610344575f80fd5b5061034d610e14565b60405161035a9190612a6c565b60405180910390f35b34801561036e575f80fd5b5061038960048036038101906103849190612a85565b610e38565b60405161039691906128be565b60405180910390f35b3480156103aa575f80fd5b506103b3610e66565b6040516103c09190612ae4565b60405180910390f35b3480156103d4575f80fd5b506103dd610e8b565b6040516103ea9190612b18565b60405180910390f35b3480156103fe575f80fd5b50610407610e93565b6040516104149190612ae4565b60405180910390f35b348015610428575f80fd5b50610431610eb8565b60405161043e9190612a6c565b60405180910390f35b348015610452575f80fd5b5061046d60048036038101906104689190612a1f565b610edc565b60405161047a91906128be565b60405180910390f35b34801561048e575f80fd5b50610497610f12565b005b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612b31565b610f60565b005b3480156104cc575f80fd5b506104e760048036038101906104e29190612b5c565b610f6d565b6040516104f49190612a6c565b60405180910390f35b348015610508575f80fd5b50610523600480360381019061051e9190612b5c565b610f82565b60405161053091906128be565b60405180910390f35b348015610544575f80fd5b5061054d610f9f565b60405161055a9190612a6c565b60405180910390f35b34801561056e575f80fd5b50610577610fa5565b6040516105849190612a6c565b60405180910390f35b348015610598575f80fd5b506105b360048036038101906105ae9190612bb1565b610fab565b005b3480156105c0575f80fd5b506105c9610fd0565b6040516105d69190612a6c565b60405180910390f35b3480156105ea575f80fd5b5061060560048036038101906106009190612b5c565b610fd6565b6040516106129190612a6c565b60405180910390f35b348015610626575f80fd5b5061062f61101b565b005b34801561063c575f80fd5b5061064561102e565b6040516106529190612a6c565b60405180910390f35b348015610666575f80fd5b5061066f611034565b60405161067c91906128be565b60405180910390f35b348015610690575f80fd5b50610699611047565b6040516106a69190612a6c565b60405180910390f35b3480156106ba575f80fd5b506106c361104d565b6040516106d09190612a6c565b60405180910390f35b3480156106e4575f80fd5b506106ed611053565b6040516106fa9190612a6c565b60405180910390f35b34801561070e575f80fd5b50610717611059565b60405161072491906128be565b60405180910390f35b348015610738575f80fd5b50610753600480360381019061074e9190612b31565b61106c565b005b348015610760575f80fd5b506107696110c3565b6040516107769190612ae4565b60405180910390f35b34801561078a575f80fd5b506107936110eb565b6040516107a09190612a6c565b60405180910390f35b3480156107b4575f80fd5b506107bd6110f1565b6040516107ca9190612961565b60405180910390f35b3480156107de575f80fd5b506107f960048036038101906107f49190612a1f565b611181565b60405161080691906128be565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190612bb1565b6111f6565b005b348015610842575f80fd5b5061085d60048036038101906108589190612a1f565b61121a565b60405161086a91906128be565b60405180910390f35b34801561087e575f80fd5b5061089960048036038101906108949190612bb1565b61123c565b005b3480156108a6575f80fd5b506108af611261565b6040516108bc9190612a6c565b60405180910390f35b3480156108d0575f80fd5b506108eb60048036038101906108e69190612b31565b611267565b005b3480156108f8575f80fd5b506109016112be565b60405161090e9190612a6c565b60405180910390f35b348015610922575f80fd5b5061093d60048036038101906109389190612bdc565b6112c4565b60405161094a9190612a6c565b60405180910390f35b34801561095e575f80fd5b5061097960048036038101906109749190612b5c565b611346565b60405161098691906128be565b60405180910390f35b34801561099a575f80fd5b506109b560048036038101906109b09190612b5c565b611363565b005b3480156109c2575f80fd5b506109cb6113e5565b6040516109d89190612a6c565b60405180910390f35b3480156109ec575f80fd5b506109f56113eb565b604051610a029190612a6c565b60405180910390f35b610a136113f1565b5f60075414610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90612c64565b60405180910390fd5b5f60085414610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290612c64565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610aed3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f1961146f565b5f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5b9190612c96565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be49190612c96565b6040518363ffffffff1660e01b8152600401610c01929190612cc1565b6020604051808303815f875af1158015610c1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c419190612c96565b9050600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610cbf30610fd6565b5f803361038442610cd09190612d15565b6040518863ffffffff1660e01b8152600401610cf196959493929190612d8a565b60606040518083038185885af1158015610d0d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d329190612dfd565b50505043600781905550426008819055505050565b60115f9054906101000a900460ff1681565b606060038054610d6890612e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9490612e7a565b8015610ddf5780601f10610db657610100808354040283529160200191610ddf565b820191905f5260205f20905b815481529060010190602001808311610dc257829003601f168201915b5050505050905090565b5f80610df3611632565b9050610e0081858561146f565b600191505092915050565b5f600254905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f80610e42611632565b9050610e4f858285611639565b610e5a8585856116c4565b60019150509392505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f80610ee6611632565b9050610f07818585610ef885896112c4565b610f029190612d15565b61146f565b600191505092915050565b610f1a6113f1565b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610f5d573d5f803e3d5ffd5b50565b610f6a3382612179565b50565b6015602052805f5260405f205f915090505481565b6017602052805f5260405f205f915054906101000a900460ff1681565b60065481565b600b5481565b610fb36113f1565b80601160016101000a81548160ff02191690831515021790555050565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110236113f1565b61102c5f61233c565b565b600f5481565b601160019054906101000a900460ff1681565b60135481565b60145481565b60075481565b601160029054906101000a900460ff1681565b6110746113f1565b600a548111156110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090612ef4565b60405180910390fd5b80600c8190555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606004805461110090612e7a565b80601f016020809104026020016040519081016040528092919081815260200182805461112c90612e7a565b80156111775780601f1061114e57610100808354040283529160200191611177565b820191905f5260205f20905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b5f8061118b611632565b90505f61119882866112c4565b9050838110156111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490612f82565b60405180910390fd5b6111ea828686840361146f565b60019250505092915050565b6111fe6113f1565b8060115f6101000a81548160ff02191690831515021790555050565b5f80611224611632565b90506112318185856116c4565b600191505092915050565b6112446113f1565b80601160026101000a81548160ff02191690831515021790555050565b600c5481565b61126f6113f1565b600a548111156112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90612ef4565b60405180910390fd5b80600b8190555050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6016602052805f5260405f205f915054906101000a900460ff1681565b61136b6113f1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090613010565b60405180910390fd5b6113e28161233c565b50565b600e5481565b60085481565b6113f9611632565b73ffffffffffffffffffffffffffffffffffffffff166114176110c3565b73ffffffffffffffffffffffffffffffffffffffff161461146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490613078565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490613106565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290613194565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116259190612a6c565b60405180910390a3505050565b5f33905090565b5f61164484846112c4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116be57818110156116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a7906131fc565b60405180910390fd5b6116bd848484840361146f565b5b50505050565b5f8190505f60075414806116d957505f600854145b15611783573073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061174357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990613264565b60405180910390fd5b5b5f6006546007546117949190612d15565b431115905060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611834575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611eb6575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806118d5575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156118e2575f9050611a51565b818015611935575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611988575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561199857620173189050611a50565b60175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156119f157600b549050611a4f565b60175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a4a57600c549050611a4e565b5f90505b5b5b5b5f7f00000000000000000000000000000000000000000000000000000000000000008286611a7f9190613282565b611a8991906132f0565b90508085611a979190613320565b9350611aa48730836123ff565b8060125f828254611ab59190612d15565b9250508190555082158015611b11575060165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611eb357601160019054906101000a900460ff161580611baf575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bae57503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b5b80611c1257507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000600f54611c049190613282565b611c0e91906132f0565b8511155b611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c489061339d565b60405180910390fd5b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611cec575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611eb257601160029054906101000a900460ff161580611d53575060175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ddb575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611dda57503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b5b80611e30575060105460155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205442611e2d9190613320565b10155b611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6690613405565b60405180910390fd5b4260155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b50505b80158015611f0b575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611f5e575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120af5760115f9054906101000a900460ff1680611fc3575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ff957503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061206f57507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000600e5461204e9190613282565b61205891906132f0565b8261206286610fd6565b61206c9190612d15565b11155b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a590613493565b60405180910390fd5b5b60175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561210757505f601254115b801561212157506013546014544261211f9190613320565b115b1561216757426014819055505f60125490505f60128190555061216581600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661266b565b505b6121728585846123ff565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90613521565b60405180910390fd5b6121f2825f8361289a565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c906135af565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123249190612a6c565b60405180910390a3612337835f8461289f565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124649061363d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906136cb565b60405180910390fd5b6124e683838361289a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090613759565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126529190612a6c565b60405180910390a361266584848461289f565b50505050565b61267430610fd6565b8211156126875761268430610fd6565b91505b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600267ffffffffffffffff8111156126c8576126c7613777565b5b6040519080825280602002602001820160405280156126f65781602001602082028036833780820191505090505b50905030815f8151811061270d5761270c6137a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612790573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b49190612c96565b816001815181106127c8576127c76137a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166318cbafe5855f8487610384426128309190612d15565b6040518663ffffffff1660e01b8152600401612850959493929190613888565b5f604051808303815f875af115801561286b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061289391906139f3565b5050505050565b505050565b505050565b5f8115159050919050565b6128b8816128a4565b82525050565b5f6020820190506128d15f8301846128af565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561290e5780820151818401526020810190506128f3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612933826128d7565b61293d81856128e1565b935061294d8185602086016128f1565b61295681612919565b840191505092915050565b5f6020820190508181035f8301526129798184612929565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129bb82612992565b9050919050565b6129cb816129b1565b81146129d5575f80fd5b50565b5f813590506129e6816129c2565b92915050565b5f819050919050565b6129fe816129ec565b8114612a08575f80fd5b50565b5f81359050612a19816129f5565b92915050565b5f8060408385031215612a3557612a3461298a565b5b5f612a42858286016129d8565b9250506020612a5385828601612a0b565b9150509250929050565b612a66816129ec565b82525050565b5f602082019050612a7f5f830184612a5d565b92915050565b5f805f60608486031215612a9c57612a9b61298a565b5b5f612aa9868287016129d8565b9350506020612aba868287016129d8565b9250506040612acb86828701612a0b565b9150509250925092565b612ade816129b1565b82525050565b5f602082019050612af75f830184612ad5565b92915050565b5f60ff82169050919050565b612b1281612afd565b82525050565b5f602082019050612b2b5f830184612b09565b92915050565b5f60208284031215612b4657612b4561298a565b5b5f612b5384828501612a0b565b91505092915050565b5f60208284031215612b7157612b7061298a565b5b5f612b7e848285016129d8565b91505092915050565b612b90816128a4565b8114612b9a575f80fd5b50565b5f81359050612bab81612b87565b92915050565b5f60208284031215612bc657612bc561298a565b5b5f612bd384828501612b9d565b91505092915050565b5f8060408385031215612bf257612bf161298a565b5b5f612bff858286016129d8565b9250506020612c10858286016129d8565b9150509250929050565b7f4c697175696469747920616c72656164792061646465642e00000000000000005f82015250565b5f612c4e6018836128e1565b9150612c5982612c1a565b602082019050919050565b5f6020820190508181035f830152612c7b81612c42565b9050919050565b5f81519050612c90816129c2565b92915050565b5f60208284031215612cab57612caa61298a565b5b5f612cb884828501612c82565b91505092915050565b5f604082019050612cd45f830185612ad5565b612ce16020830184612ad5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d1f826129ec565b9150612d2a836129ec565b9250828201905080821115612d4257612d41612ce8565b5b92915050565b5f819050919050565b5f819050919050565b5f612d74612d6f612d6a84612d48565b612d51565b6129ec565b9050919050565b612d8481612d5a565b82525050565b5f60c082019050612d9d5f830189612ad5565b612daa6020830188612a5d565b612db76040830187612d7b565b612dc46060830186612d7b565b612dd16080830185612ad5565b612dde60a0830184612a5d565b979650505050505050565b5f81519050612df7816129f5565b92915050565b5f805f60608486031215612e1457612e1361298a565b5b5f612e2186828701612de9565b9350506020612e3286828701612de9565b9250506040612e4386828701612de9565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e9157607f821691505b602082108103612ea457612ea3612e4d565b5b50919050565b7f5461782065786365656473206d61785461782e000000000000000000000000005f82015250565b5f612ede6013836128e1565b9150612ee982612eaa565b602082019050919050565b5f6020820190508181035f830152612f0b81612ed2565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612f6c6025836128e1565b9150612f7782612f12565b604082019050919050565b5f6020820190508181035f830152612f9981612f60565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ffa6026836128e1565b915061300582612fa0565b604082019050919050565b5f6020820190508181035f83015261302781612fee565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6130626020836128e1565b915061306d8261302e565b602082019050919050565b5f6020820190508181035f83015261308f81613056565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6130f06024836128e1565b91506130fb82613096565b604082019050919050565b5f6020820190508181035f83015261311d816130e4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61317e6022836128e1565b915061318982613124565b604082019050919050565b5f6020820190508181035f8301526131ab81613172565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6131e6601d836128e1565b91506131f1826131b2565b602082019050919050565b5f6020820190508181035f830152613213816131da565b9050919050565b7f4c6971756964697479206e6f742061646465642e0000000000000000000000005f82015250565b5f61324e6014836128e1565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b5f61328c826129ec565b9150613297836129ec565b92508282026132a5816129ec565b915082820484148315176132bc576132bb612ce8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6132fa826129ec565b9150613305836129ec565b925082613315576133146132c3565b5b828204905092915050565b5f61332a826129ec565b9150613335836129ec565b925082820390508181111561334d5761334c612ce8565b5b92915050565b7f5472616e7366657220616d6f756e742065786365656473206d617854782e00005f82015250565b5f613387601e836128e1565b915061339282613353565b602082019050919050565b5f6020820190508181035f8301526133b48161337b565b9050919050565b7f5472616e7366657220636f6f6c646f776e206e6f7420657870697265642e00005f82015250565b5f6133ef601e836128e1565b91506133fa826133bb565b602082019050919050565b5f6020820190508181035f83015261341c816133e3565b9050919050565b7f526563697069656e742077616c6c65742062616c616e636520657863656564735f8201527f206d617857616c6c65742e000000000000000000000000000000000000000000602082015250565b5f61347d602b836128e1565b915061348882613423565b604082019050919050565b5f6020820190508181035f8301526134aa81613471565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61350b6021836128e1565b9150613516826134b1565b604082019050919050565b5f6020820190508181035f830152613538816134ff565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135996022836128e1565b91506135a48261353f565b604082019050919050565b5f6020820190508181035f8301526135c68161358d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136276025836128e1565b9150613632826135cd565b604082019050919050565b5f6020820190508181035f8301526136548161361b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6136b56023836128e1565b91506136c08261365b565b604082019050919050565b5f6020820190508181035f8301526136e2816136a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6137436026836128e1565b915061374e826136e9565b604082019050919050565b5f6020820190508181035f83015261377081613737565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613803816129b1565b82525050565b5f61381483836137fa565b60208301905092915050565b5f602082019050919050565b5f613836826137d1565b61384081856137db565b935061384b836137eb565b805f5b8381101561387b5781516138628882613809565b975061386d83613820565b92505060018101905061384e565b5085935050505092915050565b5f60a08201905061389b5f830188612a5d565b6138a86020830187612d7b565b81810360408301526138ba818661382c565b90506138c96060830185612ad5565b6138d66080830184612a5d565b9695505050505050565b5f80fd5b6138ed82612919565b810181811067ffffffffffffffff8211171561390c5761390b613777565b5b80604052505050565b5f61391e612981565b905061392a82826138e4565b919050565b5f67ffffffffffffffff82111561394957613948613777565b5b602082029050602081019050919050565b5f80fd5b5f61397061396b8461392f565b613915565b905080838252602082019050602084028301858111156139935761399261395a565b5b835b818110156139bc57806139a88882612de9565b845260208401935050602081019050613995565b5050509392505050565b5f82601f8301126139da576139d96138e0565b5b81516139ea84826020860161395e565b91505092915050565b5f60208284031215613a0857613a0761298a565b5b5f82015167ffffffffffffffff811115613a2557613a2461298e565b5b613a31848285016139c6565b9150509291505056fea26469706673582212209c91dda5885e6484fbf6a60e34980e30009c04abf1841ea8a46f80893c25ef6064736f6c634300081800330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000079aa3f4640e41369ac2b059ac6dde172b214b5f600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000004f68ca6d8cd91c60000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000079aa3f4640e41369ac2b059ac6dde172b214b5f600000000000000000000000031f01731b5f1203f7ed5c12bd9c43ead6ba53b0d000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000001a784379d99db42000000

Deployed Bytecode

0x60806040526004361061026a575f3560e01c80637437681e11610143578063a614ff75116100b5578063dcafac0911610079578063dcafac09146108ed578063dd62ed3e14610917578063f1320af214610953578063f2fde38b1461098f578063f8b45b05146109b7578063fd74d294146109e157610271565b8063a614ff751461080f578063a9059cbb14610837578063ae4abdc914610873578063cc1776d31461089b578063dc1052e2146108c557610271565b8063843da24811610107578063843da248146107035780638cd09d501461072d5780638da5cb5b14610755578063916a47f71461077f57806395d89b41146107a9578063a457c2d7146107d357610271565b80637437681e146106315780637514ac241461065b57806377d1440d146106855780637aceaa33146106af5780637b2feaaa146106d957610271565b806339509351116101dc5780634af90a57116101a05780634af90a57146105395780634f7041a514610563578063541958ff1461058d5780636d8813c5146105b557806370a08231146105df578063715018a61461061b57610271565b806339509351146104475780633ccfd60b1461048357806342966c68146104995780634551bbe9146104c15780634a0da673146104fd57610271565b806322ab155e1161022e57806322ab155e1461033957806323b872dd146103635780632dc0562d1461039f578063313ce567146103c95780633268cc56146103f3578063378dc3dc1461041d57610271565b80630210a83d14610275578063046a2a801461027f57806306fdde03146102a9578063095ea7b3146102d357806318160ddd1461030f57610271565b3661027157005b5f80fd5b61027d610a0b565b005b34801561028a575f80fd5b50610293610d47565b6040516102a091906128be565b60405180910390f35b3480156102b4575f80fd5b506102bd610d59565b6040516102ca9190612961565b60405180910390f35b3480156102de575f80fd5b506102f960048036038101906102f49190612a1f565b610de9565b60405161030691906128be565b60405180910390f35b34801561031a575f80fd5b50610323610e0b565b6040516103309190612a6c565b60405180910390f35b348015610344575f80fd5b5061034d610e14565b60405161035a9190612a6c565b60405180910390f35b34801561036e575f80fd5b5061038960048036038101906103849190612a85565b610e38565b60405161039691906128be565b60405180910390f35b3480156103aa575f80fd5b506103b3610e66565b6040516103c09190612ae4565b60405180910390f35b3480156103d4575f80fd5b506103dd610e8b565b6040516103ea9190612b18565b60405180910390f35b3480156103fe575f80fd5b50610407610e93565b6040516104149190612ae4565b60405180910390f35b348015610428575f80fd5b50610431610eb8565b60405161043e9190612a6c565b60405180910390f35b348015610452575f80fd5b5061046d60048036038101906104689190612a1f565b610edc565b60405161047a91906128be565b60405180910390f35b34801561048e575f80fd5b50610497610f12565b005b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612b31565b610f60565b005b3480156104cc575f80fd5b506104e760048036038101906104e29190612b5c565b610f6d565b6040516104f49190612a6c565b60405180910390f35b348015610508575f80fd5b50610523600480360381019061051e9190612b5c565b610f82565b60405161053091906128be565b60405180910390f35b348015610544575f80fd5b5061054d610f9f565b60405161055a9190612a6c565b60405180910390f35b34801561056e575f80fd5b50610577610fa5565b6040516105849190612a6c565b60405180910390f35b348015610598575f80fd5b506105b360048036038101906105ae9190612bb1565b610fab565b005b3480156105c0575f80fd5b506105c9610fd0565b6040516105d69190612a6c565b60405180910390f35b3480156105ea575f80fd5b5061060560048036038101906106009190612b5c565b610fd6565b6040516106129190612a6c565b60405180910390f35b348015610626575f80fd5b5061062f61101b565b005b34801561063c575f80fd5b5061064561102e565b6040516106529190612a6c565b60405180910390f35b348015610666575f80fd5b5061066f611034565b60405161067c91906128be565b60405180910390f35b348015610690575f80fd5b50610699611047565b6040516106a69190612a6c565b60405180910390f35b3480156106ba575f80fd5b506106c361104d565b6040516106d09190612a6c565b60405180910390f35b3480156106e4575f80fd5b506106ed611053565b6040516106fa9190612a6c565b60405180910390f35b34801561070e575f80fd5b50610717611059565b60405161072491906128be565b60405180910390f35b348015610738575f80fd5b50610753600480360381019061074e9190612b31565b61106c565b005b348015610760575f80fd5b506107696110c3565b6040516107769190612ae4565b60405180910390f35b34801561078a575f80fd5b506107936110eb565b6040516107a09190612a6c565b60405180910390f35b3480156107b4575f80fd5b506107bd6110f1565b6040516107ca9190612961565b60405180910390f35b3480156107de575f80fd5b506107f960048036038101906107f49190612a1f565b611181565b60405161080691906128be565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190612bb1565b6111f6565b005b348015610842575f80fd5b5061085d60048036038101906108589190612a1f565b61121a565b60405161086a91906128be565b60405180910390f35b34801561087e575f80fd5b5061089960048036038101906108949190612bb1565b61123c565b005b3480156108a6575f80fd5b506108af611261565b6040516108bc9190612a6c565b60405180910390f35b3480156108d0575f80fd5b506108eb60048036038101906108e69190612b31565b611267565b005b3480156108f8575f80fd5b506109016112be565b60405161090e9190612a6c565b60405180910390f35b348015610922575f80fd5b5061093d60048036038101906109389190612bdc565b6112c4565b60405161094a9190612a6c565b60405180910390f35b34801561095e575f80fd5b5061097960048036038101906109749190612b5c565b611346565b60405161098691906128be565b60405180910390f35b34801561099a575f80fd5b506109b560048036038101906109b09190612b5c565b611363565b005b3480156109c2575f80fd5b506109cb6113e5565b6040516109d89190612a6c565b60405180910390f35b3480156109ec575f80fd5b506109f56113eb565b604051610a029190612a6c565b60405180910390f35b610a136113f1565b5f60075414610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90612c64565b60405180910390fd5b5f60085414610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290612c64565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610aed3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f1961146f565b5f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5b9190612c96565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be49190612c96565b6040518363ffffffff1660e01b8152600401610c01929190612cc1565b6020604051808303815f875af1158015610c1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c419190612c96565b9050600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610cbf30610fd6565b5f803361038442610cd09190612d15565b6040518863ffffffff1660e01b8152600401610cf196959493929190612d8a565b60606040518083038185885af1158015610d0d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d329190612dfd565b50505043600781905550426008819055505050565b60115f9054906101000a900460ff1681565b606060038054610d6890612e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9490612e7a565b8015610ddf5780601f10610db657610100808354040283529160200191610ddf565b820191905f5260205f20905b815481529060010190602001808311610dc257829003601f168201915b5050505050905090565b5f80610df3611632565b9050610e0081858561146f565b600191505092915050565b5f600254905090565b7f00000000000000000000000000000000000000000000000000000000000186a081565b5f80610e42611632565b9050610e4f858285611639565b610e5a8585856116c4565b60019150509392505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000081565b5f80610ee6611632565b9050610f07818585610ef885896112c4565b610f029190612d15565b61146f565b600191505092915050565b610f1a6113f1565b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610f5d573d5f803e3d5ffd5b50565b610f6a3382612179565b50565b6015602052805f5260405f205f915090505481565b6017602052805f5260405f205f915054906101000a900460ff1681565b60065481565b600b5481565b610fb36113f1565b80601160016101000a81548160ff02191690831515021790555050565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110236113f1565b61102c5f61233c565b565b600f5481565b601160019054906101000a900460ff1681565b60135481565b60145481565b60075481565b601160029054906101000a900460ff1681565b6110746113f1565b600a548111156110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090612ef4565b60405180910390fd5b80600c8190555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606004805461110090612e7a565b80601f016020809104026020016040519081016040528092919081815260200182805461112c90612e7a565b80156111775780601f1061114e57610100808354040283529160200191611177565b820191905f5260205f20905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b5f8061118b611632565b90505f61119882866112c4565b9050838110156111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490612f82565b60405180910390fd5b6111ea828686840361146f565b60019250505092915050565b6111fe6113f1565b8060115f6101000a81548160ff02191690831515021790555050565b5f80611224611632565b90506112318185856116c4565b600191505092915050565b6112446113f1565b80601160026101000a81548160ff02191690831515021790555050565b600c5481565b61126f6113f1565b600a548111156112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90612ef4565b60405180910390fd5b80600b8190555050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6016602052805f5260405f205f915054906101000a900460ff1681565b61136b6113f1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090613010565b60405180910390fd5b6113e28161233c565b50565b600e5481565b60085481565b6113f9611632565b73ffffffffffffffffffffffffffffffffffffffff166114176110c3565b73ffffffffffffffffffffffffffffffffffffffff161461146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490613078565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490613106565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290613194565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116259190612a6c565b60405180910390a3505050565b5f33905090565b5f61164484846112c4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116be57818110156116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a7906131fc565b60405180910390fd5b6116bd848484840361146f565b5b50505050565b5f8190505f60075414806116d957505f600854145b15611783573073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061174357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990613264565b60405180910390fd5b5b5f6006546007546117949190612d15565b431115905060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611834575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611eb6575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806118d5575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156118e2575f9050611a51565b818015611935575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611988575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561199857620173189050611a50565b60175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156119f157600b549050611a4f565b60175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a4a57600c549050611a4e565b5f90505b5b5b5b5f7f00000000000000000000000000000000000000000000000000000000000186a08286611a7f9190613282565b611a8991906132f0565b90508085611a979190613320565b9350611aa48730836123ff565b8060125f828254611ab59190612d15565b9250508190555082158015611b11575060165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611eb357601160019054906101000a900460ff161580611baf575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bae57503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b5b80611c1257507f00000000000000000000000000000000000000000000000000000000000186a07f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000600f54611c049190613282565b611c0e91906132f0565b8511155b611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c489061339d565b60405180910390fd5b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611cec575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611eb257601160029054906101000a900460ff161580611d53575060175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ddb575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611dda57503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b5b80611e30575060105460155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205442611e2d9190613320565b10155b611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6690613405565b60405180910390fd5b4260155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b50505b80158015611f0b575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611f5e575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120af5760115f9054906101000a900460ff1680611fc3575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ff957503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061206f57507f00000000000000000000000000000000000000000000000000000000000186a07f00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000600e5461204e9190613282565b61205891906132f0565b8261206286610fd6565b61206c9190612d15565b11155b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a590613493565b60405180910390fd5b5b60175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561210757505f601254115b801561212157506013546014544261211f9190613320565b115b1561216757426014819055505f60125490505f60128190555061216581600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661266b565b505b6121728585846123ff565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90613521565b60405180910390fd5b6121f2825f8361289a565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c906135af565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123249190612a6c565b60405180910390a3612337835f8461289f565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124649061363d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906136cb565b60405180910390fd5b6124e683838361289a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090613759565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126529190612a6c565b60405180910390a361266584848461289f565b50505050565b61267430610fd6565b8211156126875761268430610fd6565b91505b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f600267ffffffffffffffff8111156126c8576126c7613777565b5b6040519080825280602002602001820160405280156126f65781602001602082028036833780820191505090505b50905030815f8151811061270d5761270c6137a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612790573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b49190612c96565b816001815181106127c8576127c76137a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166318cbafe5855f8487610384426128309190612d15565b6040518663ffffffff1660e01b8152600401612850959493929190613888565b5f604051808303815f875af115801561286b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061289391906139f3565b5050505050565b505050565b505050565b5f8115159050919050565b6128b8816128a4565b82525050565b5f6020820190506128d15f8301846128af565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561290e5780820151818401526020810190506128f3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612933826128d7565b61293d81856128e1565b935061294d8185602086016128f1565b61295681612919565b840191505092915050565b5f6020820190508181035f8301526129798184612929565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129bb82612992565b9050919050565b6129cb816129b1565b81146129d5575f80fd5b50565b5f813590506129e6816129c2565b92915050565b5f819050919050565b6129fe816129ec565b8114612a08575f80fd5b50565b5f81359050612a19816129f5565b92915050565b5f8060408385031215612a3557612a3461298a565b5b5f612a42858286016129d8565b9250506020612a5385828601612a0b565b9150509250929050565b612a66816129ec565b82525050565b5f602082019050612a7f5f830184612a5d565b92915050565b5f805f60608486031215612a9c57612a9b61298a565b5b5f612aa9868287016129d8565b9350506020612aba868287016129d8565b9250506040612acb86828701612a0b565b9150509250925092565b612ade816129b1565b82525050565b5f602082019050612af75f830184612ad5565b92915050565b5f60ff82169050919050565b612b1281612afd565b82525050565b5f602082019050612b2b5f830184612b09565b92915050565b5f60208284031215612b4657612b4561298a565b5b5f612b5384828501612a0b565b91505092915050565b5f60208284031215612b7157612b7061298a565b5b5f612b7e848285016129d8565b91505092915050565b612b90816128a4565b8114612b9a575f80fd5b50565b5f81359050612bab81612b87565b92915050565b5f60208284031215612bc657612bc561298a565b5b5f612bd384828501612b9d565b91505092915050565b5f8060408385031215612bf257612bf161298a565b5b5f612bff858286016129d8565b9250506020612c10858286016129d8565b9150509250929050565b7f4c697175696469747920616c72656164792061646465642e00000000000000005f82015250565b5f612c4e6018836128e1565b9150612c5982612c1a565b602082019050919050565b5f6020820190508181035f830152612c7b81612c42565b9050919050565b5f81519050612c90816129c2565b92915050565b5f60208284031215612cab57612caa61298a565b5b5f612cb884828501612c82565b91505092915050565b5f604082019050612cd45f830185612ad5565b612ce16020830184612ad5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d1f826129ec565b9150612d2a836129ec565b9250828201905080821115612d4257612d41612ce8565b5b92915050565b5f819050919050565b5f819050919050565b5f612d74612d6f612d6a84612d48565b612d51565b6129ec565b9050919050565b612d8481612d5a565b82525050565b5f60c082019050612d9d5f830189612ad5565b612daa6020830188612a5d565b612db76040830187612d7b565b612dc46060830186612d7b565b612dd16080830185612ad5565b612dde60a0830184612a5d565b979650505050505050565b5f81519050612df7816129f5565b92915050565b5f805f60608486031215612e1457612e1361298a565b5b5f612e2186828701612de9565b9350506020612e3286828701612de9565b9250506040612e4386828701612de9565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e9157607f821691505b602082108103612ea457612ea3612e4d565b5b50919050565b7f5461782065786365656473206d61785461782e000000000000000000000000005f82015250565b5f612ede6013836128e1565b9150612ee982612eaa565b602082019050919050565b5f6020820190508181035f830152612f0b81612ed2565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612f6c6025836128e1565b9150612f7782612f12565b604082019050919050565b5f6020820190508181035f830152612f9981612f60565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ffa6026836128e1565b915061300582612fa0565b604082019050919050565b5f6020820190508181035f83015261302781612fee565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6130626020836128e1565b915061306d8261302e565b602082019050919050565b5f6020820190508181035f83015261308f81613056565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6130f06024836128e1565b91506130fb82613096565b604082019050919050565b5f6020820190508181035f83015261311d816130e4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61317e6022836128e1565b915061318982613124565b604082019050919050565b5f6020820190508181035f8301526131ab81613172565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6131e6601d836128e1565b91506131f1826131b2565b602082019050919050565b5f6020820190508181035f830152613213816131da565b9050919050565b7f4c6971756964697479206e6f742061646465642e0000000000000000000000005f82015250565b5f61324e6014836128e1565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b5f61328c826129ec565b9150613297836129ec565b92508282026132a5816129ec565b915082820484148315176132bc576132bb612ce8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6132fa826129ec565b9150613305836129ec565b925082613315576133146132c3565b5b828204905092915050565b5f61332a826129ec565b9150613335836129ec565b925082820390508181111561334d5761334c612ce8565b5b92915050565b7f5472616e7366657220616d6f756e742065786365656473206d617854782e00005f82015250565b5f613387601e836128e1565b915061339282613353565b602082019050919050565b5f6020820190508181035f8301526133b48161337b565b9050919050565b7f5472616e7366657220636f6f6c646f776e206e6f7420657870697265642e00005f82015250565b5f6133ef601e836128e1565b91506133fa826133bb565b602082019050919050565b5f6020820190508181035f83015261341c816133e3565b9050919050565b7f526563697069656e742077616c6c65742062616c616e636520657863656564735f8201527f206d617857616c6c65742e000000000000000000000000000000000000000000602082015250565b5f61347d602b836128e1565b915061348882613423565b604082019050919050565b5f6020820190508181035f8301526134aa81613471565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61350b6021836128e1565b9150613516826134b1565b604082019050919050565b5f6020820190508181035f830152613538816134ff565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135996022836128e1565b91506135a48261353f565b604082019050919050565b5f6020820190508181035f8301526135c68161358d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136276025836128e1565b9150613632826135cd565b604082019050919050565b5f6020820190508181035f8301526136548161361b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6136b56023836128e1565b91506136c08261365b565b604082019050919050565b5f6020820190508181035f8301526136e2816136a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6137436026836128e1565b915061374e826136e9565b604082019050919050565b5f6020820190508181035f83015261377081613737565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613803816129b1565b82525050565b5f61381483836137fa565b60208301905092915050565b5f602082019050919050565b5f613836826137d1565b61384081856137db565b935061384b836137eb565b805f5b8381101561387b5781516138628882613809565b975061386d83613820565b92505060018101905061384e565b5085935050505092915050565b5f60a08201905061389b5f830188612a5d565b6138a86020830187612d7b565b81810360408301526138ba818661382c565b90506138c96060830185612ad5565b6138d66080830184612a5d565b9695505050505050565b5f80fd5b6138ed82612919565b810181811067ffffffffffffffff8211171561390c5761390b613777565b5b80604052505050565b5f61391e612981565b905061392a82826138e4565b919050565b5f67ffffffffffffffff82111561394957613948613777565b5b602082029050602081019050919050565b5f80fd5b5f61397061396b8461392f565b613915565b905080838252602082019050602084028301858111156139935761399261395a565b5b835b818110156139bc57806139a88882612de9565b845260208401935050602081019050613995565b5050509392505050565b5f82601f8301126139da576139d96138e0565b5b81516139ea84826020860161395e565b91505092915050565b5f60208284031215613a0857613a0761298a565b5b5f82015167ffffffffffffffff811115613a2557613a2461298e565b5b613a31848285016139c6565b9150509291505056fea26469706673582212209c91dda5885e6484fbf6a60e34980e30009c04abf1841ea8a46f80893c25ef6064736f6c63430008180033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000079aa3f4640e41369ac2b059ac6dde172b214b5f600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000004f68ca6d8cd91c60000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000079aa3f4640e41369ac2b059ac6dde172b214b5f600000000000000000000000031f01731b5f1203f7ed5c12bd9c43ead6ba53b0d000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000001a784379d99db42000000

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _taxReceiver (address): 0x79AA3F4640E41369ac2b059aC6dDe172B214B5f6
Arg [2] : wallets (address[]): 0x79AA3F4640E41369ac2b059aC6dDe172B214B5f6,0x31F01731b5F1203f7ED5c12bd9c43eaD6bA53B0D
Arg [3] : tokenAmounts (uint256[]): 2000000000000000000000000,2000000000000000000000000
Arg [4] : initialLiquidity (uint256): 96000000000000000000000000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000079aa3f4640e41369ac2b059ac6dde172b214b5f6
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000004f68ca6d8cd91c60000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 00000000000000000000000079aa3f4640e41369ac2b059ac6dde172b214b5f6
Arg [7] : 00000000000000000000000031f01731b5f1203f7ed5c12bd9c43ead6ba53b0d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [10] : 00000000000000000000000000000000000000000001a784379d99db42000000


Deployed Bytecode Sourcemap

26842:7238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29017:812;;;:::i;:::-;;27318:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15443:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17794:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16563:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26926:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18575:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27193:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16405:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27071:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26881:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19279:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30486:109;;;;;;;;;;;;;:::i;:::-;;30603:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27532:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27634:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26972:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27136:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30256:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27108:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16734:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8709:103;;;;;;;;;;;;;:::i;:::-;;27257:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27355:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27462:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27496;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27008:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27388:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29986:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8061:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27428:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15662:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20020:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30137:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17067:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30367:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27164:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29837:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27284:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17323:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27589:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8967:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27226:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27040;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29017:812;7947:13;:11;:13::i;:::-;29114:1:::1;29100:10;;:15;29092:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;29176:1;29163:9;;:14;29155:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29217:25;29264:13;;;;;;;;;;;29217:61;;29289:51;29306:4;29313:13;;;;;;;;;;;29337:1;29328:11;29289:8;:51::i;:::-;29351:12;29384:6;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29366:46;;;29435:4;29455:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29366:113;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29351:128;;29502:4;29490:3;:9;29494:4;29490:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;29517:6;:22;;;29547:21;29592:4;29612:24;29630:4;29612:9;:24::i;:::-;29651:1;29667::::0;29683:10:::1;29726;29708:15;:28;;;;:::i;:::-;29517:230;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29771:12;29758:10;:25;;;;29806:15;29794:9;:27;;;;29081:748;;29017:812::o:0;27318:30::-;;;;;;;;;;;;;:::o;15443:100::-;15497:13;15530:5;15523:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15443:100;:::o;17794:201::-;17877:4;17894:13;17910:12;:10;:12::i;:::-;17894:28;;17933:32;17942:5;17949:7;17958:6;17933:8;:32::i;:::-;17983:4;17976:11;;;17794:201;;;;:::o;16563:108::-;16624:7;16651:12;;16644:19;;16563:108;:::o;26926:39::-;;;:::o;18575:295::-;18706:4;18723:15;18741:12;:10;:12::i;:::-;18723:30;;18764:38;18780:4;18786:7;18795:6;18764:15;:38::i;:::-;18813:27;18823:4;18829:2;18833:6;18813:9;:27::i;:::-;18858:4;18851:11;;;18575:295;;;;;:::o;27193:24::-;;;;;;;;;;;;;:::o;16405:93::-;16463:5;16488:2;16481:9;;16405:93;:::o;27071:28::-;;;;;;;;;;;;;:::o;26881:38::-;;;:::o;19279:238::-;19367:4;19384:13;19400:12;:10;:12::i;:::-;19384:28;;19423:64;19432:5;19439:7;19476:10;19448:25;19458:5;19465:7;19448:9;:25::i;:::-;:38;;;;:::i;:::-;19423:8;:64::i;:::-;19505:4;19498:11;;;19279:238;;;;:::o;30486:109::-;7947:13;:11;:13::i;:::-;30544:10:::1;30536:28;;:51;30565:21;30536:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30486:109::o:0;30603:83::-;30653:25;30659:10;30671:6;30653:5;:25::i;:::-;30603:83;:::o;27532:50::-;;;;;;;;;;;;;;;;;:::o;27634:35::-;;;;;;;;;;;;;;;;;;;;;;:::o;26972:29::-;;;;:::o;27136:21::-;;;;:::o;30256:103::-;7947:13;:11;:13::i;:::-;30343:8:::1;30326:14;;:25;;;;;;;;;;;;;;;;;;30256:103:::0;:::o;27108:21::-;;;;:::o;16734:127::-;16808:7;16835:9;:18;16845:7;16835:18;;;;;;;;;;;;;;;;16828:25;;16734:127;;;:::o;8709:103::-;7947:13;:11;:13::i;:::-;8774:30:::1;8801:1;8774:18;:30::i;:::-;8709:103::o:0;27257:20::-;;;;:::o;27355:26::-;;;;;;;;;;;;;:::o;27462:27::-;;;;:::o;27496:::-;;;;:::o;27008:25::-;;;;:::o;27388:31::-;;;;;;;;;;;;;:::o;29986:143::-;7947:13;:11;:13::i;:::-;30066:6:::1;;30058:4;:14;;30050:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30117:4;30107:7;:14;;;;29986:143:::0;:::o;8061:87::-;8107:7;8134:6;;;;;;;;;;;8127:13;;8061:87;:::o;27428:27::-;;;;:::o;15662:104::-;15718:13;15751:7;15744:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15662:104;:::o;20020:436::-;20113:4;20130:13;20146:12;:10;:12::i;:::-;20130:28;;20169:24;20196:25;20206:5;20213:7;20196:9;:25::i;:::-;20169:52;;20260:15;20240:16;:35;;20232:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20353:60;20362:5;20369:7;20397:15;20378:16;:34;20353:8;:60::i;:::-;20444:4;20437:11;;;;20020:436;;;;:::o;30137:111::-;7947:13;:11;:13::i;:::-;30232:8:::1;30211:18;;:29;;;;;;;;;;;;;;;;;;30137:111:::0;:::o;17067:193::-;17146:4;17163:13;17179:12;:10;:12::i;:::-;17163:28;;17202;17212:5;17219:2;17223:6;17202:9;:28::i;:::-;17248:4;17241:11;;;17067:193;;;;:::o;30367:113::-;7947:13;:11;:13::i;:::-;30464:8:::1;30442:19;;:30;;;;;;;;;;;;;;;;;;30367:113:::0;:::o;27164:22::-;;;;:::o;29837:141::-;7947:13;:11;:13::i;:::-;29916:6:::1;;29908:4;:14;;29900:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29966:4;29957:6;:13;;;;29837:141:::0;:::o;27284:25::-;;;;:::o;17323:151::-;17412:7;17439:11;:18;17451:5;17439:18;;;;;;;;;;;;;;;:27;17458:7;17439:27;;;;;;;;;;;;;;;;17432:34;;17323:151;;;;:::o;27589:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;8967:201::-;7947:13;:11;:13::i;:::-;9076:1:::1;9056:22;;:8;:22;;::::0;9048:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9132:28;9151:8;9132:18;:28::i;:::-;8967:201:::0;:::o;27226:24::-;;;;:::o;27040:::-;;;;:::o;8226:132::-;8301:12;:10;:12::i;:::-;8290:23;;:7;:5;:7::i;:::-;:23;;;8282:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8226:132::o;24047:380::-;24200:1;24183:19;;:5;:19;;;24175:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24281:1;24262:21;;:7;:21;;;24254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24365:6;24335:11;:18;24347:5;24335:18;;;;;;;;;;;;;;;:27;24354:7;24335:27;;;;;;;;;;;;;;;:36;;;;24403:7;24387:32;;24396:5;24387:32;;;24412:6;24387:32;;;;;;:::i;:::-;;;;;;;;24047:380;;;:::o;6559:98::-;6612:7;6639:10;6632:17;;6559:98;:::o;24718:453::-;24853:24;24880:25;24890:5;24897:7;24880:9;:25::i;:::-;24853:52;;24940:17;24920:16;:37;24916:248;;25002:6;24982:16;:26;;24974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25086:51;25095:5;25102:7;25130:6;25111:16;:25;25086:8;:51::i;:::-;24916:248;24842:329;24718:453;;;:::o;30694:2768::-;30818:22;30843:6;30818:31;;30878:1;30864:10;;:15;:33;;;;30896:1;30883:9;;:14;30864:33;30860:192;;;30956:4;30940:21;;:4;:21;;;:44;;;;30979:4;30965:19;;:2;:19;;;30940:44;30914:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;30860:192;31062:15;31109:14;;31096:10;;:27;;;;:::i;:::-;31080:12;:43;;31062:61;;31138:3;:9;31142:4;31138:9;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;;31151:3;:7;31155:2;31151:7;;;;;;;;;;;;;;;;;;;;;;;;;31138:20;31134:1538;;;31175:15;31209:6;:12;31216:4;31209:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;31225:6;:10;31232:2;31225:10;;;;;;;;;;;;;;;;;;;;;;;;;31209:26;31205:381;;;31266:1;31256:11;;31205:381;;;31293:10;:23;;;;;31307:3;:9;31311:4;31307:9;;;;;;;;;;;;;;;;;;;;;;;;;31293:23;:38;;;;;31321:6;:10;31328:2;31321:10;;;;;;;;;;;;;;;;;;;;;;;;;31320:11;31293:38;31289:297;;;31362:6;31352:16;;31289:297;;;31401:3;:9;31405:4;31401:9;;;;;;;;;;;;;;;;;;;;;;;;;31397:189;;;31441:6;;31431:16;;31397:189;;;31473:3;:7;31477:2;31473:7;;;;;;;;;;;;;;;;;;;;;;;;;31469:117;;;31511:7;;31501:17;;31469:117;;;31569:1;31559:11;;31469:117;31397:189;31289:297;31205:381;31600:17;31641:14;31630:7;31621:6;:16;;;;:::i;:::-;31620:35;;;;:::i;:::-;31600:55;;31696:9;31687:6;:18;;;;:::i;:::-;31670:35;;31720:47;31736:4;31750;31757:9;31720:15;:47::i;:::-;31798:9;31782:12;;:25;;;;;;;:::i;:::-;;;;;;;;31827:10;31826:11;:28;;;;;31842:6;:12;31849:4;31842:12;;;;;;;;;;;;;;;;;;;;;;;;;31841:13;31826:28;31822:839;;;31906:14;;;;;;;;;;;31905:15;:78;;;;31950:3;:7;31954:2;31950:7;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;;31977:4;31961:21;;:4;:21;;;31950:32;31905:78;:157;;;;32048:14;32031:13;32023:5;;:21;;;;:::i;:::-;32022:40;;;;:::i;:::-;32012:6;:50;;31905:157;31875:261;;;;;;;;;;;;:::i;:::-;;;;;;;;;32159:3;:9;32163:4;32159:9;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;;32172:3;:7;32176:2;32172:7;;;;;;;;;;;;;;;;;;;;;;;;;32159:20;32155:491;;;32239:19;;;;;;;;;;;32238:20;:62;;;;32291:3;:9;32295:4;32291:9;;;;;;;;;;;;;;;;;;;;;;;;;32238:62;:129;;;;32334:3;:7;32338:2;32334:7;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;;32361:4;32345:21;;:4;:21;;;32334:32;32238:129;:244;;;;32472:10;;32418:15;:21;32434:4;32418:21;;;;;;;;;;;;;;;;32400:15;:39;;;;:::i;:::-;:82;;32238:244;32204:360;;;;;;;;;;;;:::i;:::-;;;;;;;;;32611:15;32587;:21;32603:4;32587:21;;;;;;;;;;;;;;;:39;;;;32155:491;31822:839;31160:1512;;31134:1538;32687:10;32686:11;:23;;;;;32702:3;:7;32706:2;32702:7;;;;;;;;;;;;;;;;;;;;;;;;;32701:8;32686:23;:38;;;;;32714:6;:10;32721:2;32714:10;;;;;;;;;;;;;;;;;;;;;;;;;32713:11;32686:38;32682:394;;;32767:18;;;;;;;;;;;:50;;;;32810:3;:7;32814:2;32810:7;;;;;;;;;;;;;;;;;;;;;;;;;32767:50;:94;;;;32856:4;32842:19;;:2;:19;;;32767:94;:218;;;;32971:14;32954:13;32942:9;;:25;;;;:::i;:::-;32941:44;;;;:::i;:::-;32902:14;32886:13;32896:2;32886:9;:13::i;:::-;:30;;;;:::i;:::-;:99;;32767:218;32741:323;;;;;;;;;;;;:::i;:::-;;;;;;;;;32682:394;33105:3;:9;33109:4;33105:9;;;;;;;;;;;;;;;;;;;;;;;;;33104:10;:43;;;;;33146:1;33131:12;;:16;33104:43;:105;;;;;33197:12;;33182;;33164:15;:30;;;;:::i;:::-;:45;33104:105;33086:317;;;33251:15;33236:12;:30;;;;33281:14;33298:12;;33281:29;;33340:1;33325:12;:16;;;;33356:35;33373:6;33381:9;;;;;;;;;;;33356:16;:35::i;:::-;33221:182;33086:317;33413:41;33429:4;33435:2;33439:14;33413:15;:41::i;:::-;30807:2655;;30694:2768;;;:::o;22934:675::-;23037:1;23018:21;;:7;:21;;;23010:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23090:49;23111:7;23128:1;23132:6;23090:20;:49::i;:::-;23152:22;23177:9;:18;23187:7;23177:18;;;;;;;;;;;;;;;;23152:43;;23232:6;23214:14;:24;;23206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23351:6;23334:14;:23;23313:9;:18;23323:7;23313:18;;;;;;;;;;;;;;;:44;;;;23468:6;23452:12;;:22;;;;;;;;;;;23529:1;23503:37;;23512:7;23503:37;;;23533:6;23503:37;;;;;;:::i;:::-;;;;;;;;23553:48;23573:7;23590:1;23594:6;23553:19;:48::i;:::-;22999:610;22934:675;;:::o;9328:191::-;9402:16;9421:6;;;;;;;;;;;9402:25;;9447:8;9438:6;;:17;;;;;;;;;;;;;;;;;;9502:8;9471:40;;9492:8;9471:40;;;;;;;;;;;;9391:128;9328:191;:::o;20926:840::-;21073:1;21057:18;;:4;:18;;;21049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21150:1;21136:16;;:2;:16;;;21128:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21205:38;21226:4;21232:2;21236:6;21205:20;:38::i;:::-;21256:19;21278:9;:15;21288:4;21278:15;;;;;;;;;;;;;;;;21256:37;;21327:6;21312:11;:21;;21304:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21444:6;21430:11;:20;21412:9;:15;21422:4;21412:15;;;;;;;;;;;;;;;:38;;;;21647:6;21630:9;:13;21640:2;21630:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;21697:2;21682:26;;21691:4;21682:26;;;21701:6;21682:26;;;;;;:::i;:::-;;;;;;;;21721:37;21741:4;21747:2;21751:6;21721:19;:37::i;:::-;21038:728;20926:840;;;:::o;33470:570::-;33573:24;33591:4;33573:9;:24::i;:::-;33559:11;:38;33555:109;;;33628:24;33646:4;33628:9;:24::i;:::-;33614:38;;33555:109;33674:25;33721:13;;;;;;;;;;;33674:61;;33746:21;33784:1;33770:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33746:40;;33815:4;33797;33802:1;33797:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33841:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33831:4;33836:1;33831:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33865:6;:28;;;33908:11;33934:1;33950:4;33969:9;34011:10;33993:15;:28;;;;:::i;:::-;33865:167;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33544:496;;33470:570;;:::o;25771:125::-;;;;:::o;26500:124::-;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1776:75::-;1809:6;1842:2;1836:9;1826:19;;1776:75;:::o;1857:117::-;1966:1;1963;1956:12;1980:117;2089:1;2086;2079:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:86::-;4810:7;4850:4;4843:5;4839:16;4828:27;;4775:86;;;:::o;4867:112::-;4950:22;4966:5;4950:22;:::i;:::-;4945:3;4938:35;4867:112;;:::o;4985:214::-;5074:4;5112:2;5101:9;5097:18;5089:26;;5125:67;5189:1;5178:9;5174:17;5165:6;5125:67;:::i;:::-;4985:214;;;;:::o;5205:329::-;5264:6;5313:2;5301:9;5292:7;5288:23;5284:32;5281:119;;;5319:79;;:::i;:::-;5281:119;5439:1;5464:53;5509:7;5500:6;5489:9;5485:22;5464:53;:::i;:::-;5454:63;;5410:117;5205:329;;;;:::o;5540:::-;5599:6;5648:2;5636:9;5627:7;5623:23;5619:32;5616:119;;;5654:79;;:::i;:::-;5616:119;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5540:329;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:323::-;6192:6;6241:2;6229:9;6220:7;6216:23;6212:32;6209:119;;;6247:79;;:::i;:::-;6209:119;6367:1;6392:50;6434:7;6425:6;6414:9;6410:22;6392:50;:::i;:::-;6382:60;;6338:114;6136:323;;;;:::o;6465:474::-;6533:6;6541;6590:2;6578:9;6569:7;6565:23;6561:32;6558:119;;;6596:79;;:::i;:::-;6558:119;6716:1;6741:53;6786:7;6777:6;6766:9;6762:22;6741:53;:::i;:::-;6731:63;;6687:117;6843:2;6869:53;6914:7;6905:6;6894:9;6890:22;6869:53;:::i;:::-;6859:63;;6814:118;6465:474;;;;;:::o;6945:174::-;7085:26;7081:1;7073:6;7069:14;7062:50;6945:174;:::o;7125:366::-;7267:3;7288:67;7352:2;7347:3;7288:67;:::i;:::-;7281:74;;7364:93;7453:3;7364:93;:::i;:::-;7482:2;7477:3;7473:12;7466:19;;7125:366;;;:::o;7497:419::-;7663:4;7701:2;7690:9;7686:18;7678:26;;7750:9;7744:4;7740:20;7736:1;7725:9;7721:17;7714:47;7778:131;7904:4;7778:131;:::i;:::-;7770:139;;7497:419;;;:::o;7922:143::-;7979:5;8010:6;8004:13;7995:22;;8026:33;8053:5;8026:33;:::i;:::-;7922:143;;;;:::o;8071:351::-;8141:6;8190:2;8178:9;8169:7;8165:23;8161:32;8158:119;;;8196:79;;:::i;:::-;8158:119;8316:1;8341:64;8397:7;8388:6;8377:9;8373:22;8341:64;:::i;:::-;8331:74;;8287:128;8071:351;;;;:::o;8428:332::-;8549:4;8587:2;8576:9;8572:18;8564:26;;8600:71;8668:1;8657:9;8653:17;8644:6;8600:71;:::i;:::-;8681:72;8749:2;8738:9;8734:18;8725:6;8681:72;:::i;:::-;8428:332;;;;;:::o;8766:180::-;8814:77;8811:1;8804:88;8911:4;8908:1;8901:15;8935:4;8932:1;8925:15;8952:191;8992:3;9011:20;9029:1;9011:20;:::i;:::-;9006:25;;9045:20;9063:1;9045:20;:::i;:::-;9040:25;;9088:1;9085;9081:9;9074:16;;9109:3;9106:1;9103:10;9100:36;;;9116:18;;:::i;:::-;9100:36;8952:191;;;;:::o;9149:85::-;9194:7;9223:5;9212:16;;9149:85;;;:::o;9240:60::-;9268:3;9289:5;9282:12;;9240:60;;;:::o;9306:158::-;9364:9;9397:61;9415:42;9424:32;9450:5;9424:32;:::i;:::-;9415:42;:::i;:::-;9397:61;:::i;:::-;9384:74;;9306:158;;;:::o;9470:147::-;9565:45;9604:5;9565:45;:::i;:::-;9560:3;9553:58;9470:147;;:::o;9623:807::-;9872:4;9910:3;9899:9;9895:19;9887:27;;9924:71;9992:1;9981:9;9977:17;9968:6;9924:71;:::i;:::-;10005:72;10073:2;10062:9;10058:18;10049:6;10005:72;:::i;:::-;10087:80;10163:2;10152:9;10148:18;10139:6;10087:80;:::i;:::-;10177;10253:2;10242:9;10238:18;10229:6;10177:80;:::i;:::-;10267:73;10335:3;10324:9;10320:19;10311:6;10267:73;:::i;:::-;10350;10418:3;10407:9;10403:19;10394:6;10350:73;:::i;:::-;9623:807;;;;;;;;;:::o;10436:143::-;10493:5;10524:6;10518:13;10509:22;;10540:33;10567:5;10540:33;:::i;:::-;10436:143;;;;:::o;10585:663::-;10673:6;10681;10689;10738:2;10726:9;10717:7;10713:23;10709:32;10706:119;;;10744:79;;:::i;:::-;10706:119;10864:1;10889:64;10945:7;10936:6;10925:9;10921:22;10889:64;:::i;:::-;10879:74;;10835:128;11002:2;11028:64;11084:7;11075:6;11064:9;11060:22;11028:64;:::i;:::-;11018:74;;10973:129;11141:2;11167:64;11223:7;11214:6;11203:9;11199:22;11167:64;:::i;:::-;11157:74;;11112:129;10585:663;;;;;:::o;11254:180::-;11302:77;11299:1;11292:88;11399:4;11396:1;11389:15;11423:4;11420:1;11413:15;11440:320;11484:6;11521:1;11515:4;11511:12;11501:22;;11568:1;11562:4;11558:12;11589:18;11579:81;;11645:4;11637:6;11633:17;11623:27;;11579:81;11707:2;11699:6;11696:14;11676:18;11673:38;11670:84;;11726:18;;:::i;:::-;11670:84;11491:269;11440:320;;;:::o;11766:169::-;11906:21;11902:1;11894:6;11890:14;11883:45;11766:169;:::o;11941:366::-;12083:3;12104:67;12168:2;12163:3;12104:67;:::i;:::-;12097:74;;12180:93;12269:3;12180:93;:::i;:::-;12298:2;12293:3;12289:12;12282:19;;11941:366;;;:::o;12313:419::-;12479:4;12517:2;12506:9;12502:18;12494:26;;12566:9;12560:4;12556:20;12552:1;12541:9;12537:17;12530:47;12594:131;12720:4;12594:131;:::i;:::-;12586:139;;12313:419;;;:::o;12738:224::-;12878:34;12874:1;12866:6;12862:14;12855:58;12947:7;12942:2;12934:6;12930:15;12923:32;12738:224;:::o;12968:366::-;13110:3;13131:67;13195:2;13190:3;13131:67;:::i;:::-;13124:74;;13207:93;13296:3;13207:93;:::i;:::-;13325:2;13320:3;13316:12;13309:19;;12968:366;;;:::o;13340:419::-;13506:4;13544:2;13533:9;13529:18;13521:26;;13593:9;13587:4;13583:20;13579:1;13568:9;13564:17;13557:47;13621:131;13747:4;13621:131;:::i;:::-;13613:139;;13340:419;;;:::o;13765:225::-;13905:34;13901:1;13893:6;13889:14;13882:58;13974:8;13969:2;13961:6;13957:15;13950:33;13765:225;:::o;13996:366::-;14138:3;14159:67;14223:2;14218:3;14159:67;:::i;:::-;14152:74;;14235:93;14324:3;14235:93;:::i;:::-;14353:2;14348:3;14344:12;14337:19;;13996:366;;;:::o;14368:419::-;14534:4;14572:2;14561:9;14557:18;14549:26;;14621:9;14615:4;14611:20;14607:1;14596:9;14592:17;14585:47;14649:131;14775:4;14649:131;:::i;:::-;14641:139;;14368:419;;;:::o;14793:182::-;14933:34;14929:1;14921:6;14917:14;14910:58;14793:182;:::o;14981:366::-;15123:3;15144:67;15208:2;15203:3;15144:67;:::i;:::-;15137:74;;15220:93;15309:3;15220:93;:::i;:::-;15338:2;15333:3;15329:12;15322:19;;14981:366;;;:::o;15353:419::-;15519:4;15557:2;15546:9;15542:18;15534:26;;15606:9;15600:4;15596:20;15592:1;15581:9;15577:17;15570:47;15634:131;15760:4;15634:131;:::i;:::-;15626:139;;15353:419;;;:::o;15778:223::-;15918:34;15914:1;15906:6;15902:14;15895:58;15987:6;15982:2;15974:6;15970:15;15963:31;15778:223;:::o;16007:366::-;16149:3;16170:67;16234:2;16229:3;16170:67;:::i;:::-;16163:74;;16246:93;16335:3;16246:93;:::i;:::-;16364:2;16359:3;16355:12;16348:19;;16007:366;;;:::o;16379:419::-;16545:4;16583:2;16572:9;16568:18;16560:26;;16632:9;16626:4;16622:20;16618:1;16607:9;16603:17;16596:47;16660:131;16786:4;16660:131;:::i;:::-;16652:139;;16379:419;;;:::o;16804:221::-;16944:34;16940:1;16932:6;16928:14;16921:58;17013:4;17008:2;17000:6;16996:15;16989:29;16804:221;:::o;17031:366::-;17173:3;17194:67;17258:2;17253:3;17194:67;:::i;:::-;17187:74;;17270:93;17359:3;17270:93;:::i;:::-;17388:2;17383:3;17379:12;17372:19;;17031:366;;;:::o;17403:419::-;17569:4;17607:2;17596:9;17592:18;17584:26;;17656:9;17650:4;17646:20;17642:1;17631:9;17627:17;17620:47;17684:131;17810:4;17684:131;:::i;:::-;17676:139;;17403:419;;;:::o;17828:179::-;17968:31;17964:1;17956:6;17952:14;17945:55;17828:179;:::o;18013:366::-;18155:3;18176:67;18240:2;18235:3;18176:67;:::i;:::-;18169:74;;18252:93;18341:3;18252:93;:::i;:::-;18370:2;18365:3;18361:12;18354:19;;18013:366;;;:::o;18385:419::-;18551:4;18589:2;18578:9;18574:18;18566:26;;18638:9;18632:4;18628:20;18624:1;18613:9;18609:17;18602:47;18666:131;18792:4;18666:131;:::i;:::-;18658:139;;18385:419;;;:::o;18810:170::-;18950:22;18946:1;18938:6;18934:14;18927:46;18810:170;:::o;18986:366::-;19128:3;19149:67;19213:2;19208:3;19149:67;:::i;:::-;19142:74;;19225:93;19314:3;19225:93;:::i;:::-;19343:2;19338:3;19334:12;19327:19;;18986:366;;;:::o;19358:419::-;19524:4;19562:2;19551:9;19547:18;19539:26;;19611:9;19605:4;19601:20;19597:1;19586:9;19582:17;19575:47;19639:131;19765:4;19639:131;:::i;:::-;19631:139;;19358:419;;;:::o;19783:410::-;19823:7;19846:20;19864:1;19846:20;:::i;:::-;19841:25;;19880:20;19898:1;19880:20;:::i;:::-;19875:25;;19935:1;19932;19928:9;19957:30;19975:11;19957:30;:::i;:::-;19946:41;;20136:1;20127:7;20123:15;20120:1;20117:22;20097:1;20090:9;20070:83;20047:139;;20166:18;;:::i;:::-;20047:139;19831:362;19783:410;;;;:::o;20199:180::-;20247:77;20244:1;20237:88;20344:4;20341:1;20334:15;20368:4;20365:1;20358:15;20385:185;20425:1;20442:20;20460:1;20442:20;:::i;:::-;20437:25;;20476:20;20494:1;20476:20;:::i;:::-;20471:25;;20515:1;20505:35;;20520:18;;:::i;:::-;20505:35;20562:1;20559;20555:9;20550:14;;20385:185;;;;:::o;20576:194::-;20616:4;20636:20;20654:1;20636:20;:::i;:::-;20631:25;;20670:20;20688:1;20670:20;:::i;:::-;20665:25;;20714:1;20711;20707:9;20699:17;;20738:1;20732:4;20729:11;20726:37;;;20743:18;;:::i;:::-;20726:37;20576:194;;;;:::o;20776:180::-;20916:32;20912:1;20904:6;20900:14;20893:56;20776:180;:::o;20962:366::-;21104:3;21125:67;21189:2;21184:3;21125:67;:::i;:::-;21118:74;;21201:93;21290:3;21201:93;:::i;:::-;21319:2;21314:3;21310:12;21303:19;;20962:366;;;:::o;21334:419::-;21500:4;21538:2;21527:9;21523:18;21515:26;;21587:9;21581:4;21577:20;21573:1;21562:9;21558:17;21551:47;21615:131;21741:4;21615:131;:::i;:::-;21607:139;;21334:419;;;:::o;21759:180::-;21899:32;21895:1;21887:6;21883:14;21876:56;21759:180;:::o;21945:366::-;22087:3;22108:67;22172:2;22167:3;22108:67;:::i;:::-;22101:74;;22184:93;22273:3;22184:93;:::i;:::-;22302:2;22297:3;22293:12;22286:19;;21945:366;;;:::o;22317:419::-;22483:4;22521:2;22510:9;22506:18;22498:26;;22570:9;22564:4;22560:20;22556:1;22545:9;22541:17;22534:47;22598:131;22724:4;22598:131;:::i;:::-;22590:139;;22317:419;;;:::o;22742:230::-;22882:34;22878:1;22870:6;22866:14;22859:58;22951:13;22946:2;22938:6;22934:15;22927:38;22742:230;:::o;22978:366::-;23120:3;23141:67;23205:2;23200:3;23141:67;:::i;:::-;23134:74;;23217:93;23306:3;23217:93;:::i;:::-;23335:2;23330:3;23326:12;23319:19;;22978:366;;;:::o;23350:419::-;23516:4;23554:2;23543:9;23539:18;23531:26;;23603:9;23597:4;23593:20;23589:1;23578:9;23574:17;23567:47;23631:131;23757:4;23631:131;:::i;:::-;23623:139;;23350:419;;;:::o;23775:220::-;23915:34;23911:1;23903:6;23899:14;23892:58;23984:3;23979:2;23971:6;23967:15;23960:28;23775:220;:::o;24001:366::-;24143:3;24164:67;24228:2;24223:3;24164:67;:::i;:::-;24157:74;;24240:93;24329:3;24240:93;:::i;:::-;24358:2;24353:3;24349:12;24342:19;;24001:366;;;:::o;24373:419::-;24539:4;24577:2;24566:9;24562:18;24554:26;;24626:9;24620:4;24616:20;24612:1;24601:9;24597:17;24590:47;24654:131;24780:4;24654:131;:::i;:::-;24646:139;;24373:419;;;:::o;24798:221::-;24938:34;24934:1;24926:6;24922:14;24915:58;25007:4;25002:2;24994:6;24990:15;24983:29;24798:221;:::o;25025:366::-;25167:3;25188:67;25252:2;25247:3;25188:67;:::i;:::-;25181:74;;25264:93;25353:3;25264:93;:::i;:::-;25382:2;25377:3;25373:12;25366:19;;25025:366;;;:::o;25397:419::-;25563:4;25601:2;25590:9;25586:18;25578:26;;25650:9;25644:4;25640:20;25636:1;25625:9;25621:17;25614:47;25678:131;25804:4;25678:131;:::i;:::-;25670:139;;25397:419;;;:::o;25822:224::-;25962:34;25958:1;25950:6;25946:14;25939:58;26031:7;26026:2;26018:6;26014:15;26007:32;25822:224;:::o;26052:366::-;26194:3;26215:67;26279:2;26274:3;26215:67;:::i;:::-;26208:74;;26291:93;26380:3;26291:93;:::i;:::-;26409:2;26404:3;26400:12;26393:19;;26052:366;;;:::o;26424:419::-;26590:4;26628:2;26617:9;26613:18;26605:26;;26677:9;26671:4;26667:20;26663:1;26652:9;26648:17;26641:47;26705:131;26831:4;26705:131;:::i;:::-;26697:139;;26424:419;;;:::o;26849:222::-;26989:34;26985:1;26977:6;26973:14;26966:58;27058:5;27053:2;27045:6;27041:15;27034:30;26849:222;:::o;27077:366::-;27219:3;27240:67;27304:2;27299:3;27240:67;:::i;:::-;27233:74;;27316:93;27405:3;27316:93;:::i;:::-;27434:2;27429:3;27425:12;27418:19;;27077:366;;;:::o;27449:419::-;27615:4;27653:2;27642:9;27638:18;27630:26;;27702:9;27696:4;27692:20;27688:1;27677:9;27673:17;27666:47;27730:131;27856:4;27730:131;:::i;:::-;27722:139;;27449:419;;;:::o;27874:225::-;28014:34;28010:1;28002:6;27998:14;27991:58;28083:8;28078:2;28070:6;28066:15;28059:33;27874:225;:::o;28105:366::-;28247:3;28268:67;28332:2;28327:3;28268:67;:::i;:::-;28261:74;;28344:93;28433:3;28344:93;:::i;:::-;28462:2;28457:3;28453:12;28446:19;;28105:366;;;:::o;28477:419::-;28643:4;28681:2;28670:9;28666:18;28658:26;;28730:9;28724:4;28720:20;28716:1;28705:9;28701:17;28694:47;28758:131;28884:4;28758:131;:::i;:::-;28750:139;;28477:419;;;:::o;28902:180::-;28950:77;28947:1;28940:88;29047:4;29044:1;29037:15;29071:4;29068:1;29061:15;29088:180;29136:77;29133:1;29126:88;29233:4;29230:1;29223:15;29257:4;29254:1;29247:15;29274:114;29341:6;29375:5;29369:12;29359:22;;29274:114;;;:::o;29394:184::-;29493:11;29527:6;29522:3;29515:19;29567:4;29562:3;29558:14;29543:29;;29394:184;;;;:::o;29584:132::-;29651:4;29674:3;29666:11;;29704:4;29699:3;29695:14;29687:22;;29584:132;;;:::o;29722:108::-;29799:24;29817:5;29799:24;:::i;:::-;29794:3;29787:37;29722:108;;:::o;29836:179::-;29905:10;29926:46;29968:3;29960:6;29926:46;:::i;:::-;30004:4;29999:3;29995:14;29981:28;;29836:179;;;;:::o;30021:113::-;30091:4;30123;30118:3;30114:14;30106:22;;30021:113;;;:::o;30170:732::-;30289:3;30318:54;30366:5;30318:54;:::i;:::-;30388:86;30467:6;30462:3;30388:86;:::i;:::-;30381:93;;30498:56;30548:5;30498:56;:::i;:::-;30577:7;30608:1;30593:284;30618:6;30615:1;30612:13;30593:284;;;30694:6;30688:13;30721:63;30780:3;30765:13;30721:63;:::i;:::-;30714:70;;30807:60;30860:6;30807:60;:::i;:::-;30797:70;;30653:224;30640:1;30637;30633:9;30628:14;;30593:284;;;30597:14;30893:3;30886:10;;30294:608;;;30170:732;;;;:::o;30908:831::-;31171:4;31209:3;31198:9;31194:19;31186:27;;31223:71;31291:1;31280:9;31276:17;31267:6;31223:71;:::i;:::-;31304:80;31380:2;31369:9;31365:18;31356:6;31304:80;:::i;:::-;31431:9;31425:4;31421:20;31416:2;31405:9;31401:18;31394:48;31459:108;31562:4;31553:6;31459:108;:::i;:::-;31451:116;;31577:72;31645:2;31634:9;31630:18;31621:6;31577:72;:::i;:::-;31659:73;31727:3;31716:9;31712:19;31703:6;31659:73;:::i;:::-;30908:831;;;;;;;;:::o;31745:117::-;31854:1;31851;31844:12;31868:281;31951:27;31973:4;31951:27;:::i;:::-;31943:6;31939:40;32081:6;32069:10;32066:22;32045:18;32033:10;32030:34;32027:62;32024:88;;;32092:18;;:::i;:::-;32024:88;32132:10;32128:2;32121:22;31911:238;31868:281;;:::o;32155:129::-;32189:6;32216:20;;:::i;:::-;32206:30;;32245:33;32273:4;32265:6;32245:33;:::i;:::-;32155:129;;;:::o;32290:311::-;32367:4;32457:18;32449:6;32446:30;32443:56;;;32479:18;;:::i;:::-;32443:56;32529:4;32521:6;32517:17;32509:25;;32589:4;32583;32579:15;32571:23;;32290:311;;;:::o;32607:117::-;32716:1;32713;32706:12;32747:732;32854:5;32879:81;32895:64;32952:6;32895:64;:::i;:::-;32879:81;:::i;:::-;32870:90;;32980:5;33009:6;33002:5;32995:21;33043:4;33036:5;33032:16;33025:23;;33096:4;33088:6;33084:17;33076:6;33072:30;33125:3;33117:6;33114:15;33111:122;;;33144:79;;:::i;:::-;33111:122;33259:6;33242:231;33276:6;33271:3;33268:15;33242:231;;;33351:3;33380:48;33424:3;33412:10;33380:48;:::i;:::-;33375:3;33368:61;33458:4;33453:3;33449:14;33442:21;;33318:155;33302:4;33297:3;33293:14;33286:21;;33242:231;;;33246:21;32860:619;;32747:732;;;;;:::o;33502:385::-;33584:5;33633:3;33626:4;33618:6;33614:17;33610:27;33600:122;;33641:79;;:::i;:::-;33600:122;33751:6;33745:13;33776:105;33877:3;33869:6;33862:4;33854:6;33850:17;33776:105;:::i;:::-;33767:114;;33590:297;33502:385;;;;:::o;33893:554::-;33988:6;34037:2;34025:9;34016:7;34012:23;34008:32;34005:119;;;34043:79;;:::i;:::-;34005:119;34184:1;34173:9;34169:17;34163:24;34214:18;34206:6;34203:30;34200:117;;;34236:79;;:::i;:::-;34200:117;34341:89;34422:7;34413:6;34402:9;34398:22;34341:89;:::i;:::-;34331:99;;34134:306;33893:554;;;;:::o

Swarm Source

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