ETH Price: $3,407.37 (-0.25%)
Gas: 10 Gwei

Token

MyAddys (ADDY)
 

Overview

Max Total Supply

1,000,000 ADDY

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,773.415040877759004042 ADDY

Value
$0.00
0xddD75C7127789e8Ebb599008EFD68Df2ee7A6648
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ADDYS

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-11
*/

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                  SPDX-License-Identifier: MIT                            
//                                                                                                           
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀                  ⣠⡾⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀                           
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠋⠀⠈⠻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠋⠀⠀⣠⡀⠀⠈⢻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠋⠀⠀⣠⡾⠛⢿⣄⠀⠀⠘⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠋⠀⠀⣠⣾⠏⠁⠀⠀⠙⢷⣄⠀⠀⠙⢿⣦⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠋⠀⠀⢀⣾⠟⠁⠀⢀⣴⣄⠀⠀⠙⢷⣄⠀⠀⠙⢿⣆⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⠋⠀⠀⢀⣴⠟⠁⠀⢀⣴⠟⠉⠙⣷⣄⠀⠀⠙⢷⣄⠀⠀⠙⢷⣄⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠟⠁⠀⢀⣴⠟⠁⠀⢀⣴⠟⠁⠀⠀⠀⠀⠻⣷⣄⠀⠀⠙⢷⣄⠀⠀⠙⢷⣄⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠟⠁⠀⢀⣴⠟⠁⠀⢀⣴⠟⠁⠀⢀⣴⡿⣦⡀⠀⠈⠻⣷⡄⠀⠀⠙⢷⣄⠀⠀⠙⢷⣄
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣦⡀⠀⠘⢿⣦⡀⠀⠘⢻⣦⡀⠀⠈⠻⣶⡿⠋⠀⠀⣠⡾⠃⠀⠀⣠⡾⠋⠀⠀⣠⡾⠟
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⢷⣄⠀⠀⠙⢿⣦⡀⠀⠙⢿⣦⡀⠀⠀⠀⠀⣠⡾⠋⠀⠀⣠⡾⠋⠀⠀⣠⣾⢿⣅⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣟⠁⠀⠙⢷⣄⠀⠀⠙⢿⣦⡀⠀⠙⢿⣦⡀⣠⡾⠋⠀⠀⣠⣾⠟⠀⠀⣠⣾⠟⠁⠀⣹⡷
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⣄⠀⠀⠙⢷⣄⠀⠀⠙⢷⣄⠀⠀⠙⠿⠋⠀⠀⣠⣾⠟⠁⠀⢀⣴⠟⠁⠀⣠⣾⠛⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⣄⠀⠀⠙⢷⣄⠀⠀⠙⢷⣄⠀⠀⠀⣀⣾⠟⠁⠀⢀⣴⠟⠁⠀⣠⣾⠟⠁⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⣄⠀⠈⠻⣷⣄⠀⠀⠙⢷⣤⣴⠟⠁⠀⢀⣴⠟⠁⠀⢀⣴⠟⠁⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⣄⠀⠈⠻⣷⣄⠀⠀⠉⠁⠀⢀⣴⠟⠁⠀⢀⣴⠟⠁⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⣄⠀⠈⠻⣷⣄⠀⢀⣴⡟⠁⠀⢀⣴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⣄⠀⠈⠻⣷⡿⠁⠀⢀⣴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⡄⠀⠀⠀⢀⣴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣦⣀⣴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//                      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀                                           
//
//
//                              A simple and easy-to-use interface for users to create their 
//                              own profile website with their crypto address displayed on it.
//
//                                                  https://myaddys.net
//                                              https://twitter.com/myaddys
//                                                 https://t.me/myaddysnet
//                                              https://discord.gg/myaddys
//
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

pragma solidity 0.8.20;

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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 Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    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 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 ADDYS is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool private swapping;

    address public immutable teamWallet;

    uint256 public maxTransactionAmount;
    uint256 public immutable swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyTeamShareFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellTeamShareFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForRevShare;
    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

    constructor() ERC20("MyAddys", "ADDY") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D 
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyTeamFee = 12; 
        uint256 _buyLiquidityFee = 3; 

        uint256 _sellTeamShareFee = 20; 
        uint256 _sellLiquidityFee = 5; 

        uint256 totalSupply = 1_000_000 * 1e18; 

        maxTransactionAmount = 10_000 * 1e18; 
        maxWallet = 10_000 * 1e18; 
        swapTokensAtAmount = (totalSupply * 5) / 10_000; 

        buyTeamShareFee = _buyTeamFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyTeamShareFee + buyLiquidityFee;

        sellTeamShareFee = _sellTeamShareFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellTeamShareFee + sellLiquidityFee;

        teamWallet = address(0xf050d172B625E5efE008F9FfddED9713639ec8Ce); 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function launchAddy() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function finalizeFees() external onlyOwner {
        maxTransactionAmount = 25_000 * (10 ** 18); 
        maxWallet = 25_000 * (10 ** 18); 

        buyTeamShareFee = 3; 
        buyLiquidityFee = 0;
        buyTotalFees = 3;

        sellTeamShareFee = 3; 
        sellLiquidityFee = 0; 
        sellTotalFees = 3;
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "Trading is not active."
                );
            }

            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }

            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForRevShare += (fees * sellTeamShareFee) / sellTotalFees;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForRevShare += (fees * buyTeamShareFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForRevShare;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;

        uint256 ethForRevShare = (ethBalance * tokensForRevShare) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForLiquidity = ethBalance - ethForRevShare;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        tokensForLiquidity = 0;
        tokensForRevShare = 0;

        (success, ) = address(teamWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTeamShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeFees","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchAddy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTeamShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

6101006040525f60085f6101000a81548160ff0219169083151502179055505f600860016101000a81548160ff02191690831515021790555034801562000044575f80fd5b506040518060400160405280600781526020017f4d794164647973000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f41444459000000000000000000000000000000000000000000000000000000008152508160039081620000c2919062000c4c565b508060049081620000d4919062000c4c565b505050620000f7620000eb620004c060201b60201c565b620004c760201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001228160016200058a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001c6919062000d95565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000252919062000d95565b6040518363ffffffff1660e01b81526004016200027192919062000dd6565b6020604051808303815f875af11580156200028e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b4919062000d95565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002fc60a05160016200058a60201b60201c565b6200031160a05160016200067160201b60201c565b5f600c90505f600390505f601490505f600590505f69d3c21bcecceda1000000905069021e19e0c9bab240000060068190555069021e19e0c9bab240000060078190555061271060058262000367919062000e2e565b62000373919062000ea5565b60e0818152505084600a8190555083600b81905550600b54600a546200039a919062000edc565b60098190555082600d8190555081600e81905550600e54600d54620003c0919062000edc565b600c8190555073f050d172b625e5efe008f9ffdded9713639ec8ce73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505062000430620004226200070f60201b60201c565b60016200073760201b60201c565b620004433060016200073760201b60201c565b6200045861dead60016200073760201b60201c565b6200047a6200046c6200070f60201b60201c565b60016200058a60201b60201c565b6200048d3060016200058a60201b60201c565b620004a261dead60016200058a60201b60201c565b620004b433826200086e60201b60201c565b50505050505062001065565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200059a620004c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005c06200070f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006109062000f74565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000747620004c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200076d6200070f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007bd9062000f74565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000862919062000fb0565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d69062001019565b60405180910390fd5b620008f25f8383620009de60201b60201c565b8060025f82825462000905919062000edc565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000959919062000edc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009bf91906200104a565b60405180910390a3620009da5f8383620009e360201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a6457607f821691505b60208210810362000a7a5762000a7962000a1f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ade7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa1565b62000aea868362000aa1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b3462000b2e62000b288462000b02565b62000b0b565b62000b02565b9050919050565b5f819050919050565b62000b4f8362000b14565b62000b6762000b5e8262000b3b565b84845462000aad565b825550505050565b5f90565b62000b7d62000b6f565b62000b8a81848462000b44565b505050565b5b8181101562000bb15762000ba55f8262000b73565b60018101905062000b90565b5050565b601f82111562000c005762000bca8162000a80565b62000bd58462000a92565b8101602085101562000be5578190505b62000bfd62000bf48562000a92565b83018262000b8f565b50505b505050565b5f82821c905092915050565b5f62000c225f198460080262000c05565b1980831691505092915050565b5f62000c3c838362000c11565b9150826002028217905092915050565b62000c5782620009e8565b67ffffffffffffffff81111562000c735762000c72620009f2565b5b62000c7f825462000a4c565b62000c8c82828562000bb5565b5f60209050601f83116001811462000cc2575f841562000cad578287015190505b62000cb9858262000c2f565b86555062000d28565b601f19841662000cd28662000a80565b5f5b8281101562000cfb5784890151825560018201915060208501945060208101905062000cd4565b8683101562000d1b578489015162000d17601f89168262000c11565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000d5f8262000d34565b9050919050565b62000d718162000d53565b811462000d7c575f80fd5b50565b5f8151905062000d8f8162000d66565b92915050565b5f6020828403121562000dad5762000dac62000d30565b5b5f62000dbc8482850162000d7f565b91505092915050565b62000dd08162000d53565b82525050565b5f60408201905062000deb5f83018562000dc5565b62000dfa602083018462000dc5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000e3a8262000b02565b915062000e478362000b02565b925082820262000e578162000b02565b9150828204841483151762000e715762000e7062000e01565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000eb18262000b02565b915062000ebe8362000b02565b92508262000ed15762000ed062000e78565b5b828204905092915050565b5f62000ee88262000b02565b915062000ef58362000b02565b925082820190508082111562000f105762000f0f62000e01565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000f5c60208362000f16565b915062000f698262000f26565b602082019050919050565b5f6020820190508181035f83015262000f8d8162000f4e565b9050919050565b5f8115159050919050565b62000faa8162000f94565b82525050565b5f60208201905062000fc55f83018462000f9f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001001601f8362000f16565b91506200100e8262000fcb565b602082019050919050565b5f6020820190508181035f830152620010328162000ff3565b9050919050565b620010448162000b02565b82525050565b5f6020820190506200105f5f83018462001039565b92915050565b60805160a05160c05160e051613a3c620010df5f395f818161135e01528181611cdb01528181612537015261256b01525f8181610cc9015261269901525f8181610c530152610fda01525f8181610a79015281816127d3015281816128b2015281816128d90152818161296f01526129960152613a3c5ff3fe608060405260043610610228575f3560e01c80638da5cb5b11610122578063c8c8ebe4116100aa578063f11a24d31161006e578063f11a24d314610823578063f29335121461084d578063f2fde38b14610863578063f63743421461088b578063f8b45b05146108b55761022f565b8063c8c8ebe41461073f578063d85ba06314610769578063dd62ed3e14610793578063e2f45605146107cf578063e6461df9146107f95761022f565b8063a457c2d7116100f1578063a457c2d714610639578063a9059cbb14610675578063b62496f5146106b1578063bbc0c742146106ed578063c0246668146107175761022f565b80638da5cb5b1461059357806395d89b41146105bd5780639a7a23d6146105e75780639b0964591461060f5761022f565b8063313ce567116101b05780636a486a8e116101745780636a486a8e146104c55780636ddd1713146104ef57806370a0823114610519578063715018a6146105555780637571336a1461056b5761022f565b8063313ce567146103cf57806339509351146103f957806349bd5a5e146104355780634fbee1931461045f578063599270441461049b5761022f565b80631694505e116101f75780631694505e146102eb57806318160ddd146103155780631a8145bb1461033f57806323b872dd1461036957806324b9f3c1146103a55761022f565b806306fdde0314610233578063092078791461025d578063095ea7b31461027357806310d5de53146102af5761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b506102476108df565b6040516102549190612ad1565b60405180910390f35b348015610268575f80fd5b5061027161096f565b005b34801561027e575f80fd5b5061029960048036038101906102949190612b82565b610a3d565b6040516102a69190612bda565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d09190612bf3565b610a5a565b6040516102e29190612bda565b60405180910390f35b3480156102f6575f80fd5b506102ff610a77565b60405161030c9190612c79565b60405180910390f35b348015610320575f80fd5b50610329610a9b565b6040516103369190612ca1565b60405180910390f35b34801561034a575f80fd5b50610353610aa4565b6040516103609190612ca1565b60405180910390f35b348015610374575f80fd5b5061038f600480360381019061038a9190612cba565b610aaa565b60405161039c9190612bda565b60405180910390f35b3480156103b0575f80fd5b506103b9610b9c565b6040516103c69190612ca1565b60405180910390f35b3480156103da575f80fd5b506103e3610ba2565b6040516103f09190612d25565b60405180910390f35b348015610404575f80fd5b5061041f600480360381019061041a9190612b82565b610baa565b60405161042c9190612bda565b60405180910390f35b348015610440575f80fd5b50610449610c51565b6040516104569190612d4d565b60405180910390f35b34801561046a575f80fd5b5061048560048036038101906104809190612bf3565b610c75565b6040516104929190612bda565b60405180910390f35b3480156104a6575f80fd5b506104af610cc7565b6040516104bc9190612d4d565b60405180910390f35b3480156104d0575f80fd5b506104d9610ceb565b6040516104e69190612ca1565b60405180910390f35b3480156104fa575f80fd5b50610503610cf1565b6040516105109190612bda565b60405180910390f35b348015610524575f80fd5b5061053f600480360381019061053a9190612bf3565b610d04565b60405161054c9190612ca1565b60405180910390f35b348015610560575f80fd5b50610569610d49565b005b348015610576575f80fd5b50610591600480360381019061058c9190612d90565b610dd0565b005b34801561059e575f80fd5b506105a7610ea4565b6040516105b49190612d4d565b60405180910390f35b3480156105c8575f80fd5b506105d1610ecc565b6040516105de9190612ad1565b60405180910390f35b3480156105f2575f80fd5b5061060d60048036038101906106089190612d90565b610f5c565b005b34801561061a575f80fd5b50610623611074565b6040516106309190612ca1565b60405180910390f35b348015610644575f80fd5b5061065f600480360381019061065a9190612b82565b61107a565b60405161066c9190612bda565b60405180910390f35b348015610680575f80fd5b5061069b60048036038101906106969190612b82565b611160565b6040516106a89190612bda565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d29190612bf3565b61117d565b6040516106e49190612bda565b60405180910390f35b3480156106f8575f80fd5b5061070161119a565b60405161070e9190612bda565b60405180910390f35b348015610722575f80fd5b5061073d60048036038101906107389190612d90565b6111ac565b005b34801561074a575f80fd5b506107536112ce565b6040516107609190612ca1565b60405180910390f35b348015610774575f80fd5b5061077d6112d4565b60405161078a9190612ca1565b60405180910390f35b34801561079e575f80fd5b506107b960048036038101906107b49190612dce565b6112da565b6040516107c69190612ca1565b60405180910390f35b3480156107da575f80fd5b506107e361135c565b6040516107f09190612ca1565b60405180910390f35b348015610804575f80fd5b5061080d611380565b60405161081a9190612ca1565b60405180910390f35b34801561082e575f80fd5b50610837611386565b6040516108449190612ca1565b60405180910390f35b348015610858575f80fd5b5061086161138c565b005b34801561086e575f80fd5b5061088960048036038101906108849190612bf3565b61143f565b005b348015610896575f80fd5b5061089f611535565b6040516108ac9190612ca1565b60405180910390f35b3480156108c0575f80fd5b506108c961153b565b6040516108d69190612ca1565b60405180910390f35b6060600380546108ee90612e39565b80601f016020809104026020016040519081016040528092919081815260200182805461091a90612e39565b80156109655780601f1061093c57610100808354040283529160200191610965565b820191905f5260205f20905b81548152906001019060200180831161094857829003601f168201915b5050505050905090565b610977611541565b73ffffffffffffffffffffffffffffffffffffffff16610995610ea4565b73ffffffffffffffffffffffffffffffffffffffff16146109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290612eb3565b60405180910390fd5b69054b40b1f852bda0000060068190555069054b40b1f852bda000006007819055506003600a819055505f600b8190555060036009819055506003600d819055505f600e819055506003600c81905550565b5f610a50610a49611541565b8484611548565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60105481565b5f610ab684848461170b565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610afd611541565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7390612f41565b60405180910390fd5b610b9085610b88611541565b858403611548565b60019150509392505050565b600f5481565b5f6012905090565b5f610c47610bb6611541565b848460015f610bc3611541565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c429190612f8c565b611548565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b600860019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d51611541565b73ffffffffffffffffffffffffffffffffffffffff16610d6f610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90612eb3565b60405180910390fd5b610dce5f612123565b565b610dd8611541565b73ffffffffffffffffffffffffffffffffffffffff16610df6610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390612eb3565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610edb90612e39565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0790612e39565b8015610f525780601f10610f2957610100808354040283529160200191610f52565b820191905f5260205f20905b815481529060010190602001808311610f3557829003601f168201915b5050505050905090565b610f64611541565b73ffffffffffffffffffffffffffffffffffffffff16610f82610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90612eb3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d9061302f565b60405180910390fd5b61107082826121e6565b5050565b600a5481565b5f8060015f611087611541565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611138906130bd565b60405180910390fd5b61115561114c611541565b85858403611548565b600191505092915050565b5f61117361116c611541565b848461170b565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900460ff1681565b6111b4611541565b73ffffffffffffffffffffffffffffffffffffffff166111d2610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90612eb3565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112c29190612bda565b60405180910390a25050565b60065481565b60095481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d5481565b600b5481565b611394611541565b73ffffffffffffffffffffffffffffffffffffffff166113b2610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90612eb3565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b611447611541565b73ffffffffffffffffffffffffffffffffffffffff16611465610ea4565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290612eb3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115209061314b565b60405180910390fd5b61153281612123565b50565b600e5481565b60075481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad906131d9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90613267565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116fe9190612ca1565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906132f5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90613383565b60405180910390fd5b5f81036117fe576117f983835f612284565b61211e565b611806610ea4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118745750611844610ea4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118ac57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118e6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118ff5750600560149054906101000a900460ff16155b15611ccc5760085f9054906101000a900460ff166119f25760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806119b2575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906133eb565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a8f575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b3657600654811115611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad090613479565b60405180910390fd5b600754611ae583610d04565b82611af09190612f8c565b1115611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906134e1565b60405180910390fd5b611ccb565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bd3575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c2257600654811115611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c149061356f565b60405180910390fd5b611cca565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cc957600754611c7c83610d04565b82611c879190612f8c565b1115611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf906134e1565b60405180910390fd5b5b5b5b5b5f611cd630610d04565b90505f7f00000000000000000000000000000000000000000000000000000000000000008210159050808015611d185750600860019054906101000a900460ff165b8015611d315750600560149054906101000a900460ff16155b8015611d84575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611dd7575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611e2a575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e6d576001600560146101000a81548160ff021916908315150217905550611e526124f9565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f1c575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611f25575f90505b5f811561210e5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f8357505f600c54115b1561200d576064600c5486611f98919061358d565b611fa291906135fb565b9050600c54600e5482611fb5919061358d565b611fbf91906135fb565b60105f828254611fcf9190612f8c565b92505081905550600c54600d5482611fe7919061358d565b611ff191906135fb565b600f5f8282546120019190612f8c565b925050819055506120eb565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561206457505f600954115b156120ea57606460095486612079919061358d565b61208391906135fb565b9050600954600b5482612096919061358d565b6120a091906135fb565b60105f8282546120b09190612f8c565b92505081905550600954600a54826120c8919061358d565b6120d291906135fb565b600f5f8282546120e29190612f8c565b925050819055505b5b5f8111156120ff576120fe873083612284565b5b808561210b919061362b565b94505b612119878787612284565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e9906132f5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790613383565b60405180910390fd5b61236b83838361272c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906136ce565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461247c9190612f8c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124e09190612ca1565b60405180910390a36124f3848484612731565b50505050565b5f61250330610d04565b90505f600f546010546125169190612f8c565b90505f8083148061252657505f82145b156125335750505061272a565b60147f0000000000000000000000000000000000000000000000000000000000000000612560919061358d565b8311156125975760147f0000000000000000000000000000000000000000000000000000000000000000612594919061358d565b92505b5f600283601054866125a9919061358d565b6125b391906135fb565b6125bd91906135fb565b90505f81856125cc919061362b565b90505f4790506125db82612736565b5f81476125e8919061362b565b90505f60026010546125fa91906135fb565b87612605919061362b565b600f5483612613919061358d565b61261d91906135fb565b90505f818361262c919061362b565b90505f8611801561263c57505f81115b156126895761264b8682612969565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601054604051612680939291906136ec565b60405180910390a15b5f6010819055505f600f819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16476040516126db9061374e565b5f6040518083038185875af1925050503d805f8114612715576040519150601f19603f3d011682016040523d82523d5f602084013e61271a565b606091505b5050809750505050505050505050505b565b505050565b505050565b5f600267ffffffffffffffff81111561275257612751613762565b5b6040519080825280602002602001820160405280156127805781602001602082028036833780820191505090505b50905030815f815181106127975761279661378f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906137d0565b816001815181106128725761287161378f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128d7307f000000000000000000000000000000000000000000000000000000000000000084611548565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016129389594939291906138eb565b5f604051808303815f87803b15801561294f575f80fd5b505af1158015612961573d5f803e3d5ffd5b505050505050565b612994307f000000000000000000000000000000000000000000000000000000000000000084611548565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806129dd610ea4565b426040518863ffffffff1660e01b81526004016129ff96959493929190613943565b60606040518083038185885af1158015612a1b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612a4091906139b6565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a7e578082015181840152602081019050612a63565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612aa382612a47565b612aad8185612a51565b9350612abd818560208601612a61565b612ac681612a89565b840191505092915050565b5f6020820190508181035f830152612ae98184612a99565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b1e82612af5565b9050919050565b612b2e81612b14565b8114612b38575f80fd5b50565b5f81359050612b4981612b25565b92915050565b5f819050919050565b612b6181612b4f565b8114612b6b575f80fd5b50565b5f81359050612b7c81612b58565b92915050565b5f8060408385031215612b9857612b97612af1565b5b5f612ba585828601612b3b565b9250506020612bb685828601612b6e565b9150509250929050565b5f8115159050919050565b612bd481612bc0565b82525050565b5f602082019050612bed5f830184612bcb565b92915050565b5f60208284031215612c0857612c07612af1565b5b5f612c1584828501612b3b565b91505092915050565b5f819050919050565b5f612c41612c3c612c3784612af5565b612c1e565b612af5565b9050919050565b5f612c5282612c27565b9050919050565b5f612c6382612c48565b9050919050565b612c7381612c59565b82525050565b5f602082019050612c8c5f830184612c6a565b92915050565b612c9b81612b4f565b82525050565b5f602082019050612cb45f830184612c92565b92915050565b5f805f60608486031215612cd157612cd0612af1565b5b5f612cde86828701612b3b565b9350506020612cef86828701612b3b565b9250506040612d0086828701612b6e565b9150509250925092565b5f60ff82169050919050565b612d1f81612d0a565b82525050565b5f602082019050612d385f830184612d16565b92915050565b612d4781612b14565b82525050565b5f602082019050612d605f830184612d3e565b92915050565b612d6f81612bc0565b8114612d79575f80fd5b50565b5f81359050612d8a81612d66565b92915050565b5f8060408385031215612da657612da5612af1565b5b5f612db385828601612b3b565b9250506020612dc485828601612d7c565b9150509250929050565b5f8060408385031215612de457612de3612af1565b5b5f612df185828601612b3b565b9250506020612e0285828601612b3b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e5057607f821691505b602082108103612e6357612e62612e0c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612e9d602083612a51565b9150612ea882612e69565b602082019050919050565b5f6020820190508181035f830152612eca81612e91565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612f2b602883612a51565b9150612f3682612ed1565b604082019050919050565b5f6020820190508181035f830152612f5881612f1f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f9682612b4f565b9150612fa183612b4f565b9250828201905080821115612fb957612fb8612f5f565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613019603983612a51565b915061302482612fbf565b604082019050919050565b5f6020820190508181035f8301526130468161300d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130a7602583612a51565b91506130b28261304d565b604082019050919050565b5f6020820190508181035f8301526130d48161309b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613135602683612a51565b9150613140826130db565b604082019050919050565b5f6020820190508181035f83015261316281613129565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131c3602483612a51565b91506131ce82613169565b604082019050919050565b5f6020820190508181035f8301526131f0816131b7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613251602283612a51565b915061325c826131f7565b604082019050919050565b5f6020820190508181035f83015261327e81613245565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6132df602583612a51565b91506132ea82613285565b604082019050919050565b5f6020820190508181035f83015261330c816132d3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61336d602383612a51565b915061337882613313565b604082019050919050565b5f6020820190508181035f83015261339a81613361565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6133d5601683612a51565b91506133e0826133a1565b602082019050919050565b5f6020820190508181035f830152613402816133c9565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613463603583612a51565b915061346e82613409565b604082019050919050565b5f6020820190508181035f83015261349081613457565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6134cb601383612a51565b91506134d682613497565b602082019050919050565b5f6020820190508181035f8301526134f8816134bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613559603683612a51565b9150613564826134ff565b604082019050919050565b5f6020820190508181035f8301526135868161354d565b9050919050565b5f61359782612b4f565b91506135a283612b4f565b92508282026135b081612b4f565b915082820484148315176135c7576135c6612f5f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61360582612b4f565b915061361083612b4f565b9250826136205761361f6135ce565b5b828204905092915050565b5f61363582612b4f565b915061364083612b4f565b925082820390508181111561365857613657612f5f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6136b8602683612a51565b91506136c38261365e565b604082019050919050565b5f6020820190508181035f8301526136e5816136ac565b9050919050565b5f6060820190506136ff5f830186612c92565b61370c6020830185612c92565b6137196040830184612c92565b949350505050565b5f81905092915050565b50565b5f6137395f83613721565b91506137448261372b565b5f82019050919050565b5f6137588261372e565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506137ca81612b25565b92915050565b5f602082840312156137e5576137e4612af1565b5b5f6137f2848285016137bc565b91505092915050565b5f819050919050565b5f61381e613819613814846137fb565b612c1e565b612b4f565b9050919050565b61382e81613804565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61386681612b14565b82525050565b5f613877838361385d565b60208301905092915050565b5f602082019050919050565b5f61389982613834565b6138a3818561383e565b93506138ae8361384e565b805f5b838110156138de5781516138c5888261386c565b97506138d083613883565b9250506001810190506138b1565b5085935050505092915050565b5f60a0820190506138fe5f830188612c92565b61390b6020830187613825565b818103604083015261391d818661388f565b905061392c6060830185612d3e565b6139396080830184612c92565b9695505050505050565b5f60c0820190506139565f830189612d3e565b6139636020830188612c92565b6139706040830187613825565b61397d6060830186613825565b61398a6080830185612d3e565b61399760a0830184612c92565b979650505050505050565b5f815190506139b081612b58565b92915050565b5f805f606084860312156139cd576139cc612af1565b5b5f6139da868287016139a2565b93505060206139eb868287016139a2565b92505060406139fc868287016139a2565b915050925092509256fea26469706673582212207c15cad2684ab441506f55e2e34ef91133a12d0d8556f82e913ea82d28696d2864736f6c63430008140033

Deployed Bytecode

0x608060405260043610610228575f3560e01c80638da5cb5b11610122578063c8c8ebe4116100aa578063f11a24d31161006e578063f11a24d314610823578063f29335121461084d578063f2fde38b14610863578063f63743421461088b578063f8b45b05146108b55761022f565b8063c8c8ebe41461073f578063d85ba06314610769578063dd62ed3e14610793578063e2f45605146107cf578063e6461df9146107f95761022f565b8063a457c2d7116100f1578063a457c2d714610639578063a9059cbb14610675578063b62496f5146106b1578063bbc0c742146106ed578063c0246668146107175761022f565b80638da5cb5b1461059357806395d89b41146105bd5780639a7a23d6146105e75780639b0964591461060f5761022f565b8063313ce567116101b05780636a486a8e116101745780636a486a8e146104c55780636ddd1713146104ef57806370a0823114610519578063715018a6146105555780637571336a1461056b5761022f565b8063313ce567146103cf57806339509351146103f957806349bd5a5e146104355780634fbee1931461045f578063599270441461049b5761022f565b80631694505e116101f75780631694505e146102eb57806318160ddd146103155780631a8145bb1461033f57806323b872dd1461036957806324b9f3c1146103a55761022f565b806306fdde0314610233578063092078791461025d578063095ea7b31461027357806310d5de53146102af5761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b506102476108df565b6040516102549190612ad1565b60405180910390f35b348015610268575f80fd5b5061027161096f565b005b34801561027e575f80fd5b5061029960048036038101906102949190612b82565b610a3d565b6040516102a69190612bda565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d09190612bf3565b610a5a565b6040516102e29190612bda565b60405180910390f35b3480156102f6575f80fd5b506102ff610a77565b60405161030c9190612c79565b60405180910390f35b348015610320575f80fd5b50610329610a9b565b6040516103369190612ca1565b60405180910390f35b34801561034a575f80fd5b50610353610aa4565b6040516103609190612ca1565b60405180910390f35b348015610374575f80fd5b5061038f600480360381019061038a9190612cba565b610aaa565b60405161039c9190612bda565b60405180910390f35b3480156103b0575f80fd5b506103b9610b9c565b6040516103c69190612ca1565b60405180910390f35b3480156103da575f80fd5b506103e3610ba2565b6040516103f09190612d25565b60405180910390f35b348015610404575f80fd5b5061041f600480360381019061041a9190612b82565b610baa565b60405161042c9190612bda565b60405180910390f35b348015610440575f80fd5b50610449610c51565b6040516104569190612d4d565b60405180910390f35b34801561046a575f80fd5b5061048560048036038101906104809190612bf3565b610c75565b6040516104929190612bda565b60405180910390f35b3480156104a6575f80fd5b506104af610cc7565b6040516104bc9190612d4d565b60405180910390f35b3480156104d0575f80fd5b506104d9610ceb565b6040516104e69190612ca1565b60405180910390f35b3480156104fa575f80fd5b50610503610cf1565b6040516105109190612bda565b60405180910390f35b348015610524575f80fd5b5061053f600480360381019061053a9190612bf3565b610d04565b60405161054c9190612ca1565b60405180910390f35b348015610560575f80fd5b50610569610d49565b005b348015610576575f80fd5b50610591600480360381019061058c9190612d90565b610dd0565b005b34801561059e575f80fd5b506105a7610ea4565b6040516105b49190612d4d565b60405180910390f35b3480156105c8575f80fd5b506105d1610ecc565b6040516105de9190612ad1565b60405180910390f35b3480156105f2575f80fd5b5061060d60048036038101906106089190612d90565b610f5c565b005b34801561061a575f80fd5b50610623611074565b6040516106309190612ca1565b60405180910390f35b348015610644575f80fd5b5061065f600480360381019061065a9190612b82565b61107a565b60405161066c9190612bda565b60405180910390f35b348015610680575f80fd5b5061069b60048036038101906106969190612b82565b611160565b6040516106a89190612bda565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d29190612bf3565b61117d565b6040516106e49190612bda565b60405180910390f35b3480156106f8575f80fd5b5061070161119a565b60405161070e9190612bda565b60405180910390f35b348015610722575f80fd5b5061073d60048036038101906107389190612d90565b6111ac565b005b34801561074a575f80fd5b506107536112ce565b6040516107609190612ca1565b60405180910390f35b348015610774575f80fd5b5061077d6112d4565b60405161078a9190612ca1565b60405180910390f35b34801561079e575f80fd5b506107b960048036038101906107b49190612dce565b6112da565b6040516107c69190612ca1565b60405180910390f35b3480156107da575f80fd5b506107e361135c565b6040516107f09190612ca1565b60405180910390f35b348015610804575f80fd5b5061080d611380565b60405161081a9190612ca1565b60405180910390f35b34801561082e575f80fd5b50610837611386565b6040516108449190612ca1565b60405180910390f35b348015610858575f80fd5b5061086161138c565b005b34801561086e575f80fd5b5061088960048036038101906108849190612bf3565b61143f565b005b348015610896575f80fd5b5061089f611535565b6040516108ac9190612ca1565b60405180910390f35b3480156108c0575f80fd5b506108c961153b565b6040516108d69190612ca1565b60405180910390f35b6060600380546108ee90612e39565b80601f016020809104026020016040519081016040528092919081815260200182805461091a90612e39565b80156109655780601f1061093c57610100808354040283529160200191610965565b820191905f5260205f20905b81548152906001019060200180831161094857829003601f168201915b5050505050905090565b610977611541565b73ffffffffffffffffffffffffffffffffffffffff16610995610ea4565b73ffffffffffffffffffffffffffffffffffffffff16146109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290612eb3565b60405180910390fd5b69054b40b1f852bda0000060068190555069054b40b1f852bda000006007819055506003600a819055505f600b8190555060036009819055506003600d819055505f600e819055506003600c81905550565b5f610a50610a49611541565b8484611548565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60105481565b5f610ab684848461170b565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610afd611541565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7390612f41565b60405180910390fd5b610b9085610b88611541565b858403611548565b60019150509392505050565b600f5481565b5f6012905090565b5f610c47610bb6611541565b848460015f610bc3611541565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c429190612f8c565b611548565b6001905092915050565b7f000000000000000000000000bcbfbcb6f4a06c83497b0ac4f4ac3a8fc78fefce81565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b7f000000000000000000000000f050d172b625e5efe008f9ffdded9713639ec8ce81565b600c5481565b600860019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d51611541565b73ffffffffffffffffffffffffffffffffffffffff16610d6f610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90612eb3565b60405180910390fd5b610dce5f612123565b565b610dd8611541565b73ffffffffffffffffffffffffffffffffffffffff16610df6610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390612eb3565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610edb90612e39565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0790612e39565b8015610f525780601f10610f2957610100808354040283529160200191610f52565b820191905f5260205f20905b815481529060010190602001808311610f3557829003601f168201915b5050505050905090565b610f64611541565b73ffffffffffffffffffffffffffffffffffffffff16610f82610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90612eb3565b60405180910390fd5b7f000000000000000000000000bcbfbcb6f4a06c83497b0ac4f4ac3a8fc78fefce73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d9061302f565b60405180910390fd5b61107082826121e6565b5050565b600a5481565b5f8060015f611087611541565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611138906130bd565b60405180910390fd5b61115561114c611541565b85858403611548565b600191505092915050565b5f61117361116c611541565b848461170b565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900460ff1681565b6111b4611541565b73ffffffffffffffffffffffffffffffffffffffff166111d2610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90612eb3565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112c29190612bda565b60405180910390a25050565b60065481565b60095481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f00000000000000000000000000000000000000000000001b1ae4d6e2ef50000081565b600d5481565b600b5481565b611394611541565b73ffffffffffffffffffffffffffffffffffffffff166113b2610ea4565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90612eb3565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b611447611541565b73ffffffffffffffffffffffffffffffffffffffff16611465610ea4565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290612eb3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115209061314b565b60405180910390fd5b61153281612123565b50565b600e5481565b60075481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad906131d9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90613267565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116fe9190612ca1565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906132f5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90613383565b60405180910390fd5b5f81036117fe576117f983835f612284565b61211e565b611806610ea4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118745750611844610ea4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118ac57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118e6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118ff5750600560149054906101000a900460ff16155b15611ccc5760085f9054906101000a900460ff166119f25760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806119b2575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906133eb565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a8f575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b3657600654811115611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad090613479565b60405180910390fd5b600754611ae583610d04565b82611af09190612f8c565b1115611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906134e1565b60405180910390fd5b611ccb565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bd3575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c2257600654811115611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c149061356f565b60405180910390fd5b611cca565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cc957600754611c7c83610d04565b82611c879190612f8c565b1115611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf906134e1565b60405180910390fd5b5b5b5b5b5f611cd630610d04565b90505f7f00000000000000000000000000000000000000000000001b1ae4d6e2ef5000008210159050808015611d185750600860019054906101000a900460ff165b8015611d315750600560149054906101000a900460ff16155b8015611d84575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611dd7575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611e2a575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e6d576001600560146101000a81548160ff021916908315150217905550611e526124f9565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f1c575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611f25575f90505b5f811561210e5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f8357505f600c54115b1561200d576064600c5486611f98919061358d565b611fa291906135fb565b9050600c54600e5482611fb5919061358d565b611fbf91906135fb565b60105f828254611fcf9190612f8c565b92505081905550600c54600d5482611fe7919061358d565b611ff191906135fb565b600f5f8282546120019190612f8c565b925050819055506120eb565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561206457505f600954115b156120ea57606460095486612079919061358d565b61208391906135fb565b9050600954600b5482612096919061358d565b6120a091906135fb565b60105f8282546120b09190612f8c565b92505081905550600954600a54826120c8919061358d565b6120d291906135fb565b600f5f8282546120e29190612f8c565b925050819055505b5b5f8111156120ff576120fe873083612284565b5b808561210b919061362b565b94505b612119878787612284565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e9906132f5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790613383565b60405180910390fd5b61236b83838361272c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906136ce565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461247c9190612f8c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124e09190612ca1565b60405180910390a36124f3848484612731565b50505050565b5f61250330610d04565b90505f600f546010546125169190612f8c565b90505f8083148061252657505f82145b156125335750505061272a565b60147f00000000000000000000000000000000000000000000001b1ae4d6e2ef500000612560919061358d565b8311156125975760147f00000000000000000000000000000000000000000000001b1ae4d6e2ef500000612594919061358d565b92505b5f600283601054866125a9919061358d565b6125b391906135fb565b6125bd91906135fb565b90505f81856125cc919061362b565b90505f4790506125db82612736565b5f81476125e8919061362b565b90505f60026010546125fa91906135fb565b87612605919061362b565b600f5483612613919061358d565b61261d91906135fb565b90505f818361262c919061362b565b90505f8611801561263c57505f81115b156126895761264b8682612969565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601054604051612680939291906136ec565b60405180910390a15b5f6010819055505f600f819055507f000000000000000000000000f050d172b625e5efe008f9ffdded9713639ec8ce73ffffffffffffffffffffffffffffffffffffffff16476040516126db9061374e565b5f6040518083038185875af1925050503d805f8114612715576040519150601f19603f3d011682016040523d82523d5f602084013e61271a565b606091505b5050809750505050505050505050505b565b505050565b505050565b5f600267ffffffffffffffff81111561275257612751613762565b5b6040519080825280602002602001820160405280156127805781602001602082028036833780820191505090505b50905030815f815181106127975761279661378f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906137d0565b816001815181106128725761287161378f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128d7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611548565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016129389594939291906138eb565b5f604051808303815f87803b15801561294f575f80fd5b505af1158015612961573d5f803e3d5ffd5b505050505050565b612994307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611548565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806129dd610ea4565b426040518863ffffffff1660e01b81526004016129ff96959493929190613943565b60606040518083038185885af1158015612a1b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612a4091906139b6565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a7e578082015181840152602081019050612a63565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612aa382612a47565b612aad8185612a51565b9350612abd818560208601612a61565b612ac681612a89565b840191505092915050565b5f6020820190508181035f830152612ae98184612a99565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b1e82612af5565b9050919050565b612b2e81612b14565b8114612b38575f80fd5b50565b5f81359050612b4981612b25565b92915050565b5f819050919050565b612b6181612b4f565b8114612b6b575f80fd5b50565b5f81359050612b7c81612b58565b92915050565b5f8060408385031215612b9857612b97612af1565b5b5f612ba585828601612b3b565b9250506020612bb685828601612b6e565b9150509250929050565b5f8115159050919050565b612bd481612bc0565b82525050565b5f602082019050612bed5f830184612bcb565b92915050565b5f60208284031215612c0857612c07612af1565b5b5f612c1584828501612b3b565b91505092915050565b5f819050919050565b5f612c41612c3c612c3784612af5565b612c1e565b612af5565b9050919050565b5f612c5282612c27565b9050919050565b5f612c6382612c48565b9050919050565b612c7381612c59565b82525050565b5f602082019050612c8c5f830184612c6a565b92915050565b612c9b81612b4f565b82525050565b5f602082019050612cb45f830184612c92565b92915050565b5f805f60608486031215612cd157612cd0612af1565b5b5f612cde86828701612b3b565b9350506020612cef86828701612b3b565b9250506040612d0086828701612b6e565b9150509250925092565b5f60ff82169050919050565b612d1f81612d0a565b82525050565b5f602082019050612d385f830184612d16565b92915050565b612d4781612b14565b82525050565b5f602082019050612d605f830184612d3e565b92915050565b612d6f81612bc0565b8114612d79575f80fd5b50565b5f81359050612d8a81612d66565b92915050565b5f8060408385031215612da657612da5612af1565b5b5f612db385828601612b3b565b9250506020612dc485828601612d7c565b9150509250929050565b5f8060408385031215612de457612de3612af1565b5b5f612df185828601612b3b565b9250506020612e0285828601612b3b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e5057607f821691505b602082108103612e6357612e62612e0c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612e9d602083612a51565b9150612ea882612e69565b602082019050919050565b5f6020820190508181035f830152612eca81612e91565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612f2b602883612a51565b9150612f3682612ed1565b604082019050919050565b5f6020820190508181035f830152612f5881612f1f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f9682612b4f565b9150612fa183612b4f565b9250828201905080821115612fb957612fb8612f5f565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613019603983612a51565b915061302482612fbf565b604082019050919050565b5f6020820190508181035f8301526130468161300d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130a7602583612a51565b91506130b28261304d565b604082019050919050565b5f6020820190508181035f8301526130d48161309b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613135602683612a51565b9150613140826130db565b604082019050919050565b5f6020820190508181035f83015261316281613129565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6131c3602483612a51565b91506131ce82613169565b604082019050919050565b5f6020820190508181035f8301526131f0816131b7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613251602283612a51565b915061325c826131f7565b604082019050919050565b5f6020820190508181035f83015261327e81613245565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6132df602583612a51565b91506132ea82613285565b604082019050919050565b5f6020820190508181035f83015261330c816132d3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61336d602383612a51565b915061337882613313565b604082019050919050565b5f6020820190508181035f83015261339a81613361565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6133d5601683612a51565b91506133e0826133a1565b602082019050919050565b5f6020820190508181035f830152613402816133c9565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613463603583612a51565b915061346e82613409565b604082019050919050565b5f6020820190508181035f83015261349081613457565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6134cb601383612a51565b91506134d682613497565b602082019050919050565b5f6020820190508181035f8301526134f8816134bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613559603683612a51565b9150613564826134ff565b604082019050919050565b5f6020820190508181035f8301526135868161354d565b9050919050565b5f61359782612b4f565b91506135a283612b4f565b92508282026135b081612b4f565b915082820484148315176135c7576135c6612f5f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61360582612b4f565b915061361083612b4f565b9250826136205761361f6135ce565b5b828204905092915050565b5f61363582612b4f565b915061364083612b4f565b925082820390508181111561365857613657612f5f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6136b8602683612a51565b91506136c38261365e565b604082019050919050565b5f6020820190508181035f8301526136e5816136ac565b9050919050565b5f6060820190506136ff5f830186612c92565b61370c6020830185612c92565b6137196040830184612c92565b949350505050565b5f81905092915050565b50565b5f6137395f83613721565b91506137448261372b565b5f82019050919050565b5f6137588261372e565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506137ca81612b25565b92915050565b5f602082840312156137e5576137e4612af1565b5b5f6137f2848285016137bc565b91505092915050565b5f819050919050565b5f61381e613819613814846137fb565b612c1e565b612b4f565b9050919050565b61382e81613804565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61386681612b14565b82525050565b5f613877838361385d565b60208301905092915050565b5f602082019050919050565b5f61389982613834565b6138a3818561383e565b93506138ae8361384e565b805f5b838110156138de5781516138c5888261386c565b97506138d083613883565b9250506001810190506138b1565b5085935050505092915050565b5f60a0820190506138fe5f830188612c92565b61390b6020830187613825565b818103604083015261391d818661388f565b905061392c6060830185612d3e565b6139396080830184612c92565b9695505050505050565b5f60c0820190506139565f830189612d3e565b6139636020830188612c92565b6139706040830187613825565b61397d6060830186613825565b61398a6080830185612d3e565b61399760a0830184612c92565b979650505050505050565b5f815190506139b081612b58565b92915050565b5f805f606084860312156139cd576139cc612af1565b5b5f6139da868287016139a2565b93505060206139eb868287016139a2565b92505060406139fc868287016139a2565b915050925092509256fea26469706673582212207c15cad2684ab441506f55e2e34ef91133a12d0d8556f82e913ea82d28696d2864736f6c63430008140033

Deployed Bytecode Sourcemap

36044:10310:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13743:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39356:332;;;;;;;;;;;;;:::i;:::-;;15976:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36829:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36084:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14863:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36728:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16652:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36689:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14705:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17590:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36142:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40573:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36217:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36576:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36426:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15034:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7139:103;;;;;;;;;;;;;:::i;:::-;;39696:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6488:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13962:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40063:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36500:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18383:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15390:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36901:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36386:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39873:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36261:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36466:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15653:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36303:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36611:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36537:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39239:109;;;;;;;;;;;;;:::i;:::-;;7397:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36649:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36353:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13743:100;13797:13;13830:5;13823:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13743:100;:::o;39356:332::-;6719:12;:10;:12::i;:::-;6708:23;;:7;:5;:7::i;:::-;:23;;;6700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39433:19:::1;39410:20;:42;;;;39476:19;39464:9;:31;;;;39527:1;39509:15;:19;;;;39558:1;39540:15;:19;;;;39585:1;39570:12;:16;;;;39618:1;39599:16;:20;;;;39650:1;39631:16;:20;;;;39679:1;39663:13;:17;;;;39356:332::o:0;15976:194::-;16084:4;16101:39;16110:12;:10;:12::i;:::-;16124:7;16133:6;16101:8;:39::i;:::-;16158:4;16151:11;;15976:194;;;;:::o;36829:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;36084:51::-;;;:::o;14863:108::-;14924:7;14951:12;;14944:19;;14863:108;:::o;36728:33::-;;;;:::o;16652:529::-;16792:4;16809:36;16819:6;16827:9;16838:6;16809:9;:36::i;:::-;16858:24;16885:11;:19;16897:6;16885:19;;;;;;;;;;;;;;;:33;16905:12;:10;:12::i;:::-;16885:33;;;;;;;;;;;;;;;;16858:60;;16971:6;16951:16;:26;;16929:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;17081:57;17090:6;17098:12;:10;:12::i;:::-;17131:6;17112:16;:25;17081:8;:57::i;:::-;17169:4;17162:11;;;16652:529;;;;;:::o;36689:32::-;;;;:::o;14705:93::-;14763:5;14788:2;14781:9;;14705:93;:::o;17590:290::-;17703:4;17720:130;17743:12;:10;:12::i;:::-;17770:7;17829:10;17792:11;:25;17804:12;:10;:12::i;:::-;17792:25;;;;;;;;;;;;;;;:34;17818:7;17792:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;17720:8;:130::i;:::-;17868:4;17861:11;;17590:290;;;;:::o;36142:38::-;;;:::o;40573:126::-;40639:4;40663:19;:28;40683:7;40663:28;;;;;;;;;;;;;;;;;;;;;;;;;40656:35;;40573:126;;;:::o;36217:35::-;;;:::o;36576:28::-;;;;:::o;36426:31::-;;;;;;;;;;;;;:::o;15034:143::-;15124:7;15151:9;:18;15161:7;15151:18;;;;;;;;;;;;;;;;15144:25;;15034:143;;;:::o;7139:103::-;6719:12;:10;:12::i;:::-;6708:23;;:7;:5;:7::i;:::-;:23;;;6700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7204:30:::1;7231:1;7204:18;:30::i;:::-;7139:103::o:0;39696:169::-;6719:12;:10;:12::i;:::-;6708:23;;:7;:5;:7::i;:::-;:23;;;6700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39853:4:::1;39811:31;:39;39843:6;39811:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39696:169:::0;;:::o;6488:87::-;6534:7;6561:6;;;;;;;;;;;6554:13;;6488:87;:::o;13962:104::-;14018:13;14051:7;14044:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13962:104;:::o;40063:306::-;6719:12;:10;:12::i;:::-;6708:23;;:7;:5;:7::i;:::-;:23;;;6700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40209:13:::1;40201:21;;:4;:21;;::::0;40179:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40320:41;40349:4;40355:5;40320:28;:41::i;:::-;40063:306:::0;;:::o;36500:30::-;;;;:::o;18383:475::-;18501:4;18518:24;18545:11;:25;18557:12;:10;:12::i;:::-;18545:25;;;;;;;;;;;;;;;:34;18571:7;18545:34;;;;;;;;;;;;;;;;18518:61;;18632:15;18612:16;:35;;18590:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;18748:67;18757:12;:10;:12::i;:::-;18771:7;18799:15;18780:16;:34;18748:8;:67::i;:::-;18846:4;18839:11;;;18383:475;;;;:::o;15390:200::-;15501:4;15518:42;15528:12;:10;:12::i;:::-;15542:9;15553:6;15518:9;:42::i;:::-;15578:4;15571:11;;15390:200;;;;:::o;36901:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;36386:33::-;;;;;;;;;;;;;:::o;39873:182::-;6719:12;:10;:12::i;:::-;6708:23;;:7;:5;:7::i;:::-;:23;;;6700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39989:8:::1;39958:19;:28;39978:7;39958:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40029:7;40013:34;;;40038:8;40013:34;;;;;;:::i;:::-;;;;;;;;39873:182:::0;;:::o;36261:35::-;;;;:::o;36466:27::-;;;;:::o;15653:176::-;15767:7;15794:11;:18;15806:5;15794:18;;;;;;;;;;;;;;;:27;15813:7;15794:27;;;;;;;;;;;;;;;;15787:34;;15653:176;;;;:::o;36303:43::-;;;:::o;36611:31::-;;;;:::o;36537:30::-;;;;:::o;39239:109::-;6719:12;:10;:12::i;:::-;6708:23;;:7;:5;:7::i;:::-;:23;;;6700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39307:4:::1;39291:13;;:20;;;;;;;;;;;;;;;;;;39336:4;39322:11;;:18;;;;;;;;;;;;;;;;;;39239:109::o:0;7397:238::-;6719:12;:10;:12::i;:::-;6708:23;;:7;:5;:7::i;:::-;:23;;;6700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7520:1:::1;7500:22;;:8;:22;;::::0;7478:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7599:28;7618:8;7599:18;:28::i;:::-;7397:238:::0;:::o;36649:31::-;;;;:::o;36353:24::-;;;;:::o;5330:98::-;5383:7;5410:10;5403:17;;5330:98;:::o;22166:380::-;22319:1;22302:19;;:5;:19;;;22294:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22400:1;22381:21;;:7;:21;;;22373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22484:6;22454:11;:18;22466:5;22454:18;;;;;;;;;;;;;;;:27;22473:7;22454:27;;;;;;;;;;;;;;;:36;;;;22522:7;22506:32;;22515:5;22506:32;;;22531:6;22506:32;;;;;;:::i;:::-;;;;;;;;22166:380;;;:::o;40707:3309::-;40855:1;40839:18;;:4;:18;;;40831:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40932:1;40918:16;;:2;:16;;;40910:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41001:1;40991:6;:11;40987:93;;41019:28;41035:4;41041:2;41045:1;41019:15;:28::i;:::-;41062:7;;40987:93;41118:7;:5;:7::i;:::-;41110:15;;:4;:15;;;;:45;;;;;41148:7;:5;:7::i;:::-;41142:13;;:2;:13;;;;41110:45;:78;;;;;41186:1;41172:16;;:2;:16;;;;41110:78;:116;;;;;41219:6;41205:21;;:2;:21;;;;41110:116;:142;;;;;41244:8;;;;;;;;;;;41243:9;41110:142;41092:1433;;;41284:13;;;;;;;;;;;41279:203;;41348:19;:25;41368:4;41348:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41377:19;:23;41397:2;41377:23;;;;;;;;;;;;;;;;;;;;;;;;;41348:52;41318:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;41279:203;41520:25;:31;41546:4;41520:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;41573:31;:35;41605:2;41573:35;;;;;;;;;;;;;;;;;;;;;;;;;41572:36;41520:88;41498:1016;;;41683:20;;41673:6;:30;;41643:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;41875:9;;41858:13;41868:2;41858:9;:13::i;:::-;41849:6;:22;;;;:::i;:::-;:35;;41819:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;41498:1016;;;42006:25;:29;42032:2;42006:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;42057:31;:37;42089:4;42057:37;;;;;;;;;;;;;;;;;;;;;;;;;42056:38;42006:88;41984:530;;;42169:20;;42159:6;:30;;42129:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;41984:530;;;42314:31;:35;42346:2;42314:35;;;;;;;;;;;;;;;;;;;;;;;;;42309:205;;42426:9;;42409:13;42419:2;42409:9;:13::i;:::-;42400:6;:22;;;;:::i;:::-;:35;;42370:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;42309:205;41984:530;41498:1016;41092:1433;42537:28;42568:24;42586:4;42568:9;:24::i;:::-;42537:55;;42605:12;42644:18;42620:20;:42;;42605:57;;42693:7;:35;;;;;42717:11;;;;;;;;;;;42693:35;:61;;;;;42746:8;;;;;;;;;;;42745:9;42693:61;:110;;;;;42772:25;:31;42798:4;42772:31;;;;;;;;;;;;;;;;;;;;;;;;;42771:32;42693:110;:153;;;;;42821:19;:25;42841:4;42821:25;;;;;;;;;;;;;;;;;;;;;;;;;42820:26;42693:153;:194;;;;;42864:19;:23;42884:2;42864:23;;;;;;;;;;;;;;;;;;;;;;;;;42863:24;42693:194;42675:326;;;42925:4;42914:8;;:15;;;;;;;;;;;;;;;;;;42946:10;:8;:10::i;:::-;42984:5;42973:8;;:16;;;;;;;;;;;;;;;;;;42675:326;43013:12;43029:8;;;;;;;;;;;43028:9;43013:24;;43054:19;:25;43074:4;43054:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43083:19;:23;43103:2;43083:23;;;;;;;;;;;;;;;;;;;;;;;;;43054:52;43050:100;;;43133:5;43123:15;;43050:100;43162:12;43193:7;43189:774;;;43221:25;:29;43247:2;43221:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43270:1;43254:13;;:17;43221:50;43217:597;;;43326:3;43309:13;;43300:6;:22;;;;:::i;:::-;43299:30;;;;:::i;:::-;43292:37;;43398:13;;43378:16;;43371:4;:23;;;;:::i;:::-;43370:41;;;;:::i;:::-;43348:18;;:63;;;;;;;:::i;:::-;;;;;;;;43479:13;;43459:16;;43452:4;:23;;;;:::i;:::-;43451:41;;;;:::i;:::-;43430:17;;:62;;;;;;;:::i;:::-;;;;;;;;43217:597;;;43531:25;:31;43557:4;43531:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43581:1;43566:12;;:16;43531:51;43527:287;;;43636:3;43620:12;;43611:6;:21;;;;:::i;:::-;43610:29;;;;:::i;:::-;43603:36;;43707:12;;43688:15;;43681:4;:22;;;;:::i;:::-;43680:39;;;;:::i;:::-;43658:18;;:61;;;;;;;:::i;:::-;;;;;;;;43786:12;;43767:15;;43760:4;:22;;;;:::i;:::-;43759:39;;;;:::i;:::-;43738:17;;:60;;;;;;;:::i;:::-;;;;;;;;43527:287;43217:597;43841:1;43834:4;:8;43830:91;;;43863:42;43879:4;43893;43900;43863:15;:42::i;:::-;43830:91;43947:4;43937:14;;;;;:::i;:::-;;;43189:774;43975:33;43991:4;43997:2;44001:6;43975:15;:33::i;:::-;40820:3196;;;;40707:3309;;;;:::o;7795:191::-;7869:16;7888:6;;;;;;;;;;;7869:25;;7914:8;7905:6;;:17;;;;;;;;;;;;;;;;;;7969:8;7938:40;;7959:8;7938:40;;;;;;;;;;;;7858:128;7795:191;:::o;40377:188::-;40494:5;40460:25;:31;40486:4;40460:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40551:5;40517:40;;40545:4;40517:40;;;;;;;;;;;;40377:188;;:::o;19348:770::-;19506:1;19488:20;;:6;:20;;;19480:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19590:1;19569:23;;:9;:23;;;19561:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19645:47;19666:6;19674:9;19685:6;19645:20;:47::i;:::-;19705:21;19729:9;:17;19739:6;19729:17;;;;;;;;;;;;;;;;19705:41;;19796:6;19779:13;:23;;19757:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;19940:6;19924:13;:22;19904:9;:17;19914:6;19904:17;;;;;;;;;;;;;;;:42;;;;19992:6;19968:9;:20;19978:9;19968:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;20033:9;20016:35;;20025:6;20016:35;;;20044:6;20016:35;;;;;;:::i;:::-;;;;;;;;20064:46;20084:6;20092:9;20103:6;20064:19;:46::i;:::-;19469:649;19348:770;;;:::o;44880:1471::-;44919:23;44945:24;44963:4;44945:9;:24::i;:::-;44919:50;;44980:25;45029:17;;45008:18;;:38;;;;:::i;:::-;44980:66;;45057:12;45105:1;45086:15;:20;:46;;;;45131:1;45110:17;:22;45086:46;45082:85;;;45149:7;;;;;45082:85;45222:2;45201:18;:23;;;;:::i;:::-;45183:15;:41;45179:115;;;45280:2;45259:18;:23;;;;:::i;:::-;45241:41;;45179:115;45306:23;45419:1;45386:17;45351:18;;45333:15;:36;;;;:::i;:::-;45332:71;;;;:::i;:::-;:88;;;;:::i;:::-;45306:114;;45431:26;45478:15;45460;:33;;;;:::i;:::-;45431:62;;45506:25;45534:21;45506:49;;45568:36;45585:18;45568:16;:36::i;:::-;45617:18;45662:17;45638:21;:41;;;;:::i;:::-;45617:62;;45692:22;45808:1;45787:18;;:22;;;;:::i;:::-;45766:17;:44;;;;:::i;:::-;45731:17;;45718:10;:30;;;;:::i;:::-;45717:94;;;;:::i;:::-;45692:119;;45824:23;45863:14;45850:10;:27;;;;:::i;:::-;45824:53;;45912:1;45894:15;:19;:42;;;;;45935:1;45917:15;:19;45894:42;45890:278;;;45953:46;45966:15;45983;45953:12;:46::i;:::-;46019:137;46052:18;46089:15;46123:18;;46019:137;;;;;;;;:::i;:::-;;;;;;;;45890:278;46201:1;46180:18;:22;;;;46233:1;46213:17;:21;;;;46269:10;46261:24;;46307:21;46261:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46247:96;;;;;44908:1443;;;;;;;;;44880:1471;:::o;23146:125::-;;;;:::o;23875:124::-;;;;:::o;44024:476::-;44090:21;44128:1;44114:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44090:40;;44159:4;44141;44146:1;44141:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44185:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44175:4;44180:1;44175:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44220:62;44237:4;44252:15;44270:11;44220:8;:62::i;:::-;44295:15;:66;;;44376:11;44402:1;44419:4;44446;44466:15;44295:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44079:421;44024:476;:::o;44508:364::-;44589:62;44606:4;44621:15;44639:11;44589:8;:62::i;:::-;44664:15;:31;;;44703:9;44736:4;44756:11;44782:1;44799;44816:7;:5;:7::i;:::-;44838:15;44664:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44508:364;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:320;7963:6;8000:1;7994:4;7990:12;7980:22;;8047:1;8041:4;8037:12;8068:18;8058:81;;8124:4;8116:6;8112:17;8102:27;;8058:81;8186:2;8178:6;8175:14;8155:18;8152:38;8149:84;;8205:18;;:::i;:::-;8149:84;7970:269;7919:320;;;:::o;8245:182::-;8385:34;8381:1;8373:6;8369:14;8362:58;8245:182;:::o;8433:366::-;8575:3;8596:67;8660:2;8655:3;8596:67;:::i;:::-;8589:74;;8672:93;8761:3;8672:93;:::i;:::-;8790:2;8785:3;8781:12;8774:19;;8433:366;;;:::o;8805:419::-;8971:4;9009:2;8998:9;8994:18;8986:26;;9058:9;9052:4;9048:20;9044:1;9033:9;9029:17;9022:47;9086:131;9212:4;9086:131;:::i;:::-;9078:139;;8805:419;;;:::o;9230:227::-;9370:34;9366:1;9358:6;9354:14;9347:58;9439:10;9434:2;9426:6;9422:15;9415:35;9230:227;:::o;9463:366::-;9605:3;9626:67;9690:2;9685:3;9626:67;:::i;:::-;9619:74;;9702:93;9791:3;9702:93;:::i;:::-;9820:2;9815:3;9811:12;9804:19;;9463:366;;;:::o;9835:419::-;10001:4;10039:2;10028:9;10024:18;10016:26;;10088:9;10082:4;10078:20;10074:1;10063:9;10059:17;10052:47;10116:131;10242:4;10116:131;:::i;:::-;10108:139;;9835:419;;;:::o;10260:180::-;10308:77;10305:1;10298:88;10405:4;10402:1;10395:15;10429:4;10426:1;10419:15;10446:191;10486:3;10505:20;10523:1;10505:20;:::i;:::-;10500:25;;10539:20;10557:1;10539:20;:::i;:::-;10534:25;;10582:1;10579;10575:9;10568:16;;10603:3;10600:1;10597:10;10594:36;;;10610:18;;:::i;:::-;10594:36;10446:191;;;;:::o;10643:244::-;10783:34;10779:1;10771:6;10767:14;10760:58;10852:27;10847:2;10839:6;10835:15;10828:52;10643:244;:::o;10893:366::-;11035:3;11056:67;11120:2;11115:3;11056:67;:::i;:::-;11049:74;;11132:93;11221:3;11132:93;:::i;:::-;11250:2;11245:3;11241:12;11234:19;;10893:366;;;:::o;11265:419::-;11431:4;11469:2;11458:9;11454:18;11446:26;;11518:9;11512:4;11508:20;11504:1;11493:9;11489:17;11482:47;11546:131;11672:4;11546:131;:::i;:::-;11538:139;;11265:419;;;:::o;11690:224::-;11830:34;11826:1;11818:6;11814:14;11807:58;11899:7;11894:2;11886:6;11882:15;11875:32;11690:224;:::o;11920:366::-;12062:3;12083:67;12147:2;12142:3;12083:67;:::i;:::-;12076:74;;12159:93;12248:3;12159:93;:::i;:::-;12277:2;12272:3;12268:12;12261:19;;11920:366;;;:::o;12292:419::-;12458:4;12496:2;12485:9;12481:18;12473:26;;12545:9;12539:4;12535:20;12531:1;12520:9;12516:17;12509:47;12573:131;12699:4;12573:131;:::i;:::-;12565:139;;12292:419;;;:::o;12717:225::-;12857:34;12853:1;12845:6;12841:14;12834:58;12926:8;12921:2;12913:6;12909:15;12902:33;12717:225;:::o;12948:366::-;13090:3;13111:67;13175:2;13170:3;13111:67;:::i;:::-;13104:74;;13187:93;13276:3;13187:93;:::i;:::-;13305:2;13300:3;13296:12;13289:19;;12948:366;;;:::o;13320:419::-;13486:4;13524:2;13513:9;13509:18;13501:26;;13573:9;13567:4;13563:20;13559:1;13548:9;13544:17;13537:47;13601:131;13727:4;13601:131;:::i;:::-;13593:139;;13320:419;;;:::o;13745:223::-;13885:34;13881:1;13873:6;13869:14;13862:58;13954:6;13949:2;13941:6;13937:15;13930:31;13745:223;:::o;13974:366::-;14116:3;14137:67;14201:2;14196:3;14137:67;:::i;:::-;14130:74;;14213:93;14302:3;14213:93;:::i;:::-;14331:2;14326:3;14322:12;14315:19;;13974:366;;;:::o;14346:419::-;14512:4;14550:2;14539:9;14535:18;14527:26;;14599:9;14593:4;14589:20;14585:1;14574:9;14570:17;14563:47;14627:131;14753:4;14627:131;:::i;:::-;14619:139;;14346:419;;;:::o;14771:221::-;14911:34;14907:1;14899:6;14895:14;14888:58;14980:4;14975:2;14967:6;14963:15;14956:29;14771:221;:::o;14998:366::-;15140:3;15161:67;15225:2;15220:3;15161:67;:::i;:::-;15154:74;;15237:93;15326:3;15237:93;:::i;:::-;15355:2;15350:3;15346:12;15339:19;;14998:366;;;:::o;15370:419::-;15536:4;15574:2;15563:9;15559:18;15551:26;;15623:9;15617:4;15613:20;15609:1;15598:9;15594:17;15587:47;15651:131;15777:4;15651:131;:::i;:::-;15643:139;;15370:419;;;:::o;15795:224::-;15935:34;15931:1;15923:6;15919:14;15912:58;16004:7;15999:2;15991:6;15987:15;15980:32;15795:224;:::o;16025:366::-;16167:3;16188:67;16252:2;16247:3;16188:67;:::i;:::-;16181:74;;16264:93;16353:3;16264:93;:::i;:::-;16382:2;16377:3;16373:12;16366:19;;16025:366;;;:::o;16397:419::-;16563:4;16601:2;16590:9;16586:18;16578:26;;16650:9;16644:4;16640:20;16636:1;16625:9;16621:17;16614:47;16678:131;16804:4;16678:131;:::i;:::-;16670:139;;16397:419;;;:::o;16822:222::-;16962:34;16958:1;16950:6;16946:14;16939:58;17031:5;17026:2;17018:6;17014:15;17007:30;16822:222;:::o;17050:366::-;17192:3;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17289:93;17378:3;17289:93;:::i;:::-;17407:2;17402:3;17398:12;17391:19;;17050:366;;;:::o;17422:419::-;17588:4;17626:2;17615:9;17611:18;17603:26;;17675:9;17669:4;17665:20;17661:1;17650:9;17646:17;17639:47;17703:131;17829:4;17703:131;:::i;:::-;17695:139;;17422:419;;;:::o;17847:172::-;17987:24;17983:1;17975:6;17971:14;17964:48;17847:172;:::o;18025:366::-;18167:3;18188:67;18252:2;18247:3;18188:67;:::i;:::-;18181:74;;18264:93;18353:3;18264:93;:::i;:::-;18382:2;18377:3;18373:12;18366:19;;18025:366;;;:::o;18397:419::-;18563:4;18601:2;18590:9;18586:18;18578:26;;18650:9;18644:4;18640:20;18636:1;18625:9;18621:17;18614:47;18678:131;18804:4;18678:131;:::i;:::-;18670:139;;18397:419;;;:::o;18822:240::-;18962:34;18958:1;18950:6;18946:14;18939:58;19031:23;19026:2;19018:6;19014:15;19007:48;18822:240;:::o;19068:366::-;19210:3;19231:67;19295:2;19290:3;19231:67;:::i;:::-;19224:74;;19307:93;19396:3;19307:93;:::i;:::-;19425:2;19420:3;19416:12;19409:19;;19068:366;;;:::o;19440:419::-;19606:4;19644:2;19633:9;19629:18;19621:26;;19693:9;19687:4;19683:20;19679:1;19668:9;19664:17;19657:47;19721:131;19847:4;19721:131;:::i;:::-;19713:139;;19440:419;;;:::o;19865:169::-;20005:21;20001:1;19993:6;19989:14;19982:45;19865:169;:::o;20040:366::-;20182:3;20203:67;20267:2;20262:3;20203:67;:::i;:::-;20196:74;;20279:93;20368:3;20279:93;:::i;:::-;20397:2;20392:3;20388:12;20381:19;;20040:366;;;:::o;20412:419::-;20578:4;20616:2;20605:9;20601:18;20593:26;;20665:9;20659:4;20655:20;20651:1;20640:9;20636:17;20629:47;20693:131;20819:4;20693:131;:::i;:::-;20685:139;;20412:419;;;:::o;20837:241::-;20977:34;20973:1;20965:6;20961:14;20954:58;21046:24;21041:2;21033:6;21029:15;21022:49;20837:241;:::o;21084:366::-;21226:3;21247:67;21311:2;21306:3;21247:67;:::i;:::-;21240:74;;21323:93;21412:3;21323:93;:::i;:::-;21441:2;21436:3;21432:12;21425:19;;21084:366;;;:::o;21456:419::-;21622:4;21660:2;21649:9;21645:18;21637:26;;21709:9;21703:4;21699:20;21695:1;21684:9;21680:17;21673:47;21737:131;21863:4;21737:131;:::i;:::-;21729:139;;21456:419;;;:::o;21881:410::-;21921:7;21944:20;21962:1;21944:20;:::i;:::-;21939:25;;21978:20;21996:1;21978:20;:::i;:::-;21973:25;;22033:1;22030;22026:9;22055:30;22073:11;22055:30;:::i;:::-;22044:41;;22234:1;22225:7;22221:15;22218:1;22215:22;22195:1;22188:9;22168:83;22145:139;;22264:18;;:::i;:::-;22145:139;21929:362;21881:410;;;;:::o;22297:180::-;22345:77;22342:1;22335:88;22442:4;22439:1;22432:15;22466:4;22463:1;22456:15;22483:185;22523:1;22540:20;22558:1;22540:20;:::i;:::-;22535:25;;22574:20;22592:1;22574:20;:::i;:::-;22569:25;;22613:1;22603:35;;22618:18;;:::i;:::-;22603:35;22660:1;22657;22653:9;22648:14;;22483:185;;;;:::o;22674:194::-;22714:4;22734:20;22752:1;22734:20;:::i;:::-;22729:25;;22768:20;22786:1;22768:20;:::i;:::-;22763:25;;22812:1;22809;22805:9;22797:17;;22836:1;22830:4;22827:11;22824:37;;;22841:18;;:::i;:::-;22824:37;22674:194;;;;:::o;22874:225::-;23014:34;23010:1;23002:6;22998:14;22991:58;23083:8;23078:2;23070:6;23066:15;23059:33;22874:225;:::o;23105:366::-;23247:3;23268:67;23332:2;23327:3;23268:67;:::i;:::-;23261:74;;23344:93;23433:3;23344:93;:::i;:::-;23462:2;23457:3;23453:12;23446:19;;23105:366;;;:::o;23477:419::-;23643:4;23681:2;23670:9;23666:18;23658:26;;23730:9;23724:4;23720:20;23716:1;23705:9;23701:17;23694:47;23758:131;23884:4;23758:131;:::i;:::-;23750:139;;23477:419;;;:::o;23902:442::-;24051:4;24089:2;24078:9;24074:18;24066:26;;24102:71;24170:1;24159:9;24155:17;24146:6;24102:71;:::i;:::-;24183:72;24251:2;24240:9;24236:18;24227:6;24183:72;:::i;:::-;24265;24333:2;24322:9;24318:18;24309:6;24265:72;:::i;:::-;23902:442;;;;;;:::o;24350:147::-;24451:11;24488:3;24473:18;;24350:147;;;;:::o;24503:114::-;;:::o;24623:398::-;24782:3;24803:83;24884:1;24879:3;24803:83;:::i;:::-;24796:90;;24895:93;24984:3;24895:93;:::i;:::-;25013:1;25008:3;25004:11;24997:18;;24623:398;;;:::o;25027:379::-;25211:3;25233:147;25376:3;25233:147;:::i;:::-;25226:154;;25397:3;25390:10;;25027:379;;;:::o;25412:180::-;25460:77;25457:1;25450:88;25557:4;25554:1;25547:15;25581:4;25578:1;25571:15;25598:180;25646:77;25643:1;25636:88;25743:4;25740:1;25733:15;25767:4;25764:1;25757:15;25784:143;25841:5;25872:6;25866:13;25857:22;;25888:33;25915:5;25888:33;:::i;:::-;25784:143;;;;:::o;25933:351::-;26003:6;26052:2;26040:9;26031:7;26027:23;26023:32;26020:119;;;26058:79;;:::i;:::-;26020:119;26178:1;26203:64;26259:7;26250:6;26239:9;26235:22;26203:64;:::i;:::-;26193:74;;26149:128;25933:351;;;;:::o;26290:85::-;26335:7;26364:5;26353:16;;26290:85;;;:::o;26381:158::-;26439:9;26472:61;26490:42;26499:32;26525:5;26499:32;:::i;:::-;26490:42;:::i;:::-;26472:61;:::i;:::-;26459:74;;26381:158;;;:::o;26545:147::-;26640:45;26679:5;26640:45;:::i;:::-;26635:3;26628:58;26545:147;;:::o;26698:114::-;26765:6;26799:5;26793:12;26783:22;;26698:114;;;:::o;26818:184::-;26917:11;26951:6;26946:3;26939:19;26991:4;26986:3;26982:14;26967:29;;26818:184;;;;:::o;27008:132::-;27075:4;27098:3;27090:11;;27128:4;27123:3;27119:14;27111:22;;27008:132;;;:::o;27146:108::-;27223:24;27241:5;27223:24;:::i;:::-;27218:3;27211:37;27146:108;;:::o;27260:179::-;27329:10;27350:46;27392:3;27384:6;27350:46;:::i;:::-;27428:4;27423:3;27419:14;27405:28;;27260:179;;;;:::o;27445:113::-;27515:4;27547;27542:3;27538:14;27530:22;;27445:113;;;:::o;27594:732::-;27713:3;27742:54;27790:5;27742:54;:::i;:::-;27812:86;27891:6;27886:3;27812:86;:::i;:::-;27805:93;;27922:56;27972:5;27922:56;:::i;:::-;28001:7;28032:1;28017:284;28042:6;28039:1;28036:13;28017:284;;;28118:6;28112:13;28145:63;28204:3;28189:13;28145:63;:::i;:::-;28138:70;;28231:60;28284:6;28231:60;:::i;:::-;28221:70;;28077:224;28064:1;28061;28057:9;28052:14;;28017:284;;;28021:14;28317:3;28310:10;;27718:608;;;27594:732;;;;:::o;28332:831::-;28595:4;28633:3;28622:9;28618:19;28610:27;;28647:71;28715:1;28704:9;28700:17;28691:6;28647:71;:::i;:::-;28728:80;28804:2;28793:9;28789:18;28780:6;28728:80;:::i;:::-;28855:9;28849:4;28845:20;28840:2;28829:9;28825:18;28818:48;28883:108;28986:4;28977:6;28883:108;:::i;:::-;28875:116;;29001:72;29069:2;29058:9;29054:18;29045:6;29001:72;:::i;:::-;29083:73;29151:3;29140:9;29136:19;29127:6;29083:73;:::i;:::-;28332:831;;;;;;;;:::o;29169:807::-;29418:4;29456:3;29445:9;29441:19;29433:27;;29470:71;29538:1;29527:9;29523:17;29514:6;29470:71;:::i;:::-;29551:72;29619:2;29608:9;29604:18;29595:6;29551:72;:::i;:::-;29633:80;29709:2;29698:9;29694:18;29685:6;29633:80;:::i;:::-;29723;29799:2;29788:9;29784:18;29775:6;29723:80;:::i;:::-;29813:73;29881:3;29870:9;29866:19;29857:6;29813:73;:::i;:::-;29896;29964:3;29953:9;29949:19;29940:6;29896:73;:::i;:::-;29169:807;;;;;;;;;:::o;29982:143::-;30039:5;30070:6;30064:13;30055:22;;30086:33;30113:5;30086:33;:::i;:::-;29982:143;;;;:::o;30131:663::-;30219:6;30227;30235;30284:2;30272:9;30263:7;30259:23;30255:32;30252:119;;;30290:79;;:::i;:::-;30252:119;30410:1;30435:64;30491:7;30482:6;30471:9;30467:22;30435:64;:::i;:::-;30425:74;;30381:128;30548:2;30574:64;30630:7;30621:6;30610:9;30606:22;30574:64;:::i;:::-;30564:74;;30519:129;30687:2;30713:64;30769:7;30760:6;30749:9;30745:22;30713:64;:::i;:::-;30703:74;;30658:129;30131:663;;;;;:::o

Swarm Source

ipfs://7c15cad2684ab441506f55e2e34ef91133a12d0d8556f82e913ea82d28696d28
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.