ETH Price: $2,387.21 (+1.94%)

Token

Chip Network (CHIP)
 

Overview

Max Total Supply

100,000,000 CHIP

Holders

85

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
65,940.749047242625339111 CHIP

Value
$0.00
0x82409ff5a7d68b9f85ba9c3f1d8cc1d0946a0613
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:
Chip

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-03-08
*/

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/utils/[email protected]

// 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 @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts (last updated v4.9.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 @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// 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 @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts (last updated v4.9.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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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 @uniswap/v2-periphery/contracts/interfaces/[email protected]

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/[email protected]

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/[email protected]

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 @uniswap/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File contracts/Chip.sol

pragma solidity ^0.8.9;

contract Chip is ERC20, Ownable {
    address private WETH;
    
    address public constant uniswapV2Router02 =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    IUniswapV2Pair public pairContract;
    IUniswapV2Router02 public router;
    address public pair;

    mapping(address => uint256) private buyBlock;

    address public feeReceiver = 0x9E4489bbcb0Be9b97AD55c7dCf49b403bC52A05f;

    // 25% Buy / 50% Sell Anti-Snipe Tax
    uint16 public feePercentageBuy = 2500;
    uint16 public feePercentageSell = 5000;
    uint16 public burnFeePercentage = 0;

    uint256 public maxTokenAmountPerWallet = 1000000 * 10 ** decimals();
    uint256 public maxTokenAmountPerTransaction = 0 * 10 ** decimals();

    uint256 public swapTreshold = 500000000000000000;
    bool private inSwap = false;

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

    constructor() ERC20(unicode"Chip Network", unicode"CHIP") {
        router = IUniswapV2Router02(uniswapV2Router02);
        WETH = router.WETH();
        pair = IUniswapV2Factory(router.factory()).createPair(
            WETH,
            address(this)
        );
        pairContract = IUniswapV2Pair(pair);
        _approve(address(this), uniswapV2Router02, type(uint256).max);
        _approve(address(this), pair, type(uint256).max);
        _approve(msg.sender, uniswapV2Router02, type(uint256).max);
        _mint(msg.sender, (100000000) * 10 ** decimals());
    }

    receive() external payable {}

    modifier isBot(address from, address to) {
        require(
            block.number > buyBlock[from] || block.number > buyBlock[to],
            "Cannot perform more than one transaction in the same block"
        );
        _;
        buyBlock[from] = block.number;
        buyBlock[to] = block.number;
    }

    function checkMaxTransactionAmountExceeded(uint256 amount) private view {
        if (msg.sender != owner() || msg.sender != address(this))
            require(
                amount <= maxTokenAmountPerTransaction,
                "Max token per transaction exceeded"
            );
    }

    function checkMaxWalletAmountExceeded(
        address to,
        uint256 amount
    ) private view {
        if (msg.sender != owner() || to != address(this))
            require(
                balanceOf(to) + amount <= maxTokenAmountPerWallet,
                "Max token per wallet exceeded"
            );
    }

    function calculateTokenAmountInETH(
        uint256 amount
    ) public view returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        try router.getAmountsOut(amount, path) returns (
            uint[] memory amountsOut
        ) {
            return amountsOut[1];
        } catch {
            return 0;
        }
    }

    function swapBalanceToETHAndSend() private lockTheSwap {
        uint256 amountIn = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountIn,
            0,
            path,
            address(this),
            block.timestamp
        );
        payable(feeReceiver).transfer(address(this).balance);
    }

    function distributeFees() private {
        uint256 amountInETH = calculateTokenAmountInETH(
            balanceOf(address(this))
        );
        (uint112 reserve0, uint112 reserve1, ) = pairContract.getReserves();
        uint256 totalETHInPool;
        if (pairContract.token0() == WETH) totalETHInPool = uint256(reserve0);
        else if (pairContract.token1() == WETH)
            totalETHInPool = uint256(reserve1);
        if (amountInETH > swapTreshold) swapBalanceToETHAndSend();
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override isBot(from, to) {
        if (
            from == owner() ||
            to == owner() ||
            from == feeReceiver ||
            to == feeReceiver ||
            inSwap
        ) {
            super._transfer(from, to, amount);
        } else {
            uint256 feePercentage = 0;
            bool buying = from == pair && to != uniswapV2Router02;
            bool selling = from != uniswapV2Router02 && to == pair;
            if (msg.sender != pair && !inSwap) distributeFees();
            if (buying) {
                feePercentage = feePercentageBuy;
            }
            if (selling) {
                feePercentage = feePercentageSell;
            }
            uint256 feeAmount = (amount * feePercentage) / (10000);
            uint256 burnFeeAmount = (amount * burnFeePercentage) / (10000);
            uint256 finalAmount = (amount - (feeAmount + burnFeeAmount));
            if (maxTokenAmountPerTransaction > 0)
                checkMaxTransactionAmountExceeded(amount);
            if (buying && maxTokenAmountPerWallet > 0)
                checkMaxWalletAmountExceeded(to, finalAmount);
            if (burnFeeAmount > 0) _burn(from, burnFeeAmount);
            super._transfer(from, address(this), feeAmount);
            super._transfer(from, to, finalAmount);
        }
    }

    function manualSwap() public {
        require(msg.sender == feeReceiver, "Insufficient Permissions");
        swapBalanceToETHAndSend();
    }

    function removeLimits() public {
        require(msg.sender == feeReceiver, "Insufficient Permissions");
        maxTokenAmountPerWallet = 0;
        maxTokenAmountPerTransaction = 0;
    }

    // Completely remove taxes
    function removeTaxes() public {
        require(msg.sender == feeReceiver, "Insufficient Permissions");
        feePercentageBuy = 0;
        feePercentageSell = 0;
    }

    // Allows us to lower taxes (can not be higher than 5%)
    function lowerTaxes(uint16 _feePercentageBuy, uint16 _feePercentageSell) public {
        require(msg.sender == feeReceiver, "Insufficient Permissions");
        require(_feePercentageBuy <= 500, "Buy Tax Cannot Exceed 5%");
        require(_feePercentageSell <= 500, "Sell Tax Cannot Exceed 5%");
        feePercentageBuy = _feePercentageBuy;
        feePercentageSell = _feePercentageSell;
    }

    function updateThreshold(uint256 _swapTreshold) public {
        require(msg.sender == feeReceiver, "Insufficient Permissions");
        swapTreshold = _swapTreshold;
    }

    // Change to 5/5 tax
    function launch() public {
        require(msg.sender == feeReceiver, "Insufficient Permissions");
        feePercentageBuy = 500;
        feePercentageSell = 500;
    }

    function changeFeeReceiver(address _feeReceiver) public {
        require(msg.sender == feeReceiver, "Insufficient Permissions");
        feeReceiver = _feeReceiver;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"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":"burnFeePercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateTokenAmountInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"changeFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePercentageBuy","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentageSell","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_feePercentageBuy","type":"uint16"},{"internalType":"uint16","name":"_feePercentageSell","type":"uint16"}],"name":"lowerTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uniswapV2Router02","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTreshold","type":"uint256"}],"name":"updateThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052739e4489bbcb0be9b97ad55c7dcf49b403bc52a05f600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109c4600b60146101000a81548161ffff021916908361ffff160217905550611388600b60166101000a81548161ffff021916908361ffff1602179055505f600b60186101000a81548161ffff021916908361ffff160217905550620000c36200061360201b60201c565b600a620000d1919062000bb1565b620f4240620000e1919062000c01565b600c55620000f46200061360201b60201c565b600a62000102919062000bb1565b5f6200010f919062000c01565b600d556706f05b59d3b20000600e555f600f5f6101000a81548160ff02191690831515021790555034801562000143575f80fd5b506040518060400160405280600c81526020017f43686970204e6574776f726b00000000000000000000000000000000000000008152506040518060400160405280600481526020017f43484950000000000000000000000000000000000000000000000000000000008152508160039081620001c1919062000ea6565b508060049081620001d3919062000ea6565b505050620001f6620001ea6200061b60201b60201c565b6200062260201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002db919062000fef565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000385573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003ab919062000fef565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200040892919062001030565b6020604051808303815f875af115801562000425573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200044b919062000fef565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053230737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620006e560201b60201c565b620005863060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620006e560201b60201c565b620005cd33737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620006e560201b60201c565b6200060d33620005e26200061360201b60201c565b600a620005f0919062000bb1565b6305f5e10062000601919062000c01565b620008b060201b60201c565b62001267565b5f6012905090565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074d90620010df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007be9062001173565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008a39190620011a4565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000918906200120d565b60405180910390fd5b620009345f838362000a1560201b60201c565b8060025f8282546200094791906200122d565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f69190620011a4565b60405180910390a362000a115f838362000a1a60201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000aa95780860481111562000a815762000a8062000a1f565b5b600185161562000a915780820291505b808102905062000aa18562000a4c565b945062000a61565b94509492505050565b5f8262000ac3576001905062000b95565b8162000ad2575f905062000b95565b816001811462000aeb576002811462000af65762000b2c565b600191505062000b95565b60ff84111562000b0b5762000b0a62000a1f565b5b8360020a91508482111562000b255762000b2462000a1f565b5b5062000b95565b5060208310610133831016604e8410600b841016171562000b665782820a90508381111562000b605762000b5f62000a1f565b5b62000b95565b62000b75848484600162000a58565b9250905081840481111562000b8f5762000b8e62000a1f565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f62000bbd8262000b9c565b915062000bca8362000ba5565b925062000bf97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ab2565b905092915050565b5f62000c0d8262000b9c565b915062000c1a8362000b9c565b925082820262000c2a8162000b9c565b9150828204841483151762000c445762000c4362000a1f565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000cc757607f821691505b60208210810362000cdd5762000cdc62000c82565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d04565b62000d4d868362000d04565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000d8e62000d8862000d828462000b9c565b62000d65565b62000b9c565b9050919050565b5f819050919050565b62000da98362000d6e565b62000dc162000db88262000d95565b84845462000d10565b825550505050565b5f90565b62000dd762000dc9565b62000de481848462000d9e565b505050565b5b8181101562000e0b5762000dff5f8262000dcd565b60018101905062000dea565b5050565b601f82111562000e5a5762000e248162000ce3565b62000e2f8462000cf5565b8101602085101562000e3f578190505b62000e5762000e4e8562000cf5565b83018262000de9565b50505b505050565b5f82821c905092915050565b5f62000e7c5f198460080262000e5f565b1980831691505092915050565b5f62000e96838362000e6b565b9150826002028217905092915050565b62000eb18262000c4b565b67ffffffffffffffff81111562000ecd5762000ecc62000c55565b5b62000ed9825462000caf565b62000ee682828562000e0f565b5f60209050601f83116001811462000f1c575f841562000f07578287015190505b62000f13858262000e89565b86555062000f82565b601f19841662000f2c8662000ce3565b5f5b8281101562000f555784890151825560018201915060208501945060208101905062000f2e565b8683101562000f75578489015162000f71601f89168262000e6b565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fb98262000f8e565b9050919050565b62000fcb8162000fad565b811462000fd6575f80fd5b50565b5f8151905062000fe98162000fc0565b92915050565b5f6020828403121562001007576200100662000f8a565b5b5f620010168482850162000fd9565b91505092915050565b6200102a8162000fad565b82525050565b5f604082019050620010455f8301856200101f565b6200105460208301846200101f565b9392505050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f620010c76024836200105b565b9150620010d4826200106b565b604082019050919050565b5f6020820190508181035f830152620010f881620010b9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200115b6022836200105b565b91506200116882620010ff565b604082019050919050565b5f6020820190508181035f8301526200118c816200114d565b9050919050565b6200119e8162000b9c565b82525050565b5f602082019050620011b95f83018462001193565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620011f5601f836200105b565b91506200120282620011bf565b602082019050919050565b5f6020820190508181035f8301526200122681620011e7565b9050919050565b5f620012398262000b9c565b9150620012468362000b9c565b925082820190508082111562001261576200126062000a1f565b5b92915050565b613a7480620012755f395ff3fe6080604052600436106101f1575f3560e01c8063751039fc1161010c578063a9059cbb1161009f578063d7d7442f1161006e578063d7d7442f146106aa578063dd62ed3e146106d2578063e52fb9ec1461070e578063f2fde38b14610738578063f887ea4014610760576101f8565b8063a9059cbb146105f0578063ab9990421461062c578063b3f0067414610656578063c4ceb33914610680576101f8565b806395d89b41116100db57806395d89b4114610536578063a457c2d714610560578063a7c6402c1461059c578063a8aa1b31146105c6576101f8565b8063751039fc146104925780637c08b964146104a85780638da5cb5b146104d05780639277883d146104fa576101f8565b80633a4ceedd11610184578063685fbc6b11610153578063685fbc6b1461040057806369e1ea7f1461042a57806370a0823114610440578063715018a61461047c576101f8565b80633a4ceedd1461036c578063418bce8a146103965780634d709adf146103c057806351bc3c85146103ea576101f8565b8063233e8700116101c0578063233e8700146102a257806323b872dd146102ca578063313ce567146103065780633950935114610330576101f8565b806301339c21146101fc57806306fdde0314610212578063095ea7b31461023c57806318160ddd14610278576101f8565b366101f857005b5f80fd5b348015610207575f80fd5b5061021061078a565b005b34801561021d575f80fd5b50610226610859565b60405161023391906127fc565b60405180910390f35b348015610247575f80fd5b50610262600480360381019061025d91906128ba565b6108e9565b60405161026f9190612912565b60405180910390f35b348015610283575f80fd5b5061028c61090b565b604051610299919061293a565b60405180910390f35b3480156102ad575f80fd5b506102c860048036038101906102c3919061298a565b610914565b005b3480156102d5575f80fd5b506102f060048036038101906102eb91906129c8565b610a73565b6040516102fd9190612912565b60405180910390f35b348015610311575f80fd5b5061031a610aa1565b6040516103279190612a33565b60405180910390f35b34801561033b575f80fd5b50610356600480360381019061035191906128ba565b610aa9565b6040516103639190612912565b60405180910390f35b348015610377575f80fd5b50610380610adf565b60405161038d9190612a5b565b60405180910390f35b3480156103a1575f80fd5b506103aa610af3565b6040516103b7919061293a565b60405180910390f35b3480156103cb575f80fd5b506103d4610af9565b6040516103e19190612acf565b60405180910390f35b3480156103f5575f80fd5b506103fe610b1e565b005b34801561040b575f80fd5b50610414610bb7565b604051610421919061293a565b60405180910390f35b348015610435575f80fd5b5061043e610bbd565b005b34801561044b575f80fd5b5061046660048036038101906104619190612ae8565b610c88565b604051610473919061293a565b60405180910390f35b348015610487575f80fd5b50610490610ccd565b005b34801561049d575f80fd5b506104a6610ce0565b005b3480156104b3575f80fd5b506104ce60048036038101906104c99190612ae8565b610d7f565b005b3480156104db575f80fd5b506104e4610e51565b6040516104f19190612b22565b60405180910390f35b348015610505575f80fd5b50610520600480360381019061051b9190612b3b565b610e79565b60405161052d919061293a565b60405180910390f35b348015610541575f80fd5b5061054a611051565b60405161055791906127fc565b60405180910390f35b34801561056b575f80fd5b50610586600480360381019061058191906128ba565b6110e1565b6040516105939190612912565b60405180910390f35b3480156105a7575f80fd5b506105b0611156565b6040516105bd9190612b22565b60405180910390f35b3480156105d1575f80fd5b506105da61116e565b6040516105e79190612b22565b60405180910390f35b3480156105fb575f80fd5b50610616600480360381019061061191906128ba565b611193565b6040516106239190612912565b60405180910390f35b348015610637575f80fd5b506106406111b5565b60405161064d9190612a5b565b60405180910390f35b348015610661575f80fd5b5061066a6111c9565b6040516106779190612b22565b60405180910390f35b34801561068b575f80fd5b506106946111ee565b6040516106a19190612a5b565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190612b3b565b611202565b005b3480156106dd575f80fd5b506106f860048036038101906106f39190612b66565b61129b565b604051610705919061293a565b60405180910390f35b348015610719575f80fd5b5061072261131d565b60405161072f919061293a565b60405180910390f35b348015610743575f80fd5b5061075e60048036038101906107599190612ae8565b611323565b005b34801561076b575f80fd5b506107746113a5565b6040516107819190612bc4565b60405180910390f35b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090612c27565b60405180910390fd5b6101f4600b60146101000a81548161ffff021916908361ffff1602179055506101f4600b60166101000a81548161ffff021916908361ffff160217905550565b60606003805461086890612c72565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612c72565b80156108df5780601f106108b6576101008083540402835291602001916108df565b820191905f5260205f20905b8154815290600101906020018083116108c257829003601f168201915b5050505050905090565b5f806108f36113ca565b90506109008185856113d1565b600191505092915050565b5f600254905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90612c27565b60405180910390fd5b6101f48261ffff1611156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390612cec565b60405180910390fd5b6101f48161ffff161115610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90612d54565b60405180910390fd5b81600b60146101000a81548161ffff021916908361ffff16021790555080600b60166101000a81548161ffff021916908361ffff1602179055505050565b5f80610a7d6113ca565b9050610a8a858285611594565b610a9585858561161f565b60019150509392505050565b5f6012905090565b5f80610ab36113ca565b9050610ad4818585610ac5858961129b565b610acf9190612d9f565b6113d1565b600191505092915050565b600b60149054906101000a900461ffff1681565b600d5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490612c27565b60405180910390fd5b610bb5611b78565b565b600c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390612c27565b60405180910390fd5b5f600b60146101000a81548161ffff021916908361ffff1602179055505f600b60166101000a81548161ffff021916908361ffff160217905550565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cd5611dba565b610cde5f611e38565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690612c27565b60405180910390fd5b5f600c819055505f600d81905550565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590612c27565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600267ffffffffffffffff811115610e9657610e95612dd2565b5b604051908082528060200260200182016040528015610ec45781602001602082028036833780820191505090505b50905030815f81518110610edb57610eda612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610f4b57610f4a612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401610fe1929190612ee3565b5f60405180830381865afa92505050801561101e57506040513d5f823e3d601f19601f8201168201806040525081019061101b9190613038565b60015b61102b575f91505061104c565b8060018151811061103f5761103e612dff565b5b6020026020010151925050505b919050565b60606004805461106090612c72565b80601f016020809104026020016040519081016040528092919081815260200182805461108c90612c72565b80156110d75780601f106110ae576101008083540402835291602001916110d7565b820191905f5260205f20905b8154815290600101906020018083116110ba57829003601f168201915b5050505050905090565b5f806110eb6113ca565b90505f6110f8828661129b565b90508381101561113d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611134906130ef565b60405180910390fd5b61114a82868684036113d1565b60019250505092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8061119d6113ca565b90506111aa81858561161f565b600191505092915050565b600b60169054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60189054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890612c27565b60405180910390fd5b80600e8190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e5481565b61132b611dba565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113909061317d565b60405180910390fd5b6113a281611e38565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361143f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114369061320b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490613299565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611587919061293a565b60405180910390a3505050565b5f61159f848461129b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611619578181101561160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613301565b60405180910390fd5b61161884848484036113d1565b5b50505050565b8282600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311806116a85750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205443115b6116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de9061338f565b60405180910390fd5b6116ef610e51565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061175a575061172b610e51565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806117b15750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806118085750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061181e5750600f5f9054906101000a900460ff165b156118335761182e858585611efb565b611aed565b5f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156118d15750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015611970575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156119db5750600f5f9054906101000a900460ff16155b156119e9576119e8612167565b5b8115611a0757600b60149054906101000a900461ffff1661ffff1692505b8015611a2557600b60169054906101000a900461ffff1661ffff1692505b5f6127108488611a3591906133ad565b611a3f919061341b565b90505f612710600b60189054906101000a900461ffff1661ffff1689611a6591906133ad565b611a6f919061341b565b90505f8183611a7e9190612d9f565b89611a89919061344b565b90505f600d541115611a9f57611a9e89612419565b5b848015611aad57505f600c54115b15611abd57611abc8a826124d5565b5b5f821115611ad057611acf8b836125a5565b5b611adb8b3085611efb565b611ae68b8b83611efb565b5050505050505b43600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050505050565b6001600f5f6101000a81548160ff0219169083151502179055505f611b9c30610c88565b90505f600267ffffffffffffffff811115611bba57611bb9612dd2565b5b604051908082528060200260200182016040528015611be85781602001602082028036833780820191505090505b50905030815f81518110611bff57611bfe612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611c6f57611c6e612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611d0b9594939291906134b7565b5f604051808303815f87803b158015611d22575f80fd5b505af1158015611d34573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611d9c573d5f803e3d5ffd5b5050505f600f5f6101000a81548160ff021916908315150217905550565b611dc26113ca565b73ffffffffffffffffffffffffffffffffffffffff16611de0610e51565b73ffffffffffffffffffffffffffffffffffffffff1614611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613559565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f60906135e7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90613675565b60405180910390fd5b611fe2838383612768565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90613703565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214e919061293a565b60405180910390a361216184848461276d565b50505050565b5f61217961217430610c88565b610e79565b90505f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156121e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061220b919061379d565b50915091505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d79190613801565b73ffffffffffffffffffffffffffffffffffffffff160361230a57826dffffffffffffffffffffffffffff169050612400565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d09190613801565b73ffffffffffffffffffffffffffffffffffffffff16036123ff57816dffffffffffffffffffffffffffff1690505b5b600e5484111561241357612412611b78565b5b50505050565b612421610e51565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061248757503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156124d257600d548111156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c89061389c565b60405180910390fd5b5b50565b6124dd610e51565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061254357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125a157600c548161255584610c88565b61255f9190612d9f565b11156125a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259790613904565b60405180910390fd5b5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a90613992565b60405180910390fd5b61261e825f83612768565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156126a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269890613a20565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612750919061293a565b60405180910390a3612763835f8461276d565b505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156127a957808201518184015260208101905061278e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6127ce82612772565b6127d8818561277c565b93506127e881856020860161278c565b6127f1816127b4565b840191505092915050565b5f6020820190508181035f83015261281481846127c4565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128568261282d565b9050919050565b6128668161284c565b8114612870575f80fd5b50565b5f813590506128818161285d565b92915050565b5f819050919050565b61289981612887565b81146128a3575f80fd5b50565b5f813590506128b481612890565b92915050565b5f80604083850312156128d0576128cf612825565b5b5f6128dd85828601612873565b92505060206128ee858286016128a6565b9150509250929050565b5f8115159050919050565b61290c816128f8565b82525050565b5f6020820190506129255f830184612903565b92915050565b61293481612887565b82525050565b5f60208201905061294d5f83018461292b565b92915050565b5f61ffff82169050919050565b61296981612953565b8114612973575f80fd5b50565b5f8135905061298481612960565b92915050565b5f80604083850312156129a05761299f612825565b5b5f6129ad85828601612976565b92505060206129be85828601612976565b9150509250929050565b5f805f606084860312156129df576129de612825565b5b5f6129ec86828701612873565b93505060206129fd86828701612873565b9250506040612a0e868287016128a6565b9150509250925092565b5f60ff82169050919050565b612a2d81612a18565b82525050565b5f602082019050612a465f830184612a24565b92915050565b612a5581612953565b82525050565b5f602082019050612a6e5f830184612a4c565b92915050565b5f819050919050565b5f612a97612a92612a8d8461282d565b612a74565b61282d565b9050919050565b5f612aa882612a7d565b9050919050565b5f612ab982612a9e565b9050919050565b612ac981612aaf565b82525050565b5f602082019050612ae25f830184612ac0565b92915050565b5f60208284031215612afd57612afc612825565b5b5f612b0a84828501612873565b91505092915050565b612b1c8161284c565b82525050565b5f602082019050612b355f830184612b13565b92915050565b5f60208284031215612b5057612b4f612825565b5b5f612b5d848285016128a6565b91505092915050565b5f8060408385031215612b7c57612b7b612825565b5b5f612b8985828601612873565b9250506020612b9a85828601612873565b9150509250929050565b5f612bae82612a9e565b9050919050565b612bbe81612ba4565b82525050565b5f602082019050612bd75f830184612bb5565b92915050565b7f496e73756666696369656e74205065726d697373696f6e7300000000000000005f82015250565b5f612c1160188361277c565b9150612c1c82612bdd565b602082019050919050565b5f6020820190508181035f830152612c3e81612c05565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c8957607f821691505b602082108103612c9c57612c9b612c45565b5b50919050565b7f427579205461782043616e6e6f742045786365656420352500000000000000005f82015250565b5f612cd660188361277c565b9150612ce182612ca2565b602082019050919050565b5f6020820190508181035f830152612d0381612cca565b9050919050565b7f53656c6c205461782043616e6e6f7420457863656564203525000000000000005f82015250565b5f612d3e60198361277c565b9150612d4982612d0a565b602082019050919050565b5f6020820190508181035f830152612d6b81612d32565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612da982612887565b9150612db483612887565b9250828201905080821115612dcc57612dcb612d72565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e5e8161284c565b82525050565b5f612e6f8383612e55565b60208301905092915050565b5f602082019050919050565b5f612e9182612e2c565b612e9b8185612e36565b9350612ea683612e46565b805f5b83811015612ed6578151612ebd8882612e64565b9750612ec883612e7b565b925050600181019050612ea9565b5085935050505092915050565b5f604082019050612ef65f83018561292b565b8181036020830152612f088184612e87565b90509392505050565b5f80fd5b612f1e826127b4565b810181811067ffffffffffffffff82111715612f3d57612f3c612dd2565b5b80604052505050565b5f612f4f61281c565b9050612f5b8282612f15565b919050565b5f67ffffffffffffffff821115612f7a57612f79612dd2565b5b602082029050602081019050919050565b5f80fd5b5f81519050612f9d81612890565b92915050565b5f612fb5612fb084612f60565b612f46565b90508083825260208201905060208402830185811115612fd857612fd7612f8b565b5b835b818110156130015780612fed8882612f8f565b845260208401935050602081019050612fda565b5050509392505050565b5f82601f83011261301f5761301e612f11565b5b815161302f848260208601612fa3565b91505092915050565b5f6020828403121561304d5761304c612825565b5b5f82015167ffffffffffffffff81111561306a57613069612829565b5b6130768482850161300b565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130d960258361277c565b91506130e48261307f565b604082019050919050565b5f6020820190508181035f830152613106816130cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61316760268361277c565b91506131728261310d565b604082019050919050565b5f6020820190508181035f8301526131948161315b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131f560248361277c565b91506132008261319b565b604082019050919050565b5f6020820190508181035f830152613222816131e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61328360228361277c565b915061328e82613229565b604082019050919050565b5f6020820190508181035f8301526132b081613277565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132eb601d8361277c565b91506132f6826132b7565b602082019050919050565b5f6020820190508181035f830152613318816132df565b9050919050565b7f43616e6e6f7420706572666f726d206d6f7265207468616e206f6e65207472615f8201527f6e73616374696f6e20696e207468652073616d6520626c6f636b000000000000602082015250565b5f613379603a8361277c565b91506133848261331f565b604082019050919050565b5f6020820190508181035f8301526133a68161336d565b9050919050565b5f6133b782612887565b91506133c283612887565b92508282026133d081612887565b915082820484148315176133e7576133e6612d72565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61342582612887565b915061343083612887565b9250826134405761343f6133ee565b5b828204905092915050565b5f61345582612887565b915061346083612887565b925082820390508181111561347857613477612d72565b5b92915050565b5f819050919050565b5f6134a161349c6134978461347e565b612a74565b612887565b9050919050565b6134b181613487565b82525050565b5f60a0820190506134ca5f83018861292b565b6134d760208301876134a8565b81810360408301526134e98186612e87565b90506134f86060830185612b13565b613505608083018461292b565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61354360208361277c565b915061354e8261350f565b602082019050919050565b5f6020820190508181035f83015261357081613537565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6135d160258361277c565b91506135dc82613577565b604082019050919050565b5f6020820190508181035f8301526135fe816135c5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61365f60238361277c565b915061366a82613605565b604082019050919050565b5f6020820190508181035f83015261368c81613653565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6136ed60268361277c565b91506136f882613693565b604082019050919050565b5f6020820190508181035f83015261371a816136e1565b9050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61374381613721565b811461374d575f80fd5b50565b5f8151905061375e8161373a565b92915050565b5f63ffffffff82169050919050565b61377c81613764565b8114613786575f80fd5b50565b5f8151905061379781613773565b92915050565b5f805f606084860312156137b4576137b3612825565b5b5f6137c186828701613750565b93505060206137d286828701613750565b92505060406137e386828701613789565b9150509250925092565b5f815190506137fb8161285d565b92915050565b5f6020828403121561381657613815612825565b5b5f613823848285016137ed565b91505092915050565b7f4d617820746f6b656e20706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f61388660228361277c565b91506138918261382c565b604082019050919050565b5f6020820190508181035f8301526138b38161387a565b9050919050565b7f4d617820746f6b656e207065722077616c6c65742065786365656465640000005f82015250565b5f6138ee601d8361277c565b91506138f9826138ba565b602082019050919050565b5f6020820190508181035f83015261391b816138e2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61397c60218361277c565b915061398782613922565b604082019050919050565b5f6020820190508181035f8301526139a981613970565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a0a60228361277c565b9150613a15826139b0565b604082019050919050565b5f6020820190508181035f830152613a37816139fe565b905091905056fea2646970667358221220b9892d6b3fa7d84e33e65c0edb2d0c06c214759b6f60f454af65e92721a3628364736f6c63430008180033

Deployed Bytecode

0x6080604052600436106101f1575f3560e01c8063751039fc1161010c578063a9059cbb1161009f578063d7d7442f1161006e578063d7d7442f146106aa578063dd62ed3e146106d2578063e52fb9ec1461070e578063f2fde38b14610738578063f887ea4014610760576101f8565b8063a9059cbb146105f0578063ab9990421461062c578063b3f0067414610656578063c4ceb33914610680576101f8565b806395d89b41116100db57806395d89b4114610536578063a457c2d714610560578063a7c6402c1461059c578063a8aa1b31146105c6576101f8565b8063751039fc146104925780637c08b964146104a85780638da5cb5b146104d05780639277883d146104fa576101f8565b80633a4ceedd11610184578063685fbc6b11610153578063685fbc6b1461040057806369e1ea7f1461042a57806370a0823114610440578063715018a61461047c576101f8565b80633a4ceedd1461036c578063418bce8a146103965780634d709adf146103c057806351bc3c85146103ea576101f8565b8063233e8700116101c0578063233e8700146102a257806323b872dd146102ca578063313ce567146103065780633950935114610330576101f8565b806301339c21146101fc57806306fdde0314610212578063095ea7b31461023c57806318160ddd14610278576101f8565b366101f857005b5f80fd5b348015610207575f80fd5b5061021061078a565b005b34801561021d575f80fd5b50610226610859565b60405161023391906127fc565b60405180910390f35b348015610247575f80fd5b50610262600480360381019061025d91906128ba565b6108e9565b60405161026f9190612912565b60405180910390f35b348015610283575f80fd5b5061028c61090b565b604051610299919061293a565b60405180910390f35b3480156102ad575f80fd5b506102c860048036038101906102c3919061298a565b610914565b005b3480156102d5575f80fd5b506102f060048036038101906102eb91906129c8565b610a73565b6040516102fd9190612912565b60405180910390f35b348015610311575f80fd5b5061031a610aa1565b6040516103279190612a33565b60405180910390f35b34801561033b575f80fd5b50610356600480360381019061035191906128ba565b610aa9565b6040516103639190612912565b60405180910390f35b348015610377575f80fd5b50610380610adf565b60405161038d9190612a5b565b60405180910390f35b3480156103a1575f80fd5b506103aa610af3565b6040516103b7919061293a565b60405180910390f35b3480156103cb575f80fd5b506103d4610af9565b6040516103e19190612acf565b60405180910390f35b3480156103f5575f80fd5b506103fe610b1e565b005b34801561040b575f80fd5b50610414610bb7565b604051610421919061293a565b60405180910390f35b348015610435575f80fd5b5061043e610bbd565b005b34801561044b575f80fd5b5061046660048036038101906104619190612ae8565b610c88565b604051610473919061293a565b60405180910390f35b348015610487575f80fd5b50610490610ccd565b005b34801561049d575f80fd5b506104a6610ce0565b005b3480156104b3575f80fd5b506104ce60048036038101906104c99190612ae8565b610d7f565b005b3480156104db575f80fd5b506104e4610e51565b6040516104f19190612b22565b60405180910390f35b348015610505575f80fd5b50610520600480360381019061051b9190612b3b565b610e79565b60405161052d919061293a565b60405180910390f35b348015610541575f80fd5b5061054a611051565b60405161055791906127fc565b60405180910390f35b34801561056b575f80fd5b50610586600480360381019061058191906128ba565b6110e1565b6040516105939190612912565b60405180910390f35b3480156105a7575f80fd5b506105b0611156565b6040516105bd9190612b22565b60405180910390f35b3480156105d1575f80fd5b506105da61116e565b6040516105e79190612b22565b60405180910390f35b3480156105fb575f80fd5b50610616600480360381019061061191906128ba565b611193565b6040516106239190612912565b60405180910390f35b348015610637575f80fd5b506106406111b5565b60405161064d9190612a5b565b60405180910390f35b348015610661575f80fd5b5061066a6111c9565b6040516106779190612b22565b60405180910390f35b34801561068b575f80fd5b506106946111ee565b6040516106a19190612a5b565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190612b3b565b611202565b005b3480156106dd575f80fd5b506106f860048036038101906106f39190612b66565b61129b565b604051610705919061293a565b60405180910390f35b348015610719575f80fd5b5061072261131d565b60405161072f919061293a565b60405180910390f35b348015610743575f80fd5b5061075e60048036038101906107599190612ae8565b611323565b005b34801561076b575f80fd5b506107746113a5565b6040516107819190612bc4565b60405180910390f35b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090612c27565b60405180910390fd5b6101f4600b60146101000a81548161ffff021916908361ffff1602179055506101f4600b60166101000a81548161ffff021916908361ffff160217905550565b60606003805461086890612c72565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612c72565b80156108df5780601f106108b6576101008083540402835291602001916108df565b820191905f5260205f20905b8154815290600101906020018083116108c257829003601f168201915b5050505050905090565b5f806108f36113ca565b90506109008185856113d1565b600191505092915050565b5f600254905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90612c27565b60405180910390fd5b6101f48261ffff1611156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390612cec565b60405180910390fd5b6101f48161ffff161115610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90612d54565b60405180910390fd5b81600b60146101000a81548161ffff021916908361ffff16021790555080600b60166101000a81548161ffff021916908361ffff1602179055505050565b5f80610a7d6113ca565b9050610a8a858285611594565b610a9585858561161f565b60019150509392505050565b5f6012905090565b5f80610ab36113ca565b9050610ad4818585610ac5858961129b565b610acf9190612d9f565b6113d1565b600191505092915050565b600b60149054906101000a900461ffff1681565b600d5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490612c27565b60405180910390fd5b610bb5611b78565b565b600c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390612c27565b60405180910390fd5b5f600b60146101000a81548161ffff021916908361ffff1602179055505f600b60166101000a81548161ffff021916908361ffff160217905550565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cd5611dba565b610cde5f611e38565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690612c27565b60405180910390fd5b5f600c819055505f600d81905550565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590612c27565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600267ffffffffffffffff811115610e9657610e95612dd2565b5b604051908082528060200260200182016040528015610ec45781602001602082028036833780820191505090505b50905030815f81518110610edb57610eda612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610f4b57610f4a612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401610fe1929190612ee3565b5f60405180830381865afa92505050801561101e57506040513d5f823e3d601f19601f8201168201806040525081019061101b9190613038565b60015b61102b575f91505061104c565b8060018151811061103f5761103e612dff565b5b6020026020010151925050505b919050565b60606004805461106090612c72565b80601f016020809104026020016040519081016040528092919081815260200182805461108c90612c72565b80156110d75780601f106110ae576101008083540402835291602001916110d7565b820191905f5260205f20905b8154815290600101906020018083116110ba57829003601f168201915b5050505050905090565b5f806110eb6113ca565b90505f6110f8828661129b565b90508381101561113d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611134906130ef565b60405180910390fd5b61114a82868684036113d1565b60019250505092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8061119d6113ca565b90506111aa81858561161f565b600191505092915050565b600b60169054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60189054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128890612c27565b60405180910390fd5b80600e8190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e5481565b61132b611dba565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113909061317d565b60405180910390fd5b6113a281611e38565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361143f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114369061320b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490613299565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611587919061293a565b60405180910390a3505050565b5f61159f848461129b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611619578181101561160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613301565b60405180910390fd5b61161884848484036113d1565b5b50505050565b8282600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311806116a85750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205443115b6116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de9061338f565b60405180910390fd5b6116ef610e51565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061175a575061172b610e51565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806117b15750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806118085750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061181e5750600f5f9054906101000a900460ff165b156118335761182e858585611efb565b611aed565b5f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156118d15750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015611970575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156119db5750600f5f9054906101000a900460ff16155b156119e9576119e8612167565b5b8115611a0757600b60149054906101000a900461ffff1661ffff1692505b8015611a2557600b60169054906101000a900461ffff1661ffff1692505b5f6127108488611a3591906133ad565b611a3f919061341b565b90505f612710600b60189054906101000a900461ffff1661ffff1689611a6591906133ad565b611a6f919061341b565b90505f8183611a7e9190612d9f565b89611a89919061344b565b90505f600d541115611a9f57611a9e89612419565b5b848015611aad57505f600c54115b15611abd57611abc8a826124d5565b5b5f821115611ad057611acf8b836125a5565b5b611adb8b3085611efb565b611ae68b8b83611efb565b5050505050505b43600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050505050565b6001600f5f6101000a81548160ff0219169083151502179055505f611b9c30610c88565b90505f600267ffffffffffffffff811115611bba57611bb9612dd2565b5b604051908082528060200260200182016040528015611be85781602001602082028036833780820191505090505b50905030815f81518110611bff57611bfe612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611c6f57611c6e612dff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611d0b9594939291906134b7565b5f604051808303815f87803b158015611d22575f80fd5b505af1158015611d34573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611d9c573d5f803e3d5ffd5b5050505f600f5f6101000a81548160ff021916908315150217905550565b611dc26113ca565b73ffffffffffffffffffffffffffffffffffffffff16611de0610e51565b73ffffffffffffffffffffffffffffffffffffffff1614611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613559565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f60906135e7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90613675565b60405180910390fd5b611fe2838383612768565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90613703565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214e919061293a565b60405180910390a361216184848461276d565b50505050565b5f61217961217430610c88565b610e79565b90505f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156121e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061220b919061379d565b50915091505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d79190613801565b73ffffffffffffffffffffffffffffffffffffffff160361230a57826dffffffffffffffffffffffffffff169050612400565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d09190613801565b73ffffffffffffffffffffffffffffffffffffffff16036123ff57816dffffffffffffffffffffffffffff1690505b5b600e5484111561241357612412611b78565b5b50505050565b612421610e51565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061248757503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156124d257600d548111156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c89061389c565b60405180910390fd5b5b50565b6124dd610e51565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061254357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125a157600c548161255584610c88565b61255f9190612d9f565b11156125a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259790613904565b60405180910390fd5b5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a90613992565b60405180910390fd5b61261e825f83612768565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156126a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269890613a20565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612750919061293a565b60405180910390a3612763835f8461276d565b505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156127a957808201518184015260208101905061278e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6127ce82612772565b6127d8818561277c565b93506127e881856020860161278c565b6127f1816127b4565b840191505092915050565b5f6020820190508181035f83015261281481846127c4565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128568261282d565b9050919050565b6128668161284c565b8114612870575f80fd5b50565b5f813590506128818161285d565b92915050565b5f819050919050565b61289981612887565b81146128a3575f80fd5b50565b5f813590506128b481612890565b92915050565b5f80604083850312156128d0576128cf612825565b5b5f6128dd85828601612873565b92505060206128ee858286016128a6565b9150509250929050565b5f8115159050919050565b61290c816128f8565b82525050565b5f6020820190506129255f830184612903565b92915050565b61293481612887565b82525050565b5f60208201905061294d5f83018461292b565b92915050565b5f61ffff82169050919050565b61296981612953565b8114612973575f80fd5b50565b5f8135905061298481612960565b92915050565b5f80604083850312156129a05761299f612825565b5b5f6129ad85828601612976565b92505060206129be85828601612976565b9150509250929050565b5f805f606084860312156129df576129de612825565b5b5f6129ec86828701612873565b93505060206129fd86828701612873565b9250506040612a0e868287016128a6565b9150509250925092565b5f60ff82169050919050565b612a2d81612a18565b82525050565b5f602082019050612a465f830184612a24565b92915050565b612a5581612953565b82525050565b5f602082019050612a6e5f830184612a4c565b92915050565b5f819050919050565b5f612a97612a92612a8d8461282d565b612a74565b61282d565b9050919050565b5f612aa882612a7d565b9050919050565b5f612ab982612a9e565b9050919050565b612ac981612aaf565b82525050565b5f602082019050612ae25f830184612ac0565b92915050565b5f60208284031215612afd57612afc612825565b5b5f612b0a84828501612873565b91505092915050565b612b1c8161284c565b82525050565b5f602082019050612b355f830184612b13565b92915050565b5f60208284031215612b5057612b4f612825565b5b5f612b5d848285016128a6565b91505092915050565b5f8060408385031215612b7c57612b7b612825565b5b5f612b8985828601612873565b9250506020612b9a85828601612873565b9150509250929050565b5f612bae82612a9e565b9050919050565b612bbe81612ba4565b82525050565b5f602082019050612bd75f830184612bb5565b92915050565b7f496e73756666696369656e74205065726d697373696f6e7300000000000000005f82015250565b5f612c1160188361277c565b9150612c1c82612bdd565b602082019050919050565b5f6020820190508181035f830152612c3e81612c05565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612c8957607f821691505b602082108103612c9c57612c9b612c45565b5b50919050565b7f427579205461782043616e6e6f742045786365656420352500000000000000005f82015250565b5f612cd660188361277c565b9150612ce182612ca2565b602082019050919050565b5f6020820190508181035f830152612d0381612cca565b9050919050565b7f53656c6c205461782043616e6e6f7420457863656564203525000000000000005f82015250565b5f612d3e60198361277c565b9150612d4982612d0a565b602082019050919050565b5f6020820190508181035f830152612d6b81612d32565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612da982612887565b9150612db483612887565b9250828201905080821115612dcc57612dcb612d72565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e5e8161284c565b82525050565b5f612e6f8383612e55565b60208301905092915050565b5f602082019050919050565b5f612e9182612e2c565b612e9b8185612e36565b9350612ea683612e46565b805f5b83811015612ed6578151612ebd8882612e64565b9750612ec883612e7b565b925050600181019050612ea9565b5085935050505092915050565b5f604082019050612ef65f83018561292b565b8181036020830152612f088184612e87565b90509392505050565b5f80fd5b612f1e826127b4565b810181811067ffffffffffffffff82111715612f3d57612f3c612dd2565b5b80604052505050565b5f612f4f61281c565b9050612f5b8282612f15565b919050565b5f67ffffffffffffffff821115612f7a57612f79612dd2565b5b602082029050602081019050919050565b5f80fd5b5f81519050612f9d81612890565b92915050565b5f612fb5612fb084612f60565b612f46565b90508083825260208201905060208402830185811115612fd857612fd7612f8b565b5b835b818110156130015780612fed8882612f8f565b845260208401935050602081019050612fda565b5050509392505050565b5f82601f83011261301f5761301e612f11565b5b815161302f848260208601612fa3565b91505092915050565b5f6020828403121561304d5761304c612825565b5b5f82015167ffffffffffffffff81111561306a57613069612829565b5b6130768482850161300b565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130d960258361277c565b91506130e48261307f565b604082019050919050565b5f6020820190508181035f830152613106816130cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61316760268361277c565b91506131728261310d565b604082019050919050565b5f6020820190508181035f8301526131948161315b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131f560248361277c565b91506132008261319b565b604082019050919050565b5f6020820190508181035f830152613222816131e9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61328360228361277c565b915061328e82613229565b604082019050919050565b5f6020820190508181035f8301526132b081613277565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132eb601d8361277c565b91506132f6826132b7565b602082019050919050565b5f6020820190508181035f830152613318816132df565b9050919050565b7f43616e6e6f7420706572666f726d206d6f7265207468616e206f6e65207472615f8201527f6e73616374696f6e20696e207468652073616d6520626c6f636b000000000000602082015250565b5f613379603a8361277c565b91506133848261331f565b604082019050919050565b5f6020820190508181035f8301526133a68161336d565b9050919050565b5f6133b782612887565b91506133c283612887565b92508282026133d081612887565b915082820484148315176133e7576133e6612d72565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61342582612887565b915061343083612887565b9250826134405761343f6133ee565b5b828204905092915050565b5f61345582612887565b915061346083612887565b925082820390508181111561347857613477612d72565b5b92915050565b5f819050919050565b5f6134a161349c6134978461347e565b612a74565b612887565b9050919050565b6134b181613487565b82525050565b5f60a0820190506134ca5f83018861292b565b6134d760208301876134a8565b81810360408301526134e98186612e87565b90506134f86060830185612b13565b613505608083018461292b565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61354360208361277c565b915061354e8261350f565b602082019050919050565b5f6020820190508181035f83015261357081613537565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6135d160258361277c565b91506135dc82613577565b604082019050919050565b5f6020820190508181035f8301526135fe816135c5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61365f60238361277c565b915061366a82613605565b604082019050919050565b5f6020820190508181035f83015261368c81613653565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6136ed60268361277c565b91506136f882613693565b604082019050919050565b5f6020820190508181035f83015261371a816136e1565b9050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61374381613721565b811461374d575f80fd5b50565b5f8151905061375e8161373a565b92915050565b5f63ffffffff82169050919050565b61377c81613764565b8114613786575f80fd5b50565b5f8151905061379781613773565b92915050565b5f805f606084860312156137b4576137b3612825565b5b5f6137c186828701613750565b93505060206137d286828701613750565b92505060406137e386828701613789565b9150509250925092565b5f815190506137fb8161285d565b92915050565b5f6020828403121561381657613815612825565b5b5f613823848285016137ed565b91505092915050565b7f4d617820746f6b656e20706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f61388660228361277c565b91506138918261382c565b604082019050919050565b5f6020820190508181035f8301526138b38161387a565b9050919050565b7f4d617820746f6b656e207065722077616c6c65742065786365656465640000005f82015250565b5f6138ee601d8361277c565b91506138f9826138ba565b602082019050919050565b5f6020820190508181035f83015261391b816138e2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61397c60218361277c565b915061398782613922565b604082019050919050565b5f6020820190508181035f8301526139a981613970565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a0a60228361277c565b9150613a15826139b0565b604082019050919050565b5f6020820190508181035f830152613a37816139fe565b905091905056fea2646970667358221220b9892d6b3fa7d84e33e65c0edb2d0c06c214759b6f60f454af65e92721a3628364736f6c63430008180033

Deployed Bytecode Sourcemap

30223:7022:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36887:173;;;;;;;;;;;;;:::i;:::-;;9514:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11940:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10643:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36267:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12746:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10485:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13450:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30682:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30889:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30399:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35637:146;;;;;;;;;;;;;:::i;:::-;;30815:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36024:174;;;;;;;;;;;;;:::i;:::-;;10814:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2835:103;;;;;;;;;;;;;:::i;:::-;;35791:193;;;;;;;;;;;;;:::i;:::-;;37068:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2194:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32746:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9733:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14216:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30295:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30479:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11163:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30726:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30560:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30771:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36678:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11444:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30964:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3093:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30440:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36887:173;36945:11;;;;;;;;;;;36931:25;;:10;:25;;;36923:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37015:3;36996:16;;:22;;;;;;;;;;;;;;;;;;37049:3;37029:17;;:23;;;;;;;;;;;;;;;;;;36887:173::o;9514:100::-;9568:13;9601:5;9594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9514:100;:::o;11940:226::-;12048:4;12065:13;12081:12;:10;:12::i;:::-;12065:28;;12104:32;12113:5;12120:7;12129:6;12104:8;:32::i;:::-;12154:4;12147:11;;;11940:226;;;;:::o;10643:108::-;10704:7;10731:12;;10724:19;;10643:108;:::o;36267:403::-;36380:11;;;;;;;;;;;36366:25;;:10;:25;;;36358:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36460:3;36439:17;:24;;;;36431:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36533:3;36511:18;:25;;;;36503:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36596:17;36577:16;;:36;;;;;;;;;;;;;;;;;;36644:18;36624:17;;:38;;;;;;;;;;;;;;;;;;36267:403;;:::o;12746:295::-;12877:4;12894:15;12912:12;:10;:12::i;:::-;12894:30;;12935:38;12951:4;12957:7;12966:6;12935:15;:38::i;:::-;12984:27;12994:4;13000:2;13004:6;12984:9;:27::i;:::-;13029:4;13022:11;;;12746:295;;;;;:::o;10485:93::-;10543:5;10568:2;10561:9;;10485:93;:::o;13450:263::-;13563:4;13580:13;13596:12;:10;:12::i;:::-;13580:28;;13619:64;13628:5;13635:7;13672:10;13644:25;13654:5;13661:7;13644:9;:25::i;:::-;:38;;;;:::i;:::-;13619:8;:64::i;:::-;13701:4;13694:11;;;13450:263;;;;:::o;30682:37::-;;;;;;;;;;;;;:::o;30889:66::-;;;;:::o;30399:34::-;;;;;;;;;;;;;:::o;35637:146::-;35699:11;;;;;;;;;;;35685:25;;:10;:25;;;35677:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35750:25;:23;:25::i;:::-;35637:146::o;30815:67::-;;;;:::o;36024:174::-;36087:11;;;;;;;;;;;36073:25;;:10;:25;;;36065:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36157:1;36138:16;;:20;;;;;;;;;;;;;;;;;;36189:1;36169:17;;:21;;;;;;;;;;;;;;;;;;36024:174::o;10814:143::-;10904:7;10931:9;:18;10941:7;10931:18;;;;;;;;;;;;;;;;10924:25;;10814:143;;;:::o;2835:103::-;2080:13;:11;:13::i;:::-;2900:30:::1;2927:1;2900:18;:30::i;:::-;2835:103::o:0;35791:193::-;35855:11;;;;;;;;;;;35841:25;;:10;:25;;;35833:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35932:1;35906:23;:27;;;;35975:1;35944:28;:32;;;;35791:193::o;37068:174::-;37157:11;;;;;;;;;;;37143:25;;:10;:25;;;37135:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37222:12;37208:11;;:26;;;;;;;;;;;;;;;;;;37068:174;:::o;2194:87::-;2240:7;2267:6;;;;;;;;;;;2260:13;;2194:87;:::o;32746:412::-;32834:7;32854:21;32892:1;32878:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32854:40;;32923:4;32905;32910:1;32905:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32949:4;;;;;;;;;;;32939;32944:1;32939:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;32968:6;;;;;;;;;;;:20;;;32989:6;32997:4;32968:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32964:187;;33138:1;33131:8;;;;;32964:187;33084:10;33095:1;33084:13;;;;;;;;:::i;:::-;;;;;;;;33077:20;;;;32746:412;;;;:::o;9733:104::-;9789:13;9822:7;9815:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9733:104;:::o;14216:498::-;14334:4;14351:13;14367:12;:10;:12::i;:::-;14351:28;;14390:24;14417:25;14427:5;14434:7;14417:9;:25::i;:::-;14390:52;;14495:15;14475:16;:35;;14453:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14611:60;14620:5;14627:7;14655:15;14636:16;:34;14611:8;:60::i;:::-;14702:4;14695:11;;;;14216:498;;;;:::o;30295:95::-;30348:42;30295:95;:::o;30479:19::-;;;;;;;;;;;;;:::o;11163:218::-;11267:4;11284:13;11300:12;:10;:12::i;:::-;11284:28;;11323;11333:5;11340:2;11344:6;11323:9;:28::i;:::-;11369:4;11362:11;;;11163:218;;;;:::o;30726:38::-;;;;;;;;;;;;;:::o;30560:71::-;;;;;;;;;;;;;:::o;30771:35::-;;;;;;;;;;;;;:::o;36678:175::-;36766:11;;;;;;;;;;;36752:25;;:10;:25;;;36744:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36832:13;36817:12;:28;;;;36678:175;:::o;11444:176::-;11558:7;11585:11;:18;11597:5;11585:18;;;;;;;;;;;;;;;:27;11604:7;11585:27;;;;;;;;;;;;;;;;11578:34;;11444:176;;;;:::o;30964:48::-;;;;:::o;3093:238::-;2080:13;:11;:13::i;:::-;3216:1:::1;3196:22;;:8;:22;;::::0;3174:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3295:28;3314:8;3295:18;:28::i;:::-;3093:238:::0;:::o;30440:32::-;;;;;;;;;;;;;:::o;718:98::-;771:7;798:10;791:17;;718:98;:::o;18342:380::-;18495:1;18478:19;;:5;:19;;;18470:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18576:1;18557:21;;:7;:21;;;18549:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18660:6;18630:11;:18;18642:5;18630:18;;;;;;;;;;;;;;;:27;18649:7;18630:27;;;;;;;;;;;;;;;:36;;;;18698:7;18682:32;;18691:5;18682:32;;;18707:6;18682:32;;;;;;:::i;:::-;;;;;;;;18342:380;;;:::o;19013:502::-;19148:24;19175:25;19185:5;19192:7;19175:9;:25::i;:::-;19148:52;;19235:17;19215:16;:37;19211:297;;19315:6;19295:16;:26;;19269:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19430:51;19439:5;19446:7;19474:6;19455:16;:25;19430:8;:51::i;:::-;19211:297;19137:378;19013:502;;;:::o;34174:1455::-;34293:4;34299:2;31871:8;:14;31880:4;31871:14;;;;;;;;;;;;;;;;31856:12;:29;:60;;;;31904:8;:12;31913:2;31904:12;;;;;;;;;;;;;;;;31889;:27;31856:60;31834:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34340:7:::1;:5;:7::i;:::-;34332:15;;:4;:15;;;:45;;;;34370:7;:5;:7::i;:::-;34364:13;;:2;:13;;;34332:45;:81;;;;34402:11;;;;;;;;;;;34394:19;;:4;:19;;;34332:81;:115;;;;34436:11;;;;;;;;;;;34430:17;;:2;:17;;;34332:115;:138;;;;34464:6;;;;;;;;;;;34332:138;34314:1308;;;34497:33;34513:4;34519:2;34523:6;34497:15;:33::i;:::-;34314:1308;;;34563:21;34603:11:::0;34625:4:::1;;;;;;;;;;;34617:12;;:4;:12;;;:39;;;;;30348:42;34633:23;;:2;:23;;;;34617:39;34603:53;;34671:12;30348:42;34686:25;;:4;:25;;;;:39;;;;;34721:4;;;;;;;;;;;34715:10;;:2;:10;;;34686:39;34671:54;;34758:4;;;;;;;;;;;34744:18;;:10;:18;;;;:29;;;;;34767:6;;;;;;;;;;;34766:7;34744:29;34740:51;;;34775:16;:14;:16::i;:::-;34740:51;34810:6;34806:79;;;34853:16;;;;;;;;;;;34837:32;;;;34806:79;34903:7;34899:81;;;34947:17;;;;;;;;;;;34931:33;;;;34899:81;34994:17;35042:5;35024:13;35015:6;:22;;;;:::i;:::-;35014:34;;;;:::i;:::-;34994:54;;35063:21;35119:5;35097:17;;;;;;;;;;;35088:26;;:6;:26;;;;:::i;:::-;35087:38;;;;:::i;:::-;35063:62;;35140:19;35185:13;35173:9;:25;;;;:::i;:::-;35163:6;:36;;;;:::i;:::-;35140:60;;35250:1;35219:28;;:32;35215:96;;;35270:41;35304:6;35270:33;:41::i;:::-;35215:96;35330:6;:37;;;;;35366:1;35340:23;;:27;35330:37;35326:105;;;35386:45;35415:2;35419:11;35386:28;:45::i;:::-;35326:105;35466:1;35450:13;:17;35446:49;;;35469:26;35475:4;35481:13;35469:5;:26::i;:::-;35446:49;35510:47;35526:4;35540;35547:9;35510:15;:47::i;:::-;35572:38;35588:4;35594:2;35598:11;35572:15;:38::i;:::-;34548:1074;;;;;;34314:1308;32042:12:::0;32025:8;:14;32034:4;32025:14;;;;;;;;;;;;;;;:29;;;;32080:12;32065:8;:12;32074:2;32065:12;;;;;;;;;;;;;;;:27;;;;34174:1455;;;;;:::o;33166:485::-;31098:4;31089:6;;:13;;;;;;;;;;;;;;;;;;33232:16:::1;33251:24;33269:4;33251:9;:24::i;:::-;33232:43;;33286:21;33324:1;33310:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33286:40;;33355:4;33337;33342:1;33337:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;33381:4;;;;;;;;;;;33371;33376:1;33371:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;33396:6;;;;;;;;;;;:57;;;33468:8;33491:1;33507:4;33534;33554:15;33396:184;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33599:11;;;;;;;;;;;33591:29;;:52;33621:21;33591:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33221:430;;31134:5:::0;31125:6;;:14;;;;;;;;;;;;;;;;;;33166:485::o;2359:132::-;2434:12;:10;:12::i;:::-;2423:23;;:7;:5;:7::i;:::-;:23;;;2415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2359:132::o;3491:191::-;3565:16;3584:6;;;;;;;;;;;3565:25;;3610:8;3601:6;;:17;;;;;;;;;;;;;;;;;;3665:8;3634:40;;3655:8;3634:40;;;;;;;;;;;;3554:128;3491:191;:::o;15184:877::-;15331:1;15315:18;;:4;:18;;;15307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15408:1;15394:16;;:2;:16;;;15386:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15463:38;15484:4;15490:2;15494:6;15463:20;:38::i;:::-;15514:19;15536:9;:15;15546:4;15536:15;;;;;;;;;;;;;;;;15514:37;;15599:6;15584:11;:21;;15562:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15739:6;15725:11;:20;15707:9;:15;15717:4;15707:15;;;;;;;;;;;;;;;:38;;;;15942:6;15925:9;:13;15935:2;15925:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15992:2;15977:26;;15986:4;15977:26;;;15996:6;15977:26;;;;;;:::i;:::-;;;;;;;;16016:37;16036:4;16042:2;16046:6;16016:19;:37::i;:::-;15296:765;15184:877;;;:::o;33659:507::-;33704:19;33726:75;33766:24;33784:4;33766:9;:24::i;:::-;33726:25;:75::i;:::-;33704:97;;33813:16;33831;33853:12;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33812:67;;;;;33890:22;33952:4;;;;;;;;;;;33927:29;;:12;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;33923:167;;33983:8;33975:17;;33958:34;;33923:167;;;34037:4;;;;;;;;;;;34012:29;;:12;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;34008:82;;34081:8;34073:17;;34056:34;;34008:82;33923:167;34119:12;;34105:11;:26;34101:57;;;34133:25;:23;:25::i;:::-;34101:57;33693:473;;;;33659:507::o;32108:296::-;32209:7;:5;:7::i;:::-;32195:21;;:10;:21;;;;:52;;;;32242:4;32220:27;;:10;:27;;;;32195:52;32191:205;;;32298:28;;32288:6;:38;;32262:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;32191:205;32108:296;:::o;32412:326::-;32545:7;:5;:7::i;:::-;32531:21;;:10;:21;;;;:44;;;;32570:4;32556:19;;:2;:19;;;;32531:44;32527:203;;;32642:23;;32632:6;32616:13;32626:2;32616:9;:13::i;:::-;:22;;;;:::i;:::-;:49;;32590:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32527:203;32412:326;;:::o;17229:675::-;17332:1;17313:21;;:7;:21;;;17305:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17385:49;17406:7;17423:1;17427:6;17385:20;:49::i;:::-;17447:22;17472:9;:18;17482:7;17472:18;;;;;;;;;;;;;;;;17447:43;;17527:6;17509:14;:24;;17501:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17646:6;17629:14;:23;17608:9;:18;17618:7;17608:18;;;;;;;;;;;;;;;:44;;;;17763:6;17747:12;;:22;;;;;;;;;;;17824:1;17798:37;;17807:7;17798:37;;;17828:6;17798:37;;;;;;:::i;:::-;;;;;;;;17848:48;17868:7;17885:1;17889:6;17848:19;:48::i;:::-;17294:610;17229:675;;:::o;20115:125::-;;;;:::o;20844:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::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:89::-;3834:7;3874:6;3867:5;3863:18;3852:29;;3798:89;;;:::o;3893:120::-;3965:23;3982:5;3965:23;:::i;:::-;3958:5;3955:34;3945:62;;4003:1;4000;3993:12;3945:62;3893:120;:::o;4019:137::-;4064:5;4102:6;4089:20;4080:29;;4118:32;4144:5;4118:32;:::i;:::-;4019:137;;;;:::o;4162:470::-;4228:6;4236;4285:2;4273:9;4264:7;4260:23;4256:32;4253:119;;;4291:79;;:::i;:::-;4253:119;4411:1;4436:52;4480:7;4471:6;4460:9;4456:22;4436:52;:::i;:::-;4426:62;;4382:116;4537:2;4563:52;4607:7;4598:6;4587:9;4583:22;4563:52;:::i;:::-;4553:62;;4508:117;4162:470;;;;;:::o;4638:619::-;4715:6;4723;4731;4780:2;4768:9;4759:7;4755:23;4751:32;4748:119;;;4786:79;;:::i;:::-;4748:119;4906:1;4931:53;4976:7;4967:6;4956:9;4952:22;4931:53;:::i;:::-;4921:63;;4877:117;5033:2;5059:53;5104:7;5095:6;5084:9;5080:22;5059:53;:::i;:::-;5049:63;;5004:118;5161:2;5187:53;5232:7;5223:6;5212:9;5208:22;5187:53;:::i;:::-;5177:63;;5132:118;4638:619;;;;;:::o;5263:86::-;5298:7;5338:4;5331:5;5327:16;5316:27;;5263:86;;;:::o;5355:112::-;5438:22;5454:5;5438:22;:::i;:::-;5433:3;5426:35;5355:112;;:::o;5473:214::-;5562:4;5600:2;5589:9;5585:18;5577:26;;5613:67;5677:1;5666:9;5662:17;5653:6;5613:67;:::i;:::-;5473:214;;;;:::o;5693:115::-;5778:23;5795:5;5778:23;:::i;:::-;5773:3;5766:36;5693:115;;:::o;5814:218::-;5905:4;5943:2;5932:9;5928:18;5920:26;;5956:69;6022:1;6011:9;6007:17;5998:6;5956:69;:::i;:::-;5814:218;;;;:::o;6038:60::-;6066:3;6087:5;6080:12;;6038:60;;;:::o;6104:142::-;6154:9;6187:53;6205:34;6214:24;6232:5;6214:24;:::i;:::-;6205:34;:::i;:::-;6187:53;:::i;:::-;6174:66;;6104:142;;;:::o;6252:126::-;6302:9;6335:37;6366:5;6335:37;:::i;:::-;6322:50;;6252:126;;;:::o;6384:149::-;6457:9;6490:37;6521:5;6490:37;:::i;:::-;6477:50;;6384:149;;;:::o;6539:177::-;6649:60;6703:5;6649:60;:::i;:::-;6644:3;6637:73;6539:177;;:::o;6722:268::-;6838:4;6876:2;6865:9;6861:18;6853:26;;6889:94;6980:1;6969:9;6965:17;6956:6;6889:94;:::i;:::-;6722:268;;;;:::o;6996:329::-;7055:6;7104:2;7092:9;7083:7;7079:23;7075:32;7072:119;;;7110:79;;:::i;:::-;7072:119;7230:1;7255:53;7300:7;7291:6;7280:9;7276:22;7255:53;:::i;:::-;7245:63;;7201:117;6996:329;;;;:::o;7331:118::-;7418:24;7436:5;7418:24;:::i;:::-;7413:3;7406:37;7331:118;;:::o;7455:222::-;7548:4;7586:2;7575:9;7571:18;7563:26;;7599:71;7667:1;7656:9;7652:17;7643:6;7599:71;:::i;:::-;7455:222;;;;:::o;7683:329::-;7742:6;7791:2;7779:9;7770:7;7766:23;7762:32;7759:119;;;7797:79;;:::i;:::-;7759:119;7917:1;7942:53;7987:7;7978:6;7967:9;7963:22;7942:53;:::i;:::-;7932:63;;7888:117;7683:329;;;;:::o;8018:474::-;8086:6;8094;8143:2;8131:9;8122:7;8118:23;8114:32;8111:119;;;8149:79;;:::i;:::-;8111:119;8269:1;8294:53;8339:7;8330:6;8319:9;8315:22;8294:53;:::i;:::-;8284:63;;8240:117;8396:2;8422:53;8467:7;8458:6;8447:9;8443:22;8422:53;:::i;:::-;8412:63;;8367:118;8018:474;;;;;:::o;8498:153::-;8575:9;8608:37;8639:5;8608:37;:::i;:::-;8595:50;;8498:153;;;:::o;8657:185::-;8771:64;8829:5;8771:64;:::i;:::-;8766:3;8759:77;8657:185;;:::o;8848:276::-;8968:4;9006:2;8995:9;8991:18;8983:26;;9019:98;9114:1;9103:9;9099:17;9090:6;9019:98;:::i;:::-;8848:276;;;;:::o;9130:174::-;9270:26;9266:1;9258:6;9254:14;9247:50;9130:174;:::o;9310:366::-;9452:3;9473:67;9537:2;9532:3;9473:67;:::i;:::-;9466:74;;9549:93;9638:3;9549:93;:::i;:::-;9667:2;9662:3;9658:12;9651:19;;9310:366;;;:::o;9682:419::-;9848:4;9886:2;9875:9;9871:18;9863:26;;9935:9;9929:4;9925:20;9921:1;9910:9;9906:17;9899:47;9963:131;10089:4;9963:131;:::i;:::-;9955:139;;9682:419;;;:::o;10107:180::-;10155:77;10152:1;10145:88;10252:4;10249:1;10242:15;10276:4;10273:1;10266:15;10293:320;10337:6;10374:1;10368:4;10364:12;10354:22;;10421:1;10415:4;10411:12;10442:18;10432:81;;10498:4;10490:6;10486:17;10476:27;;10432:81;10560:2;10552:6;10549:14;10529:18;10526:38;10523:84;;10579:18;;:::i;:::-;10523:84;10344:269;10293:320;;;:::o;10619:174::-;10759:26;10755:1;10747:6;10743:14;10736:50;10619:174;:::o;10799:366::-;10941:3;10962:67;11026:2;11021:3;10962:67;:::i;:::-;10955:74;;11038:93;11127:3;11038:93;:::i;:::-;11156:2;11151:3;11147:12;11140:19;;10799:366;;;:::o;11171:419::-;11337:4;11375:2;11364:9;11360:18;11352:26;;11424:9;11418:4;11414:20;11410:1;11399:9;11395:17;11388:47;11452:131;11578:4;11452:131;:::i;:::-;11444:139;;11171:419;;;:::o;11596:175::-;11736:27;11732:1;11724:6;11720:14;11713:51;11596:175;:::o;11777:366::-;11919:3;11940:67;12004:2;11999:3;11940:67;:::i;:::-;11933:74;;12016:93;12105:3;12016:93;:::i;:::-;12134:2;12129:3;12125:12;12118:19;;11777:366;;;:::o;12149:419::-;12315:4;12353:2;12342:9;12338:18;12330:26;;12402:9;12396:4;12392:20;12388:1;12377:9;12373:17;12366:47;12430:131;12556:4;12430:131;:::i;:::-;12422:139;;12149:419;;;:::o;12574:180::-;12622:77;12619:1;12612:88;12719:4;12716:1;12709:15;12743:4;12740:1;12733:15;12760:191;12800:3;12819:20;12837:1;12819:20;:::i;:::-;12814:25;;12853:20;12871:1;12853:20;:::i;:::-;12848:25;;12896:1;12893;12889:9;12882:16;;12917:3;12914:1;12911:10;12908:36;;;12924:18;;:::i;:::-;12908:36;12760:191;;;;:::o;12957:180::-;13005:77;13002:1;12995:88;13102:4;13099:1;13092:15;13126:4;13123:1;13116:15;13143:180;13191:77;13188:1;13181:88;13288:4;13285:1;13278:15;13312:4;13309:1;13302:15;13329:114;13396:6;13430:5;13424:12;13414:22;;13329:114;;;:::o;13449:184::-;13548:11;13582:6;13577:3;13570:19;13622:4;13617:3;13613:14;13598:29;;13449:184;;;;:::o;13639:132::-;13706:4;13729:3;13721:11;;13759:4;13754:3;13750:14;13742:22;;13639:132;;;:::o;13777:108::-;13854:24;13872:5;13854:24;:::i;:::-;13849:3;13842:37;13777:108;;:::o;13891:179::-;13960:10;13981:46;14023:3;14015:6;13981:46;:::i;:::-;14059:4;14054:3;14050:14;14036:28;;13891:179;;;;:::o;14076:113::-;14146:4;14178;14173:3;14169:14;14161:22;;14076:113;;;:::o;14225:732::-;14344:3;14373:54;14421:5;14373:54;:::i;:::-;14443:86;14522:6;14517:3;14443:86;:::i;:::-;14436:93;;14553:56;14603:5;14553:56;:::i;:::-;14632:7;14663:1;14648:284;14673:6;14670:1;14667:13;14648:284;;;14749:6;14743:13;14776:63;14835:3;14820:13;14776:63;:::i;:::-;14769:70;;14862:60;14915:6;14862:60;:::i;:::-;14852:70;;14708:224;14695:1;14692;14688:9;14683:14;;14648:284;;;14652:14;14948:3;14941:10;;14349:608;;;14225:732;;;;:::o;14963:483::-;15134:4;15172:2;15161:9;15157:18;15149:26;;15185:71;15253:1;15242:9;15238:17;15229:6;15185:71;:::i;:::-;15303:9;15297:4;15293:20;15288:2;15277:9;15273:18;15266:48;15331:108;15434:4;15425:6;15331:108;:::i;:::-;15323:116;;14963:483;;;;;:::o;15452:117::-;15561:1;15558;15551:12;15575:281;15658:27;15680:4;15658:27;:::i;:::-;15650:6;15646:40;15788:6;15776:10;15773:22;15752:18;15740:10;15737:34;15734:62;15731:88;;;15799:18;;:::i;:::-;15731:88;15839:10;15835:2;15828:22;15618:238;15575:281;;:::o;15862:129::-;15896:6;15923:20;;:::i;:::-;15913:30;;15952:33;15980:4;15972:6;15952:33;:::i;:::-;15862:129;;;:::o;15997:311::-;16074:4;16164:18;16156:6;16153:30;16150:56;;;16186:18;;:::i;:::-;16150:56;16236:4;16228:6;16224:17;16216:25;;16296:4;16290;16286:15;16278:23;;15997:311;;;:::o;16314:117::-;16423:1;16420;16413:12;16437:143;16494:5;16525:6;16519:13;16510:22;;16541:33;16568:5;16541:33;:::i;:::-;16437:143;;;;:::o;16603:732::-;16710:5;16735:81;16751:64;16808:6;16751:64;:::i;:::-;16735:81;:::i;:::-;16726:90;;16836:5;16865:6;16858:5;16851:21;16899:4;16892:5;16888:16;16881:23;;16952:4;16944:6;16940:17;16932:6;16928:30;16981:3;16973:6;16970:15;16967:122;;;17000:79;;:::i;:::-;16967:122;17115:6;17098:231;17132:6;17127:3;17124:15;17098:231;;;17207:3;17236:48;17280:3;17268:10;17236:48;:::i;:::-;17231:3;17224:61;17314:4;17309:3;17305:14;17298:21;;17174:155;17158:4;17153:3;17149:14;17142:21;;17098:231;;;17102:21;16716:619;;16603:732;;;;;:::o;17358:385::-;17440:5;17489:3;17482:4;17474:6;17470:17;17466:27;17456:122;;17497:79;;:::i;:::-;17456:122;17607:6;17601:13;17632:105;17733:3;17725:6;17718:4;17710:6;17706:17;17632:105;:::i;:::-;17623:114;;17446:297;17358:385;;;;:::o;17749:554::-;17844:6;17893:2;17881:9;17872:7;17868:23;17864:32;17861:119;;;17899:79;;:::i;:::-;17861:119;18040:1;18029:9;18025:17;18019:24;18070:18;18062:6;18059:30;18056:117;;;18092:79;;:::i;:::-;18056:117;18197:89;18278:7;18269:6;18258:9;18254:22;18197:89;:::i;:::-;18187:99;;17990:306;17749:554;;;;:::o;18309:224::-;18449:34;18445:1;18437:6;18433:14;18426:58;18518:7;18513:2;18505:6;18501:15;18494:32;18309:224;:::o;18539:366::-;18681:3;18702:67;18766:2;18761:3;18702:67;:::i;:::-;18695:74;;18778:93;18867:3;18778:93;:::i;:::-;18896:2;18891:3;18887:12;18880:19;;18539:366;;;:::o;18911:419::-;19077:4;19115:2;19104:9;19100:18;19092:26;;19164:9;19158:4;19154:20;19150:1;19139:9;19135:17;19128:47;19192:131;19318:4;19192:131;:::i;:::-;19184:139;;18911:419;;;:::o;19336:225::-;19476:34;19472:1;19464:6;19460:14;19453:58;19545:8;19540:2;19532:6;19528:15;19521:33;19336:225;:::o;19567:366::-;19709:3;19730:67;19794:2;19789:3;19730:67;:::i;:::-;19723:74;;19806:93;19895:3;19806:93;:::i;:::-;19924:2;19919:3;19915:12;19908:19;;19567:366;;;:::o;19939:419::-;20105:4;20143:2;20132:9;20128:18;20120:26;;20192:9;20186:4;20182:20;20178:1;20167:9;20163:17;20156:47;20220:131;20346:4;20220:131;:::i;:::-;20212:139;;19939:419;;;:::o;20364:223::-;20504:34;20500:1;20492:6;20488:14;20481:58;20573:6;20568:2;20560:6;20556:15;20549:31;20364:223;:::o;20593:366::-;20735:3;20756:67;20820:2;20815:3;20756:67;:::i;:::-;20749:74;;20832:93;20921:3;20832:93;:::i;:::-;20950:2;20945:3;20941:12;20934:19;;20593:366;;;:::o;20965:419::-;21131:4;21169:2;21158:9;21154:18;21146:26;;21218:9;21212:4;21208:20;21204:1;21193:9;21189:17;21182:47;21246:131;21372:4;21246:131;:::i;:::-;21238:139;;20965:419;;;:::o;21390:221::-;21530:34;21526:1;21518:6;21514:14;21507:58;21599:4;21594:2;21586:6;21582:15;21575:29;21390:221;:::o;21617:366::-;21759:3;21780:67;21844:2;21839:3;21780:67;:::i;:::-;21773:74;;21856:93;21945:3;21856:93;:::i;:::-;21974:2;21969:3;21965:12;21958:19;;21617:366;;;:::o;21989:419::-;22155:4;22193:2;22182:9;22178:18;22170:26;;22242:9;22236:4;22232:20;22228:1;22217:9;22213:17;22206:47;22270:131;22396:4;22270:131;:::i;:::-;22262:139;;21989:419;;;:::o;22414:179::-;22554:31;22550:1;22542:6;22538:14;22531:55;22414:179;:::o;22599:366::-;22741:3;22762:67;22826:2;22821:3;22762:67;:::i;:::-;22755:74;;22838:93;22927:3;22838:93;:::i;:::-;22956:2;22951:3;22947:12;22940:19;;22599:366;;;:::o;22971:419::-;23137:4;23175:2;23164:9;23160:18;23152:26;;23224:9;23218:4;23214:20;23210:1;23199:9;23195:17;23188:47;23252:131;23378:4;23252:131;:::i;:::-;23244:139;;22971:419;;;:::o;23396:245::-;23536:34;23532:1;23524:6;23520:14;23513:58;23605:28;23600:2;23592:6;23588:15;23581:53;23396:245;:::o;23647:366::-;23789:3;23810:67;23874:2;23869:3;23810:67;:::i;:::-;23803:74;;23886:93;23975:3;23886:93;:::i;:::-;24004:2;23999:3;23995:12;23988:19;;23647:366;;;:::o;24019:419::-;24185:4;24223:2;24212:9;24208:18;24200:26;;24272:9;24266:4;24262:20;24258:1;24247:9;24243:17;24236:47;24300:131;24426:4;24300:131;:::i;:::-;24292:139;;24019:419;;;:::o;24444:410::-;24484:7;24507:20;24525:1;24507:20;:::i;:::-;24502:25;;24541:20;24559:1;24541:20;:::i;:::-;24536:25;;24596:1;24593;24589:9;24618:30;24636:11;24618:30;:::i;:::-;24607:41;;24797:1;24788:7;24784:15;24781:1;24778:22;24758:1;24751:9;24731:83;24708:139;;24827:18;;:::i;:::-;24708:139;24492:362;24444:410;;;;:::o;24860:180::-;24908:77;24905:1;24898:88;25005:4;25002:1;24995:15;25029:4;25026:1;25019:15;25046:185;25086:1;25103:20;25121:1;25103:20;:::i;:::-;25098:25;;25137:20;25155:1;25137:20;:::i;:::-;25132:25;;25176:1;25166:35;;25181:18;;:::i;:::-;25166:35;25223:1;25220;25216:9;25211:14;;25046:185;;;;:::o;25237:194::-;25277:4;25297:20;25315:1;25297:20;:::i;:::-;25292:25;;25331:20;25349:1;25331:20;:::i;:::-;25326:25;;25375:1;25372;25368:9;25360:17;;25399:1;25393:4;25390:11;25387:37;;;25404:18;;:::i;:::-;25387:37;25237:194;;;;:::o;25437:85::-;25482:7;25511:5;25500:16;;25437:85;;;:::o;25528:158::-;25586:9;25619:61;25637:42;25646:32;25672:5;25646:32;:::i;:::-;25637:42;:::i;:::-;25619:61;:::i;:::-;25606:74;;25528:158;;;:::o;25692:147::-;25787:45;25826:5;25787:45;:::i;:::-;25782:3;25775:58;25692:147;;:::o;25845:831::-;26108:4;26146:3;26135:9;26131:19;26123:27;;26160:71;26228:1;26217:9;26213:17;26204:6;26160:71;:::i;:::-;26241:80;26317:2;26306:9;26302:18;26293:6;26241:80;:::i;:::-;26368:9;26362:4;26358:20;26353:2;26342:9;26338:18;26331:48;26396:108;26499:4;26490:6;26396:108;:::i;:::-;26388:116;;26514:72;26582:2;26571:9;26567:18;26558:6;26514:72;:::i;:::-;26596:73;26664:3;26653:9;26649:19;26640:6;26596:73;:::i;:::-;25845:831;;;;;;;;:::o;26682:182::-;26822:34;26818:1;26810:6;26806:14;26799:58;26682:182;:::o;26870:366::-;27012:3;27033:67;27097:2;27092:3;27033:67;:::i;:::-;27026:74;;27109:93;27198:3;27109:93;:::i;:::-;27227:2;27222:3;27218:12;27211:19;;26870:366;;;:::o;27242:419::-;27408:4;27446:2;27435:9;27431:18;27423:26;;27495:9;27489:4;27485:20;27481:1;27470:9;27466:17;27459:47;27523:131;27649:4;27523:131;:::i;:::-;27515:139;;27242:419;;;:::o;27667:224::-;27807:34;27803:1;27795:6;27791:14;27784:58;27876:7;27871:2;27863:6;27859:15;27852:32;27667:224;:::o;27897:366::-;28039:3;28060:67;28124:2;28119:3;28060:67;:::i;:::-;28053:74;;28136:93;28225:3;28136:93;:::i;:::-;28254:2;28249:3;28245:12;28238:19;;27897:366;;;:::o;28269:419::-;28435:4;28473:2;28462:9;28458:18;28450:26;;28522:9;28516:4;28512:20;28508:1;28497:9;28493:17;28486:47;28550:131;28676:4;28550:131;:::i;:::-;28542:139;;28269:419;;;:::o;28694:222::-;28834:34;28830:1;28822:6;28818:14;28811:58;28903:5;28898:2;28890:6;28886:15;28879:30;28694:222;:::o;28922:366::-;29064:3;29085:67;29149:2;29144:3;29085:67;:::i;:::-;29078:74;;29161:93;29250:3;29161:93;:::i;:::-;29279:2;29274:3;29270:12;29263:19;;28922:366;;;:::o;29294:419::-;29460:4;29498:2;29487:9;29483:18;29475:26;;29547:9;29541:4;29537:20;29533:1;29522:9;29518:17;29511:47;29575:131;29701:4;29575:131;:::i;:::-;29567:139;;29294:419;;;:::o;29719:225::-;29859:34;29855:1;29847:6;29843:14;29836:58;29928:8;29923:2;29915:6;29911:15;29904:33;29719:225;:::o;29950:366::-;30092:3;30113:67;30177:2;30172:3;30113:67;:::i;:::-;30106:74;;30189:93;30278:3;30189:93;:::i;:::-;30307:2;30302:3;30298:12;30291:19;;29950:366;;;:::o;30322:419::-;30488:4;30526:2;30515:9;30511:18;30503:26;;30575:9;30569:4;30565:20;30561:1;30550:9;30546:17;30539:47;30603:131;30729:4;30603:131;:::i;:::-;30595:139;;30322:419;;;:::o;30747:114::-;30784:7;30824:30;30817:5;30813:42;30802:53;;30747:114;;;:::o;30867:122::-;30940:24;30958:5;30940:24;:::i;:::-;30933:5;30930:35;30920:63;;30979:1;30976;30969:12;30920:63;30867:122;:::o;30995:143::-;31052:5;31083:6;31077:13;31068:22;;31099:33;31126:5;31099:33;:::i;:::-;30995:143;;;;:::o;31144:93::-;31180:7;31220:10;31213:5;31209:22;31198:33;;31144:93;;;:::o;31243:120::-;31315:23;31332:5;31315:23;:::i;:::-;31308:5;31305:34;31295:62;;31353:1;31350;31343:12;31295:62;31243:120;:::o;31369:141::-;31425:5;31456:6;31450:13;31441:22;;31472:32;31498:5;31472:32;:::i;:::-;31369:141;;;;:::o;31516:661::-;31603:6;31611;31619;31668:2;31656:9;31647:7;31643:23;31639:32;31636:119;;;31674:79;;:::i;:::-;31636:119;31794:1;31819:64;31875:7;31866:6;31855:9;31851:22;31819:64;:::i;:::-;31809:74;;31765:128;31932:2;31958:64;32014:7;32005:6;31994:9;31990:22;31958:64;:::i;:::-;31948:74;;31903:129;32071:2;32097:63;32152:7;32143:6;32132:9;32128:22;32097:63;:::i;:::-;32087:73;;32042:128;31516:661;;;;;:::o;32183:143::-;32240:5;32271:6;32265:13;32256:22;;32287:33;32314:5;32287:33;:::i;:::-;32183:143;;;;:::o;32332:351::-;32402:6;32451:2;32439:9;32430:7;32426:23;32422:32;32419:119;;;32457:79;;:::i;:::-;32419:119;32577:1;32602:64;32658:7;32649:6;32638:9;32634:22;32602:64;:::i;:::-;32592:74;;32548:128;32332:351;;;;:::o;32689:221::-;32829:34;32825:1;32817:6;32813:14;32806:58;32898:4;32893:2;32885:6;32881:15;32874:29;32689:221;:::o;32916:366::-;33058:3;33079:67;33143:2;33138:3;33079:67;:::i;:::-;33072:74;;33155:93;33244:3;33155:93;:::i;:::-;33273:2;33268:3;33264:12;33257:19;;32916:366;;;:::o;33288:419::-;33454:4;33492:2;33481:9;33477:18;33469:26;;33541:9;33535:4;33531:20;33527:1;33516:9;33512:17;33505:47;33569:131;33695:4;33569:131;:::i;:::-;33561:139;;33288:419;;;:::o;33713:179::-;33853:31;33849:1;33841:6;33837:14;33830:55;33713:179;:::o;33898:366::-;34040:3;34061:67;34125:2;34120:3;34061:67;:::i;:::-;34054:74;;34137:93;34226:3;34137:93;:::i;:::-;34255:2;34250:3;34246:12;34239:19;;33898:366;;;:::o;34270:419::-;34436:4;34474:2;34463:9;34459:18;34451:26;;34523:9;34517:4;34513:20;34509:1;34498:9;34494:17;34487:47;34551:131;34677:4;34551:131;:::i;:::-;34543:139;;34270:419;;;:::o;34695:220::-;34835:34;34831:1;34823:6;34819:14;34812:58;34904:3;34899:2;34891:6;34887:15;34880:28;34695:220;:::o;34921:366::-;35063:3;35084:67;35148:2;35143:3;35084:67;:::i;:::-;35077:74;;35160:93;35249:3;35160:93;:::i;:::-;35278:2;35273:3;35269:12;35262:19;;34921:366;;;:::o;35293:419::-;35459:4;35497:2;35486:9;35482:18;35474:26;;35546:9;35540:4;35536:20;35532:1;35521:9;35517:17;35510:47;35574:131;35700:4;35574:131;:::i;:::-;35566:139;;35293:419;;;:::o;35718:221::-;35858:34;35854:1;35846:6;35842:14;35835:58;35927:4;35922:2;35914:6;35910:15;35903:29;35718:221;:::o;35945:366::-;36087:3;36108:67;36172:2;36167:3;36108:67;:::i;:::-;36101:74;;36184:93;36273:3;36184:93;:::i;:::-;36302:2;36297:3;36293:12;36286:19;;35945:366;;;:::o;36317:419::-;36483:4;36521:2;36510:9;36506:18;36498:26;;36570:9;36564:4;36560:20;36556:1;36545:9;36541:17;36534:47;36598:131;36724:4;36598:131;:::i;:::-;36590:139;;36317:419;;;:::o

Swarm Source

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