ETH Price: $2,849.68 (-9.83%)
Gas: 11 Gwei

Token

NFTY Token (NFTY)
 

Overview

Max Total Supply

960,557,227 NFTY

Holders

2,686 ( -0.112%)

Market

Price

$0.00 @ 0.000001 ETH (-14.09%)

Onchain Market Cap

$1,983,108.82

Circulating Supply Market Cap

$1,147,352.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: USDT-NFTY
Balance
17,698.678116036116707307 NFTY

Value
$36.54 ( ~0.0128225055868544 Eth) [0.0018%]
0x4f7be8cdd826f20d03a70f8a47b63b2dbd4092fd
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

NFTY is a cross-chain Web 3.0 authentication layer used for subscription services, loyalty incentives, and access management. NFTY authenticates via Web 3.0 public key signing rather than Web 2.0 usernames and passwords, with the $NFTY Token powering the NFTY authentication layer.

Market

Volume (24H):$55,293.00
Market Capitalization:$1,147,352.00
Circulating Supply:556,620,633.00 NFTY
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NFTY

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-26
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.0;

//
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▓▒░░░░░░▒▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▓▓▓▓▓▓▓▓▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░▒▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓░░░░░░░▒▓▒░░░░░░░░░░░░
//░░░░░░░░░░░░▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▒░░░░░░░▓▓▓▓▒░░░░░░░░░░░
//░░░░░░░░░░░▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▒░░░░░░░▒▓▓▓▓▓▓▓░░░░░░░░░░
//░░░░░░░░░░▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓░░░░░░░░░
//░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░
//░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓░░░░░░░░░░▓▓▓▓▓▓▓▓▓░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░
//░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓▓▓▓▓▒░░░░░░░░░░░▒▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░
//░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▒▒░░░░░░░░░░░░░░░░▒▒▒▒░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░
//░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░▓▓▒░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒░░░
//░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▓▓▓▒░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░
//░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░▓▓▓▓▓▓▓▓▓░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░
//░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░
//░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░▓▓▓▓▓▓▓▓▒░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░
//░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▓▓▓░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░
//░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░▒▒▒░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒░░░
//░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▒░░░░░░░░░░░░░░░▒▒▒▒▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░▒░░░
//░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓▓▓▓▓▒░░░░░░░░░░░▓▓▓▓▓▓▓▓░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░
//░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░▒▓▓▓▓▓▓▓▓▓░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░
//░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░
//░░░░░░░░░░▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓░░░░░░░░░
//░░░░░░░░░░░▓▓▓▓▓▓▓░░░░░░░▒▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▒░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓░░░░░░░░░░
//░░░░░░░░░░░░▓▓▓▓▒░░░░░░░▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▒░░░░░░░░░░░
//░░░░░░░░░░░░░▒▓░░░░░░░▒▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▒░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓░░░░░░░▒▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▒▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▓▓▓▓▓▒░░░░░░▒▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
//         __ _         _       _
//  _ __  / _| |_ _   _| | __ _| |__  ___
// | '_ \| |_| __| | | | |/ _` | '_ \/ __|
// | | | |  _| |_| |_| | | (_| | |_) \__ \
// |_| |_|_|  \__|\__, |_|\__,_|_.__/|___/
//                |___/
//
// Name: NFTY Token
// Symbol: NFTY
// Decimals: 18
// Initial Supply: 509684123 NFTY
// Supply Limit:  1456240353 NFTY
// Emissions Limit: 88 NFTY per block

// File @openzeppelin/contracts/token/ERC20/[email protected]

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

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

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

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


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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

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


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

/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. 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;
        }
    }
}

abstract contract AuxContract is Ownable {
  function cron(address rewardTo) external virtual;
}

contract NFTY is ERC20, Ownable {
  using SafeMath for *;

  // constants
  uint8 constant private DECIMALS = 18;
  uint256 constant public SUPPLY_LIMIT   =       1456240353 * 10 ** DECIMALS;
  uint256 constant public INITIAL_SUPPLY =        509684123 * 10 ** DECIMALS;

  // amount of token per block (88 token max)
  uint256 constant public MAX_AMOUNT_PER_BLOCK =         88 * 10 ** DECIMALS;
  uint256 public amountMinedPerBlock =                  MAX_AMOUNT_PER_BLOCK;

  AuxContract auxContract;

  // wallets
  address public w1; address public w2; address public w3; address public w4;
  // ratios
  uint256 public r1; uint256 public r2; uint256 public r3; uint256 public r4;

  // state variables
  uint256 public lastBlockMined;
  bool public miningPaused;
  uint256 public amountBurned;

  event AlreadyMined(uint256 block);
  event Mined(uint256 block, uint256 amountMined, uint256 amountBurned, uint256 totalSupply, uint256 totalBurned);
  event EmissionsLowered(uint256 block, uint256 newAmountPerBlock);
  event Paused(uint256 block);
  event Unpaused(uint256 block);
  event AuthDelegated(address from, address to);
  event VoteDelegated(address from, address to);

  /// @dev Decimals override
  function decimals() public pure override returns (uint8){
    return DECIMALS;
  }

  /// @notice Burn an amount of tokens, and increment the global amountBurned variable
  function burn(uint256 amount) public {
      _burn(_msgSender(), amount);
      amountBurned += amount; // add this burnAmount to amountBurned total
  }

  /**
   * @notice
   * Constructor called on contract deployment
   * This function mints the initial supploy to the contract deployer.
   * This function also initializes miningPaused to True, and lastBlockMined to the current block
   */
  constructor() ERC20("NFTY Token", "NFTY") {
    _mint(msg.sender, INITIAL_SUPPLY); // initial supply
    lastBlockMined = block.number; // init block number
    miningPaused = true;
  }
  
  mapping (address=>address) public delegatedAuth;

  /// @notice Delegate wallet authentication to another address
  /// @param to The address to delegate authentication to
  function delegateAuth(address to) public {
    delegatedAuth[msg.sender] = to;
    emit AuthDelegated(msg.sender, to);
  }

  mapping (address=>address) public delegatedVote;

  /// @notice Delegate wallet voting to another address
  /// @param to The address to delegate authentication to
  function delegateVote(address to) public {
    delegatedVote[msg.sender] = to;
    emit VoteDelegated(msg.sender, to);
  }

  /**
   * @dev calculates & returns the TOTAL pending emission and its subsequent split,
   * based on the current stream ratios (r1,r2,r3,r4). 
   * These values are stored & returned as amt2mine,amt1,amt2,amt3,amt4,amt2burn
   * If any checks fail, returns all values as 0 - `(0,0,0,0,0,0)`
   */
  /**
   * @return six-element tuple of uint256's, which represent
   * 1. TOTAL amount to mine 
   * 2. amount for stream wallet 1
   * 3. amount for stream wallet 2
   * 4. amount for stream wallet 3
   * 5. amount for stream wallet 4
   * 6. amount to burn
   */
  function getAmounts() public view returns 
  (uint256, uint256, uint256, uint256, uint256, uint256) {
    // Check if miningPaused OR no difference between now and lastBlockMined 
    int256 since = int256(block.number) - int256(lastBlockMined);
    if (since <= 0 || miningPaused) {
      return (0,0,0,0,0,0);
    }
    // Determine current reward
    uint256 tReward = amountMinedPerBlock.mul(uint256(since));

    // Check if supply limit has been reached
    uint256 supply = totalSupply().add(amountBurned);
    if (SUPPLY_LIMIT <= supply) {
      return (0,0,0,0,0,0);
    }

    // Ensure correct amount should be mined
    // If full amount is over limit, only mine the spare change
    if (tReward.add(supply) > SUPPLY_LIMIT) {
      tReward = SUPPLY_LIMIT.sub(supply);
    }

    // Check if tReward is 0 at this point
    if (tReward == 0) {
      return (0,0,0,0,0,0);
    }

    // split the stream amounts
    uint256 amt1 = tReward.mul(r1).div(100);
    uint256 amt2 = tReward.mul(r2).div(100);
    uint256 amt3 = tReward.mul(r3).div(100);
    uint256 amt4 = tReward.mul(r4).div(100);
    uint256 summed = amt1.add(amt2).add(amt3).add(amt4);

    // Burn remainder
    uint256 burnAmount;
    if (summed != tReward) { 
      burnAmount = tReward.sub(summed);
    }

    // Verify splits add up
    require(tReward == burnAmount.add(amt1).add(amt2).add(amt3).add(amt4), "mismatch");
    return (tReward, amt1, amt2, amt3, amt4, burnAmount);
  }

  /// @dev This function calls mineTo, but with rewardTo set as zero-address 
  function mine() public {
    mineTo(address(0));
  }

  /**
   * @dev If miningPaused, this function does nothing
   * If tokens were already mined this block, this function does nothing
   * If amountBurned + totalSupply >= SUPPLY_LIMIT, this function does nothing.
   */
  /// @notice Create tokens and send down the pre-defined streams. 
  /// @param rewardTo Which address to send reward to for mining tokens
  function mineTo(address rewardTo) public {
    if (miningPaused) {
      return;
    }
    // only mine once per block, maximum.
    // don't revert, in case called via some downstream contract
    if (lastBlockMined >= block.number) {
      emit AlreadyMined(block.number);
      return;
    }

    // use getAmounts() to calculate splits
    (uint256 amt2mine, uint256 amount1, uint256 amount2, uint256 amount3, uint256 amount4, uint256 amt2burn) = getAmounts();
    if (amt2mine == 0) {
      return;
    }
    lastBlockMined = block.number;

    // transfer downstream if amount is not zero
    if (amount1 != 0) { _mint(w1, amount1); }
    if (amount2 != 0) { _mint(w2, amount2); }
    if (amount3 != 0) { _mint(w3, amount3); }
    if (amount4 != 0) { _mint(w4, amount4); }

    // There are tokens to burn, so add them to amt2burn
    // No point in burning then minting, so simply track these in global amountBurned variable
    if (amt2burn != 0) {
      amountBurned += amt2burn; 
    }
    emit Mined(block.number, amt2mine, amt2burn, totalSupply(), amountBurned);

    // Call auxiliary contract for reward, passing rewardTo address
    AuxContract aux = auxContract;
    if (address(aux) != address(0)) {
        try aux.cron(rewardTo) {} catch {}
    }
  }

  /// @notice Assign stream wallets for token emissions (available to contract owner only)
  /// @notice Order matters for these addresses, as they correspond to the matching numbered ratio
  /// @param a1 First stream address 
  /// @param a2 Second stream address
  /// @param a3 Third stream address
  /// @param a4 Fourth stream address
  function updateStreams(address a1, address a2, address a3, address a4) public onlyOwner {
    require(a1 != address(0), "address 1 cannot be zero address");
    w1 = a1; w2 = a2; w3 = a3; w4 = a4;
    // disable slot if zero address (will burn in 'mine' step)
    if (w2 == address(0)) { r2 = 0; }
    if (w3 == address(0)) { r3 = 0; }
    if (w4 == address(0)) { r4 = 0; }
  }


  /// @notice Assign stream ratios for token emissions (available to contract owner only)
  /// @notice Order matters for these ratios, as they correspond to the matching numbered wallet
  /// @param a1 First stream ratio
  /// @param a2 Second stream ratio
  /// @param a3 Third stream ratio
  /// @param a4 Fourth stream ratio
  function updateStreamRatios(uint256 a1, uint256  a2, uint256 a3, uint256 a4) public onlyOwner {
    require(a1.add(a2).add(a3).add(a4) <= 100, "parts exceed 100");
    if (w2 == address(0)){ require(a2 == 0, "cannot mint to zero address 2"); }
    if (w3 == address(0)){ require(a3 == 0, "cannot mint to zero address 3"); }
    if (w4 == address(0)){ require(a4 == 0, "cannot mint to zero address 4"); }
    r1 = a1; r2 = a2; r3 = a3; r4 = a4;
  }

  /// @notice Pause token emissions.
  /// @notice Mining pause does not gather reserves or burn, as lastBlockMined is reset on unpause
  function pauseEmissions() public onlyOwner {
    require(!miningPaused, "mining already paused");
    miningPaused = true;
    emit Paused(block.number);
  }

  /// @notice Unpause token emissions, 10 blocks after function call
  function unpauseEmissions() public onlyOwner {
    require(miningPaused, "mining not paused");
    lastBlockMined = block.number + 10; // re-enable after 10 blocks
    miningPaused = false;
    emit Unpaused(block.number + 10);
  }

  /// @notice Decrease token per block emissions
  /// @notice This function can only decrease emissions, not increase
  function decreaseEmissions(uint256 amount) public onlyOwner {
    require(amount >= 1 * 10**DECIMALS, "amount < one token");
    require(amount < amountMinedPerBlock, "amount >= current emission rate");
    amountMinedPerBlock = amount;
    emit EmissionsLowered(block.number, amount);
  }
  
  /// @notice Set a new AuxContract to be used for the reward mechanism in mineTo
  /// @param aux Contract address for new auxiliary contract
  function setContract(address aux) public onlyOwner {
    auxContract = AuxContract(aux);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"AlreadyMined","type":"event"},{"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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"AuthDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmountPerBlock","type":"uint256"}],"name":"EmissionsLowered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMined","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBurned","type":"uint256"}],"name":"Mined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Paused","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":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"VoteDelegated","type":"event"},{"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_AMOUNT_PER_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountMinedPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"uint256","name":"amount","type":"uint256"}],"name":"decreaseEmissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"delegateAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"delegateVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegatedAuth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegatedVote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastBlockMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardTo","type":"address"}],"name":"mineTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"miningPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pauseEmissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"r1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"r2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"r3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"r4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aux","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"unpauseEmissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a1","type":"uint256"},{"internalType":"uint256","name":"a2","type":"uint256"},{"internalType":"uint256","name":"a3","type":"uint256"},{"internalType":"uint256","name":"a4","type":"uint256"}],"name":"updateStreamRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a1","type":"address"},{"internalType":"address","name":"a2","type":"address"},{"internalType":"address","name":"a3","type":"address"},{"internalType":"address","name":"a4","type":"address"}],"name":"updateStreams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"w1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"w2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"w3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"w4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526012600a6200001491906200058e565b6058620000229190620006cb565b6006553480156200003257600080fd5b506040518060400160405280600a81526020017f4e46545920546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e465459000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b79291906200039e565b508060049080519060200190620000d09291906200039e565b505050620000f3620000e76200014d60201b60201c565b6200015560201b60201c565b62000125336012600a6200010891906200058e565b631e61299b620001199190620006cb565b6200021b60201b60201c565b436010819055506001601160006101000a81548160ff0219169083151502179055506200080d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200028e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002859062000486565b60405180910390fd5b620002a2600083836200039460201b60201c565b8060026000828254620002b69190620004d6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200030d9190620004d6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003749190620004a8565b60405180910390a362000390600083836200039960201b60201c565b5050565b505050565b505050565b828054620003ac9062000743565b90600052602060002090601f016020900481019282620003d057600085556200041c565b82601f10620003eb57805160ff19168380011785556200041c565b828001600101855582156200041c579182015b828111156200041b578251825591602001919060010190620003fe565b5b5090506200042b91906200042f565b5090565b5b808211156200044a57600081600090555060010162000430565b5090565b60006200045d601f83620004c5565b91506200046a82620007e4565b602082019050919050565b62000480816200072c565b82525050565b60006020820190508181036000830152620004a1816200044e565b9050919050565b6000602082019050620004bf600083018462000475565b92915050565b600082825260208201905092915050565b6000620004e3826200072c565b9150620004f0836200072c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000528576200052762000779565b5b828201905092915050565b6000808291508390505b600185111562000585578086048111156200055d576200055c62000779565b5b60018516156200056d5780820291505b80810290506200057d85620007d7565b94506200053d565b94509492505050565b60006200059b826200072c565b9150620005a88362000736565b9250620005d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005df565b905092915050565b600082620005f15760019050620006c4565b81620006015760009050620006c4565b81600181146200061a576002811462000625576200065b565b6001915050620006c4565b60ff8411156200063a576200063962000779565b5b8360020a91508482111562000654576200065362000779565b5b50620006c4565b5060208310610133831016604e8410600b8410161715620006955782820a9050838111156200068f576200068e62000779565b5b620006c4565b620006a4848484600162000533565b92509050818404811115620006be57620006bd62000779565b5b81810290505b9392505050565b6000620006d8826200072c565b9150620006e5836200072c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000721576200072062000779565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200075c57607f821691505b60208210811415620007735762000772620007a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613e6c806200081d6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80637546fcb511610151578063a044c987116100c3578063c18b9c1311610087578063c18b9c13146106d9578063dd62ed3e14610709578063e640f64014610739578063ea32189c14610755578063ef8e293714610785578063f2fde38b146107a157610269565b8063a044c98714610621578063a457c2d71461063f578063a9059cbb1461066f578063b31e1d4d1461069f578063b90d5b99146106bb57610269565b806386e87ae01161011557806386e87ae0146105835780638bf6e410146105a15780638c63555c146105bf5780638da5cb5b146105db57806395d89b41146105f957806399f4b2511461061757610269565b80637546fcb5146104f157806375f890ab1461050f5780637bdb72371461052b5780637e44755b1461054957806381bb642d1461056757610269565b80633906f560116101ea5780635290d773116101ae5780635290d77314610455578063533d0bce146104735780636c33bced1461048f5780636ca5b5b01461049957806370a08231146104b7578063715018a6146104e757610269565b80633906f560146103be57806339509351146103dc5780633d370b4e1461040c57806342966c681461042f5780634b8a03e81461044b57610269565b806323b872dd1161023157806323b872dd146103165780632ff2e9dc14610346578063313ce56714610364578063355fc6c9146103825780633602deb2146103a057610269565b806303cf8a201461026e57806306fdde031461028c578063095ea7b3146102aa5780630bcbbd21146102da57806318160ddd146102f8575b600080fd5b6102766107bd565b6040516102839190613008565b60405180910390f35b6102946107e3565b6040516102a19190613067565b60405180910390f35b6102c460048036038101906102bf9190612bbd565b610875565b6040516102d1919061304c565b60405180910390f35b6102e2610893565b6040516102ef9190613349565b60405180910390f35b610300610899565b60405161030d9190613349565b60405180910390f35b610330600480360381019061032b9190612b6a565b6108a3565b60405161033d919061304c565b60405180910390f35b61034e61099b565b60405161035b9190613349565b60405180910390f35b61036c6109bb565b6040516103799190613441565b60405180910390f35b61038a6109c4565b6040516103979190613349565b60405180910390f35b6103a86109ca565b6040516103b59190613008565b60405180910390f35b6103c66109f0565b6040516103d39190613349565b60405180910390f35b6103f660048036038101906103f19190612bbd565b610a10565b604051610403919061304c565b60405180910390f35b610414610abc565b604051610426969594939291906133e0565b60405180910390f35b61044960048036038101906104449190612bfd565b610dd2565b005b610453610dff565b005b61045d610f3d565b60405161046a9190613349565b60405180910390f35b61048d60048036038101906104889190612a96565b610f43565b005b6104976111ed565b005b6104a161130d565b6040516104ae9190613349565b60405180910390f35b6104d160048036038101906104cc9190612a96565b611313565b6040516104de9190613349565b60405180910390f35b6104ef61135b565b005b6104f96113e3565b6040516105069190613349565b60405180910390f35b61052960048036038101906105249190612a96565b611400565b005b6105336114c0565b6040516105409190613349565b60405180910390f35b6105516114c6565b60405161055e9190613008565b60405180910390f35b610581600480360381019061057c9190612a96565b6114ec565b005b61058b6115a6565b604051610598919061304c565b60405180910390f35b6105a96115b9565b6040516105b69190613349565b60405180910390f35b6105d960048036038101906105d49190612c2a565b6115bf565b005b6105e36118a8565b6040516105f09190613008565b60405180910390f35b6106016118d2565b60405161060e9190613067565b60405180910390f35b61061f611964565b005b610629611970565b6040516106369190613008565b60405180910390f35b61065960048036038101906106549190612bbd565b611996565b604051610666919061304c565b60405180910390f35b61068960048036038101906106849190612bbd565b611a81565b604051610696919061304c565b60405180910390f35b6106b960048036038101906106b49190612a96565b611a9f565b005b6106c3611b59565b6040516106d09190613349565b60405180910390f35b6106f360048036038101906106ee9190612a96565b611b5f565b6040516107009190613008565b60405180910390f35b610723600480360381019061071e9190612ac3565b611b92565b6040516107309190613349565b60405180910390f35b610753600480360381019061074e9190612b03565b611c19565b005b61076f600480360381019061076a9190612a96565b611f2f565b60405161077c9190613008565b60405180910390f35b61079f600480360381019061079a9190612bfd565b611f62565b005b6107bb60048036038101906107b69190612a96565b6120c1565b005b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546107f290613824565b80601f016020809104026020016040519081016040528092919081815260200182805461081e90613824565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b60006108896108826121b9565b84846121c1565b6001905092915050565b600d5481565b6000600254905090565b60006108b084848461238c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108fb6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613229565b60405180910390fd5b61098f856109876121b9565b8584036121c1565b60019150509392505050565b6012600a6109a99190613552565b631e61299b6109b89190613670565b81565b60006012905090565b60105481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6012600a6109fe9190613552565b6356cc76e1610a0d9190613670565b81565b6000610ab2610a1d6121b9565b848460016000610a2b6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aad9190613478565b6121c1565b6001905092915050565b600080600080600080600060105443610ad591906136ca565b9050600081131580610af35750601160009054906101000a900460ff165b15610b135760008060008060008096509650965096509650965050610dca565b6000610b2a8260065461260d90919063ffffffff16565b90506000610b4a601254610b3c610899565b61262390919063ffffffff16565b9050806012600a610b5b9190613552565b6356cc76e1610b6a9190613670565b11610b8c57600080600080600080985098509850985098509850505050610dca565b6012600a610b9a9190613552565b6356cc76e1610ba99190613670565b610bbc828461262390919063ffffffff16565b1115610bf457610bf1816012600a610bd49190613552565b6356cc76e1610be39190613670565b61263990919063ffffffff16565b91505b6000821415610c1a57600080600080600080985098509850985098509850505050610dca565b6000610c446064610c36600c548661260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c706064610c62600d548761260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c9c6064610c8e600e548861260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610cc86064610cba600f548961260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610d0382610cf585610ce7888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b90506000878214610d2457610d21828961263990919063ffffffff16565b90505b610d6d83610d5f86610d5189610d438c8861262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b8814610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613209565b60405180910390fd5b8786868686859e509e509e509e509e509e505050505050505050505b909192939495565b610de3610ddd6121b9565b82612665565b8060126000828254610df59190613478565b9250508190555050565b610e076121b9565b73ffffffffffffffffffffffffffffffffffffffff16610e256118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613249565b60405180910390fd5b601160009054906101000a900460ff16610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613169565b60405180910390fd5b600a43610ed79190613478565b6010819055506000601160006101000a81548160ff0219169083151502179055507f9dd715fed52c25e642f97653bb4c4339ad98fe6d6e130348be82ae5d86383a8c600a43610f269190613478565b604051610f339190613349565b60405180910390a1565b60125481565b601160009054906101000a900460ff1615610f5d576111ea565b4360105410610fa2577f51d2682485acc6068bd190da22f9954f8e19fe326f379c160cb532256ee9878343604051610f959190613349565b60405180910390a16111ea565b600080600080600080610fb3610abc565b9550955095509550955095506000861415610fd3575050505050506111ea565b436010819055506000851461100f5761100e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168661283c565b5b6000841461104457611043600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561283c565b5b6000831461107957611078600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461283c565b5b600082146110ae576110ad600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361283c565b5b600081146110d05780601260008282546110c89190613478565b925050819055505b7fd48591c0b38848057d65c072802d9172b5a51fd2c4ea6e6729276c0efe2399d54387836110fc610899565b60125460405161111095949392919061338d565b60405180910390a16000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111e2578073ffffffffffffffffffffffffffffffffffffffff1663bd4f2391896040518263ffffffff1660e01b81526004016111ac9190613008565b600060405180830381600087803b1580156111c657600080fd5b505af19250505080156111d7575060015b6111e0576111e1565b5b5b505050505050505b50565b6111f56121b9565b73ffffffffffffffffffffffffffffffffffffffff166112136118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613249565b60405180910390fd5b601160009054906101000a900460ff16156112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b0906131c9565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055507f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e436040516113039190613349565b60405180910390a1565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113636121b9565b73ffffffffffffffffffffffffffffffffffffffff166113816118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90613249565b60405180910390fd5b6113e1600061299c565b565b6012600a6113f19190613552565b60586113fd9190613670565b81565b6114086121b9565b73ffffffffffffffffffffffffffffffffffffffff166114266118a8565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613249565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3eddc3ecdb7edab86ef5743e7e6ecf78dfbf01f8830eb26a8acdb522fb2bfc34338260405161159b929190613023565b60405180910390a150565b601160009054906101000a900460ff1681565b600e5481565b6115c76121b9565b73ffffffffffffffffffffffffffffffffffffffff166115e56118a8565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613249565b60405180910390fd5b60646116748261166685611658888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b11156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611750576000831461174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690613129565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117eb57600082146117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613149565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118865760008114611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90613309565b60405180910390fd5b5b83600c8190555082600d8190555081600e8190555080600f8190555050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118e190613824565b80601f016020809104026020016040519081016040528092919081815260200182805461190d90613824565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b5050505050905090565b61196e6000610f43565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160006119a56121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906132e9565b60405180910390fd5b611a76611a6d6121b9565b858584036121c1565b600191505092915050565b6000611a95611a8e6121b9565b848461238c565b6001905092915050565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa0ff2fa6909fe4ddd94349fc9d8e2932f3dfe666216f3cc2aa3a72f5a03b655e3382604051611b4e929190613023565b60405180910390a150565b600f5481565b60136020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c216121b9565b73ffffffffffffffffffffffffffffffffffffffff16611c3f6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc906131a9565b60405180910390fd5b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e69576000600d819055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ec9576000600e819055505b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f29576000600f819055505b50505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f6a6121b9565b73ffffffffffffffffffffffffffffffffffffffff16611f886118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590613249565b60405180910390fd5b6012600a611fec9190613552565b6001611ff89190613670565b81101561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190613089565b60405180910390fd5b600654811061207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906132a9565b60405180910390fd5b806006819055507fa5359383b26e4fd2b6525f3aff6b32383b448d64ef960787d0f9a30e343e7c6643826040516120b6929190613364565b60405180910390a150565b6120c96121b9565b73ffffffffffffffffffffffffffffffffffffffff166120e76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906130e9565b60405180910390fd5b6121b68161299c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612228906132c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613109565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161237f9190613349565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390613289565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906130a9565b60405180910390fd5b612477838383612a62565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490613189565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125909190613478565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f49190613349565b60405180910390a3612607848484612a67565b50505050565b6000818361261b9190613670565b905092915050565b600081836126319190613478565b905092915050565b60008183612647919061375e565b905092915050565b6000818361265d91906134ce565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90613269565b60405180910390fd5b6126e182600083612a62565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906130c9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127be919061375e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128239190613349565b60405180910390a361283783600084612a67565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390613329565b60405180910390fd5b6128b860008383612a62565b80600260008282546128ca9190613478565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291f9190613478565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129849190613349565b60405180910390a361299860008383612a67565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081359050612a7b81613e08565b92915050565b600081359050612a9081613e1f565b92915050565b600060208284031215612aac57612aab6138e3565b5b6000612aba84828501612a6c565b91505092915050565b60008060408385031215612ada57612ad96138e3565b5b6000612ae885828601612a6c565b9250506020612af985828601612a6c565b9150509250929050565b60008060008060808587031215612b1d57612b1c6138e3565b5b6000612b2b87828801612a6c565b9450506020612b3c87828801612a6c565b9350506040612b4d87828801612a6c565b9250506060612b5e87828801612a6c565b91505092959194509250565b600080600060608486031215612b8357612b826138e3565b5b6000612b9186828701612a6c565b9350506020612ba286828701612a6c565b9250506040612bb386828701612a81565b9150509250925092565b60008060408385031215612bd457612bd36138e3565b5b6000612be285828601612a6c565b9250506020612bf385828601612a81565b9150509250929050565b600060208284031215612c1357612c126138e3565b5b6000612c2184828501612a81565b91505092915050565b60008060008060808587031215612c4457612c436138e3565b5b6000612c5287828801612a81565b9450506020612c6387828801612a81565b9350506040612c7487828801612a81565b9250506060612c8587828801612a81565b91505092959194509250565b612c9a81613792565b82525050565b612ca9816137a4565b82525050565b6000612cba8261345c565b612cc48185613467565b9350612cd48185602086016137f1565b612cdd816138e8565b840191505092915050565b6000612cf5601283613467565b9150612d0082613906565b602082019050919050565b6000612d18602383613467565b9150612d238261392f565b604082019050919050565b6000612d3b602283613467565b9150612d468261397e565b604082019050919050565b6000612d5e602683613467565b9150612d69826139cd565b604082019050919050565b6000612d81602283613467565b9150612d8c82613a1c565b604082019050919050565b6000612da4601d83613467565b9150612daf82613a6b565b602082019050919050565b6000612dc7601d83613467565b9150612dd282613a94565b602082019050919050565b6000612dea601183613467565b9150612df582613abd565b602082019050919050565b6000612e0d602683613467565b9150612e1882613ae6565b604082019050919050565b6000612e30602083613467565b9150612e3b82613b35565b602082019050919050565b6000612e53601583613467565b9150612e5e82613b5e565b602082019050919050565b6000612e76601083613467565b9150612e8182613b87565b602082019050919050565b6000612e99600883613467565b9150612ea482613bb0565b602082019050919050565b6000612ebc602883613467565b9150612ec782613bd9565b604082019050919050565b6000612edf602083613467565b9150612eea82613c28565b602082019050919050565b6000612f02602183613467565b9150612f0d82613c51565b604082019050919050565b6000612f25602583613467565b9150612f3082613ca0565b604082019050919050565b6000612f48601f83613467565b9150612f5382613cef565b602082019050919050565b6000612f6b602483613467565b9150612f7682613d18565b604082019050919050565b6000612f8e602583613467565b9150612f9982613d67565b604082019050919050565b6000612fb1601d83613467565b9150612fbc82613db6565b602082019050919050565b6000612fd4601f83613467565b9150612fdf82613ddf565b602082019050919050565b612ff3816137da565b82525050565b613002816137e4565b82525050565b600060208201905061301d6000830184612c91565b92915050565b60006040820190506130386000830185612c91565b6130456020830184612c91565b9392505050565b60006020820190506130616000830184612ca0565b92915050565b600060208201905081810360008301526130818184612caf565b905092915050565b600060208201905081810360008301526130a281612ce8565b9050919050565b600060208201905081810360008301526130c281612d0b565b9050919050565b600060208201905081810360008301526130e281612d2e565b9050919050565b6000602082019050818103600083015261310281612d51565b9050919050565b6000602082019050818103600083015261312281612d74565b9050919050565b6000602082019050818103600083015261314281612d97565b9050919050565b6000602082019050818103600083015261316281612dba565b9050919050565b6000602082019050818103600083015261318281612ddd565b9050919050565b600060208201905081810360008301526131a281612e00565b9050919050565b600060208201905081810360008301526131c281612e23565b9050919050565b600060208201905081810360008301526131e281612e46565b9050919050565b6000602082019050818103600083015261320281612e69565b9050919050565b6000602082019050818103600083015261322281612e8c565b9050919050565b6000602082019050818103600083015261324281612eaf565b9050919050565b6000602082019050818103600083015261326281612ed2565b9050919050565b6000602082019050818103600083015261328281612ef5565b9050919050565b600060208201905081810360008301526132a281612f18565b9050919050565b600060208201905081810360008301526132c281612f3b565b9050919050565b600060208201905081810360008301526132e281612f5e565b9050919050565b6000602082019050818103600083015261330281612f81565b9050919050565b6000602082019050818103600083015261332281612fa4565b9050919050565b6000602082019050818103600083015261334281612fc7565b9050919050565b600060208201905061335e6000830184612fea565b92915050565b60006040820190506133796000830185612fea565b6133866020830184612fea565b9392505050565b600060a0820190506133a26000830188612fea565b6133af6020830187612fea565b6133bc6040830186612fea565b6133c96060830185612fea565b6133d66080830184612fea565b9695505050505050565b600060c0820190506133f56000830189612fea565b6134026020830188612fea565b61340f6040830187612fea565b61341c6060830186612fea565b6134296080830185612fea565b61343660a0830184612fea565b979650505050505050565b60006020820190506134566000830184612ff9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613483826137da565b915061348e836137da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134c3576134c2613856565b5b828201905092915050565b60006134d9826137da565b91506134e4836137da565b9250826134f4576134f3613885565b5b828204905092915050565b6000808291508390505b60018511156135495780860481111561352557613524613856565b5b60018516156135345780820291505b8081029050613542856138f9565b9450613509565b94509492505050565b600061355d826137da565b9150613568836137e4565b92506135957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461359d565b905092915050565b6000826135ad5760019050613669565b816135bb5760009050613669565b81600181146135d157600281146135db5761360a565b6001915050613669565b60ff8411156135ed576135ec613856565b5b8360020a91508482111561360457613603613856565b5b50613669565b5060208310610133831016604e8410600b841016171561363f5782820a90508381111561363a57613639613856565b5b613669565b61364c84848460016134ff565b9250905081840481111561366357613662613856565b5b81810290505b9392505050565b600061367b826137da565b9150613686836137da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bf576136be613856565b5b828202905092915050565b60006136d5826137b0565b91506136e0836137b0565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561371b5761371a613856565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561375357613752613856565b5b828203905092915050565b6000613769826137da565b9150613774836137da565b92508282101561378757613786613856565b5b828203905092915050565b600061379d826137ba565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561380f5780820151818401526020810190506137f4565b8381111561381e576000848401525b50505050565b6000600282049050600182168061383c57607f821691505b602082108114156138505761384f6138b4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f616d6f756e74203c206f6e6520746f6b656e0000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732032000000600082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732033000000600082015250565b7f6d696e696e67206e6f7420706175736564000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6164647265737320312063616e6e6f74206265207a65726f2061646472657373600082015250565b7f6d696e696e6720616c7265616479207061757365640000000000000000000000600082015250565b7f7061727473206578636565642031303000000000000000000000000000000000600082015250565b7f6d69736d61746368000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74203e3d2063757272656e7420656d697373696f6e207261746500600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732034000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613e1181613792565b8114613e1c57600080fd5b50565b613e28816137da565b8114613e3357600080fd5b5056fea26469706673582212206250ad630003e7455e55e8c56180a899b55e5a6579dee451e3a6e12adc60d61e64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102695760003560e01c80637546fcb511610151578063a044c987116100c3578063c18b9c1311610087578063c18b9c13146106d9578063dd62ed3e14610709578063e640f64014610739578063ea32189c14610755578063ef8e293714610785578063f2fde38b146107a157610269565b8063a044c98714610621578063a457c2d71461063f578063a9059cbb1461066f578063b31e1d4d1461069f578063b90d5b99146106bb57610269565b806386e87ae01161011557806386e87ae0146105835780638bf6e410146105a15780638c63555c146105bf5780638da5cb5b146105db57806395d89b41146105f957806399f4b2511461061757610269565b80637546fcb5146104f157806375f890ab1461050f5780637bdb72371461052b5780637e44755b1461054957806381bb642d1461056757610269565b80633906f560116101ea5780635290d773116101ae5780635290d77314610455578063533d0bce146104735780636c33bced1461048f5780636ca5b5b01461049957806370a08231146104b7578063715018a6146104e757610269565b80633906f560146103be57806339509351146103dc5780633d370b4e1461040c57806342966c681461042f5780634b8a03e81461044b57610269565b806323b872dd1161023157806323b872dd146103165780632ff2e9dc14610346578063313ce56714610364578063355fc6c9146103825780633602deb2146103a057610269565b806303cf8a201461026e57806306fdde031461028c578063095ea7b3146102aa5780630bcbbd21146102da57806318160ddd146102f8575b600080fd5b6102766107bd565b6040516102839190613008565b60405180910390f35b6102946107e3565b6040516102a19190613067565b60405180910390f35b6102c460048036038101906102bf9190612bbd565b610875565b6040516102d1919061304c565b60405180910390f35b6102e2610893565b6040516102ef9190613349565b60405180910390f35b610300610899565b60405161030d9190613349565b60405180910390f35b610330600480360381019061032b9190612b6a565b6108a3565b60405161033d919061304c565b60405180910390f35b61034e61099b565b60405161035b9190613349565b60405180910390f35b61036c6109bb565b6040516103799190613441565b60405180910390f35b61038a6109c4565b6040516103979190613349565b60405180910390f35b6103a86109ca565b6040516103b59190613008565b60405180910390f35b6103c66109f0565b6040516103d39190613349565b60405180910390f35b6103f660048036038101906103f19190612bbd565b610a10565b604051610403919061304c565b60405180910390f35b610414610abc565b604051610426969594939291906133e0565b60405180910390f35b61044960048036038101906104449190612bfd565b610dd2565b005b610453610dff565b005b61045d610f3d565b60405161046a9190613349565b60405180910390f35b61048d60048036038101906104889190612a96565b610f43565b005b6104976111ed565b005b6104a161130d565b6040516104ae9190613349565b60405180910390f35b6104d160048036038101906104cc9190612a96565b611313565b6040516104de9190613349565b60405180910390f35b6104ef61135b565b005b6104f96113e3565b6040516105069190613349565b60405180910390f35b61052960048036038101906105249190612a96565b611400565b005b6105336114c0565b6040516105409190613349565b60405180910390f35b6105516114c6565b60405161055e9190613008565b60405180910390f35b610581600480360381019061057c9190612a96565b6114ec565b005b61058b6115a6565b604051610598919061304c565b60405180910390f35b6105a96115b9565b6040516105b69190613349565b60405180910390f35b6105d960048036038101906105d49190612c2a565b6115bf565b005b6105e36118a8565b6040516105f09190613008565b60405180910390f35b6106016118d2565b60405161060e9190613067565b60405180910390f35b61061f611964565b005b610629611970565b6040516106369190613008565b60405180910390f35b61065960048036038101906106549190612bbd565b611996565b604051610666919061304c565b60405180910390f35b61068960048036038101906106849190612bbd565b611a81565b604051610696919061304c565b60405180910390f35b6106b960048036038101906106b49190612a96565b611a9f565b005b6106c3611b59565b6040516106d09190613349565b60405180910390f35b6106f360048036038101906106ee9190612a96565b611b5f565b6040516107009190613008565b60405180910390f35b610723600480360381019061071e9190612ac3565b611b92565b6040516107309190613349565b60405180910390f35b610753600480360381019061074e9190612b03565b611c19565b005b61076f600480360381019061076a9190612a96565b611f2f565b60405161077c9190613008565b60405180910390f35b61079f600480360381019061079a9190612bfd565b611f62565b005b6107bb60048036038101906107b69190612a96565b6120c1565b005b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546107f290613824565b80601f016020809104026020016040519081016040528092919081815260200182805461081e90613824565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b60006108896108826121b9565b84846121c1565b6001905092915050565b600d5481565b6000600254905090565b60006108b084848461238c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108fb6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613229565b60405180910390fd5b61098f856109876121b9565b8584036121c1565b60019150509392505050565b6012600a6109a99190613552565b631e61299b6109b89190613670565b81565b60006012905090565b60105481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6012600a6109fe9190613552565b6356cc76e1610a0d9190613670565b81565b6000610ab2610a1d6121b9565b848460016000610a2b6121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aad9190613478565b6121c1565b6001905092915050565b600080600080600080600060105443610ad591906136ca565b9050600081131580610af35750601160009054906101000a900460ff165b15610b135760008060008060008096509650965096509650965050610dca565b6000610b2a8260065461260d90919063ffffffff16565b90506000610b4a601254610b3c610899565b61262390919063ffffffff16565b9050806012600a610b5b9190613552565b6356cc76e1610b6a9190613670565b11610b8c57600080600080600080985098509850985098509850505050610dca565b6012600a610b9a9190613552565b6356cc76e1610ba99190613670565b610bbc828461262390919063ffffffff16565b1115610bf457610bf1816012600a610bd49190613552565b6356cc76e1610be39190613670565b61263990919063ffffffff16565b91505b6000821415610c1a57600080600080600080985098509850985098509850505050610dca565b6000610c446064610c36600c548661260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c706064610c62600d548761260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610c9c6064610c8e600e548861260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610cc86064610cba600f548961260d90919063ffffffff16565b61264f90919063ffffffff16565b90506000610d0382610cf585610ce7888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b90506000878214610d2457610d21828961263990919063ffffffff16565b90505b610d6d83610d5f86610d5189610d438c8861262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b8814610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613209565b60405180910390fd5b8786868686859e509e509e509e509e509e505050505050505050505b909192939495565b610de3610ddd6121b9565b82612665565b8060126000828254610df59190613478565b9250508190555050565b610e076121b9565b73ffffffffffffffffffffffffffffffffffffffff16610e256118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613249565b60405180910390fd5b601160009054906101000a900460ff16610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613169565b60405180910390fd5b600a43610ed79190613478565b6010819055506000601160006101000a81548160ff0219169083151502179055507f9dd715fed52c25e642f97653bb4c4339ad98fe6d6e130348be82ae5d86383a8c600a43610f269190613478565b604051610f339190613349565b60405180910390a1565b60125481565b601160009054906101000a900460ff1615610f5d576111ea565b4360105410610fa2577f51d2682485acc6068bd190da22f9954f8e19fe326f379c160cb532256ee9878343604051610f959190613349565b60405180910390a16111ea565b600080600080600080610fb3610abc565b9550955095509550955095506000861415610fd3575050505050506111ea565b436010819055506000851461100f5761100e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168661283c565b5b6000841461104457611043600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561283c565b5b6000831461107957611078600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461283c565b5b600082146110ae576110ad600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361283c565b5b600081146110d05780601260008282546110c89190613478565b925050819055505b7fd48591c0b38848057d65c072802d9172b5a51fd2c4ea6e6729276c0efe2399d54387836110fc610899565b60125460405161111095949392919061338d565b60405180910390a16000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111e2578073ffffffffffffffffffffffffffffffffffffffff1663bd4f2391896040518263ffffffff1660e01b81526004016111ac9190613008565b600060405180830381600087803b1580156111c657600080fd5b505af19250505080156111d7575060015b6111e0576111e1565b5b5b505050505050505b50565b6111f56121b9565b73ffffffffffffffffffffffffffffffffffffffff166112136118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613249565b60405180910390fd5b601160009054906101000a900460ff16156112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b0906131c9565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055507f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e436040516113039190613349565b60405180910390a1565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113636121b9565b73ffffffffffffffffffffffffffffffffffffffff166113816118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90613249565b60405180910390fd5b6113e1600061299c565b565b6012600a6113f19190613552565b60586113fd9190613670565b81565b6114086121b9565b73ffffffffffffffffffffffffffffffffffffffff166114266118a8565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613249565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3eddc3ecdb7edab86ef5743e7e6ecf78dfbf01f8830eb26a8acdb522fb2bfc34338260405161159b929190613023565b60405180910390a150565b601160009054906101000a900460ff1681565b600e5481565b6115c76121b9565b73ffffffffffffffffffffffffffffffffffffffff166115e56118a8565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613249565b60405180910390fd5b60646116748261166685611658888a61262390919063ffffffff16565b61262390919063ffffffff16565b61262390919063ffffffff16565b11156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906131e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611750576000831461174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690613129565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117eb57600082146117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613149565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118865760008114611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90613309565b60405180910390fd5b5b83600c8190555082600d8190555081600e8190555080600f8190555050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118e190613824565b80601f016020809104026020016040519081016040528092919081815260200182805461190d90613824565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b5050505050905090565b61196e6000610f43565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160006119a56121b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906132e9565b60405180910390fd5b611a76611a6d6121b9565b858584036121c1565b600191505092915050565b6000611a95611a8e6121b9565b848461238c565b6001905092915050565b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa0ff2fa6909fe4ddd94349fc9d8e2932f3dfe666216f3cc2aa3a72f5a03b655e3382604051611b4e929190613023565b60405180910390a150565b600f5481565b60136020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c216121b9565b73ffffffffffffffffffffffffffffffffffffffff16611c3f6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc906131a9565b60405180910390fd5b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e69576000600d819055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ec9576000600e819055505b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f29576000600f819055505b50505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f6a6121b9565b73ffffffffffffffffffffffffffffffffffffffff16611f886118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590613249565b60405180910390fd5b6012600a611fec9190613552565b6001611ff89190613670565b81101561203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190613089565b60405180910390fd5b600654811061207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906132a9565b60405180910390fd5b806006819055507fa5359383b26e4fd2b6525f3aff6b32383b448d64ef960787d0f9a30e343e7c6643826040516120b6929190613364565b60405180910390a150565b6120c96121b9565b73ffffffffffffffffffffffffffffffffffffffff166120e76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906130e9565b60405180910390fd5b6121b68161299c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612228906132c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613109565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161237f9190613349565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390613289565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612463906130a9565b60405180910390fd5b612477838383612a62565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490613189565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125909190613478565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f49190613349565b60405180910390a3612607848484612a67565b50505050565b6000818361261b9190613670565b905092915050565b600081836126319190613478565b905092915050565b60008183612647919061375e565b905092915050565b6000818361265d91906134ce565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90613269565b60405180910390fd5b6126e182600083612a62565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e906130c9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127be919061375e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128239190613349565b60405180910390a361283783600084612a67565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390613329565b60405180910390fd5b6128b860008383612a62565b80600260008282546128ca9190613478565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291f9190613478565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129849190613349565b60405180910390a361299860008383612a67565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081359050612a7b81613e08565b92915050565b600081359050612a9081613e1f565b92915050565b600060208284031215612aac57612aab6138e3565b5b6000612aba84828501612a6c565b91505092915050565b60008060408385031215612ada57612ad96138e3565b5b6000612ae885828601612a6c565b9250506020612af985828601612a6c565b9150509250929050565b60008060008060808587031215612b1d57612b1c6138e3565b5b6000612b2b87828801612a6c565b9450506020612b3c87828801612a6c565b9350506040612b4d87828801612a6c565b9250506060612b5e87828801612a6c565b91505092959194509250565b600080600060608486031215612b8357612b826138e3565b5b6000612b9186828701612a6c565b9350506020612ba286828701612a6c565b9250506040612bb386828701612a81565b9150509250925092565b60008060408385031215612bd457612bd36138e3565b5b6000612be285828601612a6c565b9250506020612bf385828601612a81565b9150509250929050565b600060208284031215612c1357612c126138e3565b5b6000612c2184828501612a81565b91505092915050565b60008060008060808587031215612c4457612c436138e3565b5b6000612c5287828801612a81565b9450506020612c6387828801612a81565b9350506040612c7487828801612a81565b9250506060612c8587828801612a81565b91505092959194509250565b612c9a81613792565b82525050565b612ca9816137a4565b82525050565b6000612cba8261345c565b612cc48185613467565b9350612cd48185602086016137f1565b612cdd816138e8565b840191505092915050565b6000612cf5601283613467565b9150612d0082613906565b602082019050919050565b6000612d18602383613467565b9150612d238261392f565b604082019050919050565b6000612d3b602283613467565b9150612d468261397e565b604082019050919050565b6000612d5e602683613467565b9150612d69826139cd565b604082019050919050565b6000612d81602283613467565b9150612d8c82613a1c565b604082019050919050565b6000612da4601d83613467565b9150612daf82613a6b565b602082019050919050565b6000612dc7601d83613467565b9150612dd282613a94565b602082019050919050565b6000612dea601183613467565b9150612df582613abd565b602082019050919050565b6000612e0d602683613467565b9150612e1882613ae6565b604082019050919050565b6000612e30602083613467565b9150612e3b82613b35565b602082019050919050565b6000612e53601583613467565b9150612e5e82613b5e565b602082019050919050565b6000612e76601083613467565b9150612e8182613b87565b602082019050919050565b6000612e99600883613467565b9150612ea482613bb0565b602082019050919050565b6000612ebc602883613467565b9150612ec782613bd9565b604082019050919050565b6000612edf602083613467565b9150612eea82613c28565b602082019050919050565b6000612f02602183613467565b9150612f0d82613c51565b604082019050919050565b6000612f25602583613467565b9150612f3082613ca0565b604082019050919050565b6000612f48601f83613467565b9150612f5382613cef565b602082019050919050565b6000612f6b602483613467565b9150612f7682613d18565b604082019050919050565b6000612f8e602583613467565b9150612f9982613d67565b604082019050919050565b6000612fb1601d83613467565b9150612fbc82613db6565b602082019050919050565b6000612fd4601f83613467565b9150612fdf82613ddf565b602082019050919050565b612ff3816137da565b82525050565b613002816137e4565b82525050565b600060208201905061301d6000830184612c91565b92915050565b60006040820190506130386000830185612c91565b6130456020830184612c91565b9392505050565b60006020820190506130616000830184612ca0565b92915050565b600060208201905081810360008301526130818184612caf565b905092915050565b600060208201905081810360008301526130a281612ce8565b9050919050565b600060208201905081810360008301526130c281612d0b565b9050919050565b600060208201905081810360008301526130e281612d2e565b9050919050565b6000602082019050818103600083015261310281612d51565b9050919050565b6000602082019050818103600083015261312281612d74565b9050919050565b6000602082019050818103600083015261314281612d97565b9050919050565b6000602082019050818103600083015261316281612dba565b9050919050565b6000602082019050818103600083015261318281612ddd565b9050919050565b600060208201905081810360008301526131a281612e00565b9050919050565b600060208201905081810360008301526131c281612e23565b9050919050565b600060208201905081810360008301526131e281612e46565b9050919050565b6000602082019050818103600083015261320281612e69565b9050919050565b6000602082019050818103600083015261322281612e8c565b9050919050565b6000602082019050818103600083015261324281612eaf565b9050919050565b6000602082019050818103600083015261326281612ed2565b9050919050565b6000602082019050818103600083015261328281612ef5565b9050919050565b600060208201905081810360008301526132a281612f18565b9050919050565b600060208201905081810360008301526132c281612f3b565b9050919050565b600060208201905081810360008301526132e281612f5e565b9050919050565b6000602082019050818103600083015261330281612f81565b9050919050565b6000602082019050818103600083015261332281612fa4565b9050919050565b6000602082019050818103600083015261334281612fc7565b9050919050565b600060208201905061335e6000830184612fea565b92915050565b60006040820190506133796000830185612fea565b6133866020830184612fea565b9392505050565b600060a0820190506133a26000830188612fea565b6133af6020830187612fea565b6133bc6040830186612fea565b6133c96060830185612fea565b6133d66080830184612fea565b9695505050505050565b600060c0820190506133f56000830189612fea565b6134026020830188612fea565b61340f6040830187612fea565b61341c6060830186612fea565b6134296080830185612fea565b61343660a0830184612fea565b979650505050505050565b60006020820190506134566000830184612ff9565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613483826137da565b915061348e836137da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134c3576134c2613856565b5b828201905092915050565b60006134d9826137da565b91506134e4836137da565b9250826134f4576134f3613885565b5b828204905092915050565b6000808291508390505b60018511156135495780860481111561352557613524613856565b5b60018516156135345780820291505b8081029050613542856138f9565b9450613509565b94509492505050565b600061355d826137da565b9150613568836137e4565b92506135957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461359d565b905092915050565b6000826135ad5760019050613669565b816135bb5760009050613669565b81600181146135d157600281146135db5761360a565b6001915050613669565b60ff8411156135ed576135ec613856565b5b8360020a91508482111561360457613603613856565b5b50613669565b5060208310610133831016604e8410600b841016171561363f5782820a90508381111561363a57613639613856565b5b613669565b61364c84848460016134ff565b9250905081840481111561366357613662613856565b5b81810290505b9392505050565b600061367b826137da565b9150613686836137da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bf576136be613856565b5b828202905092915050565b60006136d5826137b0565b91506136e0836137b0565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561371b5761371a613856565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561375357613752613856565b5b828203905092915050565b6000613769826137da565b9150613774836137da565b92508282101561378757613786613856565b5b828203905092915050565b600061379d826137ba565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561380f5780820151818401526020810190506137f4565b8381111561381e576000848401525b50505050565b6000600282049050600182168061383c57607f821691505b602082108114156138505761384f6138b4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f616d6f756e74203c206f6e6520746f6b656e0000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732032000000600082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732033000000600082015250565b7f6d696e696e67206e6f7420706175736564000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6164647265737320312063616e6e6f74206265207a65726f2061646472657373600082015250565b7f6d696e696e6720616c7265616479207061757365640000000000000000000000600082015250565b7f7061727473206578636565642031303000000000000000000000000000000000600082015250565b7f6d69736d61746368000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74203e3d2063757272656e7420656d697373696f6e207261746500600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573732034000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613e1181613792565b8114613e1c57600080fd5b50565b613e28816137da565b8114613e3357600080fd5b5056fea26469706673582212206250ad630003e7455e55e8c56180a899b55e5a6579dee451e3a6e12adc60d61e64736f6c63430008070033

Deployed Bytecode Sourcemap

37537:9358:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38088:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18287:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20454:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38180:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19407:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21105:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37737:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38782:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38264:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38126:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37658:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22006:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40756:1502;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;38960:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45988:236;;;:::i;:::-;;38327:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42769:1305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45751:161;;;:::i;:::-;;38161:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19578:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29872:94;;;:::i;:::-;;37865:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46798:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37944:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38069:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39743:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38298:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38199:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45154:453;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29221:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18506:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42343:54;;;:::i;:::-;;38107:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22724:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19918:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40044:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38218:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39565:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20156:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44427:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39874:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46351:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30121:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38088:17;;;;;;;;;;;;;:::o;18287:100::-;18341:13;18374:5;18367:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18287:100;:::o;20454:169::-;20537:4;20554:39;20563:12;:10;:12::i;:::-;20577:7;20586:6;20554:8;:39::i;:::-;20611:4;20604:11;;20454:169;;;;:::o;38180:17::-;;;;:::o;19407:108::-;19468:7;19495:12;;19488:19;;19407:108;:::o;21105:492::-;21245:4;21262:36;21272:6;21280:9;21291:6;21262:9;:36::i;:::-;21311:24;21338:11;:19;21350:6;21338:19;;;;;;;;;;;;;;;:33;21358:12;:10;:12::i;:::-;21338:33;;;;;;;;;;;;;;;;21311:60;;21410:6;21390:16;:26;;21382:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21497:57;21506:6;21514:12;:10;:12::i;:::-;21547:6;21528:16;:25;21497:8;:57::i;:::-;21585:4;21578:11;;;21105:492;;;;;:::o;37737:74::-;37651:2;37797;:14;;;;:::i;:::-;37785:9;:26;;;;:::i;:::-;37737:74;:::o;38782:84::-;38832:5;37651:2;38845:15;;38782:84;:::o;38264:29::-;;;;:::o;38126:17::-;;;;;;;;;;;;;:::o;37658:74::-;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;37658:74;:::o;22006:215::-;22094:4;22111:80;22120:12;:10;:12::i;:::-;22134:7;22180:10;22143:11;:25;22155:12;:10;:12::i;:::-;22143:25;;;;;;;;;;;;;;;:34;22169:7;22143:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;22111:8;:80::i;:::-;22209:4;22202:11;;22006:215;;;;:::o;40756:1502::-;40803:7;40812;40821;40830;40839;40848;40943:12;40988:14;;40965:12;40958:45;;;;:::i;:::-;40943:60;;41023:1;41014:5;:10;;:26;;;;41028:12;;;;;;;;;;;41014:26;41010:69;;;41059:1;41061;41063;41065;41067;41069;41051:20;;;;;;;;;;;;;;;41010:69;41118:15;41136:39;41168:5;41136:19;;:23;;:39;;;;:::i;:::-;41118:57;;41231:14;41248:31;41266:12;;41248:13;:11;:13::i;:::-;:17;;:31;;;;:::i;:::-;41231:48;;41306:6;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;41290:22;41286:65;;41331:1;41333;41335;41337;41339;41341;41323:20;;;;;;;;;;;;;;;;;41286:65;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;41474:19;41486:6;41474:7;:11;;:19;;;;:::i;:::-;:34;41470:91;;;41529:24;41546:6;37651:2;37718;:14;;;;:::i;:::-;37705:10;:27;;;;:::i;:::-;41529:16;;:24;;;;:::i;:::-;41519:34;;41470:91;41628:1;41617:7;:12;41613:55;;;41648:1;41650;41652;41654;41656;41658;41640:20;;;;;;;;;;;;;;;;;41613:55;41709:12;41724:24;41744:3;41724:15;41736:2;;41724:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41709:39;;41755:12;41770:24;41790:3;41770:15;41782:2;;41770:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41755:39;;41801:12;41816:24;41836:3;41816:15;41828:2;;41816:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41801:39;;41847:12;41862:24;41882:3;41862:15;41874:2;;41862:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;41847:39;;41893:14;41910:34;41939:4;41910:24;41929:4;41910:14;41919:4;41910;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;41893:51;;41976:18;42015:7;42005:6;:17;42001:73;;42047:19;42059:6;42047:7;:11;;:19;;;;:::i;:::-;42034:32;;42001:73;42130:50;42175:4;42130:40;42165:4;42130:30;42155:4;42130:20;42145:4;42130:10;:14;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;:44;;:50;;;;:::i;:::-;42119:7;:61;42111:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;42208:7;42217:4;42223;42229;42235;42241:10;42200:52;;;;;;;;;;;;;;;;;;;;;40756:1502;;;;;;;:::o;38960:155::-;39006:27;39012:12;:10;:12::i;:::-;39026:6;39006:5;:27::i;:::-;39058:6;39042:12;;:22;;;;;;;:::i;:::-;;;;;;;;38960:155;:::o;45988:236::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46048:12:::1;;;;;;;;;;;46040:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46121:2;46106:12;:17;;;;:::i;:::-;46089:14;:34;;;;46174:5;46159:12;;:20;;;;;;;;;;;;;;;;;;46191:27;46215:2;46200:12;:17;;;;:::i;:::-;46191:27;;;;;;:::i;:::-;;;;;;;;45988:236::o:0;38327:27::-;;;;:::o;42769:1305::-;42821:12;;;;;;;;;;;42817:41;;;42844:7;;42817:41;42995:12;42977:14;;:30;42973:99;;43023:26;43036:12;43023:26;;;;;;:::i;:::-;;;;;;;;43058:7;;42973:99;43126:16;43144:15;43161;43178;43195;43212:16;43232:12;:10;:12::i;:::-;43125:119;;;;;;;;;;;;43267:1;43255:8;:13;43251:42;;;43279:7;;;;;;;;43251:42;43316:12;43299:14;:29;;;;43402:1;43391:7;:12;43387:41;;43407:18;43413:2;;;;;;;;;;;43417:7;43407:5;:18::i;:::-;43387:41;43449:1;43438:7;:12;43434:41;;43454:18;43460:2;;;;;;;;;;;43464:7;43454:5;:18::i;:::-;43434:41;43496:1;43485:7;:12;43481:41;;43501:18;43507:2;;;;;;;;;;;43511:7;43501:5;:18::i;:::-;43481:41;43543:1;43532:7;:12;43528:41;;43548:18;43554:2;;;;;;;;;;;43558:7;43548:5;:18::i;:::-;43528:41;43747:1;43735:8;:13;43731:61;;43775:8;43759:12;;:24;;;;;;;:::i;:::-;;;;;;;;43731:61;43803:68;43809:12;43823:8;43833;43843:13;:11;:13::i;:::-;43858:12;;43803:68;;;;;;;;;;:::i;:::-;;;;;;;;43949:15;43967:11;;;;;;;;;;;43949:29;;44013:1;43989:26;;43997:3;43989:26;;;43985:84;;44032:3;:8;;;44041;44032:18;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44028:34;;;;;;43985:84;42810:1264;;;;;;;42769:1305;;:::o;45751:161::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45810:12:::1;;;;;;;;;;;45809:13;45801:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45870:4;45855:12;;:19;;;;;;;;;;;;;;;;;;45886:20;45893:12;45886:20;;;;;;:::i;:::-;;;;;;;;45751:161::o:0;38161:17::-;;;;:::o;19578:127::-;19652:7;19679:9;:18;19689:7;19679:18;;;;;;;;;;;;;;;;19672:25;;19578:127;;;:::o;29872:94::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29937:21:::1;29955:1;29937:9;:21::i;:::-;29872:94::o:0;37865:74::-;37651:2;37925;:14;;;;:::i;:::-;37920:2;:19;;;;:::i;:::-;37865:74;:::o;46798:94::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46882:3:::1;46856:11;;:30;;;;;;;;;;;;;;;;;;46798:94:::0;:::o;37944:74::-;;;;:::o;38069:17::-;;;;;;;;;;;;;:::o;39743:125::-;39819:2;39791:13;:25;39805:10;39791:25;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;39833:29;39847:10;39859:2;39833:29;;;;;;;:::i;:::-;;;;;;;;39743:125;:::o;38298:24::-;;;;;;;;;;;;;:::o;38199:17::-;;;;:::o;45154:453::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45293:3:::1;45263:26;45286:2;45263:18;45278:2;45263:10;45270:2;45263;:6;;:10;;;;:::i;:::-;:14;;:18;;;;:::i;:::-;:22;;:26;;;;:::i;:::-;:33;;45255:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45342:1;45328:16;;:2;;;;;;;;;;;:16;;;45324:75;;;45361:1;45355:2;:7;45347:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45324:75;45423:1;45409:16;;:2;;;;;;;;;;;:16;;;45405:75;;;45442:1;45436:2;:7;45428:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45405:75;45504:1;45490:16;;:2;;;;;;;;;;;:16;;;45486:75;;;45523:1;45517:2;:7;45509:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45486:75;45572:2;45567;:7;;;;45581:2;45576;:7;;;;45590:2;45585;:7;;;;45599:2;45594;:7;;;;45154:453:::0;;;;:::o;29221:87::-;29267:7;29294:6;;;;;;;;;;;29287:13;;29221:87;:::o;18506:104::-;18562:13;18595:7;18588:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18506:104;:::o;42343:54::-;42373:18;42388:1;42373:6;:18::i;:::-;42343:54::o;38107:17::-;;;;;;;;;;;;;:::o;22724:413::-;22817:4;22834:24;22861:11;:25;22873:12;:10;:12::i;:::-;22861:25;;;;;;;;;;;;;;;:34;22887:7;22861:34;;;;;;;;;;;;;;;;22834:61;;22934:15;22914:16;:35;;22906:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23027:67;23036:12;:10;:12::i;:::-;23050:7;23078:15;23059:16;:34;23027:8;:67::i;:::-;23125:4;23118:11;;;22724:413;;;;:::o;19918:175::-;20004:4;20021:42;20031:12;:10;:12::i;:::-;20045:9;20056:6;20021:9;:42::i;:::-;20081:4;20074:11;;19918:175;;;;:::o;40044:125::-;40120:2;40092:13;:25;40106:10;40092:25;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;40134:29;40148:10;40160:2;40134:29;;;;;;;:::i;:::-;;;;;;;;40044:125;:::o;38218:17::-;;;;:::o;39565:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;20156:151::-;20245:7;20272:11;:18;20284:5;20272:18;;;;;;;;;;;;;;;:27;20291:7;20272:27;;;;;;;;;;;;;;;;20265:34;;20156:151;;;;:::o;44427:384::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44544:1:::1;44530:16;;:2;:16;;;;44522:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44595:2;44590;;:7;;;;;;;;;;;;;;;;;;44604:2;44599;;:7;;;;;;;;;;;;;;;;;;44613:2;44608;;:7;;;;;;;;;;;;;;;;;;44622:2;44617;;:7;;;;;;;;;;;;;;;;;;44713:1;44699:16;;:2;;;;;;;;;;;:16;;;44695:33;;;44724:1;44719:2;:6;;;;44695:33;44752:1;44738:16;;:2;;;;;;;;;;;:16;;;44734:33;;;44763:1;44758:2;:6;;;;44734:33;44791:1;44777:16;;:2;;;;;;;;;;;:16;;;44773:33;;;44802:1;44797:2;:6;;;;44773:33;44427:384:::0;;;;:::o;39874:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;46351:294::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37651:2:::1;46440;:12;;;;:::i;:::-;46436:1;:16;;;;:::i;:::-;46426:6;:26;;46418:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46499:19;;46490:6;:28;46482:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;46583:6;46561:19;:28;;;;46601:38;46618:12;46632:6;46601:38;;;;;;;:::i;:::-;;;;;;;;46351:294:::0;:::o;30121:192::-;29452:12;:10;:12::i;:::-;29441:23;;:7;:5;:7::i;:::-;:23;;;29433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30230:1:::1;30210:22;;:8;:22;;;;30202:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30286:19;30296:8;30286:9;:19::i;:::-;30121:192:::0;:::o;16029:98::-;16082:7;16109:10;16102:17;;16029:98;:::o;26408:380::-;26561:1;26544:19;;:5;:19;;;;26536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26642:1;26623:21;;:7;:21;;;;26615:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26726:6;26696:11;:18;26708:5;26696:18;;;;;;;;;;;;;;;:27;26715:7;26696:27;;;;;;;;;;;;;;;:36;;;;26764:7;26748:32;;26757:5;26748:32;;;26773:6;26748:32;;;;;;:::i;:::-;;;;;;;;26408:380;;;:::o;23627:733::-;23785:1;23767:20;;:6;:20;;;;23759:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23869:1;23848:23;;:9;:23;;;;23840:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23924:47;23945:6;23953:9;23964:6;23924:20;:47::i;:::-;23984:21;24008:9;:17;24018:6;24008:17;;;;;;;;;;;;;;;;23984:41;;24061:6;24044:13;:23;;24036:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24182:6;24166:13;:22;24146:9;:17;24156:6;24146:17;;;;;;;;;;;;;;;:42;;;;24234:6;24210:9;:20;24220:9;24210:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;24275:9;24258:35;;24267:6;24258:35;;;24286:6;24258:35;;;;;;:::i;:::-;;;;;;;;24306:46;24326:6;24334:9;24345:6;24306:19;:46::i;:::-;23748:612;23627:733;;;:::o;34008:98::-;34066:7;34097:1;34093;:5;;;;:::i;:::-;34086:12;;34008:98;;;;:::o;33270:::-;33328:7;33359:1;33355;:5;;;;:::i;:::-;33348:12;;33270:98;;;;:::o;33651:::-;33709:7;33740:1;33736;:5;;;;:::i;:::-;33729:12;;33651:98;;;;:::o;34407:::-;34465:7;34496:1;34492;:5;;;;:::i;:::-;34485:12;;34407:98;;;;:::o;25379:591::-;25482:1;25463:21;;:7;:21;;;;25455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25535:49;25556:7;25573:1;25577:6;25535:20;:49::i;:::-;25597:22;25622:9;:18;25632:7;25622:18;;;;;;;;;;;;;;;;25597:43;;25677:6;25659:14;:24;;25651:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25796:6;25779:14;:23;25758:9;:18;25768:7;25758:18;;;;;;;;;;;;;;;:44;;;;25840:6;25824:12;;:22;;;;;;;:::i;:::-;;;;;;;;25890:1;25864:37;;25873:7;25864:37;;;25894:6;25864:37;;;;;;:::i;:::-;;;;;;;;25914:48;25934:7;25951:1;25955:6;25914:19;:48::i;:::-;25444:526;25379:591;;:::o;24647:399::-;24750:1;24731:21;;:7;:21;;;;24723:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24801:49;24830:1;24834:7;24843:6;24801:20;:49::i;:::-;24879:6;24863:12;;:22;;;;;;;:::i;:::-;;;;;;;;24918:6;24896:9;:18;24906:7;24896:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;24961:7;24940:37;;24957:1;24940:37;;;24970:6;24940:37;;;;;;:::i;:::-;;;;;;;;24990:48;25018:1;25022:7;25031:6;24990:19;:48::i;:::-;24647:399;;:::o;30321:173::-;30377:16;30396:6;;;;;;;;;;;30377:25;;30422:8;30413:6;;:17;;;;;;;;;;;;;;;;;;30477:8;30446:40;;30467:8;30446:40;;;;;;;;;;;;30366:128;30321:173;:::o;27388:125::-;;;;:::o;28117:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:329::-;356:6;405:2;393:9;384:7;380:23;376:32;373:119;;;411:79;;:::i;:::-;373:119;531:1;556:53;601:7;592:6;581:9;577:22;556:53;:::i;:::-;546:63;;502:117;297:329;;;;:::o;632:474::-;700:6;708;757:2;745:9;736:7;732:23;728:32;725:119;;;763:79;;:::i;:::-;725:119;883:1;908:53;953:7;944:6;933:9;929:22;908:53;:::i;:::-;898:63;;854:117;1010:2;1036:53;1081:7;1072:6;1061:9;1057:22;1036:53;:::i;:::-;1026:63;;981:118;632:474;;;;;:::o;1112:765::-;1198:6;1206;1214;1222;1271:3;1259:9;1250:7;1246:23;1242:33;1239:120;;;1278:79;;:::i;:::-;1239:120;1398:1;1423:53;1468:7;1459:6;1448:9;1444:22;1423:53;:::i;:::-;1413:63;;1369:117;1525:2;1551:53;1596:7;1587:6;1576:9;1572:22;1551:53;:::i;:::-;1541:63;;1496:118;1653:2;1679:53;1724:7;1715:6;1704:9;1700:22;1679:53;:::i;:::-;1669:63;;1624:118;1781:2;1807:53;1852:7;1843:6;1832:9;1828:22;1807:53;:::i;:::-;1797:63;;1752:118;1112:765;;;;;;;:::o;1883:619::-;1960:6;1968;1976;2025:2;2013:9;2004:7;2000:23;1996:32;1993:119;;;2031:79;;:::i;:::-;1993:119;2151:1;2176:53;2221:7;2212:6;2201:9;2197:22;2176:53;:::i;:::-;2166:63;;2122:117;2278:2;2304:53;2349:7;2340:6;2329:9;2325:22;2304:53;:::i;:::-;2294:63;;2249:118;2406:2;2432:53;2477:7;2468:6;2457:9;2453:22;2432:53;:::i;:::-;2422:63;;2377:118;1883:619;;;;;:::o;2508:474::-;2576:6;2584;2633:2;2621:9;2612:7;2608:23;2604:32;2601:119;;;2639:79;;:::i;:::-;2601:119;2759:1;2784:53;2829:7;2820:6;2809:9;2805:22;2784:53;:::i;:::-;2774:63;;2730:117;2886:2;2912:53;2957:7;2948:6;2937:9;2933:22;2912:53;:::i;:::-;2902:63;;2857:118;2508:474;;;;;:::o;2988:329::-;3047:6;3096:2;3084:9;3075:7;3071:23;3067:32;3064:119;;;3102:79;;:::i;:::-;3064:119;3222:1;3247:53;3292:7;3283:6;3272:9;3268:22;3247:53;:::i;:::-;3237:63;;3193:117;2988:329;;;;:::o;3323:765::-;3409:6;3417;3425;3433;3482:3;3470:9;3461:7;3457:23;3453:33;3450:120;;;3489:79;;:::i;:::-;3450:120;3609:1;3634:53;3679:7;3670:6;3659:9;3655:22;3634:53;:::i;:::-;3624:63;;3580:117;3736:2;3762:53;3807:7;3798:6;3787:9;3783:22;3762:53;:::i;:::-;3752:63;;3707:118;3864:2;3890:53;3935:7;3926:6;3915:9;3911:22;3890:53;:::i;:::-;3880:63;;3835:118;3992:2;4018:53;4063:7;4054:6;4043:9;4039:22;4018:53;:::i;:::-;4008:63;;3963:118;3323:765;;;;;;;:::o;4094:118::-;4181:24;4199:5;4181:24;:::i;:::-;4176:3;4169:37;4094:118;;:::o;4218:109::-;4299:21;4314:5;4299:21;:::i;:::-;4294:3;4287:34;4218:109;;:::o;4333:364::-;4421:3;4449:39;4482:5;4449:39;:::i;:::-;4504:71;4568:6;4563:3;4504:71;:::i;:::-;4497:78;;4584:52;4629:6;4624:3;4617:4;4610:5;4606:16;4584:52;:::i;:::-;4661:29;4683:6;4661:29;:::i;:::-;4656:3;4652:39;4645:46;;4425:272;4333:364;;;;:::o;4703:366::-;4845:3;4866:67;4930:2;4925:3;4866:67;:::i;:::-;4859:74;;4942:93;5031:3;4942:93;:::i;:::-;5060:2;5055:3;5051:12;5044:19;;4703:366;;;:::o;5075:::-;5217:3;5238:67;5302:2;5297:3;5238:67;:::i;:::-;5231:74;;5314:93;5403:3;5314:93;:::i;:::-;5432:2;5427:3;5423:12;5416:19;;5075:366;;;:::o;5447:::-;5589:3;5610:67;5674:2;5669:3;5610:67;:::i;:::-;5603:74;;5686:93;5775:3;5686:93;:::i;:::-;5804:2;5799:3;5795:12;5788:19;;5447:366;;;:::o;5819:::-;5961:3;5982:67;6046:2;6041:3;5982:67;:::i;:::-;5975:74;;6058:93;6147:3;6058:93;:::i;:::-;6176:2;6171:3;6167:12;6160:19;;5819:366;;;:::o;6191:::-;6333:3;6354:67;6418:2;6413:3;6354:67;:::i;:::-;6347:74;;6430:93;6519:3;6430:93;:::i;:::-;6548:2;6543:3;6539:12;6532:19;;6191:366;;;:::o;6563:::-;6705:3;6726:67;6790:2;6785:3;6726:67;:::i;:::-;6719:74;;6802:93;6891:3;6802:93;:::i;:::-;6920:2;6915:3;6911:12;6904:19;;6563:366;;;:::o;6935:::-;7077:3;7098:67;7162:2;7157:3;7098:67;:::i;:::-;7091:74;;7174:93;7263:3;7174:93;:::i;:::-;7292:2;7287:3;7283:12;7276:19;;6935:366;;;:::o;7307:::-;7449:3;7470:67;7534:2;7529:3;7470:67;:::i;:::-;7463:74;;7546:93;7635:3;7546:93;:::i;:::-;7664:2;7659:3;7655:12;7648:19;;7307:366;;;:::o;7679:::-;7821:3;7842:67;7906:2;7901:3;7842:67;:::i;:::-;7835:74;;7918:93;8007:3;7918:93;:::i;:::-;8036:2;8031:3;8027:12;8020:19;;7679:366;;;:::o;8051:::-;8193:3;8214:67;8278:2;8273:3;8214:67;:::i;:::-;8207:74;;8290:93;8379:3;8290:93;:::i;:::-;8408:2;8403:3;8399:12;8392:19;;8051:366;;;:::o;8423:::-;8565:3;8586:67;8650:2;8645:3;8586:67;:::i;:::-;8579:74;;8662:93;8751:3;8662:93;:::i;:::-;8780:2;8775:3;8771:12;8764:19;;8423:366;;;:::o;8795:::-;8937:3;8958:67;9022:2;9017:3;8958:67;:::i;:::-;8951:74;;9034:93;9123:3;9034:93;:::i;:::-;9152:2;9147:3;9143:12;9136:19;;8795:366;;;:::o;9167:365::-;9309:3;9330:66;9394:1;9389:3;9330:66;:::i;:::-;9323:73;;9405:93;9494:3;9405:93;:::i;:::-;9523:2;9518:3;9514:12;9507:19;;9167:365;;;:::o;9538:366::-;9680:3;9701:67;9765:2;9760:3;9701:67;:::i;:::-;9694:74;;9777:93;9866:3;9777:93;:::i;:::-;9895:2;9890:3;9886:12;9879:19;;9538:366;;;:::o;9910:::-;10052:3;10073:67;10137:2;10132:3;10073:67;:::i;:::-;10066:74;;10149:93;10238:3;10149:93;:::i;:::-;10267:2;10262:3;10258:12;10251:19;;9910:366;;;:::o;10282:::-;10424:3;10445:67;10509:2;10504:3;10445:67;:::i;:::-;10438:74;;10521:93;10610:3;10521:93;:::i;:::-;10639:2;10634:3;10630:12;10623:19;;10282:366;;;:::o;10654:::-;10796:3;10817:67;10881:2;10876:3;10817:67;:::i;:::-;10810:74;;10893:93;10982:3;10893:93;:::i;:::-;11011:2;11006:3;11002:12;10995:19;;10654:366;;;:::o;11026:::-;11168:3;11189:67;11253:2;11248:3;11189:67;:::i;:::-;11182:74;;11265:93;11354:3;11265:93;:::i;:::-;11383:2;11378:3;11374:12;11367:19;;11026:366;;;:::o;11398:::-;11540:3;11561:67;11625:2;11620:3;11561:67;:::i;:::-;11554:74;;11637:93;11726:3;11637:93;:::i;:::-;11755:2;11750:3;11746:12;11739:19;;11398:366;;;:::o;11770:::-;11912:3;11933:67;11997:2;11992:3;11933:67;:::i;:::-;11926:74;;12009:93;12098:3;12009:93;:::i;:::-;12127:2;12122:3;12118:12;12111:19;;11770:366;;;:::o;12142:::-;12284:3;12305:67;12369:2;12364:3;12305:67;:::i;:::-;12298:74;;12381:93;12470:3;12381:93;:::i;:::-;12499:2;12494:3;12490:12;12483:19;;12142:366;;;:::o;12514:::-;12656:3;12677:67;12741:2;12736:3;12677:67;:::i;:::-;12670:74;;12753:93;12842:3;12753:93;:::i;:::-;12871:2;12866:3;12862:12;12855:19;;12514:366;;;:::o;12886:118::-;12973:24;12991:5;12973:24;:::i;:::-;12968:3;12961:37;12886:118;;:::o;13010:112::-;13093:22;13109:5;13093:22;:::i;:::-;13088:3;13081:35;13010:112;;:::o;13128:222::-;13221:4;13259:2;13248:9;13244:18;13236:26;;13272:71;13340:1;13329:9;13325:17;13316:6;13272:71;:::i;:::-;13128:222;;;;:::o;13356:332::-;13477:4;13515:2;13504:9;13500:18;13492:26;;13528:71;13596:1;13585:9;13581:17;13572:6;13528:71;:::i;:::-;13609:72;13677:2;13666:9;13662:18;13653:6;13609:72;:::i;:::-;13356:332;;;;;:::o;13694:210::-;13781:4;13819:2;13808:9;13804:18;13796:26;;13832:65;13894:1;13883:9;13879:17;13870:6;13832:65;:::i;:::-;13694:210;;;;:::o;13910:313::-;14023:4;14061:2;14050:9;14046:18;14038:26;;14110:9;14104:4;14100:20;14096:1;14085:9;14081:17;14074:47;14138:78;14211:4;14202:6;14138:78;:::i;:::-;14130:86;;13910:313;;;;:::o;14229:419::-;14395:4;14433:2;14422:9;14418:18;14410:26;;14482:9;14476:4;14472:20;14468:1;14457:9;14453:17;14446:47;14510:131;14636:4;14510:131;:::i;:::-;14502:139;;14229:419;;;:::o;14654:::-;14820:4;14858:2;14847:9;14843:18;14835:26;;14907:9;14901:4;14897:20;14893:1;14882:9;14878:17;14871:47;14935:131;15061:4;14935:131;:::i;:::-;14927:139;;14654:419;;;:::o;15079:::-;15245:4;15283:2;15272:9;15268:18;15260:26;;15332:9;15326:4;15322:20;15318:1;15307:9;15303:17;15296:47;15360:131;15486:4;15360:131;:::i;:::-;15352:139;;15079:419;;;:::o;15504:::-;15670:4;15708:2;15697:9;15693:18;15685:26;;15757:9;15751:4;15747:20;15743:1;15732:9;15728:17;15721:47;15785:131;15911:4;15785:131;:::i;:::-;15777:139;;15504:419;;;:::o;15929:::-;16095:4;16133:2;16122:9;16118:18;16110:26;;16182:9;16176:4;16172:20;16168:1;16157:9;16153:17;16146:47;16210:131;16336:4;16210:131;:::i;:::-;16202:139;;15929:419;;;:::o;16354:::-;16520:4;16558:2;16547:9;16543:18;16535:26;;16607:9;16601:4;16597:20;16593:1;16582:9;16578:17;16571:47;16635:131;16761:4;16635:131;:::i;:::-;16627:139;;16354:419;;;:::o;16779:::-;16945:4;16983:2;16972:9;16968:18;16960:26;;17032:9;17026:4;17022:20;17018:1;17007:9;17003:17;16996:47;17060:131;17186:4;17060:131;:::i;:::-;17052:139;;16779:419;;;:::o;17204:::-;17370:4;17408:2;17397:9;17393:18;17385:26;;17457:9;17451:4;17447:20;17443:1;17432:9;17428:17;17421:47;17485:131;17611:4;17485:131;:::i;:::-;17477:139;;17204:419;;;:::o;17629:::-;17795:4;17833:2;17822:9;17818:18;17810:26;;17882:9;17876:4;17872:20;17868:1;17857:9;17853:17;17846:47;17910:131;18036:4;17910:131;:::i;:::-;17902:139;;17629:419;;;:::o;18054:::-;18220:4;18258:2;18247:9;18243:18;18235:26;;18307:9;18301:4;18297:20;18293:1;18282:9;18278:17;18271:47;18335:131;18461:4;18335:131;:::i;:::-;18327:139;;18054:419;;;:::o;18479:::-;18645:4;18683:2;18672:9;18668:18;18660:26;;18732:9;18726:4;18722:20;18718:1;18707:9;18703:17;18696:47;18760:131;18886:4;18760:131;:::i;:::-;18752:139;;18479:419;;;:::o;18904:::-;19070:4;19108:2;19097:9;19093:18;19085:26;;19157:9;19151:4;19147:20;19143:1;19132:9;19128:17;19121:47;19185:131;19311:4;19185:131;:::i;:::-;19177:139;;18904:419;;;:::o;19329:::-;19495:4;19533:2;19522:9;19518:18;19510:26;;19582:9;19576:4;19572:20;19568:1;19557:9;19553:17;19546:47;19610:131;19736:4;19610:131;:::i;:::-;19602:139;;19329:419;;;:::o;19754:::-;19920:4;19958:2;19947:9;19943:18;19935:26;;20007:9;20001:4;19997:20;19993:1;19982:9;19978:17;19971:47;20035:131;20161:4;20035:131;:::i;:::-;20027:139;;19754:419;;;:::o;20179:::-;20345:4;20383:2;20372:9;20368:18;20360:26;;20432:9;20426:4;20422:20;20418:1;20407:9;20403:17;20396:47;20460:131;20586:4;20460:131;:::i;:::-;20452:139;;20179:419;;;:::o;20604:::-;20770:4;20808:2;20797:9;20793:18;20785:26;;20857:9;20851:4;20847:20;20843:1;20832:9;20828:17;20821:47;20885:131;21011:4;20885:131;:::i;:::-;20877:139;;20604:419;;;:::o;21029:::-;21195:4;21233:2;21222:9;21218:18;21210:26;;21282:9;21276:4;21272:20;21268:1;21257:9;21253:17;21246:47;21310:131;21436:4;21310:131;:::i;:::-;21302:139;;21029:419;;;:::o;21454:::-;21620:4;21658:2;21647:9;21643:18;21635:26;;21707:9;21701:4;21697:20;21693:1;21682:9;21678:17;21671:47;21735:131;21861:4;21735:131;:::i;:::-;21727:139;;21454:419;;;:::o;21879:::-;22045:4;22083:2;22072:9;22068:18;22060:26;;22132:9;22126:4;22122:20;22118:1;22107:9;22103:17;22096:47;22160:131;22286:4;22160:131;:::i;:::-;22152:139;;21879:419;;;:::o;22304:::-;22470:4;22508:2;22497:9;22493:18;22485:26;;22557:9;22551:4;22547:20;22543:1;22532:9;22528:17;22521:47;22585:131;22711:4;22585:131;:::i;:::-;22577:139;;22304:419;;;:::o;22729:::-;22895:4;22933:2;22922:9;22918:18;22910:26;;22982:9;22976:4;22972:20;22968:1;22957:9;22953:17;22946:47;23010:131;23136:4;23010:131;:::i;:::-;23002:139;;22729:419;;;:::o;23154:::-;23320:4;23358:2;23347:9;23343:18;23335:26;;23407:9;23401:4;23397:20;23393:1;23382:9;23378:17;23371:47;23435:131;23561:4;23435:131;:::i;:::-;23427:139;;23154:419;;;:::o;23579:222::-;23672:4;23710:2;23699:9;23695:18;23687:26;;23723:71;23791:1;23780:9;23776:17;23767:6;23723:71;:::i;:::-;23579:222;;;;:::o;23807:332::-;23928:4;23966:2;23955:9;23951:18;23943:26;;23979:71;24047:1;24036:9;24032:17;24023:6;23979:71;:::i;:::-;24060:72;24128:2;24117:9;24113:18;24104:6;24060:72;:::i;:::-;23807:332;;;;;:::o;24145:664::-;24350:4;24388:3;24377:9;24373:19;24365:27;;24402:71;24470:1;24459:9;24455:17;24446:6;24402:71;:::i;:::-;24483:72;24551:2;24540:9;24536:18;24527:6;24483:72;:::i;:::-;24565;24633:2;24622:9;24618:18;24609:6;24565:72;:::i;:::-;24647;24715:2;24704:9;24700:18;24691:6;24647:72;:::i;:::-;24729:73;24797:3;24786:9;24782:19;24773:6;24729:73;:::i;:::-;24145:664;;;;;;;;:::o;24815:775::-;25048:4;25086:3;25075:9;25071:19;25063:27;;25100:71;25168:1;25157:9;25153:17;25144:6;25100:71;:::i;:::-;25181:72;25249:2;25238:9;25234:18;25225:6;25181:72;:::i;:::-;25263;25331:2;25320:9;25316:18;25307:6;25263:72;:::i;:::-;25345;25413:2;25402:9;25398:18;25389:6;25345:72;:::i;:::-;25427:73;25495:3;25484:9;25480:19;25471:6;25427:73;:::i;:::-;25510;25578:3;25567:9;25563:19;25554:6;25510:73;:::i;:::-;24815:775;;;;;;;;;:::o;25596:214::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25736:67;25800:1;25789:9;25785:17;25776:6;25736:67;:::i;:::-;25596:214;;;;:::o;25897:99::-;25949:6;25983:5;25977:12;25967:22;;25897:99;;;:::o;26002:169::-;26086:11;26120:6;26115:3;26108:19;26160:4;26155:3;26151:14;26136:29;;26002:169;;;;:::o;26177:305::-;26217:3;26236:20;26254:1;26236:20;:::i;:::-;26231:25;;26270:20;26288:1;26270:20;:::i;:::-;26265:25;;26424:1;26356:66;26352:74;26349:1;26346:81;26343:107;;;26430:18;;:::i;:::-;26343:107;26474:1;26471;26467:9;26460:16;;26177:305;;;;:::o;26488:185::-;26528:1;26545:20;26563:1;26545:20;:::i;:::-;26540:25;;26579:20;26597:1;26579:20;:::i;:::-;26574:25;;26618:1;26608:35;;26623:18;;:::i;:::-;26608:35;26665:1;26662;26658:9;26653:14;;26488:185;;;;:::o;26679:848::-;26740:5;26747:4;26771:6;26762:15;;26795:5;26786:14;;26809:712;26830:1;26820:8;26817:15;26809:712;;;26925:4;26920:3;26916:14;26910:4;26907:24;26904:50;;;26934:18;;:::i;:::-;26904:50;26984:1;26974:8;26970:16;26967:451;;;27399:4;27392:5;27388:16;27379:25;;26967:451;27449:4;27443;27439:15;27431:23;;27479:32;27502:8;27479:32;:::i;:::-;27467:44;;26809:712;;;26679:848;;;;;;;:::o;27533:281::-;27591:5;27615:23;27633:4;27615:23;:::i;:::-;27607:31;;27659:25;27675:8;27659:25;:::i;:::-;27647:37;;27703:104;27740:66;27730:8;27724:4;27703:104;:::i;:::-;27694:113;;27533:281;;;;:::o;27820:1073::-;27874:5;28065:8;28055:40;;28086:1;28077:10;;28088:5;;28055:40;28114:4;28104:36;;28131:1;28122:10;;28133:5;;28104:36;28200:4;28248:1;28243:27;;;;28284:1;28279:191;;;;28193:277;;28243:27;28261:1;28252:10;;28263:5;;;28279:191;28324:3;28314:8;28311:17;28308:43;;;28331:18;;:::i;:::-;28308:43;28380:8;28377:1;28373:16;28364:25;;28415:3;28408:5;28405:14;28402:40;;;28422:18;;:::i;:::-;28402:40;28455:5;;;28193:277;;28579:2;28569:8;28566:16;28560:3;28554:4;28551:13;28547:36;28529:2;28519:8;28516:16;28511:2;28505:4;28502:12;28498:35;28482:111;28479:246;;;28635:8;28629:4;28625:19;28616:28;;28670:3;28663:5;28660:14;28657:40;;;28677:18;;:::i;:::-;28657:40;28710:5;;28479:246;28750:42;28788:3;28778:8;28772:4;28769:1;28750:42;:::i;:::-;28735:57;;;;28824:4;28819:3;28815:14;28808:5;28805:25;28802:51;;;28833:18;;:::i;:::-;28802:51;28882:4;28875:5;28871:16;28862:25;;27820:1073;;;;;;:::o;28899:348::-;28939:7;28962:20;28980:1;28962:20;:::i;:::-;28957:25;;28996:20;29014:1;28996:20;:::i;:::-;28991:25;;29184:1;29116:66;29112:74;29109:1;29106:81;29101:1;29094:9;29087:17;29083:105;29080:131;;;29191:18;;:::i;:::-;29080:131;29239:1;29236;29232:9;29221:20;;28899:348;;;;:::o;29253:527::-;29292:4;29312:19;29329:1;29312:19;:::i;:::-;29307:24;;29345:19;29362:1;29345:19;:::i;:::-;29340:24;;29534:1;29466:66;29462:74;29459:1;29455:82;29450:1;29447;29443:9;29436:17;29432:106;29429:132;;;29541:18;;:::i;:::-;29429:132;29720:1;29652:66;29648:74;29645:1;29641:82;29637:1;29634;29630:9;29626:98;29623:124;;;29727:18;;:::i;:::-;29623:124;29772:1;29769;29765:9;29757:17;;29253:527;;;;:::o;29786:191::-;29826:4;29846:20;29864:1;29846:20;:::i;:::-;29841:25;;29880:20;29898:1;29880:20;:::i;:::-;29875:25;;29919:1;29916;29913:8;29910:34;;;29924:18;;:::i;:::-;29910:34;29969:1;29966;29962:9;29954:17;;29786:191;;;;:::o;29983:96::-;30020:7;30049:24;30067:5;30049:24;:::i;:::-;30038:35;;29983:96;;;:::o;30085:90::-;30119:7;30162:5;30155:13;30148:21;30137:32;;30085:90;;;:::o;30181:76::-;30217:7;30246:5;30235:16;;30181:76;;;:::o;30263:126::-;30300:7;30340:42;30333:5;30329:54;30318:65;;30263:126;;;:::o;30395:77::-;30432:7;30461:5;30450:16;;30395:77;;;:::o;30478:86::-;30513:7;30553:4;30546:5;30542:16;30531:27;;30478:86;;;:::o;30570:307::-;30638:1;30648:113;30662:6;30659:1;30656:13;30648:113;;;30747:1;30742:3;30738:11;30732:18;30728:1;30723:3;30719:11;30712:39;30684:2;30681:1;30677:10;30672:15;;30648:113;;;30779:6;30776:1;30773:13;30770:101;;;30859:1;30850:6;30845:3;30841:16;30834:27;30770:101;30619:258;30570:307;;;:::o;30883:320::-;30927:6;30964:1;30958:4;30954:12;30944:22;;31011:1;31005:4;31001:12;31032:18;31022:81;;31088:4;31080:6;31076:17;31066:27;;31022:81;31150:2;31142:6;31139:14;31119:18;31116:38;31113:84;;;31169:18;;:::i;:::-;31113:84;30934:269;30883:320;;;:::o;31209:180::-;31257:77;31254:1;31247:88;31354:4;31351:1;31344:15;31378:4;31375:1;31368:15;31395:180;31443:77;31440:1;31433:88;31540:4;31537:1;31530:15;31564:4;31561:1;31554:15;31581:180;31629:77;31626:1;31619:88;31726:4;31723:1;31716:15;31750:4;31747:1;31740:15;31890:117;31999:1;31996;31989:12;32013:102;32054:6;32105:2;32101:7;32096:2;32089:5;32085:14;32081:28;32071:38;;32013:102;;;:::o;32121:::-;32163:8;32210:5;32207:1;32203:13;32182:34;;32121:102;;;:::o;32229:168::-;32369:20;32365:1;32357:6;32353:14;32346:44;32229:168;:::o;32403:222::-;32543:34;32539:1;32531:6;32527:14;32520:58;32612:5;32607:2;32599:6;32595:15;32588:30;32403:222;:::o;32631:221::-;32771:34;32767:1;32759:6;32755:14;32748:58;32840:4;32835:2;32827:6;32823:15;32816:29;32631:221;:::o;32858:225::-;32998:34;32994:1;32986:6;32982:14;32975:58;33067:8;33062:2;33054:6;33050:15;33043:33;32858:225;:::o;33089:221::-;33229:34;33225:1;33217:6;33213:14;33206:58;33298:4;33293:2;33285:6;33281:15;33274:29;33089:221;:::o;33316:179::-;33456:31;33452:1;33444:6;33440:14;33433:55;33316:179;:::o;33501:::-;33641:31;33637:1;33629:6;33625:14;33618:55;33501:179;:::o;33686:167::-;33826:19;33822:1;33814:6;33810:14;33803:43;33686:167;:::o;33859:225::-;33999:34;33995:1;33987:6;33983:14;33976:58;34068:8;34063:2;34055:6;34051:15;34044:33;33859:225;:::o;34090:182::-;34230:34;34226:1;34218:6;34214:14;34207:58;34090:182;:::o;34278:171::-;34418:23;34414:1;34406:6;34402:14;34395:47;34278:171;:::o;34455:166::-;34595:18;34591:1;34583:6;34579:14;34572:42;34455:166;:::o;34627:158::-;34767:10;34763:1;34755:6;34751:14;34744:34;34627:158;:::o;34791:227::-;34931:34;34927:1;34919:6;34915:14;34908:58;35000:10;34995:2;34987:6;34983:15;34976:35;34791:227;:::o;35024:182::-;35164:34;35160:1;35152:6;35148:14;35141:58;35024:182;:::o;35212:220::-;35352:34;35348:1;35340:6;35336:14;35329:58;35421:3;35416:2;35408:6;35404:15;35397:28;35212:220;:::o;35438:224::-;35578:34;35574:1;35566:6;35562:14;35555:58;35647:7;35642:2;35634:6;35630:15;35623:32;35438:224;:::o;35668:181::-;35808:33;35804:1;35796:6;35792:14;35785:57;35668:181;:::o;35855:223::-;35995:34;35991:1;35983:6;35979:14;35972:58;36064:6;36059:2;36051:6;36047:15;36040:31;35855:223;:::o;36084:224::-;36224:34;36220:1;36212:6;36208:14;36201:58;36293:7;36288:2;36280:6;36276:15;36269:32;36084:224;:::o;36314:179::-;36454:31;36450:1;36442:6;36438:14;36431:55;36314:179;:::o;36499:181::-;36639:33;36635:1;36627:6;36623:14;36616:57;36499:181;:::o;36686:122::-;36759:24;36777:5;36759:24;:::i;:::-;36752:5;36749:35;36739:63;;36798:1;36795;36788:12;36739:63;36686:122;:::o;36814:::-;36887:24;36905:5;36887:24;:::i;:::-;36880:5;36877:35;36867:63;;36926:1;36923;36916:12;36867:63;36814:122;:::o

Swarm Source

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