ETH Price: $3,008.21 (+4.02%)
Gas: 9 Gwei

Token

Feet Coin (FEET)
 

Overview

Max Total Supply

787,816,846,809.12640852188523813 FEET

Holders

3,165 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
liubenben.eth
Balance
98,909.858275404034589519 FEET

Value
$0.00
0xd5d171a9aa125af13216c3213b5a9fc793fccf2c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Every MEME needs $FEET! $FEET is a deflationary and reflection based meme token to commemorate the love for feet

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CoinManufactory

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-26
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(
            currentAllowance >= amount,
            "ERC20: burn amount exceeds allowance"
        );
        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }
        _burn(account, amount);
    }
}

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.6.2;

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

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

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

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

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

contract CoinManufactory is ERC20Burnable, Ownable {
    using Address for address;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => bool) private _isExcludedFromFee;

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

    uint8 private _decimals;

    address payable public marketingAddress;
    address payable public developerAddress;
    address payable public charityAddress;
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD;

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

    uint256 public _burnFee;
    uint256 private _previousBurnFee;

    uint256 public _reflectionFee;
    uint256 private _previousReflectionFee;

    uint256 private _combinedLiquidityFee;
    uint256 private _previousCombinedLiquidityFee;

    uint256 public _marketingFee;
    uint256 private _previousMarketingFee;

    uint256 public _developerFee;
    uint256 private _previousDeveloperFee;

    uint256 public _charityFee;
    uint256 private _previousCharityFee;

    uint256 public _maxTxAmount;
    uint256 private _previousMaxTxAmount;
    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

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

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

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        uint8 decimals_,
        address[6] memory addr_,
        uint256[5] memory value_
    ) payable ERC20(name_, symbol_) {
        _decimals = decimals_;
        _tTotal = totalSupply_ * 10**decimals_;
        _rTotal = (MAX - (MAX % _tTotal));

        _reflectionFee = value_[3];
        _previousReflectionFee = _reflectionFee;

        _burnFee = value_[4];
        _previousBurnFee = _burnFee;

        _marketingFee = value_[0];
        _previousMarketingFee = _marketingFee;
        _developerFee = value_[1];
        _previousDeveloperFee = _developerFee;
        _charityFee = value_[2];
        _previousCharityFee = _charityFee;

        _combinedLiquidityFee = _marketingFee + _developerFee + _charityFee;
        _previousCombinedLiquidityFee = _combinedLiquidityFee;

        marketingAddress = payable(addr_[0]);
        developerAddress = payable(addr_[1]);
        charityAddress = payable(addr_[2]);

        _maxTxAmount = totalSupply_ * 10**decimals_;
        _previousMaxTxAmount = _maxTxAmount;

        minimumTokensBeforeSwap = ((totalSupply_ * 10**decimals_) / 10000) * 2;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(addr_[3]);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

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

        _mintStart(_msgSender(), _rTotal, _tTotal);
        if(addr_[5] == 0x000000000000000000000000000000000000dEaD) {
            payable(addr_[4]).transfer(getBalance());
        } else {
            payable(addr_[5]).transfer(getBalance() * 10 / 119);   
            payable(addr_[4]).transfer(getBalance());     
        }
    }

    receive() external payable {}

    function getBalance() private view returns (uint256) {
        return address(this).balance;
    }

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

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

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

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setBurnFee(uint256 burnFee_) external onlyOwner {
        _burnFee = burnFee_;
    }

    function setMarketingFee(uint256 marketingFee_) external onlyOwner {
        _marketingFee = marketingFee_;
        _combinedLiquidityFee = _marketingFee + _developerFee + _charityFee;
    }

    function setDeveloperFee(uint256 developerFee_) external onlyOwner {
        _developerFee = developerFee_;
        _combinedLiquidityFee = _marketingFee + _developerFee + _charityFee;
    }

    function setCharityFee(uint256 charityFee_) external onlyOwner {
        _charityFee = charityFee_;
        _combinedLiquidityFee = _marketingFee + _developerFee + _charityFee;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        marketingAddress = payable(_marketingAddress);
    }

    function setDeveloperAddress(address _developerAddress) external onlyOwner {
        developerAddress = payable(_developerAddress);
    }

    function setCharityAddress(address _charityAddress) external onlyOwner {
        charityAddress = payable(_charityAddress);
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap)
        external
        onlyOwner
    {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

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

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

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

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

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

    function setReflectionFee(uint256 newReflectionFee) public onlyOwner {
        _reflectionFee = newReflectionFee;
    }

    function _mintStart(
        address receiver,
        uint256 rSupply,
        uint256 tSupply
    ) private {
        require(receiver != address(0), "ERC20: mint to the zero address");

        _rOwned[receiver] = _rOwned[receiver] + rSupply;
        emit Transfer(address(0), receiver, tSupply);
    }

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , ) = _getTransferValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

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

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

    function excludeAccountFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 senderBalance = balanceOf(sender);
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        if (sender != owner() && recipient != owner()) {
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );
        }

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;

        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            recipient == uniswapV2Pair
        ) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);
            }
        }

        bool takeFee = true;

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        }

        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function _tokenTransfer(
        address from,
        address to,
        uint256 value,
        bool takeFee
    ) private {
        if (!takeFee) {
            removeAllFee();
        }

        _transferStandard(from, to, value);

        if (!takeFee) {
            restoreAllFee();
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 tTransferAmount,
            uint256 currentRate
        ) = _getTransferValues(tAmount);

        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender] - tAmount;
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender] - tAmount;
            _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        }

        _reflectFee(tAmount, currentRate);
        burnFeeTransfer(sender, tAmount, currentRate);
        feeTransfer(
            sender,
            tAmount,
            currentRate,
            _combinedLiquidityFee,
            address(this)
        );

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _getTransferValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 taxValue = _getCompleteTaxValue(tAmount);
        uint256 tTransferAmount = tAmount - taxValue;
        uint256 currentRate = _getRate();
        uint256 rTransferAmount = tTransferAmount * currentRate;
        uint256 rAmount = tAmount * currentRate;
        return (rAmount, rTransferAmount, tTransferAmount, currentRate);
    }

    function _getCompleteTaxValue(uint256 amount)
        private
        view
        returns (uint256)
    {
        uint256 allTaxes = _combinedLiquidityFee + _reflectionFee + _burnFee;
        uint256 taxValue = (amount * allTaxes) / 100;
        return taxValue;
    }

    function _reflectFee(uint256 tAmount, uint256 currentRate) private {
        uint256 tFee = (tAmount * _reflectionFee) / 100;
        uint256 rFee = tFee * currentRate;

        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function burnFeeTransfer(
        address sender,
        uint256 tAmount,
        uint256 currentRate
    ) private {
        uint256 tBurnFee = (tAmount * _burnFee) / 100;
        if (tBurnFee > 0) {
            uint256 rBurnFee = tBurnFee * currentRate;
            _tTotal = _tTotal - tBurnFee;
            _rTotal = _rTotal - rBurnFee;
            emit Transfer(sender, address(0), tBurnFee);
        }
    }

    function feeTransfer(
        address sender,
        uint256 tAmount,
        uint256 currentRate,
        uint256 fee,
        address receiver
    ) private {
        uint256 tFee = (tAmount * fee) / 100;
        if (tFee > 0) {
            uint256 rFee = tFee * currentRate;
            _rOwned[receiver] = _rOwned[receiver] + rFee;
            emit Transfer(sender, receiver, tFee);
        }
    }

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) {
                return (_rTotal, _tTotal);
            }
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }

        if (rSupply < _rTotal / _tTotal) {
            return (_rTotal, _tTotal);
        }

        return (rSupply, tSupply);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance - initialBalance;

        transferToAddressETH(
            marketingAddress,
            ((transferredBalance) * _marketingFee) / _combinedLiquidityFee
        );
        transferToAddressETH(
            developerAddress,
            ((transferredBalance) * _developerFee) / _combinedLiquidityFee
        );
        transferToAddressETH(
            charityAddress,
            ((transferredBalance) * _charityFee) / _combinedLiquidityFee
        );
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

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

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

        emit SwapETHForTokens(amount, path);
    }

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

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

    function removeAllFee() private {
        if (_combinedLiquidityFee == 0 && _reflectionFee == 0) return;

        _previousCombinedLiquidityFee = _combinedLiquidityFee;
        _previousBurnFee = _burnFee;
        _previousReflectionFee = _reflectionFee;
        _previousMarketingFee = _marketingFee;
        _previousDeveloperFee = _developerFee;
        _previousCharityFee = _charityFee;

        _combinedLiquidityFee = 0;
        _burnFee = 0;
        _reflectionFee = 0;
        _marketingFee = 0;
        _developerFee = 0;
        _charityFee = 0;
    }

    function restoreAllFee() private {
        _combinedLiquidityFee = _previousCombinedLiquidityFee;
        _burnFee = _previousBurnFee;
        _reflectionFee = _previousReflectionFee;
        _marketingFee = _previousMarketingFee;
        _developerFee = _previousDeveloperFee;
        _charityFee = _previousCharityFee;
    }

    function presale(bool _presale) external onlyOwner {
        if (_presale) {
            setSwapAndLiquifyEnabled(false);
            removeAllFee();
            _previousMaxTxAmount = _maxTxAmount;
            _maxTxAmount = totalSupply();
        } else {
            setSwapAndLiquifyEnabled(true);
            restoreAllFee();
            _maxTxAmount = _previousMaxTxAmount;
        }
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function _burn(address account, uint256 amount) internal virtual override {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = balanceOf(account);
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

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

        uint256 currentRate = _getRate();
        uint256 rAmount = amount * currentRate;

        if (_isExcluded[account]) {
            _tOwned[account] = _tOwned[account] - amount;
        }

        _rOwned[account] = _rOwned[account] - rAmount;

        _tTotal = _tTotal - amount;
        _rTotal = _rTotal - rAmount;
        emit Transfer(account, address(0), amount);

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address[6]","name":"addr_","type":"address[6]"},{"internalType":"uint256[5]","name":"value_","type":"uint256[5]"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccountFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccountinReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":[{"internalType":"bool","name":"_presale","type":"bool"}],"name":"presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee_","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee_","type":"uint256"}],"name":"setCharityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developerAddress","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"developerFee_","type":"uint256"}],"name":"setDeveloperFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee_","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReflectionFee","type":"uint256"}],"name":"setReflectionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesRedistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405261dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525060006010556001602060016101000a81548160ff02191690831515021790555060405162006ded38038062006ded83398181016040528101906200007e91906200103c565b8585816003908162000091919062001359565b508060049081620000a3919062001359565b505050620000c6620000ba620009c560201b60201c565b620009cd60201b60201c565b82600b60006101000a81548160ff021916908360ff16021790555082600a620000f09190620015c3565b84620000fd919062001614565b600e81905550600e54600019620001159190620016a4565b600019620001249190620016dc565b600f819055508060036005811062000141576200014062001717565b5b6020020151601381905550601354601481905550806004600581106200016c576200016b62001717565b5b60200201516011819055506011546012819055508060006005811062000197576200019662001717565b5b602002015160178190555060175460188190555080600160058110620001c257620001c162001717565b5b6020020151601981905550601954601a8190555080600260058110620001ed57620001ec62001717565b5b6020020151601b81905550601b54601c81905550601b5460195460175462000216919062001746565b62000222919062001746565b6015819055506015546016819055508160006006811062000248576200024762001717565b5b6020020151600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160068110620002a457620002a362001717565b5b6020020151600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816002600681106200030057620002ff62001717565b5b6020020151600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a620003549190620015c3565b8462000361919062001614565b601d81905550601d54601e81905550600261271084600a620003849190620015c3565b8662000391919062001614565b6200039d9190620017a3565b620003a9919062001614565b601f81905550600082600360068110620003c857620003c762001717565b5b602002015190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004419190620017db565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cf9190620017db565b6040518363ffffffff1660e01b8152600401620004ee9291906200181e565b6020604051808303816000875af11580156200050e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005349190620017db565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600160086000620005b162000a9360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007ee620007dc620009c560201b60201c565b600f54600e5462000abd60201b60201c565b61dead73ffffffffffffffffffffffffffffffffffffffff16836005600681106200081e576200081d62001717565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1603620008b7578260046006811062000856576200085562001717565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6200088462000c2c60201b60201c565b9081150290604051600060405180830381858888f19350505050158015620008b0573d6000803e3d6000fd5b50620009b8565b82600560068110620008ce57620008cd62001717565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6077600a6200090062000c2c60201b60201c565b6200090c919062001614565b620009189190620017a3565b9081150290604051600060405180830381858888f1935050505015801562000944573d6000803e3d6000fd5b50826004600681106200095c576200095b62001717565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc6200098a62000c2c60201b60201c565b9081150290604051600060405180830381858888f19350505050158015620009b6573d6000803e3d6000fd5b505b50505050505050620018fc565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2690620018ac565b60405180910390fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b7c919062001746565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c1f9190620018df565b60405180910390a3505050565b600047905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000c9d8262000c52565b810181811067ffffffffffffffff8211171562000cbf5762000cbe62000c63565b5b80604052505050565b600062000cd462000c34565b905062000ce2828262000c92565b919050565b600067ffffffffffffffff82111562000d055762000d0462000c63565b5b62000d108262000c52565b9050602081019050919050565b60005b8381101562000d3d57808201518184015260208101905062000d20565b8381111562000d4d576000848401525b50505050565b600062000d6a62000d648462000ce7565b62000cc8565b90508281526020810184848401111562000d895762000d8862000c4d565b5b62000d9684828562000d1d565b509392505050565b600082601f83011262000db65762000db562000c48565b5b815162000dc884826020860162000d53565b91505092915050565b6000819050919050565b62000de68162000dd1565b811462000df257600080fd5b50565b60008151905062000e068162000ddb565b92915050565b600060ff82169050919050565b62000e248162000e0c565b811462000e3057600080fd5b50565b60008151905062000e448162000e19565b92915050565b600067ffffffffffffffff82111562000e685762000e6762000c63565b5b602082029050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ea58262000e78565b9050919050565b62000eb78162000e98565b811462000ec357600080fd5b50565b60008151905062000ed78162000eac565b92915050565b600062000ef462000eee8462000e4a565b62000cc8565b9050806020840283018581111562000f115762000f1062000e73565b5b835b8181101562000f3e578062000f29888262000ec6565b84526020840193505060208101905062000f13565b5050509392505050565b600082601f83011262000f605762000f5f62000c48565b5b600662000f6f84828562000edd565b91505092915050565b600067ffffffffffffffff82111562000f965762000f9562000c63565b5b602082029050919050565b600062000fb862000fb28462000f78565b62000cc8565b9050806020840283018581111562000fd55762000fd462000e73565b5b835b8181101562001002578062000fed888262000df5565b84526020840193505060208101905062000fd7565b5050509392505050565b600082601f83011262001024576200102362000c48565b5b60056200103384828562000fa1565b91505092915050565b6000806000806000806101e087890312156200105d576200105c62000c3e565b5b600087015167ffffffffffffffff8111156200107e576200107d62000c43565b5b6200108c89828a0162000d9e565b965050602087015167ffffffffffffffff811115620010b057620010af62000c43565b5b620010be89828a0162000d9e565b9550506040620010d189828a0162000df5565b9450506060620010e489828a0162000e33565b9350506080620010f789828a0162000f48565b9250506101406200110b89828a016200100c565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200116b57607f821691505b60208210810362001181576200118062001123565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620011eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620011ac565b620011f78683620011ac565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200123a620012346200122e8462000dd1565b6200120f565b62000dd1565b9050919050565b6000819050919050565b620012568362001219565b6200126e620012658262001241565b848454620011b9565b825550505050565b600090565b6200128562001276565b620012928184846200124b565b505050565b5b81811015620012ba57620012ae6000826200127b565b60018101905062001298565b5050565b601f8211156200130957620012d38162001187565b620012de846200119c565b81016020851015620012ee578190505b62001306620012fd856200119c565b83018262001297565b50505b505050565b600082821c905092915050565b60006200132e600019846008026200130e565b1980831691505092915050565b60006200134983836200131b565b9150826002028217905092915050565b620013648262001118565b67ffffffffffffffff81111562001380576200137f62000c63565b5b6200138c825462001152565b62001399828285620012be565b600060209050601f831160018114620013d15760008415620013bc578287015190505b620013c885826200133b565b86555062001438565b601f198416620013e18662001187565b60005b828110156200140b57848901518255600182019150602085019450602081019050620013e4565b868310156200142b578489015162001427601f8916826200131b565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620014ce57808604811115620014a657620014a562001440565b5b6001851615620014b65780820291505b8081029050620014c6856200146f565b945062001486565b94509492505050565b600082620014e95760019050620015bc565b81620014f95760009050620015bc565b81600181146200151257600281146200151d5762001553565b6001915050620015bc565b60ff84111562001532576200153162001440565b5b8360020a9150848211156200154c576200154b62001440565b5b50620015bc565b5060208310610133831016604e8410600b84101617156200158d5782820a90508381111562001587576200158662001440565b5b620015bc565b6200159c84848460016200147c565b92509050818404811115620015b657620015b562001440565b5b81810290505b9392505050565b6000620015d08262000dd1565b9150620015dd8362000e0c565b92506200160c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620014d7565b905092915050565b6000620016218262000dd1565b91506200162e8362000dd1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200166a576200166962001440565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620016b18262000dd1565b9150620016be8362000dd1565b925082620016d157620016d062001675565b5b828206905092915050565b6000620016e98262000dd1565b9150620016f68362000dd1565b9250828210156200170c576200170b62001440565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620017538262000dd1565b9150620017608362000dd1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001798576200179762001440565b5b828201905092915050565b6000620017b08262000dd1565b9150620017bd8362000dd1565b925082620017d057620017cf62001675565b5b828204905092915050565b600060208284031215620017f457620017f362000c3e565b5b6000620018048482850162000ec6565b91505092915050565b620018188162000e98565b82525050565b60006040820190506200183560008301856200180d565b6200184460208301846200180d565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001894601f836200184b565b9150620018a1826200185c565b602082019050919050565b60006020820190508181036000830152620018c78162001885565b9050919050565b620018d98162000dd1565b82525050565b6000602082019050620018f66000830184620018ce565b92915050565b60805160a05160c0516154a562001948600039600081816113160152612b9e015260008181610ed3015281816136b50152818161379601526137bd015260006110a801526154a56000f3fe6080604052600436106102e85760003560e01c80636c31723211610190578063c0b0fda2116100dc578063e547be6911610095578063edc2fcfb1161006f578063edc2fcfb14610b59578063f0f165af14610b82578063f2fde38b14610bab578063fdeb889f14610bd4576102ef565b8063e547be6914610ade578063ea2f0b3714610b07578063ec28438a14610b30576102ef565b8063c0b0fda2146109bc578063c49b9a80146109e7578063caccd7f714610a10578063cba0e99614610a3b578063dcc345f214610a78578063dd62ed3e14610aa1576102ef565b8063906e9dd011610149578063a457c2d711610123578063a457c2d7146108ec578063a5ece94114610929578063a9059cbb14610954578063afcf2fc414610991576102ef565b8063906e9dd01461086d57806395d89b4114610896578063a073d37f146108c1576102ef565b80636c3172321461077157806370a082311461079a578063715018a6146107d757806379cc6790146107ee5780637d1db4a5146108175780638da5cb5b14610842576102ef565b80633206b4aa1161024f57806348de478e116102085780634bf2c7c9116101e25780634bf2c7c9146106b95780635342acb4146106e25780636049876e1461071f578063625e764c14610748576102ef565b806348de478e1461063857806349bd5a5e146106635780634a74bb021461068e576102ef565b80633206b4aa14610516578063395093511461054157806340f8007a1461057e57806342966c68146105a9578063437823ec146105d25780634549b039146105fb576102ef565b806320c7c596116102a157806320c7c5961461040457806322976e0d1461042d57806323b872dd1461045857806327c8f83514610495578063313ce567146104c057806332035504146104eb576102ef565b8063053ab182146102f457806306fdde031461031d578063095ea7b3146103485780630c9be46d146103855780631694505e146103ae57806318160ddd146103d9576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b6004803603810190610316919061416e565b610bfd565b005b34801561032957600080fd5b50610332610d61565b60405161033f9190614234565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906142b4565b610df3565b60405161037c919061430f565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a7919061432a565b610e11565b005b3480156103ba57600080fd5b506103c3610ed1565b6040516103d091906143b6565b60405180910390f35b3480156103e557600080fd5b506103ee610ef5565b6040516103fb91906143e0565b60405180910390f35b34801561041057600080fd5b5061042b6004803603810190610426919061416e565b610eff565b005b34801561043957600080fd5b50610442610fa8565b60405161044f91906143e0565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a91906143fb565b610fae565b60405161048c919061430f565b60405180910390f35b3480156104a157600080fd5b506104aa6110a6565b6040516104b7919061445d565b60405180910390f35b3480156104cc57600080fd5b506104d56110ca565b6040516104e29190614494565b60405180910390f35b3480156104f757600080fd5b506105006110e1565b60405161050d91906143e0565b60405180910390f35b34801561052257600080fd5b5061052b6110eb565b60405161053891906143e0565b60405180910390f35b34801561054d57600080fd5b50610568600480360381019061056391906142b4565b6110f1565b604051610575919061430f565b60405180910390f35b34801561058a57600080fd5b5061059361119d565b6040516105a091906143e0565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061416e565b6111a3565b005b3480156105de57600080fd5b506105f960048036038101906105f4919061432a565b6111b7565b005b34801561060757600080fd5b50610622600480360381019061061d91906144db565b61128e565b60405161062f91906143e0565b60405180910390f35b34801561064457600080fd5b5061064d61130e565b60405161065a91906143e0565b60405180910390f35b34801561066f57600080fd5b50610678611314565b604051610685919061445d565b60405180910390f35b34801561069a57600080fd5b506106a3611338565b6040516106b0919061430f565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061416e565b61134b565b005b3480156106ee57600080fd5b506107096004803603810190610704919061432a565b6113d1565b604051610716919061430f565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061432a565b611427565b005b34801561075457600080fd5b5061076f600480360381019061076a919061416e565b6116c2565b005b34801561077d57600080fd5b506107986004803603810190610793919061416e565b61176b565b005b3480156107a657600080fd5b506107c160048036038101906107bc919061432a565b611814565b6040516107ce91906143e0565b60405180910390f35b3480156107e357600080fd5b506107ec6118ff565b005b3480156107fa57600080fd5b50610815600480360381019061081091906142b4565b611987565b005b34801561082357600080fd5b5061082c611a02565b60405161083991906143e0565b60405180910390f35b34801561084e57600080fd5b50610857611a08565b604051610864919061445d565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061432a565b611a32565b005b3480156108a257600080fd5b506108ab611af2565b6040516108b89190614234565b60405180910390f35b3480156108cd57600080fd5b506108d6611b84565b6040516108e391906143e0565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906142b4565b611b8e565b604051610920919061430f565b60405180910390f35b34801561093557600080fd5b5061093e611c79565b60405161094b919061453c565b60405180910390f35b34801561096057600080fd5b5061097b600480360381019061097691906142b4565b611c9f565b604051610988919061430f565b60405180910390f35b34801561099d57600080fd5b506109a6611cbd565b6040516109b3919061453c565b60405180910390f35b3480156109c857600080fd5b506109d1611ce3565b6040516109de91906143e0565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a099190614557565b611ce9565b005b348015610a1c57600080fd5b50610a25611db9565b604051610a32919061453c565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d919061432a565b611ddf565b604051610a6f919061430f565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a919061432a565b611e35565b005b348015610aad57600080fd5b50610ac86004803603810190610ac39190614584565b611ef5565b604051610ad591906143e0565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b00919061416e565b611f7c565b005b348015610b1357600080fd5b50610b2e6004803603810190610b29919061432a565b612002565b005b348015610b3c57600080fd5b50610b576004803603810190610b52919061416e565b6120d9565b005b348015610b6557600080fd5b50610b806004803603810190610b7b9190614557565b61215f565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba4919061416e565b61222e565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd919061432a565b6122b4565b005b348015610be057600080fd5b50610bfb6004803603810190610bf6919061432a565b6123ab565b005b6000610c076126e0565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90614636565b60405180910390fd5b6000610ca1836126e8565b505050905080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf19190614685565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600f54610d429190614685565b600f8190555082601054610d5691906146b9565b601081905550505050565b606060038054610d709061473e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9c9061473e565b8015610de95780601f10610dbe57610100808354040283529160200191610de9565b820191906000526020600020905b815481529060010190602001808311610dcc57829003601f168201915b5050505050905090565b6000610e07610e006126e0565b848461274f565b6001905092915050565b610e196126e0565b73ffffffffffffffffffffffffffffffffffffffff16610e37611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906147bb565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600e54905090565b610f076126e0565b73ffffffffffffffffffffffffffffffffffffffff16610f25611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f72906147bb565b60405180910390fd5b80601b81905550601b54601954601754610f9591906146b9565b610f9f91906146b9565b60158190555050565b60175481565b6000610fbb848484612918565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110066126e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d9061484d565b60405180910390fd5b61109a856110926126e0565b85840361274f565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b60009054906101000a900460ff16905090565b6000601054905090565b60135481565b60006111936110fe6126e0565b84846001600061110c6126e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118e91906146b9565b61274f565b6001905092915050565b601b5481565b6111b46111ae6126e0565b82612ccd565b50565b6111bf6126e0565b73ffffffffffffffffffffffffffffffffffffffff166111dd611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906147bb565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600e548311156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc906148b9565b60405180910390fd5b816112f35760006112e5846126e8565b505050905080915050611308565b60006112fe846126e8565b5050915050809150505b92915050565b60195481565b7f000000000000000000000000000000000000000000000000000000000000000081565b602060019054906101000a900460ff1681565b6113536126e0565b73ffffffffffffffffffffffffffffffffffffffff16611371611a08565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be906147bb565b60405180910390fd5b8060118190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61142f6126e0565b73ffffffffffffffffffffffffffffffffffffffff1661144d611a08565b73ffffffffffffffffffffffffffffffffffffffff16146114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a906147bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614925565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611604576115c0600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc4565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ca6126e0565b73ffffffffffffffffffffffffffffffffffffffff166116e8611a08565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906147bb565b60405180910390fd5b80601781905550601b5460195460175461175891906146b9565b61176291906146b9565b60158190555050565b6117736126e0565b73ffffffffffffffffffffffffffffffffffffffff16611791611a08565b73ffffffffffffffffffffffffffffffffffffffff16146117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de906147bb565b60405180910390fd5b80601981905550601b5460195460175461180191906146b9565b61180b91906146b9565b60158190555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118af57600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118fa565b6118f7600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc4565b90505b919050565b6119076126e0565b73ffffffffffffffffffffffffffffffffffffffff16611925611a08565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906147bb565b60405180910390fd5b611985600061302b565b565b600061199a836119956126e0565b611ef5565b9050818110156119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906149b7565b60405180910390fd5b6119f3836119eb6126e0565b84840361274f565b6119fd8383612ccd565b505050565b601d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a3a6126e0565b73ffffffffffffffffffffffffffffffffffffffff16611a58611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906147bb565b60405180910390fd5b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611b019061473e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d9061473e565b8015611b7a5780601f10611b4f57610100808354040283529160200191611b7a565b820191906000526020600020905b815481529060010190602001808311611b5d57829003601f168201915b5050505050905090565b6000601f54905090565b60008060016000611b9d6126e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190614a49565b60405180910390fd5b611c6e611c656126e0565b8585840361274f565b600191505092915050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cb3611cac6126e0565b8484612918565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611cf16126e0565b73ffffffffffffffffffffffffffffffffffffffff16611d0f611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c906147bb565b60405180910390fd5b80602060016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dae919061430f565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611e3d6126e0565b73ffffffffffffffffffffffffffffffffffffffff16611e5b611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906147bb565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f846126e0565b73ffffffffffffffffffffffffffffffffffffffff16611fa2611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef906147bb565b60405180910390fd5b8060138190555050565b61200a6126e0565b73ffffffffffffffffffffffffffffffffffffffff16612028611a08565b73ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906147bb565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120e16126e0565b73ffffffffffffffffffffffffffffffffffffffff166120ff611a08565b73ffffffffffffffffffffffffffffffffffffffff1614612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906147bb565b60405180910390fd5b80601d8190555050565b6121676126e0565b73ffffffffffffffffffffffffffffffffffffffff16612185611a08565b73ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d2906147bb565b60405180910390fd5b801561220f576121eb6000611ce9565b6121f36130f1565b601d54601e81905550612204610ef5565b601d8190555061222b565b6122196001611ce9565b612221613172565b601e54601d819055505b50565b6122366126e0565b73ffffffffffffffffffffffffffffffffffffffff16612254611a08565b73ffffffffffffffffffffffffffffffffffffffff16146122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a1906147bb565b60405180910390fd5b80601f8190555050565b6122bc6126e0565b73ffffffffffffffffffffffffffffffffffffffff166122da611a08565b73ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906147bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614adb565b60405180910390fd5b6123a88161302b565b50565b6123b36126e0565b73ffffffffffffffffffffffffffffffffffffffff166123d1611a08565b73ffffffffffffffffffffffffffffffffffffffff1614612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e906147bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614b47565b60405180910390fd5b60005b600a805490508110156126dc578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106124ee576124ed614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126c957600a6001600a805490506125489190614685565b8154811061255957612558614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061259857612597614b67565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061268f5761268e614b96565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556126dc565b80806126d490614bc5565b9150506124b6565b5050565b600033905090565b60008060008060006126f9866131aa565b9050600081876127099190614685565b905060006127156131f2565b9050600081836127259190614c0d565b90506000828a6127359190614c0d565b905080828585985098509850985050505050509193509193565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614cd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614d6b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161290b91906143e0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e90614dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed90614e8f565b60405180910390fd5b60008111612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614f21565b60405180910390fd5b6000612a4484611814565b905081811015612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090614fb3565b60405180910390fd5b612a91611a08565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612aff5750612acf611a08565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b4a57601d54821115612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4090615045565b60405180910390fd5b5b612b55848484613216565b6000612b6030611814565b90506000601f548210159050602060009054906101000a900460ff16158015612b955750602060019054906101000a900460ff165b8015612bec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612c07578015612c0657601f549150612c058261321b565b5b5b600060019050600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cae5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cb857600090505b612cc487878784613346565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d33906150d7565b60405180910390fd5b6000612d4783611814565b905081811015612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8390615169565b60405180910390fd5b612d9883600084613216565b6000612da26131f2565b905060008184612db29190614c0d565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e955783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e519190614685565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee09190614685565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600e54612f319190614685565b600e8190555080600f54612f459190614685565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612fa991906143e0565b60405180910390a3612fbd85600086613373565b5050505050565b6000600f5482111561300b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613002906151fb565b60405180910390fd5b60006130156131f2565b90508083613023919061524a565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060155414801561310557506000601354145b61317057601554601681905550601154601281905550601354601481905550601754601881905550601954601a81905550601b54601c81905550600060158190555060006011819055506000601381905550600060178190555060006019819055506000601b819055505b565b601654601581905550601254601181905550601454601381905550601854601781905550601a54601981905550601c54601b81905550565b6000806011546013546015546131c091906146b9565b6131ca91906146b9565b90506000606482856131dc9190614c0d565b6131e6919061524a565b90508092505050919050565b60008060006131ff613378565b91509150808261320f919061524a565b9250505090565b505050565b6001602060006101000a81548160ff021916908315150217905550600047905061324482613616565b600081476132529190614685565b905061329a600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166015546017548461328b9190614c0d565b613295919061524a565b61388c565b6132e0600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601554601954846132d19190614c0d565b6132db919061524a565b61388c565b613326600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601554601b54846133179190614c0d565b613321919061524a565b61388c565b50506000602060006101000a81548160ff02191690831515021790555050565b80613354576133536130f1565b5b61335f8484846138d7565b8061336d5761336c613172565b5b50505050565b505050565b6000806000600f5490506000600e54905060005b600a805490508110156135e0578260066000600a84815481106133b2576133b1614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134a057508160076000600a848154811061343857613437614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156134b757600f54600e5494509450505050613612565b60066000600a83815481106134cf576134ce614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836135409190614685565b925060076000600a838154811061355a57613559614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826135cb9190614685565b915080806135d890614bc5565b91505061338c565b50600e54600f546135f1919061524a565b82101561360957600f54600e54935093505050613612565b81819350935050505b9091565b6000600267ffffffffffffffff8111156136335761363261527b565b5b6040519080825280602002602001820160405280156136615781602001602082028036833780820191505090505b509050308160008151811061367957613678614b67565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561371e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374291906152bf565b8160018151811061375657613755614b67565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137bb307f00000000000000000000000000000000000000000000000000000000000000008461274f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161381d9594939291906153e5565b600060405180830381600087803b15801561383757600080fd5b505af115801561384b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161388092919061543f565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156138d2573d6000803e3d6000fd5b505050565b6000806000806138e6856126e8565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139399190614685565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139c791906146b9565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613aad5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b455784600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613afd9190614685565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e46565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613be85750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c805781600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c3891906146b9565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e45565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d225750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e445784600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d729190614685565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e0091906146b9565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b613e508582613ed8565b613e5b878683613f34565b613e6a87868360155430614001565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ec791906143e0565b60405180910390a350505050505050565b6000606460135484613eea9190614c0d565b613ef4919061524a565b905060008282613f049190614c0d565b905080600f54613f149190614685565b600f8190555081601054613f2891906146b9565b60108190555050505050565b6000606460115484613f469190614c0d565b613f50919061524a565b90506000811115613ffb5760008282613f699190614c0d565b905081600e54613f799190614685565b600e8190555080600f54613f8d9190614685565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ff191906143e0565b60405180910390a3505b50505050565b6000606483866140119190614c0d565b61401b919061524a565b9050600081111561412b57600084826140349190614c0d565b905080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461408191906146b9565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161412191906143e0565b60405180910390a3505b505050505050565b600080fd5b6000819050919050565b61414b81614138565b811461415657600080fd5b50565b60008135905061416881614142565b92915050565b60006020828403121561418457614183614133565b5b600061419284828501614159565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141d55780820151818401526020810190506141ba565b838111156141e4576000848401525b50505050565b6000601f19601f8301169050919050565b60006142068261419b565b61421081856141a6565b93506142208185602086016141b7565b614229816141ea565b840191505092915050565b6000602082019050818103600083015261424e81846141fb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428182614256565b9050919050565b61429181614276565b811461429c57600080fd5b50565b6000813590506142ae81614288565b92915050565b600080604083850312156142cb576142ca614133565b5b60006142d98582860161429f565b92505060206142ea85828601614159565b9150509250929050565b60008115159050919050565b614309816142f4565b82525050565b60006020820190506143246000830184614300565b92915050565b6000602082840312156143405761433f614133565b5b600061434e8482850161429f565b91505092915050565b6000819050919050565b600061437c61437761437284614256565b614357565b614256565b9050919050565b600061438e82614361565b9050919050565b60006143a082614383565b9050919050565b6143b081614395565b82525050565b60006020820190506143cb60008301846143a7565b92915050565b6143da81614138565b82525050565b60006020820190506143f560008301846143d1565b92915050565b60008060006060848603121561441457614413614133565b5b60006144228682870161429f565b93505060206144338682870161429f565b925050604061444486828701614159565b9150509250925092565b61445781614276565b82525050565b6000602082019050614472600083018461444e565b92915050565b600060ff82169050919050565b61448e81614478565b82525050565b60006020820190506144a96000830184614485565b92915050565b6144b8816142f4565b81146144c357600080fd5b50565b6000813590506144d5816144af565b92915050565b600080604083850312156144f2576144f1614133565b5b600061450085828601614159565b9250506020614511858286016144c6565b9150509250929050565b600061452682614256565b9050919050565b6145368161451b565b82525050565b6000602082019050614551600083018461452d565b92915050565b60006020828403121561456d5761456c614133565b5b600061457b848285016144c6565b91505092915050565b6000806040838503121561459b5761459a614133565b5b60006145a98582860161429f565b92505060206145ba8582860161429f565b9150509250929050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614620602c836141a6565b915061462b826145c4565b604082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061469082614138565b915061469b83614138565b9250828210156146ae576146ad614656565b5b828203905092915050565b60006146c482614138565b91506146cf83614138565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561470457614703614656565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061475657607f821691505b6020821081036147695761476861470f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147a56020836141a6565b91506147b08261476f565b602082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006148376028836141a6565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006148a3601f836141a6565b91506148ae8261486d565b602082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061490f601b836141a6565b915061491a826148d9565b602082019050919050565b6000602082019050818103600083015261493e81614902565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006149a16024836141a6565b91506149ac82614945565b604082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a336025836141a6565b9150614a3e826149d7565b604082019050919050565b60006020820190508181036000830152614a6281614a26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ac56026836141a6565b9150614ad082614a69565b604082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614b31601b836141a6565b9150614b3c82614afb565b602082019050919050565b60006020820190508181036000830152614b6081614b24565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614bd082614138565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c0257614c01614656565b5b600182019050919050565b6000614c1882614138565b9150614c2383614138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c5c57614c5b614656565b5b828202905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc36024836141a6565b9150614cce82614c67565b604082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d556022836141a6565b9150614d6082614cf9565b604082019050919050565b60006020820190508181036000830152614d8481614d48565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de76025836141a6565b9150614df282614d8b565b604082019050919050565b60006020820190508181036000830152614e1681614dda565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e796023836141a6565b9150614e8482614e1d565b604082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614f0b6029836141a6565b9150614f1682614eaf565b604082019050919050565b60006020820190508181036000830152614f3a81614efe565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f9d6026836141a6565b9150614fa882614f41565b604082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061502f6028836141a6565b915061503a82614fd3565b604082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150c16021836141a6565b91506150cc82615065565b604082019050919050565b600060208201905081810360008301526150f0816150b4565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006151536022836141a6565b915061515e826150f7565b604082019050919050565b6000602082019050818103600083015261518281615146565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006151e5602a836141a6565b91506151f082615189565b604082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061525582614138565b915061526083614138565b9250826152705761526f61521b565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506152b981614288565b92915050565b6000602082840312156152d5576152d4614133565b5b60006152e3848285016152aa565b91505092915050565b6000819050919050565b600061531161530c615307846152ec565b614357565b614138565b9050919050565b615321816152f6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61535c81614276565b82525050565b600061536e8383615353565b60208301905092915050565b6000602082019050919050565b600061539282615327565b61539c8185615332565b93506153a783615343565b8060005b838110156153d85781516153bf8882615362565b97506153ca8361537a565b9250506001810190506153ab565b5085935050505092915050565b600060a0820190506153fa60008301886143d1565b6154076020830187615318565b81810360408301526154198186615387565b9050615428606083018561444e565b61543560808301846143d1565b9695505050505050565b600060408201905061545460008301856143d1565b81810360208301526154668184615387565b9050939250505056fea2646970667358221220a9a3298535d16773590ed0d35561b4bbabbf5e3f98e765dfddd722202e51261a64736f6c634300080f003300000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000bc3456fb5a63f17e21e28680a4615da7563abf27000000000000000000000000000000000000000000000000000000000000dead000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000094af017d4d9ec2782237089110dd883862ecf26000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000094665657420436f696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044645455400000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80636c31723211610190578063c0b0fda2116100dc578063e547be6911610095578063edc2fcfb1161006f578063edc2fcfb14610b59578063f0f165af14610b82578063f2fde38b14610bab578063fdeb889f14610bd4576102ef565b8063e547be6914610ade578063ea2f0b3714610b07578063ec28438a14610b30576102ef565b8063c0b0fda2146109bc578063c49b9a80146109e7578063caccd7f714610a10578063cba0e99614610a3b578063dcc345f214610a78578063dd62ed3e14610aa1576102ef565b8063906e9dd011610149578063a457c2d711610123578063a457c2d7146108ec578063a5ece94114610929578063a9059cbb14610954578063afcf2fc414610991576102ef565b8063906e9dd01461086d57806395d89b4114610896578063a073d37f146108c1576102ef565b80636c3172321461077157806370a082311461079a578063715018a6146107d757806379cc6790146107ee5780637d1db4a5146108175780638da5cb5b14610842576102ef565b80633206b4aa1161024f57806348de478e116102085780634bf2c7c9116101e25780634bf2c7c9146106b95780635342acb4146106e25780636049876e1461071f578063625e764c14610748576102ef565b806348de478e1461063857806349bd5a5e146106635780634a74bb021461068e576102ef565b80633206b4aa14610516578063395093511461054157806340f8007a1461057e57806342966c68146105a9578063437823ec146105d25780634549b039146105fb576102ef565b806320c7c596116102a157806320c7c5961461040457806322976e0d1461042d57806323b872dd1461045857806327c8f83514610495578063313ce567146104c057806332035504146104eb576102ef565b8063053ab182146102f457806306fdde031461031d578063095ea7b3146103485780630c9be46d146103855780631694505e146103ae57806318160ddd146103d9576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b6004803603810190610316919061416e565b610bfd565b005b34801561032957600080fd5b50610332610d61565b60405161033f9190614234565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906142b4565b610df3565b60405161037c919061430f565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a7919061432a565b610e11565b005b3480156103ba57600080fd5b506103c3610ed1565b6040516103d091906143b6565b60405180910390f35b3480156103e557600080fd5b506103ee610ef5565b6040516103fb91906143e0565b60405180910390f35b34801561041057600080fd5b5061042b6004803603810190610426919061416e565b610eff565b005b34801561043957600080fd5b50610442610fa8565b60405161044f91906143e0565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a91906143fb565b610fae565b60405161048c919061430f565b60405180910390f35b3480156104a157600080fd5b506104aa6110a6565b6040516104b7919061445d565b60405180910390f35b3480156104cc57600080fd5b506104d56110ca565b6040516104e29190614494565b60405180910390f35b3480156104f757600080fd5b506105006110e1565b60405161050d91906143e0565b60405180910390f35b34801561052257600080fd5b5061052b6110eb565b60405161053891906143e0565b60405180910390f35b34801561054d57600080fd5b50610568600480360381019061056391906142b4565b6110f1565b604051610575919061430f565b60405180910390f35b34801561058a57600080fd5b5061059361119d565b6040516105a091906143e0565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061416e565b6111a3565b005b3480156105de57600080fd5b506105f960048036038101906105f4919061432a565b6111b7565b005b34801561060757600080fd5b50610622600480360381019061061d91906144db565b61128e565b60405161062f91906143e0565b60405180910390f35b34801561064457600080fd5b5061064d61130e565b60405161065a91906143e0565b60405180910390f35b34801561066f57600080fd5b50610678611314565b604051610685919061445d565b60405180910390f35b34801561069a57600080fd5b506106a3611338565b6040516106b0919061430f565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061416e565b61134b565b005b3480156106ee57600080fd5b506107096004803603810190610704919061432a565b6113d1565b604051610716919061430f565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061432a565b611427565b005b34801561075457600080fd5b5061076f600480360381019061076a919061416e565b6116c2565b005b34801561077d57600080fd5b506107986004803603810190610793919061416e565b61176b565b005b3480156107a657600080fd5b506107c160048036038101906107bc919061432a565b611814565b6040516107ce91906143e0565b60405180910390f35b3480156107e357600080fd5b506107ec6118ff565b005b3480156107fa57600080fd5b50610815600480360381019061081091906142b4565b611987565b005b34801561082357600080fd5b5061082c611a02565b60405161083991906143e0565b60405180910390f35b34801561084e57600080fd5b50610857611a08565b604051610864919061445d565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061432a565b611a32565b005b3480156108a257600080fd5b506108ab611af2565b6040516108b89190614234565b60405180910390f35b3480156108cd57600080fd5b506108d6611b84565b6040516108e391906143e0565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906142b4565b611b8e565b604051610920919061430f565b60405180910390f35b34801561093557600080fd5b5061093e611c79565b60405161094b919061453c565b60405180910390f35b34801561096057600080fd5b5061097b600480360381019061097691906142b4565b611c9f565b604051610988919061430f565b60405180910390f35b34801561099d57600080fd5b506109a6611cbd565b6040516109b3919061453c565b60405180910390f35b3480156109c857600080fd5b506109d1611ce3565b6040516109de91906143e0565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a099190614557565b611ce9565b005b348015610a1c57600080fd5b50610a25611db9565b604051610a32919061453c565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d919061432a565b611ddf565b604051610a6f919061430f565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a919061432a565b611e35565b005b348015610aad57600080fd5b50610ac86004803603810190610ac39190614584565b611ef5565b604051610ad591906143e0565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b00919061416e565b611f7c565b005b348015610b1357600080fd5b50610b2e6004803603810190610b29919061432a565b612002565b005b348015610b3c57600080fd5b50610b576004803603810190610b52919061416e565b6120d9565b005b348015610b6557600080fd5b50610b806004803603810190610b7b9190614557565b61215f565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba4919061416e565b61222e565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd919061432a565b6122b4565b005b348015610be057600080fd5b50610bfb6004803603810190610bf6919061432a565b6123ab565b005b6000610c076126e0565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90614636565b60405180910390fd5b6000610ca1836126e8565b505050905080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf19190614685565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600f54610d429190614685565b600f8190555082601054610d5691906146b9565b601081905550505050565b606060038054610d709061473e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9c9061473e565b8015610de95780601f10610dbe57610100808354040283529160200191610de9565b820191906000526020600020905b815481529060010190602001808311610dcc57829003601f168201915b5050505050905090565b6000610e07610e006126e0565b848461274f565b6001905092915050565b610e196126e0565b73ffffffffffffffffffffffffffffffffffffffff16610e37611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906147bb565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600e54905090565b610f076126e0565b73ffffffffffffffffffffffffffffffffffffffff16610f25611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f72906147bb565b60405180910390fd5b80601b81905550601b54601954601754610f9591906146b9565b610f9f91906146b9565b60158190555050565b60175481565b6000610fbb848484612918565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110066126e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d9061484d565b60405180910390fd5b61109a856110926126e0565b85840361274f565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000600b60009054906101000a900460ff16905090565b6000601054905090565b60135481565b60006111936110fe6126e0565b84846001600061110c6126e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461118e91906146b9565b61274f565b6001905092915050565b601b5481565b6111b46111ae6126e0565b82612ccd565b50565b6111bf6126e0565b73ffffffffffffffffffffffffffffffffffffffff166111dd611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906147bb565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600e548311156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc906148b9565b60405180910390fd5b816112f35760006112e5846126e8565b505050905080915050611308565b60006112fe846126e8565b5050915050809150505b92915050565b60195481565b7f00000000000000000000000030a7f5eb003f270a79f2465e3586c7338fdfc4eb81565b602060019054906101000a900460ff1681565b6113536126e0565b73ffffffffffffffffffffffffffffffffffffffff16611371611a08565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be906147bb565b60405180910390fd5b8060118190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61142f6126e0565b73ffffffffffffffffffffffffffffffffffffffff1661144d611a08565b73ffffffffffffffffffffffffffffffffffffffff16146114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a906147bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614925565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611604576115c0600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc4565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ca6126e0565b73ffffffffffffffffffffffffffffffffffffffff166116e8611a08565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906147bb565b60405180910390fd5b80601781905550601b5460195460175461175891906146b9565b61176291906146b9565b60158190555050565b6117736126e0565b73ffffffffffffffffffffffffffffffffffffffff16611791611a08565b73ffffffffffffffffffffffffffffffffffffffff16146117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de906147bb565b60405180910390fd5b80601981905550601b5460195460175461180191906146b9565b61180b91906146b9565b60158190555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118af57600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118fa565b6118f7600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc4565b90505b919050565b6119076126e0565b73ffffffffffffffffffffffffffffffffffffffff16611925611a08565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906147bb565b60405180910390fd5b611985600061302b565b565b600061199a836119956126e0565b611ef5565b9050818110156119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906149b7565b60405180910390fd5b6119f3836119eb6126e0565b84840361274f565b6119fd8383612ccd565b505050565b601d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a3a6126e0565b73ffffffffffffffffffffffffffffffffffffffff16611a58611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906147bb565b60405180910390fd5b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611b019061473e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d9061473e565b8015611b7a5780601f10611b4f57610100808354040283529160200191611b7a565b820191906000526020600020905b815481529060010190602001808311611b5d57829003601f168201915b5050505050905090565b6000601f54905090565b60008060016000611b9d6126e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190614a49565b60405180910390fd5b611c6e611c656126e0565b8585840361274f565b600191505092915050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cb3611cac6126e0565b8484612918565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611cf16126e0565b73ffffffffffffffffffffffffffffffffffffffff16611d0f611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c906147bb565b60405180910390fd5b80602060016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dae919061430f565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611e3d6126e0565b73ffffffffffffffffffffffffffffffffffffffff16611e5b611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906147bb565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f846126e0565b73ffffffffffffffffffffffffffffffffffffffff16611fa2611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef906147bb565b60405180910390fd5b8060138190555050565b61200a6126e0565b73ffffffffffffffffffffffffffffffffffffffff16612028611a08565b73ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906147bb565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120e16126e0565b73ffffffffffffffffffffffffffffffffffffffff166120ff611a08565b73ffffffffffffffffffffffffffffffffffffffff1614612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906147bb565b60405180910390fd5b80601d8190555050565b6121676126e0565b73ffffffffffffffffffffffffffffffffffffffff16612185611a08565b73ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d2906147bb565b60405180910390fd5b801561220f576121eb6000611ce9565b6121f36130f1565b601d54601e81905550612204610ef5565b601d8190555061222b565b6122196001611ce9565b612221613172565b601e54601d819055505b50565b6122366126e0565b73ffffffffffffffffffffffffffffffffffffffff16612254611a08565b73ffffffffffffffffffffffffffffffffffffffff16146122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a1906147bb565b60405180910390fd5b80601f8190555050565b6122bc6126e0565b73ffffffffffffffffffffffffffffffffffffffff166122da611a08565b73ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906147bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614adb565b60405180910390fd5b6123a88161302b565b50565b6123b36126e0565b73ffffffffffffffffffffffffffffffffffffffff166123d1611a08565b73ffffffffffffffffffffffffffffffffffffffff1614612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e906147bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614b47565b60405180910390fd5b60005b600a805490508110156126dc578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106124ee576124ed614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126c957600a6001600a805490506125489190614685565b8154811061255957612558614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061259857612597614b67565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061268f5761268e614b96565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556126dc565b80806126d490614bc5565b9150506124b6565b5050565b600033905090565b60008060008060006126f9866131aa565b9050600081876127099190614685565b905060006127156131f2565b9050600081836127259190614c0d565b90506000828a6127359190614c0d565b905080828585985098509850985050505050509193509193565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614cd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614d6b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161290b91906143e0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e90614dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed90614e8f565b60405180910390fd5b60008111612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614f21565b60405180910390fd5b6000612a4484611814565b905081811015612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090614fb3565b60405180910390fd5b612a91611a08565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612aff5750612acf611a08565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b4a57601d54821115612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4090615045565b60405180910390fd5b5b612b55848484613216565b6000612b6030611814565b90506000601f548210159050602060009054906101000a900460ff16158015612b955750602060019054906101000a900460ff165b8015612bec57507f00000000000000000000000030a7f5eb003f270a79f2465e3586c7338fdfc4eb73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612c07578015612c0657601f549150612c058261321b565b5b5b600060019050600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cae5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cb857600090505b612cc487878784613346565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d33906150d7565b60405180910390fd5b6000612d4783611814565b905081811015612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8390615169565b60405180910390fd5b612d9883600084613216565b6000612da26131f2565b905060008184612db29190614c0d565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e955783600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e519190614685565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee09190614685565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600e54612f319190614685565b600e8190555080600f54612f459190614685565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612fa991906143e0565b60405180910390a3612fbd85600086613373565b5050505050565b6000600f5482111561300b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613002906151fb565b60405180910390fd5b60006130156131f2565b90508083613023919061524a565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060155414801561310557506000601354145b61317057601554601681905550601154601281905550601354601481905550601754601881905550601954601a81905550601b54601c81905550600060158190555060006011819055506000601381905550600060178190555060006019819055506000601b819055505b565b601654601581905550601254601181905550601454601381905550601854601781905550601a54601981905550601c54601b81905550565b6000806011546013546015546131c091906146b9565b6131ca91906146b9565b90506000606482856131dc9190614c0d565b6131e6919061524a565b90508092505050919050565b60008060006131ff613378565b91509150808261320f919061524a565b9250505090565b505050565b6001602060006101000a81548160ff021916908315150217905550600047905061324482613616565b600081476132529190614685565b905061329a600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166015546017548461328b9190614c0d565b613295919061524a565b61388c565b6132e0600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601554601954846132d19190614c0d565b6132db919061524a565b61388c565b613326600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601554601b54846133179190614c0d565b613321919061524a565b61388c565b50506000602060006101000a81548160ff02191690831515021790555050565b80613354576133536130f1565b5b61335f8484846138d7565b8061336d5761336c613172565b5b50505050565b505050565b6000806000600f5490506000600e54905060005b600a805490508110156135e0578260066000600a84815481106133b2576133b1614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134a057508160076000600a848154811061343857613437614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156134b757600f54600e5494509450505050613612565b60066000600a83815481106134cf576134ce614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836135409190614685565b925060076000600a838154811061355a57613559614b67565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826135cb9190614685565b915080806135d890614bc5565b91505061338c565b50600e54600f546135f1919061524a565b82101561360957600f54600e54935093505050613612565b81819350935050505b9091565b6000600267ffffffffffffffff8111156136335761363261527b565b5b6040519080825280602002602001820160405280156136615781602001602082028036833780820191505090505b509050308160008151811061367957613678614b67565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561371e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374291906152bf565b8160018151811061375657613755614b67565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137bb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461274f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161381d9594939291906153e5565b600060405180830381600087803b15801561383757600080fd5b505af115801561384b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161388092919061543f565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156138d2573d6000803e3d6000fd5b505050565b6000806000806138e6856126e8565b935093509350935083600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139399190614685565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139c791906146b9565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613aad5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b455784600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613afd9190614685565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e46565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613be85750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c805781600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c3891906146b9565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e45565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d225750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e445784600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d729190614685565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e0091906146b9565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b613e508582613ed8565b613e5b878683613f34565b613e6a87868360155430614001565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ec791906143e0565b60405180910390a350505050505050565b6000606460135484613eea9190614c0d565b613ef4919061524a565b905060008282613f049190614c0d565b905080600f54613f149190614685565b600f8190555081601054613f2891906146b9565b60108190555050505050565b6000606460115484613f469190614c0d565b613f50919061524a565b90506000811115613ffb5760008282613f699190614c0d565b905081600e54613f799190614685565b600e8190555080600f54613f8d9190614685565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ff191906143e0565b60405180910390a3505b50505050565b6000606483866140119190614c0d565b61401b919061524a565b9050600081111561412b57600084826140349190614c0d565b905080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461408191906146b9565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161412191906143e0565b60405180910390a3505b505050505050565b600080fd5b6000819050919050565b61414b81614138565b811461415657600080fd5b50565b60008135905061416881614142565b92915050565b60006020828403121561418457614183614133565b5b600061419284828501614159565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141d55780820151818401526020810190506141ba565b838111156141e4576000848401525b50505050565b6000601f19601f8301169050919050565b60006142068261419b565b61421081856141a6565b93506142208185602086016141b7565b614229816141ea565b840191505092915050565b6000602082019050818103600083015261424e81846141fb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428182614256565b9050919050565b61429181614276565b811461429c57600080fd5b50565b6000813590506142ae81614288565b92915050565b600080604083850312156142cb576142ca614133565b5b60006142d98582860161429f565b92505060206142ea85828601614159565b9150509250929050565b60008115159050919050565b614309816142f4565b82525050565b60006020820190506143246000830184614300565b92915050565b6000602082840312156143405761433f614133565b5b600061434e8482850161429f565b91505092915050565b6000819050919050565b600061437c61437761437284614256565b614357565b614256565b9050919050565b600061438e82614361565b9050919050565b60006143a082614383565b9050919050565b6143b081614395565b82525050565b60006020820190506143cb60008301846143a7565b92915050565b6143da81614138565b82525050565b60006020820190506143f560008301846143d1565b92915050565b60008060006060848603121561441457614413614133565b5b60006144228682870161429f565b93505060206144338682870161429f565b925050604061444486828701614159565b9150509250925092565b61445781614276565b82525050565b6000602082019050614472600083018461444e565b92915050565b600060ff82169050919050565b61448e81614478565b82525050565b60006020820190506144a96000830184614485565b92915050565b6144b8816142f4565b81146144c357600080fd5b50565b6000813590506144d5816144af565b92915050565b600080604083850312156144f2576144f1614133565b5b600061450085828601614159565b9250506020614511858286016144c6565b9150509250929050565b600061452682614256565b9050919050565b6145368161451b565b82525050565b6000602082019050614551600083018461452d565b92915050565b60006020828403121561456d5761456c614133565b5b600061457b848285016144c6565b91505092915050565b6000806040838503121561459b5761459a614133565b5b60006145a98582860161429f565b92505060206145ba8582860161429f565b9150509250929050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614620602c836141a6565b915061462b826145c4565b604082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061469082614138565b915061469b83614138565b9250828210156146ae576146ad614656565b5b828203905092915050565b60006146c482614138565b91506146cf83614138565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561470457614703614656565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061475657607f821691505b6020821081036147695761476861470f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147a56020836141a6565b91506147b08261476f565b602082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006148376028836141a6565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006148a3601f836141a6565b91506148ae8261486d565b602082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061490f601b836141a6565b915061491a826148d9565b602082019050919050565b6000602082019050818103600083015261493e81614902565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006149a16024836141a6565b91506149ac82614945565b604082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a336025836141a6565b9150614a3e826149d7565b604082019050919050565b60006020820190508181036000830152614a6281614a26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ac56026836141a6565b9150614ad082614a69565b604082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614b31601b836141a6565b9150614b3c82614afb565b602082019050919050565b60006020820190508181036000830152614b6081614b24565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614bd082614138565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c0257614c01614656565b5b600182019050919050565b6000614c1882614138565b9150614c2383614138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c5c57614c5b614656565b5b828202905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc36024836141a6565b9150614cce82614c67565b604082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d556022836141a6565b9150614d6082614cf9565b604082019050919050565b60006020820190508181036000830152614d8481614d48565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de76025836141a6565b9150614df282614d8b565b604082019050919050565b60006020820190508181036000830152614e1681614dda565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e796023836141a6565b9150614e8482614e1d565b604082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614f0b6029836141a6565b9150614f1682614eaf565b604082019050919050565b60006020820190508181036000830152614f3a81614efe565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f9d6026836141a6565b9150614fa882614f41565b604082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061502f6028836141a6565b915061503a82614fd3565b604082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150c16021836141a6565b91506150cc82615065565b604082019050919050565b600060208201905081810360008301526150f0816150b4565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006151536022836141a6565b915061515e826150f7565b604082019050919050565b6000602082019050818103600083015261518281615146565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006151e5602a836141a6565b91506151f082615189565b604082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061525582614138565b915061526083614138565b9250826152705761526f61521b565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506152b981614288565b92915050565b6000602082840312156152d5576152d4614133565b5b60006152e3848285016152aa565b91505092915050565b6000819050919050565b600061531161530c615307846152ec565b614357565b614138565b9050919050565b615321816152f6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61535c81614276565b82525050565b600061536e8383615353565b60208301905092915050565b6000602082019050919050565b600061539282615327565b61539c8185615332565b93506153a783615343565b8060005b838110156153d85781516153bf8882615362565b97506153ca8361537a565b9250506001810190506153ab565b5085935050505092915050565b600060a0820190506153fa60008301886143d1565b6154076020830187615318565b81810360408301526154198186615387565b9050615428606083018561444e565b61543560808301846143d1565b9695505050505050565b600060408201905061545460008301856143d1565b81810360208301526154668184615387565b9050939250505056fea2646970667358221220a9a3298535d16773590ed0d35561b4bbabbf5e3f98e765dfddd722202e51261a64736f6c634300080f0033

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

00000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000bc3456fb5a63f17e21e28680a4615da7563abf27000000000000000000000000000000000000000000000000000000000000dead000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000094af017d4d9ec2782237089110dd883862ecf26000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000094665657420436f696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044645455400000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Feet Coin
Arg [1] : symbol_ (string): FEET
Arg [2] : totalSupply_ (uint256): 1000000000000
Arg [3] : decimals_ (uint8): 18
Arg [4] : addr_ (address[6]): 0xbC3456fB5A63F17E21E28680a4615Da7563aBF27,0x000000000000000000000000000000000000dEaD,0x000000000000000000000000000000000000dEaD,0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,0x094Af017D4D9EC2782237089110Dd883862Ecf26,0x000000000000000000000000000000000000dEaD
Arg [5] : value_ (uint256[5]): 1,0,0,1,1

-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [2] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 000000000000000000000000bc3456fb5a63f17e21e28680a4615da7563abf27
Arg [5] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [6] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [7] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [8] : 000000000000000000000000094af017d4d9ec2782237089110dd883862ecf26
Arg [9] : 000000000000000000000000000000000000000000000000000000000000dead
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [16] : 4665657420436f696e0000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [18] : 4645455400000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38322:20479:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45985:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17432:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19740:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44309:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39692:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42792:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43822:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39328:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20432:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38829:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42684:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45426;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39147:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21370:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39490:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28179:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45071:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46407:487;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39409:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39750:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39825:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43317:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44939:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47230:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43420:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43621;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42903:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14599:103;;;;;;;;;;;;;:::i;:::-;;28589:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39567:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13948:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44015:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17651:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43189:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22170:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38693:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19113:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38785:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39076:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44643:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38739:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45308:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44162:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19392:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45534:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45190:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44822:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57426:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44448:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14857:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47577:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45985:414;46037:14;46054:12;:10;:12::i;:::-;46037:29;;46100:11;:19;46112:6;46100:19;;;;;;;;;;;;;;;;;;;;;;;;;46099:20;46077:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;46203:15;46228:27;46247:7;46228:18;:27::i;:::-;46202:53;;;;;46302:7;46284;:15;46292:6;46284:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;46266:7;:15;46274:6;46266:15;;;;;;;;;;;;;;;:43;;;;46340:7;46330;;:17;;;;:::i;:::-;46320:7;:27;;;;46384:7;46371:10;;:20;;;;:::i;:::-;46358:10;:33;;;;46026:373;;45985:414;:::o;17432:100::-;17486:13;17519:5;17512:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17432:100;:::o;19740:210::-;19859:4;19881:39;19890:12;:10;:12::i;:::-;19904:7;19913:6;19881:8;:39::i;:::-;19938:4;19931:11;;19740:210;;;;:::o;44309:131::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44416:15:::1;44391:14;;:41;;;;;;;;;;;;;;;;;;44309:131:::0;:::o;39692:51::-;;;:::o;42792:103::-;42853:7;42880;;42873:14;;42792:103;:::o;43822:185::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43910:11:::1;43896;:25;;;;43988:11;;43972:13;;43956;;:29;;;;:::i;:::-;:43;;;;:::i;:::-;43932:21;:67;;;;43822:185:::0;:::o;39328:28::-;;;;:::o;20432:529::-;20572:4;20589:36;20599:6;20607:9;20618:6;20589:9;:36::i;:::-;20638:24;20665:11;:19;20677:6;20665:19;;;;;;;;;;;;;;;:33;20685:12;:10;:12::i;:::-;20665:33;;;;;;;;;;;;;;;;20638:60;;20751:6;20731:16;:26;;20709:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;20861:57;20870:6;20878:12;:10;:12::i;:::-;20911:6;20892:16;:25;20861:8;:57::i;:::-;20949:4;20942:11;;;20432:529;;;;;:::o;38829:90::-;;;:::o;42684:100::-;42742:5;42767:9;;;;;;;;;;;42760:16;;42684:100;:::o;45426:::-;45481:7;45508:10;;45501:17;;45426:100;:::o;39147:29::-;;;;:::o;21370:297::-;21485:4;21507:130;21530:12;:10;:12::i;:::-;21557:7;21616:10;21579:11;:25;21591:12;:10;:12::i;:::-;21579:25;;;;;;;;;;;;;;;:34;21605:7;21579:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;21507:8;:130::i;:::-;21655:4;21648:11;;21370:297;;;;:::o;39490:26::-;;;;:::o;28179:91::-;28235:27;28241:12;:10;:12::i;:::-;28255:6;28235:5;:27::i;:::-;28179:91;:::o;45071:111::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45170:4:::1;45140:18;:27;45159:7;45140:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45071:111:::0;:::o;46407:487::-;46525:7;46569;;46558;:18;;46550:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46628:17;46623:264;;46663:15;46688:27;46707:7;46688:18;:27::i;:::-;46662:53;;;;;46737:7;46730:14;;;;;46623:264;46780:23;46811:27;46830:7;46811:18;:27::i;:::-;46777:61;;;;;46860:15;46853:22;;;46407:487;;;;;:::o;39409:28::-;;;;:::o;39750:38::-;;;:::o;39825:40::-;;;;;;;;;;;;;:::o;43317:95::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43396:8:::1;43385;:19;;;;43317:95:::0;:::o;44939:124::-;45004:4;45028:18;:27;45047:7;45028:27;;;;;;;;;;;;;;;;;;;;;;;;;45021:34;;44939:124;;;:::o;47230:339::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47318:11:::1;:20;47330:7;47318:20;;;;;;;;;;;;;;;;;;;;;;;;;47317:21;47309:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47404:1;47385:7;:16;47393:7;47385:16;;;;;;;;;;;;;;;;:20;47381:109;;;47441:37;47461:7;:16;47469:7;47461:16;;;;;;;;;;;;;;;;47441:19;:37::i;:::-;47422:7;:16;47430:7;47422:16;;;;;;;;;;;;;;;:56;;;;47381:109;47523:4;47500:11;:20;47512:7;47500:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;47538:9;47553:7;47538:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47230:339:::0;:::o;43420:193::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43514:13:::1;43498;:29;;;;43594:11;;43578:13;;43562;;:29;;;;:::i;:::-;:43;;;;:::i;:::-;43538:21;:67;;;;43420:193:::0;:::o;43621:::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43715:13:::1;43699;:29;;;;43795:11;;43779:13;;43763;;:29;;;;:::i;:::-;:43;;;;:::i;:::-;43739:21;:67;;;;43621:193:::0;:::o;42903:278::-;43021:7;43050:11;:19;43062:6;43050:19;;;;;;;;;;;;;;;;;;;;;;;;;43046:74;;;43093:7;:15;43101:6;43093:15;;;;;;;;;;;;;;;;43086:22;;;;43046:74;43137:36;43157:7;:15;43165:6;43157:15;;;;;;;;;;;;;;;;43137:19;:36::i;:::-;43130:43;;42903:278;;;;:::o;14599:103::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14664:30:::1;14691:1;14664:18;:30::i;:::-;14599:103::o:0;28589:405::-;28666:24;28693:32;28703:7;28712:12;:10;:12::i;:::-;28693:9;:32::i;:::-;28666:59;;28778:6;28758:16;:26;;28736:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;28884:58;28893:7;28902:12;:10;:12::i;:::-;28935:6;28916:16;:25;28884:8;:58::i;:::-;28964:22;28970:7;28979:6;28964:5;:22::i;:::-;28655:339;28589:405;;:::o;39567:27::-;;;;:::o;13948:87::-;13994:7;14021:6;;;;;;;;;;;14014:13;;13948:87;:::o;44015:139::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44128:17:::1;44101:16;;:45;;;;;;;;;;;;;;;;;;44015:139:::0;:::o;17651:104::-;17707:13;17740:7;17733:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17651:104;:::o;43189:120::-;43251:7;43278:23;;43271:30;;43189:120;:::o;22170:482::-;22290:4;22312:24;22339:11;:25;22351:12;:10;:12::i;:::-;22339:25;;;;;;;;;;;;;;;:34;22365:7;22339:34;;;;;;;;;;;;;;;;22312:61;;22426:15;22406:16;:35;;22384:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22542:67;22551:12;:10;:12::i;:::-;22565:7;22593:15;22574:16;:34;22542:8;:67::i;:::-;22640:4;22633:11;;;22170:482;;;;:::o;38693:39::-;;;;;;;;;;;;;:::o;19113:216::-;19235:4;19257:42;19267:12;:10;:12::i;:::-;19281:9;19292:6;19257:9;:42::i;:::-;19317:4;19310:11;;19113:216;;;;:::o;38785:37::-;;;;;;;;;;;;;:::o;39076:23::-;;;;:::o;44643:171::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44744:8:::1;44720:21;;:32;;;;;;;;;;;;;;;;;;44768:38;44797:8;44768:38;;;;;;:::i;:::-;;;;;;;;44643:171:::0;:::o;38739:39::-;;;;;;;;;;;;;:::o;45308:110::-;45366:4;45390:11;:20;45402:7;45390:20;;;;;;;;;;;;;;;;;;;;;;;;;45383:27;;45308:110;;;:::o;44162:139::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44275:17:::1;44248:16;;:45;;;;;;;;;;;;;;;;;;44162:139:::0;:::o;19392:201::-;19526:7;19558:11;:18;19570:5;19558:18;;;;;;;;;;;;;;;:27;19577:7;19558:27;;;;;;;;;;;;;;;;19551:34;;19392:201;;;;:::o;45534:121::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45631:16:::1;45614:14;:33;;;;45534:121:::0;:::o;45190:110::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45287:5:::1;45257:18;:27;45276:7;45257:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;45190:110:::0;:::o;44822:109::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44912:11:::1;44897:12;:26;;;;44822:109:::0;:::o;57426:406::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57492:8:::1;57488:337;;;57517:31;57542:5;57517:24;:31::i;:::-;57563:14;:12;:14::i;:::-;57615:12;;57592:20;:35;;;;57657:13;:11;:13::i;:::-;57642:12;:28;;;;57488:337;;;57703:30;57728:4;57703:24;:30::i;:::-;57748:15;:13;:15::i;:::-;57793:20;;57778:12;:35;;;;57488:337;57426:406:::0;:::o;44448:187::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44603:24:::1;44577:23;:50;;;;44448:187:::0;:::o;14857:238::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14980:1:::1;14960:22;;:8;:22;;::::0;14938:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15059:28;15078:8;15059:18;:28::i;:::-;14857:238:::0;:::o;47577:482::-;14179:12;:10;:12::i;:::-;14168:23;;:7;:5;:7::i;:::-;:23;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47662:11:::1;:20;47674:7;47662:20;;;;;;;;;;;;;;;;;;;;;;;;;47654:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47730:9;47725:327;47749:9;:16;;;;47745:1;:20;47725:327;;;47807:7;47791:23;;:9;47801:1;47791:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;47787:254:::1;;47850:9;47879:1;47860:9;:16;;;;:20;;;;:::i;:::-;47850:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47835:9;47845:1;47835:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;47919:1;47900:7;:16;47908:7;47900:16;;;;;;;;;;;;;;;:20;;;;47962:5;47939:11;:20;47951:7;47939:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;47986:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;48020:5;;47787:254;47767:3;;;;;:::i;:::-;;;;47725:327;;;;47577:482:::0;:::o;12790:98::-;12843:7;12870:10;12863:17;;12790:98;:::o;51188:553::-;51296:7;51318;51340;51362;51397:16;51416:29;51437:7;51416:20;:29::i;:::-;51397:48;;51456:23;51492:8;51482:7;:18;;;;:::i;:::-;51456:44;;51511:19;51533:10;:8;:10::i;:::-;51511:32;;51554:23;51598:11;51580:15;:29;;;;:::i;:::-;51554:55;;51620:15;51648:11;51638:7;:21;;;;:::i;:::-;51620:39;;51678:7;51687:15;51704;51721:11;51670:63;;;;;;;;;;;;;51188:553;;;;;:::o;25960:380::-;26113:1;26096:19;;:5;:19;;;26088:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26194:1;26175:21;;:7;:21;;;26167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26278:6;26248:11;:18;26260:5;26248:18;;;;;;;;;;;;;;;:27;26267:7;26248:27;;;;;;;;;;;;;;;:36;;;;26316:7;26300:32;;26309:5;26300:32;;;26325:6;26300:32;;;;;;:::i;:::-;;;;;;;;25960:380;;;:::o;48067:1529::-;48234:1;48216:20;;:6;:20;;;48208:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48318:1;48297:23;;:9;:23;;;48289:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48388:1;48379:6;:10;48371:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48446:21;48470:17;48480:6;48470:9;:17::i;:::-;48446:41;;48537:6;48520:13;:23;;48498:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;48634:7;:5;:7::i;:::-;48624:17;;:6;:17;;;;:41;;;;;48658:7;:5;:7::i;:::-;48645:20;;:9;:20;;;;48624:41;48620:198;;;48718:12;;48708:6;:22;;48682:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;48620:198;48830:47;48851:6;48859:9;48870:6;48830:20;:47::i;:::-;48890:28;48921:24;48939:4;48921:9;:24::i;:::-;48890:55;;48956:28;49024:23;;48987:20;:60;;48956:91;;49079:16;;;;;;;;;;;49078:17;:55;;;;;49112:21;;;;;;;;;;;49078:55;:98;;;;;49163:13;49150:26;;:9;:26;;;49078:98;49060:315;;;49207:23;49203:161;;;49274:23;;49251:46;;49316:32;49327:20;49316:10;:32::i;:::-;49203:161;49060:315;49387:12;49402:4;49387:19;;49423:18;:26;49442:6;49423:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;49453:18;:29;49472:9;49453:29;;;;;;;;;;;;;;;;;;;;;;;;;49423:59;49419:107;;;49509:5;49499:15;;49419:107;49538:50;49553:6;49561:9;49572:6;49580:7;49538:14;:50::i;:::-;48197:1399;;;;48067:1529;;;:::o;57988:810::-;58100:1;58081:21;;:7;:21;;;58073:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;58151:22;58176:18;58186:7;58176:9;:18::i;:::-;58151:43;;58231:6;58213:14;:24;;58205:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;58289:49;58310:7;58327:1;58331:6;58289:20;:49::i;:::-;58351:19;58373:10;:8;:10::i;:::-;58351:32;;58394:15;58421:11;58412:6;:20;;;;:::i;:::-;58394:38;;58449:11;:20;58461:7;58449:20;;;;;;;;;;;;;;;;;;;;;;;;;58445:97;;;58524:6;58505:7;:16;58513:7;58505:16;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;58486:7;:16;58494:7;58486:16;;;;;;;;;;;;;;;:44;;;;58445:97;58592:7;58573;:16;58581:7;58573:16;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;58554:7;:16;58562:7;58554:16;;;;;;;;;;;;;;;:45;;;;58632:6;58622:7;;:16;;;;:::i;:::-;58612:7;:26;;;;58669:7;58659;;:17;;;;:::i;:::-;58649:7;:27;;;;58718:1;58692:37;;58701:7;58692:37;;;58722:6;58692:37;;;;;;:::i;:::-;;;;;;;;58742:48;58762:7;58779:1;58783:6;58742:19;:48::i;:::-;58062:736;;;57988:810;;:::o;46902:320::-;46997:7;47055;;47044;:18;;47022:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;47143:19;47165:10;:8;:10::i;:::-;47143:32;;47203:11;47193:7;:21;;;;:::i;:::-;47186:28;;;46902:320;;;:::o;15255:191::-;15329:16;15348:6;;;;;;;;;;;15329:25;;15374:8;15365:6;;:17;;;;;;;;;;;;;;;;;;15429:8;15398:40;;15419:8;15398:40;;;;;;;;;;;;15318:128;15255:191;:::o;56499:578::-;56571:1;56546:21;;:26;:49;;;;;56594:1;56576:14;;:19;56546:49;56597:7;56542:62;56648:21;;56616:29;:53;;;;56699:8;;56680:16;:27;;;;56743:14;;56718:22;:39;;;;56792:13;;56768:21;:37;;;;56840:13;;56816:21;:37;;;;56886:11;;56864:19;:33;;;;56934:1;56910:21;:25;;;;56957:1;56946:8;:12;;;;56986:1;56969:14;:18;;;;57014:1;56998:13;:17;;;;57042:1;57026:13;:17;;;;57068:1;57054:11;:15;;;;56499:578;:::o;57085:333::-;57153:29;;57129:21;:53;;;;57204:16;;57193:8;:27;;;;57248:22;;57231:14;:39;;;;57297:21;;57281:13;:37;;;;57345:21;;57329:13;:37;;;;57391:19;;57377:11;:33;;;;57085:333::o;51749:277::-;51844:7;51869:16;51929:8;;51912:14;;51888:21;;:38;;;;:::i;:::-;:49;;;;:::i;:::-;51869:68;;51948:16;51989:3;51977:8;51968:6;:17;;;;:::i;:::-;51967:25;;;;:::i;:::-;51948:44;;52010:8;52003:15;;;;51749:277;;;:::o;53154:161::-;53196:7;53217:15;53234;53253:19;:17;:19::i;:::-;53216:56;;;;53300:7;53290;:17;;;;:::i;:::-;53283:24;;;;53154:161;:::o;26940:125::-;;;;:::o;53993:710::-;40305:4;40286:16;;:23;;;;;;;;;;;;;;;;;;54074:22:::1;54099:21;54074:46;;54131:38;54148:20;54131:16;:38::i;:::-;54180:26;54233:14;54209:21;:38;;;;:::i;:::-;54180:67;;54260:139;54295:16;;;;;;;;;;;54367:21;;54350:13;;54328:18;54327:36;;;;:::i;:::-;54326:62;;;;:::i;:::-;54260:20;:139::i;:::-;54410;54445:16;;;;;;;;;;;54517:21;;54500:13;;54478:18;54477:36;;;;:::i;:::-;54476:62;;;;:::i;:::-;54410:20;:139::i;:::-;54560:135;54595:14;;;;;;;;;;;54663:21;;54648:11;;54626:18;54625:34;;;;:::i;:::-;54624:60;;;;:::i;:::-;54560:20;:135::i;:::-;54063:640;;40351:5:::0;40332:16;;:24;;;;;;;;;;;;;;;;;;53993:710;:::o;49604:318::-;49750:7;49745:55;;49774:14;:12;:14::i;:::-;49745:55;49812:34;49830:4;49836:2;49840:5;49812:17;:34::i;:::-;49864:7;49859:56;;49888:15;:13;:15::i;:::-;49859:56;49604:318;;;;:::o;27669:124::-;;;;:::o;53323:662::-;53374:7;53383;53403:15;53421:7;;53403:25;;53439:15;53457:7;;53439:25;;53482:9;53477:366;53501:9;:16;;;;53497:1;:20;53477:366;;;53585:7;53561;:21;53569:9;53579:1;53569:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53561:21;;;;;;;;;;;;;;;;:31;:83;;;;53637:7;53613;:21;53621:9;53631:1;53621:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53613:21;;;;;;;;;;;;;;;;:31;53561:83;53539:181;;;53687:7;;53696;;53679:25;;;;;;;;;53539:181;53754:7;:21;53762:9;53772:1;53762:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53754:21;;;;;;;;;;;;;;;;53744:7;:31;;;;:::i;:::-;53734:41;;53810:7;:21;53818:9;53828:1;53818:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53810:21;;;;;;;;;;;;;;;;53800:7;:31;;;;:::i;:::-;53790:41;;53519:3;;;;;:::i;:::-;;;;53477:366;;;;53879:7;;53869;;:17;;;;:::i;:::-;53859:7;:27;53855:85;;;53911:7;;53920;;53903:25;;;;;;;;53855:85;53960:7;53969;53952:25;;;;;;53323:662;;;:::o;54711:658::-;54837:21;54875:1;54861:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54837:40;;54906:4;54888;54893:1;54888:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;54932:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54922:4;54927:1;54922:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;54967:62;54984:4;54999:15;55017:11;54967:8;:62::i;:::-;55068:15;:66;;;55149:11;55175:1;55219:4;55246;55282:15;55068:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55326:35;55343:11;55356:4;55326:35;;;;;;;:::i;:::-;;;;;;;;54766:603;54711:658;:::o;57840:140::-;57946:9;:18;;:26;57965:6;57946:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57840:140;;:::o;49930:1250::-;50077:15;50107:23;50145;50183:19;50216:27;50235:7;50216:18;:27::i;:::-;50062:181;;;;;;;;50292:7;50274;:15;50282:6;50274:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;50256:7;:15;50264:6;50256:15;;;;;;;;;;;;;;;:43;;;;50352:15;50331:7;:18;50339:9;50331:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;50310:7;:18;50318:9;50310:18;;;;;;;;;;;;;;;:57;;;;50384:11;:19;50396:6;50384:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;50408:11;:22;50420:9;50408:22;;;;;;;;;;;;;;;;;;;;;;;;;50407:23;50384:46;50380:463;;;50483:7;50465;:15;50473:6;50465:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;50447:7;:15;50455:6;50447:15;;;;;;;;;;;;;;;:43;;;;50380:463;;;50513:11;:19;50525:6;50513:19;;;;;;;;;;;;;;;;;;;;;;;;;50512:20;:46;;;;;50536:11;:22;50548:9;50536:22;;;;;;;;;;;;;;;;;;;;;;;;;50512:46;50508:335;;;50617:15;50596:7;:18;50604:9;50596:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;50575:7;:18;50583:9;50575:18;;;;;;;;;;;;;;;:57;;;;50508:335;;;50654:11;:19;50666:6;50654:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;50677:11;:22;50689:9;50677:22;;;;;;;;;;;;;;;;;;;;;;;;;50654:45;50650:193;;;50752:7;50734;:15;50742:6;50734:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;50716:7;:15;50724:6;50716:15;;;;;;;;;;;;;;;:43;;;;50816:15;50795:7;:18;50803:9;50795:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;50774:7;:18;50782:9;50774:18;;;;;;;;;;;;;;;:57;;;;50650:193;50508:335;50380:463;50855:33;50867:7;50876:11;50855;:33::i;:::-;50899:45;50915:6;50923:7;50932:11;50899:15;:45::i;:::-;50955:155;50981:6;51002:7;51024:11;51050:21;;51094:4;50955:11;:155::i;:::-;51145:9;51128:44;;51137:6;51128:44;;;51156:15;51128:44;;;;;;:::i;:::-;;;;;;;;50051:1129;;;;49930:1250;;;:::o;52034:255::-;52112:12;52156:3;52138:14;;52128:7;:24;;;;:::i;:::-;52127:32;;;;:::i;:::-;52112:47;;52170:12;52192:11;52185:4;:18;;;;:::i;:::-;52170:33;;52236:4;52226:7;;:14;;;;:::i;:::-;52216:7;:24;;;;52277:4;52264:10;;:17;;;;:::i;:::-;52251:10;:30;;;;52101:188;;52034:255;;:::o;52297:425::-;52429:16;52471:3;52459:8;;52449:7;:18;;;;:::i;:::-;52448:26;;;;:::i;:::-;52429:45;;52500:1;52489:8;:12;52485:230;;;52518:16;52548:11;52537:8;:22;;;;:::i;:::-;52518:41;;52594:8;52584:7;;:18;;;;:::i;:::-;52574:7;:28;;;;52637:8;52627:7;;:18;;;;:::i;:::-;52617:7;:28;;;;52690:1;52665:38;;52674:6;52665:38;;;52694:8;52665:38;;;;;;:::i;:::-;;;;;;;;52503:212;52485:230;52418:304;52297:425;;;:::o;52730:416::-;52907:12;52940:3;52933;52923:7;:13;;;;:::i;:::-;52922:21;;;;:::i;:::-;52907:36;;52965:1;52958:4;:8;52954:185;;;52983:12;53005:11;52998:4;:18;;;;:::i;:::-;52983:33;;53071:4;53051:7;:17;53059:8;53051:17;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;53031:7;:17;53039:8;53031:17;;;;;;;;;;;;;;;:44;;;;53112:8;53095:32;;53104:6;53095:32;;;53122:4;53095:32;;;;;;:::i;:::-;;;;;;;;52968:171;52954:185;52896:250;52730:416;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:329::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:153::-;4587:9;4620:37;4651:5;4620:37;:::i;:::-;4607:50;;4510:153;;;:::o;4669:185::-;4783:64;4841:5;4783:64;:::i;:::-;4778:3;4771:77;4669:185;;:::o;4860:276::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:98;5126:1;5115:9;5111:17;5102:6;5031:98;:::i;:::-;4860:276;;;;:::o;5142:118::-;5229:24;5247:5;5229:24;:::i;:::-;5224:3;5217:37;5142:118;;:::o;5266:222::-;5359:4;5397:2;5386:9;5382:18;5374:26;;5410:71;5478:1;5467:9;5463:17;5454:6;5410:71;:::i;:::-;5266:222;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:104::-;7681:7;7710:24;7728:5;7710:24;:::i;:::-;7699:35;;7636:104;;;:::o;7746:142::-;7849:32;7875:5;7849:32;:::i;:::-;7844:3;7837:45;7746:142;;:::o;7894:254::-;8003:4;8041:2;8030:9;8026:18;8018:26;;8054:87;8138:1;8127:9;8123:17;8114:6;8054:87;:::i;:::-;7894:254;;;;:::o;8154:323::-;8210:6;8259:2;8247:9;8238:7;8234:23;8230:32;8227:119;;;8265:79;;:::i;:::-;8227:119;8385:1;8410:50;8452:7;8443:6;8432:9;8428:22;8410:50;:::i;:::-;8400:60;;8356:114;8154:323;;;;:::o;8483:474::-;8551:6;8559;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:53;8804:7;8795:6;8784:9;8780:22;8759:53;:::i;:::-;8749:63;;8705:117;8861:2;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8832:118;8483:474;;;;;:::o;8963:231::-;9103:34;9099:1;9091:6;9087:14;9080:58;9172:14;9167:2;9159:6;9155:15;9148:39;8963:231;:::o;9200:366::-;9342:3;9363:67;9427:2;9422:3;9363:67;:::i;:::-;9356:74;;9439:93;9528:3;9439:93;:::i;:::-;9557:2;9552:3;9548:12;9541:19;;9200:366;;;:::o;9572:419::-;9738:4;9776:2;9765:9;9761:18;9753:26;;9825:9;9819:4;9815:20;9811:1;9800:9;9796:17;9789:47;9853:131;9979:4;9853:131;:::i;:::-;9845:139;;9572:419;;;:::o;9997:180::-;10045:77;10042:1;10035:88;10142:4;10139:1;10132:15;10166:4;10163:1;10156:15;10183:191;10223:4;10243:20;10261:1;10243:20;:::i;:::-;10238:25;;10277:20;10295:1;10277:20;:::i;:::-;10272:25;;10316:1;10313;10310:8;10307:34;;;10321:18;;:::i;:::-;10307:34;10366:1;10363;10359:9;10351:17;;10183:191;;;;:::o;10380:305::-;10420:3;10439:20;10457:1;10439:20;:::i;:::-;10434:25;;10473:20;10491:1;10473:20;:::i;:::-;10468:25;;10627:1;10559:66;10555:74;10552:1;10549:81;10546:107;;;10633:18;;:::i;:::-;10546:107;10677:1;10674;10670:9;10663:16;;10380:305;;;;:::o;10691:180::-;10739:77;10736:1;10729:88;10836:4;10833:1;10826:15;10860:4;10857:1;10850:15;10877:320;10921:6;10958:1;10952:4;10948:12;10938:22;;11005:1;10999:4;10995:12;11026:18;11016:81;;11082:4;11074:6;11070:17;11060:27;;11016:81;11144:2;11136:6;11133:14;11113:18;11110:38;11107:84;;11163:18;;:::i;:::-;11107:84;10928:269;10877:320;;;:::o;11203:182::-;11343:34;11339:1;11331:6;11327:14;11320:58;11203:182;:::o;11391:366::-;11533:3;11554:67;11618:2;11613:3;11554:67;:::i;:::-;11547:74;;11630:93;11719:3;11630:93;:::i;:::-;11748:2;11743:3;11739:12;11732:19;;11391:366;;;:::o;11763:419::-;11929:4;11967:2;11956:9;11952:18;11944:26;;12016:9;12010:4;12006:20;12002:1;11991:9;11987:17;11980:47;12044:131;12170:4;12044:131;:::i;:::-;12036:139;;11763:419;;;:::o;12188:227::-;12328:34;12324:1;12316:6;12312:14;12305:58;12397:10;12392:2;12384:6;12380:15;12373:35;12188:227;:::o;12421:366::-;12563:3;12584:67;12648:2;12643:3;12584:67;:::i;:::-;12577:74;;12660:93;12749:3;12660:93;:::i;:::-;12778:2;12773:3;12769:12;12762:19;;12421:366;;;:::o;12793:419::-;12959:4;12997:2;12986:9;12982:18;12974:26;;13046:9;13040:4;13036:20;13032:1;13021:9;13017:17;13010:47;13074:131;13200:4;13074:131;:::i;:::-;13066:139;;12793:419;;;:::o;13218:181::-;13358:33;13354:1;13346:6;13342:14;13335:57;13218:181;:::o;13405:366::-;13547:3;13568:67;13632:2;13627:3;13568:67;:::i;:::-;13561:74;;13644:93;13733:3;13644:93;:::i;:::-;13762:2;13757:3;13753:12;13746:19;;13405:366;;;:::o;13777:419::-;13943:4;13981:2;13970:9;13966:18;13958:26;;14030:9;14024:4;14020:20;14016:1;14005:9;14001:17;13994:47;14058:131;14184:4;14058:131;:::i;:::-;14050:139;;13777:419;;;:::o;14202:177::-;14342:29;14338:1;14330:6;14326:14;14319:53;14202:177;:::o;14385:366::-;14527:3;14548:67;14612:2;14607:3;14548:67;:::i;:::-;14541:74;;14624:93;14713:3;14624:93;:::i;:::-;14742:2;14737:3;14733:12;14726:19;;14385:366;;;:::o;14757:419::-;14923:4;14961:2;14950:9;14946:18;14938:26;;15010:9;15004:4;15000:20;14996:1;14985:9;14981:17;14974:47;15038:131;15164:4;15038:131;:::i;:::-;15030:139;;14757:419;;;:::o;15182:223::-;15322:34;15318:1;15310:6;15306:14;15299:58;15391:6;15386:2;15378:6;15374:15;15367:31;15182:223;:::o;15411:366::-;15553:3;15574:67;15638:2;15633:3;15574:67;:::i;:::-;15567:74;;15650:93;15739:3;15650:93;:::i;:::-;15768:2;15763:3;15759:12;15752:19;;15411:366;;;:::o;15783:419::-;15949:4;15987:2;15976:9;15972:18;15964:26;;16036:9;16030:4;16026:20;16022:1;16011:9;16007:17;16000:47;16064:131;16190:4;16064:131;:::i;:::-;16056:139;;15783:419;;;:::o;16208:224::-;16348:34;16344:1;16336:6;16332:14;16325:58;16417:7;16412:2;16404:6;16400:15;16393:32;16208:224;:::o;16438:366::-;16580:3;16601:67;16665:2;16660:3;16601:67;:::i;:::-;16594:74;;16677:93;16766:3;16677:93;:::i;:::-;16795:2;16790:3;16786:12;16779:19;;16438:366;;;:::o;16810:419::-;16976:4;17014:2;17003:9;16999:18;16991:26;;17063:9;17057:4;17053:20;17049:1;17038:9;17034:17;17027:47;17091:131;17217:4;17091:131;:::i;:::-;17083:139;;16810:419;;;:::o;17235:225::-;17375:34;17371:1;17363:6;17359:14;17352:58;17444:8;17439:2;17431:6;17427:15;17420:33;17235:225;:::o;17466:366::-;17608:3;17629:67;17693:2;17688:3;17629:67;:::i;:::-;17622:74;;17705:93;17794:3;17705:93;:::i;:::-;17823:2;17818:3;17814:12;17807:19;;17466:366;;;:::o;17838:419::-;18004:4;18042:2;18031:9;18027:18;18019:26;;18091:9;18085:4;18081:20;18077:1;18066:9;18062:17;18055:47;18119:131;18245:4;18119:131;:::i;:::-;18111:139;;17838:419;;;:::o;18263:177::-;18403:29;18399:1;18391:6;18387:14;18380:53;18263:177;:::o;18446:366::-;18588:3;18609:67;18673:2;18668:3;18609:67;:::i;:::-;18602:74;;18685:93;18774:3;18685:93;:::i;:::-;18803:2;18798:3;18794:12;18787:19;;18446:366;;;:::o;18818:419::-;18984:4;19022:2;19011:9;19007:18;18999:26;;19071:9;19065:4;19061:20;19057:1;19046:9;19042:17;19035:47;19099:131;19225:4;19099:131;:::i;:::-;19091:139;;18818:419;;;:::o;19243:180::-;19291:77;19288:1;19281:88;19388:4;19385:1;19378:15;19412:4;19409:1;19402:15;19429:180;19477:77;19474:1;19467:88;19574:4;19571:1;19564:15;19598:4;19595:1;19588:15;19615:233;19654:3;19677:24;19695:5;19677:24;:::i;:::-;19668:33;;19723:66;19716:5;19713:77;19710:103;;19793:18;;:::i;:::-;19710:103;19840:1;19833:5;19829:13;19822:20;;19615:233;;;:::o;19854:348::-;19894:7;19917:20;19935:1;19917:20;:::i;:::-;19912:25;;19951:20;19969:1;19951:20;:::i;:::-;19946:25;;20139:1;20071:66;20067:74;20064:1;20061:81;20056:1;20049:9;20042:17;20038:105;20035:131;;;20146:18;;:::i;:::-;20035:131;20194:1;20191;20187:9;20176:20;;19854:348;;;;:::o;20208:223::-;20348:34;20344:1;20336:6;20332:14;20325:58;20417:6;20412:2;20404:6;20400:15;20393:31;20208:223;:::o;20437:366::-;20579:3;20600:67;20664:2;20659:3;20600:67;:::i;:::-;20593:74;;20676:93;20765:3;20676:93;:::i;:::-;20794:2;20789:3;20785:12;20778:19;;20437:366;;;:::o;20809:419::-;20975:4;21013:2;21002:9;20998:18;20990:26;;21062:9;21056:4;21052:20;21048:1;21037:9;21033:17;21026:47;21090:131;21216:4;21090:131;:::i;:::-;21082:139;;20809:419;;;:::o;21234:221::-;21374:34;21370:1;21362:6;21358:14;21351:58;21443:4;21438:2;21430:6;21426:15;21419:29;21234:221;:::o;21461:366::-;21603:3;21624:67;21688:2;21683:3;21624:67;:::i;:::-;21617:74;;21700:93;21789:3;21700:93;:::i;:::-;21818:2;21813:3;21809:12;21802:19;;21461:366;;;:::o;21833:419::-;21999:4;22037:2;22026:9;22022:18;22014:26;;22086:9;22080:4;22076:20;22072:1;22061:9;22057:17;22050:47;22114:131;22240:4;22114:131;:::i;:::-;22106:139;;21833:419;;;:::o;22258:224::-;22398:34;22394:1;22386:6;22382:14;22375:58;22467:7;22462:2;22454:6;22450:15;22443:32;22258:224;:::o;22488:366::-;22630:3;22651:67;22715:2;22710:3;22651:67;:::i;:::-;22644:74;;22727:93;22816:3;22727:93;:::i;:::-;22845:2;22840:3;22836:12;22829:19;;22488:366;;;:::o;22860:419::-;23026:4;23064:2;23053:9;23049:18;23041:26;;23113:9;23107:4;23103:20;23099:1;23088:9;23084:17;23077:47;23141:131;23267:4;23141:131;:::i;:::-;23133:139;;22860:419;;;:::o;23285:222::-;23425:34;23421:1;23413:6;23409:14;23402:58;23494:5;23489:2;23481:6;23477:15;23470:30;23285:222;:::o;23513:366::-;23655:3;23676:67;23740:2;23735:3;23676:67;:::i;:::-;23669:74;;23752:93;23841:3;23752:93;:::i;:::-;23870:2;23865:3;23861:12;23854:19;;23513:366;;;:::o;23885:419::-;24051:4;24089:2;24078:9;24074:18;24066:26;;24138:9;24132:4;24128:20;24124:1;24113:9;24109:17;24102:47;24166:131;24292:4;24166:131;:::i;:::-;24158:139;;23885:419;;;:::o;24310:228::-;24450:34;24446:1;24438:6;24434:14;24427:58;24519:11;24514:2;24506:6;24502:15;24495:36;24310:228;:::o;24544:366::-;24686:3;24707:67;24771:2;24766:3;24707:67;:::i;:::-;24700:74;;24783:93;24872:3;24783:93;:::i;:::-;24901:2;24896:3;24892:12;24885:19;;24544:366;;;:::o;24916:419::-;25082:4;25120:2;25109:9;25105:18;25097:26;;25169:9;25163:4;25159:20;25155:1;25144:9;25140:17;25133:47;25197:131;25323:4;25197:131;:::i;:::-;25189:139;;24916:419;;;:::o;25341:225::-;25481:34;25477:1;25469:6;25465:14;25458:58;25550:8;25545:2;25537:6;25533:15;25526:33;25341:225;:::o;25572:366::-;25714:3;25735:67;25799:2;25794:3;25735:67;:::i;:::-;25728:74;;25811:93;25900:3;25811:93;:::i;:::-;25929:2;25924:3;25920:12;25913:19;;25572:366;;;:::o;25944:419::-;26110:4;26148:2;26137:9;26133:18;26125:26;;26197:9;26191:4;26187:20;26183:1;26172:9;26168:17;26161:47;26225:131;26351:4;26225:131;:::i;:::-;26217:139;;25944:419;;;:::o;26369:227::-;26509:34;26505:1;26497:6;26493:14;26486:58;26578:10;26573:2;26565:6;26561:15;26554:35;26369:227;:::o;26602:366::-;26744:3;26765:67;26829:2;26824:3;26765:67;:::i;:::-;26758:74;;26841:93;26930:3;26841:93;:::i;:::-;26959:2;26954:3;26950:12;26943:19;;26602:366;;;:::o;26974:419::-;27140:4;27178:2;27167:9;27163:18;27155:26;;27227:9;27221:4;27217:20;27213:1;27202:9;27198:17;27191:47;27255:131;27381:4;27255:131;:::i;:::-;27247:139;;26974:419;;;:::o;27399:220::-;27539:34;27535:1;27527:6;27523:14;27516:58;27608:3;27603:2;27595:6;27591:15;27584:28;27399:220;:::o;27625:366::-;27767:3;27788:67;27852:2;27847:3;27788:67;:::i;:::-;27781:74;;27864:93;27953:3;27864:93;:::i;:::-;27982:2;27977:3;27973:12;27966:19;;27625:366;;;:::o;27997:419::-;28163:4;28201:2;28190:9;28186:18;28178:26;;28250:9;28244:4;28240:20;28236:1;28225:9;28221:17;28214:47;28278:131;28404:4;28278:131;:::i;:::-;28270:139;;27997:419;;;:::o;28422:221::-;28562:34;28558:1;28550:6;28546:14;28539:58;28631:4;28626:2;28618:6;28614:15;28607:29;28422:221;:::o;28649:366::-;28791:3;28812:67;28876:2;28871:3;28812:67;:::i;:::-;28805:74;;28888:93;28977:3;28888:93;:::i;:::-;29006:2;29001:3;28997:12;28990:19;;28649:366;;;:::o;29021:419::-;29187:4;29225:2;29214:9;29210:18;29202:26;;29274:9;29268:4;29264:20;29260:1;29249:9;29245:17;29238:47;29302:131;29428:4;29302:131;:::i;:::-;29294:139;;29021:419;;;:::o;29446:229::-;29586:34;29582:1;29574:6;29570:14;29563:58;29655:12;29650:2;29642:6;29638:15;29631:37;29446:229;:::o;29681:366::-;29823:3;29844:67;29908:2;29903:3;29844:67;:::i;:::-;29837:74;;29920:93;30009:3;29920:93;:::i;:::-;30038:2;30033:3;30029:12;30022:19;;29681:366;;;:::o;30053:419::-;30219:4;30257:2;30246:9;30242:18;30234:26;;30306:9;30300:4;30296:20;30292:1;30281:9;30277:17;30270:47;30334:131;30460:4;30334:131;:::i;:::-;30326:139;;30053:419;;;:::o;30478:180::-;30526:77;30523:1;30516:88;30623:4;30620:1;30613:15;30647:4;30644:1;30637:15;30664:185;30704:1;30721:20;30739:1;30721:20;:::i;:::-;30716:25;;30755:20;30773:1;30755:20;:::i;:::-;30750:25;;30794:1;30784:35;;30799:18;;:::i;:::-;30784:35;30841:1;30838;30834:9;30829:14;;30664:185;;;;:::o;30855:180::-;30903:77;30900:1;30893:88;31000:4;30997:1;30990:15;31024:4;31021:1;31014:15;31041:143;31098:5;31129:6;31123:13;31114:22;;31145:33;31172:5;31145:33;:::i;:::-;31041:143;;;;:::o;31190:351::-;31260:6;31309:2;31297:9;31288:7;31284:23;31280:32;31277:119;;;31315:79;;:::i;:::-;31277:119;31435:1;31460:64;31516:7;31507:6;31496:9;31492:22;31460:64;:::i;:::-;31450:74;;31406:128;31190:351;;;;:::o;31547:85::-;31592:7;31621:5;31610:16;;31547:85;;;:::o;31638:158::-;31696:9;31729:61;31747:42;31756:32;31782:5;31756:32;:::i;:::-;31747:42;:::i;:::-;31729:61;:::i;:::-;31716:74;;31638:158;;;:::o;31802:147::-;31897:45;31936:5;31897:45;:::i;:::-;31892:3;31885:58;31802:147;;:::o;31955:114::-;32022:6;32056:5;32050:12;32040:22;;31955:114;;;:::o;32075:184::-;32174:11;32208:6;32203:3;32196:19;32248:4;32243:3;32239:14;32224:29;;32075:184;;;;:::o;32265:132::-;32332:4;32355:3;32347:11;;32385:4;32380:3;32376:14;32368:22;;32265:132;;;:::o;32403:108::-;32480:24;32498:5;32480:24;:::i;:::-;32475:3;32468:37;32403:108;;:::o;32517:179::-;32586:10;32607:46;32649:3;32641:6;32607:46;:::i;:::-;32685:4;32680:3;32676:14;32662:28;;32517:179;;;;:::o;32702:113::-;32772:4;32804;32799:3;32795:14;32787:22;;32702:113;;;:::o;32851:732::-;32970:3;32999:54;33047:5;32999:54;:::i;:::-;33069:86;33148:6;33143:3;33069:86;:::i;:::-;33062:93;;33179:56;33229:5;33179:56;:::i;:::-;33258:7;33289:1;33274:284;33299:6;33296:1;33293:13;33274:284;;;33375:6;33369:13;33402:63;33461:3;33446:13;33402:63;:::i;:::-;33395:70;;33488:60;33541:6;33488:60;:::i;:::-;33478:70;;33334:224;33321:1;33318;33314:9;33309:14;;33274:284;;;33278:14;33574:3;33567:10;;32975:608;;;32851:732;;;;:::o;33589:831::-;33852:4;33890:3;33879:9;33875:19;33867:27;;33904:71;33972:1;33961:9;33957:17;33948:6;33904:71;:::i;:::-;33985:80;34061:2;34050:9;34046:18;34037:6;33985:80;:::i;:::-;34112:9;34106:4;34102:20;34097:2;34086:9;34082:18;34075:48;34140:108;34243:4;34234:6;34140:108;:::i;:::-;34132:116;;34258:72;34326:2;34315:9;34311:18;34302:6;34258:72;:::i;:::-;34340:73;34408:3;34397:9;34393:19;34384:6;34340:73;:::i;:::-;33589:831;;;;;;;;:::o;34426:483::-;34597:4;34635:2;34624:9;34620:18;34612:26;;34648:71;34716:1;34705:9;34701:17;34692:6;34648:71;:::i;:::-;34766:9;34760:4;34756:20;34751:2;34740:9;34736:18;34729:48;34794:108;34897:4;34888:6;34794:108;:::i;:::-;34786:116;;34426:483;;;;;:::o

Swarm Source

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