ETH Price: $3,401.53 (-1.25%)
Gas: 4 Gwei

Token

JayPeggers (JAY)
 

Overview

Max Total Supply

31,999.725986229751166152 JAY

Holders

210

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
JAY

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-19
*/

// Sources flattened with hardhat v2.9.1 https://hardhat.org

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


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

    /**
     * @dev Returns the subtraction 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;
        }
    }
}


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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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

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


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


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

pragma solidity ^0.8.0;

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

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


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


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

pragma solidity ^0.8.0;



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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


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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}


// File @chainlink/contracts/src/v0.8/interfaces/[email protected]


pragma solidity ^0.8.0;

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}


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


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

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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


// File contracts/JAY.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;



interface IERC721 {
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
}

interface IERC1155 {
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;
}

contract JAY is ERC20, Ownable {
    using SafeMath for uint256;
    AggregatorV3Interface internal priceFeed;

    address private dev;
    uint256 public constant MIN = 1000;
    bool private start = false;
    bool private lockDev = false;

    uint256 private nftsBought;
    uint256 private nftsSold;

    uint256 private buyNftFeeEth = 0.01 * 10**18;
    uint256 private buyNftFeeJay = 10 * 10**18;

    uint256 private sellNftFeeEth = 0.001 * 10**18;

    uint256 private constant USD_PRICE_SELL = 2 * 10**18;
    uint256 private constant USD_PRICE_BUY = 10 * 10**18;

    uint256 private nextFeeUpdate = block.timestamp.add(7 days);

    event Price(uint256 time, uint256 price);

    constructor() payable ERC20("JayPeggers", "JAY") {
        require(msg.value == 2 * 10**18);
        dev = msg.sender;
        _mint(msg.sender, 2 * 10**18 * MIN);
        emit Price(block.timestamp, JAYtoETH(1 * 10**18));
        priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); //main
    }

    function updateDevWallet(address _address) public onlyOwner {
        require(lockDev == false);
        dev = _address;
    }
    function lockDevWallet() public onlyOwner {
        lockDev = true;
    }

    function startJay() public onlyOwner {
        start = true;
    }

    // Buy NFTs from Vault
    function buyNFTs(
        address[] calldata erc721TokenAddress,
        uint256[] calldata erc721Ids,
        address[] calldata erc1155TokenAddress,
        uint256[] calldata erc1155Ids,
        uint256[] calldata erc1155Amounts
    ) public payable {
        uint256 total = erc721TokenAddress.length;
        if (total != 0) buyERC721(erc721TokenAddress, erc721Ids);

        if (erc1155TokenAddress.length != 0)
            total = total.add(
                buyERC1155(erc1155TokenAddress, erc1155Ids, erc1155Amounts)
            );

        require(
            msg.value >= (total).mul(buyNftFeeEth),
            "You need to pay ETH more"
        );
        (bool success, ) = dev.call{value: msg.value.div(2)}("");
        require(success, "ETH Transfer failed.");
        _burn(msg.sender, total.mul(buyNftFeeJay));
        nftsBought += total;

        emit Price(block.timestamp, JAYtoETH(1 * 10**18));
    }

    function buyERC721(address[] calldata _tokenAddress, uint256[] calldata ids)
        internal
    {
        for (uint256 id = 0; id < ids.length; id++) {
            IERC721(_tokenAddress[id]).safeTransferFrom(
                address(this),
                msg.sender,
                ids[id]
            );
        }
    }

    function buyERC1155(
        address[] calldata _tokenAddress,
        uint256[] calldata ids,
        uint256[] calldata amounts
    ) internal returns (uint256) {
        uint256 amount = 0;
        for (uint256 id = 0; id < ids.length; id++) {
            amount = amount.add(amounts[id]);
            IERC1155(_tokenAddress[id]).safeTransferFrom(
                address(this),
                msg.sender,
                ids[id],
                amounts[id],
                ""
            );
        }
        return amount;
    }

    // Sell NFTs (Buy Jay)
    function buyJay(
        address[] calldata erc721TokenAddress,
        uint256[] calldata erc721Ids,
        address[] calldata erc1155TokenAddress,
        uint256[] calldata erc1155Ids,
        uint256[] calldata erc1155Amounts
    ) public payable {
        require(start, "Not started!");
        uint256 total = erc721TokenAddress.length;
        if (total != 0) buyJayWithERC721(erc721TokenAddress, erc721Ids);

        if (erc1155TokenAddress.length != 0)
            total = total.add(
                buyJayWithERC1155(
                    erc1155TokenAddress,
                    erc1155Ids,
                    erc1155Amounts
                )
            );

        if (total >= 100)
            require(
                msg.value >= (total).mul(sellNftFeeEth).div(2),
                "You need to pay ETH more"
            );
        else
            require(
                msg.value >= (total).mul(sellNftFeeEth),
                "You need to pay ETH more"
            );

        _mint(msg.sender, ETHtoJAY(msg.value).mul(97).div(100));

        (bool success, ) = dev.call{value: msg.value.div(34)}("");
        require(success, "ETH Transfer failed.");

        nftsSold += total;

        emit Price(block.timestamp, JAYtoETH(1 * 10**18));
    }

    function buyJayWithERC721(
        address[] calldata _tokenAddress,
        uint256[] calldata ids
    ) internal {
        for (uint256 id = 0; id < ids.length; id++) {
            IERC721(_tokenAddress[id]).transferFrom(
                msg.sender,
                address(this),
                ids[id]
            );
        }
    }

    function buyJayWithERC1155(
        address[] calldata _tokenAddress,
        uint256[] calldata ids,
        uint256[] calldata amounts
    ) internal returns (uint256) {
        uint256 amount = 0;
        for (uint256 id = 0; id < ids.length; id++) {
            amount = amount.add(amounts[id]);
            IERC1155(_tokenAddress[id]).safeTransferFrom(
                msg.sender,
                address(this),
                ids[id],
                amounts[id],
                ""
            );
        }
        return amount;
    }

    // Sell Jay
    function sell(uint256 value) public {
        require(value > MIN, "Dude tf");

        uint256 eth = JAYtoETH(value);
        _burn(msg.sender, value);

        (bool success, ) = msg.sender.call{value: eth.mul(90).div(100)}("");
        require(success, "ETH Transfer failed.");
        (bool success2, ) = dev.call{value: eth.div(33)}("");
        require(success2, "ETH Transfer failed.");

        emit Price(block.timestamp, JAYtoETH(1 * 10**18));
    }

    // Buy Jay (No NFT)
    function buyJayNoNFT() public payable {
        require(msg.value > MIN, "must trade over min");
        require(start, "Not started!");

        _mint(msg.sender, ETHtoJAY(msg.value).mul(85).div(100));

        (bool success, ) = dev.call{value: msg.value.div(20)}("");
        require(success, "ETH Transfer failed.");

        emit Price(block.timestamp, JAYtoETH(1 * 10**18));
    }

    //utils
    function getBuyJayNoNFT(uint256 amount) public view returns (uint256) {
        return
            amount.mul(totalSupply()).div(address(this).balance).mul(85).div(
                100
            );
    }

    function getBuyJayNFT(uint256 amount) public view returns (uint256) {
        return
            amount.mul(totalSupply()).div(address(this).balance).mul(97).div(
                100
            );
    }

    function JAYtoETH(uint256 value) public view returns (uint256) {
        return (value * address(this).balance).div(totalSupply());
    }

    function ETHtoJAY(uint256 value) public view returns (uint256) {
        return value.mul(totalSupply()).div(address(this).balance.sub(value));
    }

    // chainlink pricefeed / fee updater
    function getFees()
        public
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return (sellNftFeeEth, buyNftFeeEth, buyNftFeeJay, nextFeeUpdate);
    }

    function getTotals()
        public
        view
        returns (
            uint256,
            uint256
        )
    {
        return (nftsBought, nftsSold);
    }


    function updateFees()
        public
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint80 roundID,
            int256 price,
            uint256 startedAt,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        uint256 _price = uint256(price).mul(1 * 10**10);
        require(
            timeStamp > nextFeeUpdate,
            "Fee update every 24 hrs"
        );

        uint256 _sellNftFeeEth;
        if (_price > USD_PRICE_SELL) {
            uint256 _p = _price.div(USD_PRICE_SELL);
            _sellNftFeeEth = uint256(1 * 10**18).div(_p);
        } else {
            _sellNftFeeEth = USD_PRICE_SELL.div(_price);
        }

        require(
            owner() == msg.sender ||
                (sellNftFeeEth.div(2) < _sellNftFeeEth &&
                    sellNftFeeEth.mul(150) > _sellNftFeeEth),
            "Fee swing too high"
        );

        sellNftFeeEth = _sellNftFeeEth;

        if (_price > USD_PRICE_BUY) {
            uint256 _p = _price.div(USD_PRICE_BUY);
            buyNftFeeEth = uint256(1 * 10**18).div(_p);
        } else {
            buyNftFeeEth = USD_PRICE_BUY.div(_price);
        }
        buyNftFeeJay = ETHtoJAY(buyNftFeeEth);

        nextFeeUpdate = timeStamp.add(24 hours);
        return (sellNftFeeEth, buyNftFeeEth, buyNftFeeJay, nextFeeUpdate);
    }

    function getLatestPrice() public view returns (int256) {
        (
            uint80 roundID,
            int256 price,
            uint256 startedAt,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        return price;
    }

    //receiver helpers
    function deposit() public payable {}

    receive() external payable {}

    fallback() external payable {}

    function onERC1155Received(
        address,
        address from,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external pure returns (bytes4) {
        return IERC1155Receiver.onERC1155Received.selector;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Price","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"ETHtoJAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"JAYtoETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"erc721TokenAddress","type":"address[]"},{"internalType":"uint256[]","name":"erc721Ids","type":"uint256[]"},{"internalType":"address[]","name":"erc1155TokenAddress","type":"address[]"},{"internalType":"uint256[]","name":"erc1155Ids","type":"uint256[]"},{"internalType":"uint256[]","name":"erc1155Amounts","type":"uint256[]"}],"name":"buyJay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyJayNoNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"erc721TokenAddress","type":"address[]"},{"internalType":"uint256[]","name":"erc721Ids","type":"uint256[]"},{"internalType":"address[]","name":"erc1155TokenAddress","type":"address[]"},{"internalType":"uint256[]","name":"erc1155Ids","type":"uint256[]"},{"internalType":"uint256[]","name":"erc1155Amounts","type":"uint256[]"}],"name":"buyNFTs","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyJayNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyJayNoNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"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":[],"name":"getLatestPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotals","outputs":[{"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":"lockDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startJay","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff021916908315150217905550662386f26fc10000600a55678ac7230489e80000600b5566038d7ea4c68000600c556200007962093a80426200026960201b62001ac91790919060201c565b600d556040518060400160405280600a81526020017f4a617950656767657273000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4a4159000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010092919062000533565b5080600490805190602001906200011992919062000533565b5050506200013c620001306200028160201b60201c565b6200028960201b60201c565b671bc16d674ec8000034146200015157600080fd5b33600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001bb336103e8671bc16d674ec80000620001af91906200072d565b6200034f60201b60201c565b7fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a42620001f6670de0b6b3a7640000620004c860201b60201c565b604051620002069291906200065a565b60405180910390a1735f4ec3df9cbd43714fe2740f5e3616155c5b8419600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000884565b6000818362000279919062000698565b905092915050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b9906200061b565b60405180910390fd5b620003d6600083836200050760201b60201c565b8060026000828254620003ea919062000698565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000441919062000698565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004a891906200063d565b60405180910390a3620004c4600083836200050c60201b60201c565b5050565b600062000500620004de6200051160201b60201c565b4784620004ec91906200072d565b6200051b60201b62001adf1790919060201c565b9050919050565b505050565b505050565b6000600254905090565b600081836200052b9190620006f5565b905092915050565b828054620005419062000798565b90600052602060002090601f016020900481019282620005655760008555620005b1565b82601f106200058057805160ff1916838001178555620005b1565b82800160010185558215620005b1579182015b82811115620005b057825182559160200191906001019062000593565b5b509050620005c09190620005c4565b5090565b5b80821115620005df576000816000905550600101620005c5565b5090565b6000620005f2601f8362000687565b9150620005ff826200085b565b602082019050919050565b62000615816200078e565b82525050565b600060208201905081810360008301526200063681620005e3565b9050919050565b60006020820190506200065460008301846200060a565b92915050565b60006040820190506200067160008301856200060a565b6200068060208301846200060a565b9392505050565b600082825260208201905092915050565b6000620006a5826200078e565b9150620006b2836200078e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006ea57620006e9620007ce565b5b828201905092915050565b600062000702826200078e565b91506200070f836200078e565b925082620007225762000721620007fd565b5b828204905092915050565b60006200073a826200078e565b915062000747836200078e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007835762000782620007ce565b5b828202905092915050565b6000819050919050565b60006002820490506001821680620007b157607f821691505b60208210811415620007c857620007c76200082c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613d7c80620008946000396000f3fe6080604052600436106101e75760003560e01c80638e15f47311610102578063dd62ed3e11610095578063f4a4493211610064578063f4a44932146106ce578063f5755747146106e5578063fc9fc6c714610722578063fea449f714610750576101ee565b8063dd62ed3e14610602578063e4849b321461063f578063f23a6e6114610668578063f2fde38b146106a5576101ee565b8063adb866e8116100d1578063adb866e814610583578063bcca665f146105c0578063d0e30db0146105ca578063db8d55f1146105d4576101ee565b80638e15f473146104b357806395d89b41146104de578063a457c2d714610509578063a9059cbb14610546576101ee565b8063395093511161017a57806370a082311161014957806370a0823114610408578063715018a61461044557806384e10a901461045c5780638da5cb5b14610488576101ee565b8063395093511461037c5780633db7e04e146103b95780634ef26f6a146103d0578063666566e8146103ec576101ee565b80631816467f116101b65780631816467f146102c057806323b872dd146102e9578063313ce5671461032657806337a7f2b714610351576101ee565b806306fdde03146101f0578063095ea7b31461021b57806316c1f0cf1461025857806318160ddd14610295576101ee565b366101ee57005b005b3480156101fc57600080fd5b5061020561078d565b60405161021291906131de565b60405180910390f35b34801561022757600080fd5b50610242600480360381019061023d9190612b57565b61081f565b60405161024f919061318d565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612cb4565b610842565b60405161028c9190613460565b60405180910390f35b3480156102a157600080fd5b506102aa61089d565b6040516102b79190613460565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e291906129fd565b6108a7565b005b3480156102f557600080fd5b50610310600480360381019061030b9190612a6a565b610913565b60405161031d919061318d565b60405180910390f35b34801561033257600080fd5b5061033b610942565b60405161034891906134e9565b60405180910390f35b34801561035d57600080fd5b5061036661094b565b6040516103739190613460565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612b57565b610951565b6040516103b0919061318d565b60405180910390f35b3480156103c557600080fd5b506103ce610988565b005b6103ea60048036038101906103e59190612b97565b6109ad565b005b61040660048036038101906104019190612b97565b610bbe565b005b34801561041457600080fd5b5061042f600480360381019061042a91906129fd565b610eb0565b60405161043c9190613460565b60405180910390f35b34801561045157600080fd5b5061045a610ef8565b005b34801561046857600080fd5b50610471610f0c565b60405161047f92919061347b565b60405180910390f35b34801561049457600080fd5b5061049d610f1d565b6040516104aa91906130e3565b60405180910390f35b3480156104bf57600080fd5b506104c8610f47565b6040516104d591906131c3565b60405180910390f35b3480156104ea57600080fd5b506104f3611005565b60405161050091906131de565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190612b57565b611097565b60405161053d919061318d565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612b57565b61110e565b60405161057a919061318d565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612cb4565b611131565b6040516105b79190613460565b60405180910390f35b6105c861118c565b005b6105d2611384565b005b3480156105e057600080fd5b506105e9611386565b6040516105f994939291906134a4565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190612a2a565b6113a6565b6040516106369190613460565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190612cb4565b61142d565b005b34801561067457600080fd5b5061068f600480360381019061068a9190612abd565b61168a565b60405161069c91906131a8565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906129fd565b6116a0565b005b3480156106da57600080fd5b506106e3611724565b005b3480156106f157600080fd5b5061070c60048036038101906107079190612cb4565b611749565b6040516107199190613460565b60405180910390f35b34801561072e57600080fd5b50610737611790565b60405161074794939291906134a4565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190612cb4565b611a9b565b6040516107849190613460565b60405180910390f35b60606003805461079c90613725565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890613725565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b5050505050905090565b60008061082a611af5565b9050610837818585611afd565b600191505092915050565b60006108966064610888606161087a4761086c61085d61089d565b89611cc890919063ffffffff16565b611adf90919063ffffffff16565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b9050919050565b6000600254905090565b6108af611cde565b60001515600760159054906101000a900460ff161515146108cf57600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061091e611af5565b905061092b858285611d5c565b610936858585611de8565b60019150509392505050565b60006012905090565b6103e881565b60008061095c611af5565b905061097d81858561096e85896113a6565b610978919061353c565b611afd565b600191505092915050565b610990611cde565b6001600760156101000a81548160ff021916908315150217905550565b60008a8a90509050600081146109ca576109c98b8b8b8b612069565b5b600087879050146109f8576109f56109e6888888888888612140565b82611ac990919063ffffffff16565b90505b610a0d600a5482611cc890919063ffffffff16565b341015610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a46906132a0565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a9e600234611adf90919063ffffffff16565b604051610aaa906130ce565b60006040518083038185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b5050905080610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613300565b60405180910390fd5b610b4e33610b49600b5485611cc890919063ffffffff16565b61226f565b8160086000828254610b60919061353c565b925050819055507fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a42610b9a670de0b6b3a7640000611a9b565b604051610ba892919061347b565b60405180910390a1505050505050505050505050565b600760149054906101000a900460ff16610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0490613360565b60405180910390fd5b60008a8a9050905060008114610c2a57610c298b8b8b8b612446565b5b60008787905014610c5857610c55610c4688888888888861251d565b82611ac990919063ffffffff16565b90505b60648110610ccf57610c886002610c7a600c5484611cc890919063ffffffff16565b611adf90919063ffffffff16565b341015610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc1906132a0565b60405180910390fd5b610d27565b610ce4600c5482611cc890919063ffffffff16565b341015610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d906132a0565b60405180910390fd5b5b610d5f33610d5a6064610d4c6061610d3e34611749565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b61264c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610dae602234611adf90919063ffffffff16565b604051610dba906130ce565b60006040518083038185875af1925050503d8060008114610df7576040519150601f19603f3d011682016040523d82523d6000602084013e610dfc565b606091505b5050905080610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613300565b60405180910390fd5b8160096000828254610e52919061353c565b925050819055507fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a42610e8c670de0b6b3a7640000611a9b565b604051610e9a92919061347b565b60405180910390a1505050505050505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f00611cde565b610f0a60006127ac565b565b600080600854600954915091509091565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015610fb857600080fd5b505afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff09190612ce1565b94509450945094509450839550505050505090565b60606004805461101490613725565b80601f016020809104026020016040519081016040528092919081815260200182805461104090613725565b801561108d5780601f106110625761010080835404028352916020019161108d565b820191906000526020600020905b81548152906001019060200180831161107057829003601f168201915b5050505050905090565b6000806110a2611af5565b905060006110b082866113a6565b9050838110156110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec90613420565b60405180910390fd5b6111028286868403611afd565b60019250505092915050565b600080611119611af5565b9050611126818585611de8565b600191505092915050565b6000611185606461117760556111694761115b61114c61089d565b89611cc890919063ffffffff16565b611adf90919063ffffffff16565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b9050919050565b6103e834116111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790613400565b60405180910390fd5b600760149054906101000a900460ff1661121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613360565b60405180910390fd5b611257336112526064611244605561123634611749565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b61264c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112a6601434611adf90919063ffffffff16565b6040516112b2906130ce565b60006040518083038185875af1925050503d80600081146112ef576040519150601f19603f3d011682016040523d82523d6000602084013e6112f4565b606091505b5050905080611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613300565b60405180910390fd5b7fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a4261136b670de0b6b3a7640000611a9b565b60405161137992919061347b565b60405180910390a150565b565b600080600080600c54600a54600b54600d54935093509350935090919293565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6103e88111611471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611468906133a0565b60405180910390fd5b600061147c82611a9b565b9050611488338361226f565b60003373ffffffffffffffffffffffffffffffffffffffff166114c860646114ba605a86611cc890919063ffffffff16565b611adf90919063ffffffff16565b6040516114d4906130ce565b60006040518083038185875af1925050503d8060008114611511576040519150601f19603f3d011682016040523d82523d6000602084013e611516565b606091505b505090508061155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613300565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115a9602185611adf90919063ffffffff16565b6040516115b5906130ce565b60006040518083038185875af1925050503d80600081146115f2576040519150601f19603f3d011682016040523d82523d6000602084013e6115f7565b606091505b505090508061163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613300565b60405180910390fd5b7fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a4261166e670de0b6b3a7640000611a9b565b60405161167c92919061347b565b60405180910390a150505050565b600063f23a6e6160e01b90509695505050505050565b6116a8611cde565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613260565b60405180910390fd5b611721816127ac565b50565b61172c611cde565b6001600760146101000a81548160ff021916908315150217905550565b6000611789611761834761287290919063ffffffff16565b61177b61176c61089d565b85611cc890919063ffffffff16565b611adf90919063ffffffff16565b9050919050565b6000806000806000806000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561180657600080fd5b505afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612ce1565b9450945094509450945060006118626402540be40086611cc890919063ffffffff16565b9050600d5483116118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613320565b60405180910390fd5b6000671bc16d674ec800008211156118fc5760006118d7671bc16d674ec8000084611adf90919063ffffffff16565b90506118f481670de0b6b3a7640000611adf90919063ffffffff16565b91505061191a565b61191782671bc16d674ec80000611adf90919063ffffffff16565b90505b3373ffffffffffffffffffffffffffffffffffffffff16611939610f1d565b73ffffffffffffffffffffffffffffffffffffffff16148061198f57508061196d6002600c54611adf90919063ffffffff16565b10801561198e57508061198c6096600c54611cc890919063ffffffff16565b115b5b6119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590613220565b60405180910390fd5b80600c81905550678ac7230489e80000821115611a2b576000611a02678ac7230489e8000084611adf90919063ffffffff16565b9050611a1f81670de0b6b3a7640000611adf90919063ffffffff16565b600a8190555050611a4d565b611a4682678ac7230489e80000611adf90919063ffffffff16565b600a819055505b611a58600a54611749565b600b81905550611a746201518085611ac990919063ffffffff16565b600d81905550600c54600a54600b54600d549a509a509a509a505050505050505090919293565b6000611ac2611aa861089d565b4784611ab491906135c3565b611adf90919063ffffffff16565b9050919050565b60008183611ad7919061353c565b905092915050565b60008183611aed9190613592565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b64906133e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613280565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cbb9190613460565b60405180910390a3505050565b60008183611cd691906135c3565b905092915050565b611ce6611af5565b73ffffffffffffffffffffffffffffffffffffffff16611d04610f1d565b73ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613340565b60405180910390fd5b565b6000611d6884846113a6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611de25781811015611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb906132c0565b60405180910390fd5b611de18484848403611afd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906133c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90613200565b60405180910390fd5b611ed3838383612888565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f50906132e0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fec919061353c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120509190613460565b60405180910390a361206384848461288d565b50505050565b60005b828290508110156121395784848281811061208a5761208961382d565b5b905060200201602081019061209f91906129fd565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e30338686868181106120cf576120ce61382d565b5b905060200201356040518463ffffffff1660e01b81526004016120f4939291906130fe565b600060405180830381600087803b15801561210e57600080fd5b505af1158015612122573d6000803e3d6000fd5b50505050808061213190613757565b91505061206c565b5050505050565b6000806000905060005b868690508110156122605761218185858381811061216b5761216a61382d565b5b9050602002013583611ac990919063ffffffff16565b91508888828181106121965761219561382d565b5b90506020020160208101906121ab91906129fd565b73ffffffffffffffffffffffffffffffffffffffff1663f242432a30338a8a868181106121db576121da61382d565b5b905060200201358989878181106121f5576121f461382d565b5b905060200201356040518563ffffffff1660e01b815260040161221b9493929190613135565b600060405180830381600087803b15801561223557600080fd5b505af1158015612249573d6000803e3d6000fd5b50505050808061225890613757565b91505061214a565b50809150509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690613380565b60405180910390fd5b6122eb82600083612888565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890613240565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546123c8919061361d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161242d9190613460565b60405180910390a36124418360008461288d565b505050565b60005b82829050811015612516578484828181106124675761246661382d565b5b905060200201602081019061247c91906129fd565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33308686868181106124ac576124ab61382d565b5b905060200201356040518463ffffffff1660e01b81526004016124d1939291906130fe565b600060405180830381600087803b1580156124eb57600080fd5b505af11580156124ff573d6000803e3d6000fd5b50505050808061250e90613757565b915050612449565b5050505050565b6000806000905060005b8686905081101561263d5761255e8585838181106125485761254761382d565b5b9050602002013583611ac990919063ffffffff16565b91508888828181106125735761257261382d565b5b905060200201602081019061258891906129fd565b73ffffffffffffffffffffffffffffffffffffffff1663f242432a33308a8a868181106125b8576125b761382d565b5b905060200201358989878181106125d2576125d161382d565b5b905060200201356040518563ffffffff1660e01b81526004016125f89493929190613135565b600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050808061263590613757565b915050612527565b50809150509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390613440565b60405180910390fd5b6126c860008383612888565b80600260008282546126da919061353c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461272f919061353c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127949190613460565b60405180910390a36127a86000838361288d565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612880919061361d565b905092915050565b505050565b505050565b6000813590506128a181613cea565b92915050565b60008083601f8401126128bd576128bc613861565b5b8235905067ffffffffffffffff8111156128da576128d961385c565b5b6020830191508360208202830111156128f6576128f5613866565b5b9250929050565b60008083601f84011261291357612912613861565b5b8235905067ffffffffffffffff8111156129305761292f61385c565b5b60208301915083602082028301111561294c5761294b613866565b5b9250929050565b60008083601f84011261296957612968613861565b5b8235905067ffffffffffffffff8111156129865761298561385c565b5b6020830191508360018202830111156129a2576129a1613866565b5b9250929050565b6000815190506129b881613d01565b92915050565b6000813590506129cd81613d18565b92915050565b6000815190506129e281613d18565b92915050565b6000815190506129f781613d2f565b92915050565b600060208284031215612a1357612a12613870565b5b6000612a2184828501612892565b91505092915050565b60008060408385031215612a4157612a40613870565b5b6000612a4f85828601612892565b9250506020612a6085828601612892565b9150509250929050565b600080600060608486031215612a8357612a82613870565b5b6000612a9186828701612892565b9350506020612aa286828701612892565b9250506040612ab3868287016129be565b9150509250925092565b60008060008060008060a08789031215612ada57612ad9613870565b5b6000612ae889828a01612892565b9650506020612af989828a01612892565b9550506040612b0a89828a016129be565b9450506060612b1b89828a016129be565b935050608087013567ffffffffffffffff811115612b3c57612b3b61386b565b5b612b4889828a01612953565b92509250509295509295509295565b60008060408385031215612b6e57612b6d613870565b5b6000612b7c85828601612892565b9250506020612b8d858286016129be565b9150509250929050565b60008060008060008060008060008060a08b8d031215612bba57612bb9613870565b5b60008b013567ffffffffffffffff811115612bd857612bd761386b565b5b612be48d828e016128a7565b9a509a505060208b013567ffffffffffffffff811115612c0757612c0661386b565b5b612c138d828e016128fd565b985098505060408b013567ffffffffffffffff811115612c3657612c3561386b565b5b612c428d828e016128a7565b965096505060608b013567ffffffffffffffff811115612c6557612c6461386b565b5b612c718d828e016128fd565b945094505060808b013567ffffffffffffffff811115612c9457612c9361386b565b5b612ca08d828e016128fd565b92509250509295989b9194979a5092959850565b600060208284031215612cca57612cc9613870565b5b6000612cd8848285016129be565b91505092915050565b600080600080600060a08688031215612cfd57612cfc613870565b5b6000612d0b888289016129e8565b9550506020612d1c888289016129a9565b9450506040612d2d888289016129d3565b9350506060612d3e888289016129d3565b9250506080612d4f888289016129e8565b9150509295509295909350565b612d6581613651565b82525050565b612d7481613663565b82525050565b612d838161366f565b82525050565b612d928161369b565b82525050565b6000612da382613504565b612dad818561352b565b9350612dbd8185602086016136f2565b612dc681613875565b840191505092915050565b6000612dde60238361352b565b9150612de982613886565b604082019050919050565b6000612e0160128361352b565b9150612e0c826138d5565b602082019050919050565b6000612e2460228361352b565b9150612e2f826138fe565b604082019050919050565b6000612e4760268361352b565b9150612e528261394d565b604082019050919050565b6000612e6a60228361352b565b9150612e758261399c565b604082019050919050565b6000612e8d60188361352b565b9150612e98826139eb565b602082019050919050565b6000612eb0601d8361352b565b9150612ebb82613a14565b602082019050919050565b6000612ed360268361352b565b9150612ede82613a3d565b604082019050919050565b6000612ef660148361352b565b9150612f0182613a8c565b602082019050919050565b6000612f1960178361352b565b9150612f2482613ab5565b602082019050919050565b6000612f3c60208361352b565b9150612f4782613ade565b602082019050919050565b6000612f5f600c8361352b565b9150612f6a82613b07565b602082019050919050565b6000612f8260218361352b565b9150612f8d82613b30565b604082019050919050565b6000612fa560078361352b565b9150612fb082613b7f565b602082019050919050565b6000612fc860258361352b565b9150612fd382613ba8565b604082019050919050565b6000612feb60008361350f565b9150612ff682613bf7565b600082019050919050565b600061300e600083613520565b915061301982613bf7565b600082019050919050565b600061303160248361352b565b915061303c82613bfa565b604082019050919050565b600061305460138361352b565b915061305f82613c49565b602082019050919050565b600061307760258361352b565b915061308282613c72565b604082019050919050565b600061309a601f8361352b565b91506130a582613cc1565b602082019050919050565b6130b9816136c5565b82525050565b6130c8816136cf565b82525050565b60006130d982613001565b9150819050919050565b60006020820190506130f86000830184612d5c565b92915050565b60006060820190506131136000830186612d5c565b6131206020830185612d5c565b61312d60408301846130b0565b949350505050565b600060a08201905061314a6000830187612d5c565b6131576020830186612d5c565b61316460408301856130b0565b61317160608301846130b0565b818103608083015261318281612fde565b905095945050505050565b60006020820190506131a26000830184612d6b565b92915050565b60006020820190506131bd6000830184612d7a565b92915050565b60006020820190506131d86000830184612d89565b92915050565b600060208201905081810360008301526131f88184612d98565b905092915050565b6000602082019050818103600083015261321981612dd1565b9050919050565b6000602082019050818103600083015261323981612df4565b9050919050565b6000602082019050818103600083015261325981612e17565b9050919050565b6000602082019050818103600083015261327981612e3a565b9050919050565b6000602082019050818103600083015261329981612e5d565b9050919050565b600060208201905081810360008301526132b981612e80565b9050919050565b600060208201905081810360008301526132d981612ea3565b9050919050565b600060208201905081810360008301526132f981612ec6565b9050919050565b6000602082019050818103600083015261331981612ee9565b9050919050565b6000602082019050818103600083015261333981612f0c565b9050919050565b6000602082019050818103600083015261335981612f2f565b9050919050565b6000602082019050818103600083015261337981612f52565b9050919050565b6000602082019050818103600083015261339981612f75565b9050919050565b600060208201905081810360008301526133b981612f98565b9050919050565b600060208201905081810360008301526133d981612fbb565b9050919050565b600060208201905081810360008301526133f981613024565b9050919050565b6000602082019050818103600083015261341981613047565b9050919050565b600060208201905081810360008301526134398161306a565b9050919050565b600060208201905081810360008301526134598161308d565b9050919050565b600060208201905061347560008301846130b0565b92915050565b600060408201905061349060008301856130b0565b61349d60208301846130b0565b9392505050565b60006080820190506134b960008301876130b0565b6134c660208301866130b0565b6134d360408301856130b0565b6134e060608301846130b0565b95945050505050565b60006020820190506134fe60008301846130bf565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613547826136c5565b9150613552836136c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613587576135866137a0565b5b828201905092915050565b600061359d826136c5565b91506135a8836136c5565b9250826135b8576135b76137cf565b5b828204905092915050565b60006135ce826136c5565b91506135d9836136c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613612576136116137a0565b5b828202905092915050565b6000613628826136c5565b9150613633836136c5565b925082821015613646576136456137a0565b5b828203905092915050565b600061365c826136a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b60005b838110156137105780820151818401526020810190506136f5565b8381111561371f576000848401525b50505050565b6000600282049050600182168061373d57607f821691505b60208210811415613751576137506137fe565b5b50919050565b6000613762826136c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613795576137946137a0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f466565207377696e6720746f6f20686967680000000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f2070617920455448206d6f72650000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f455448205472616e73666572206661696c65642e000000000000000000000000600082015250565b7f4665652075706461746520657665727920323420687273000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742073746172746564210000000000000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4475646520746600000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d757374207472616465206f766572206d696e00000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613cf381613651565b8114613cfe57600080fd5b50565b613d0a8161369b565b8114613d1557600080fd5b50565b613d21816136c5565b8114613d2c57600080fd5b50565b613d38816136dc565b8114613d4357600080fd5b5056fea2646970667358221220986c1275073fa016f9ea7d4c767cf954a6d45fbc866ef194760014dd823f6bfa64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80638e15f47311610102578063dd62ed3e11610095578063f4a4493211610064578063f4a44932146106ce578063f5755747146106e5578063fc9fc6c714610722578063fea449f714610750576101ee565b8063dd62ed3e14610602578063e4849b321461063f578063f23a6e6114610668578063f2fde38b146106a5576101ee565b8063adb866e8116100d1578063adb866e814610583578063bcca665f146105c0578063d0e30db0146105ca578063db8d55f1146105d4576101ee565b80638e15f473146104b357806395d89b41146104de578063a457c2d714610509578063a9059cbb14610546576101ee565b8063395093511161017a57806370a082311161014957806370a0823114610408578063715018a61461044557806384e10a901461045c5780638da5cb5b14610488576101ee565b8063395093511461037c5780633db7e04e146103b95780634ef26f6a146103d0578063666566e8146103ec576101ee565b80631816467f116101b65780631816467f146102c057806323b872dd146102e9578063313ce5671461032657806337a7f2b714610351576101ee565b806306fdde03146101f0578063095ea7b31461021b57806316c1f0cf1461025857806318160ddd14610295576101ee565b366101ee57005b005b3480156101fc57600080fd5b5061020561078d565b60405161021291906131de565b60405180910390f35b34801561022757600080fd5b50610242600480360381019061023d9190612b57565b61081f565b60405161024f919061318d565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612cb4565b610842565b60405161028c9190613460565b60405180910390f35b3480156102a157600080fd5b506102aa61089d565b6040516102b79190613460565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e291906129fd565b6108a7565b005b3480156102f557600080fd5b50610310600480360381019061030b9190612a6a565b610913565b60405161031d919061318d565b60405180910390f35b34801561033257600080fd5b5061033b610942565b60405161034891906134e9565b60405180910390f35b34801561035d57600080fd5b5061036661094b565b6040516103739190613460565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612b57565b610951565b6040516103b0919061318d565b60405180910390f35b3480156103c557600080fd5b506103ce610988565b005b6103ea60048036038101906103e59190612b97565b6109ad565b005b61040660048036038101906104019190612b97565b610bbe565b005b34801561041457600080fd5b5061042f600480360381019061042a91906129fd565b610eb0565b60405161043c9190613460565b60405180910390f35b34801561045157600080fd5b5061045a610ef8565b005b34801561046857600080fd5b50610471610f0c565b60405161047f92919061347b565b60405180910390f35b34801561049457600080fd5b5061049d610f1d565b6040516104aa91906130e3565b60405180910390f35b3480156104bf57600080fd5b506104c8610f47565b6040516104d591906131c3565b60405180910390f35b3480156104ea57600080fd5b506104f3611005565b60405161050091906131de565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190612b57565b611097565b60405161053d919061318d565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612b57565b61110e565b60405161057a919061318d565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612cb4565b611131565b6040516105b79190613460565b60405180910390f35b6105c861118c565b005b6105d2611384565b005b3480156105e057600080fd5b506105e9611386565b6040516105f994939291906134a4565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190612a2a565b6113a6565b6040516106369190613460565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190612cb4565b61142d565b005b34801561067457600080fd5b5061068f600480360381019061068a9190612abd565b61168a565b60405161069c91906131a8565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906129fd565b6116a0565b005b3480156106da57600080fd5b506106e3611724565b005b3480156106f157600080fd5b5061070c60048036038101906107079190612cb4565b611749565b6040516107199190613460565b60405180910390f35b34801561072e57600080fd5b50610737611790565b60405161074794939291906134a4565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190612cb4565b611a9b565b6040516107849190613460565b60405180910390f35b60606003805461079c90613725565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890613725565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b5050505050905090565b60008061082a611af5565b9050610837818585611afd565b600191505092915050565b60006108966064610888606161087a4761086c61085d61089d565b89611cc890919063ffffffff16565b611adf90919063ffffffff16565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b9050919050565b6000600254905090565b6108af611cde565b60001515600760159054906101000a900460ff161515146108cf57600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061091e611af5565b905061092b858285611d5c565b610936858585611de8565b60019150509392505050565b60006012905090565b6103e881565b60008061095c611af5565b905061097d81858561096e85896113a6565b610978919061353c565b611afd565b600191505092915050565b610990611cde565b6001600760156101000a81548160ff021916908315150217905550565b60008a8a90509050600081146109ca576109c98b8b8b8b612069565b5b600087879050146109f8576109f56109e6888888888888612140565b82611ac990919063ffffffff16565b90505b610a0d600a5482611cc890919063ffffffff16565b341015610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a46906132a0565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a9e600234611adf90919063ffffffff16565b604051610aaa906130ce565b60006040518083038185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b5050905080610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613300565b60405180910390fd5b610b4e33610b49600b5485611cc890919063ffffffff16565b61226f565b8160086000828254610b60919061353c565b925050819055507fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a42610b9a670de0b6b3a7640000611a9b565b604051610ba892919061347b565b60405180910390a1505050505050505050505050565b600760149054906101000a900460ff16610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0490613360565b60405180910390fd5b60008a8a9050905060008114610c2a57610c298b8b8b8b612446565b5b60008787905014610c5857610c55610c4688888888888861251d565b82611ac990919063ffffffff16565b90505b60648110610ccf57610c886002610c7a600c5484611cc890919063ffffffff16565b611adf90919063ffffffff16565b341015610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc1906132a0565b60405180910390fd5b610d27565b610ce4600c5482611cc890919063ffffffff16565b341015610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d906132a0565b60405180910390fd5b5b610d5f33610d5a6064610d4c6061610d3e34611749565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b61264c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610dae602234611adf90919063ffffffff16565b604051610dba906130ce565b60006040518083038185875af1925050503d8060008114610df7576040519150601f19603f3d011682016040523d82523d6000602084013e610dfc565b606091505b5050905080610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613300565b60405180910390fd5b8160096000828254610e52919061353c565b925050819055507fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a42610e8c670de0b6b3a7640000611a9b565b604051610e9a92919061347b565b60405180910390a1505050505050505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f00611cde565b610f0a60006127ac565b565b600080600854600954915091509091565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015610fb857600080fd5b505afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff09190612ce1565b94509450945094509450839550505050505090565b60606004805461101490613725565b80601f016020809104026020016040519081016040528092919081815260200182805461104090613725565b801561108d5780601f106110625761010080835404028352916020019161108d565b820191906000526020600020905b81548152906001019060200180831161107057829003601f168201915b5050505050905090565b6000806110a2611af5565b905060006110b082866113a6565b9050838110156110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec90613420565b60405180910390fd5b6111028286868403611afd565b60019250505092915050565b600080611119611af5565b9050611126818585611de8565b600191505092915050565b6000611185606461117760556111694761115b61114c61089d565b89611cc890919063ffffffff16565b611adf90919063ffffffff16565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b9050919050565b6103e834116111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790613400565b60405180910390fd5b600760149054906101000a900460ff1661121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613360565b60405180910390fd5b611257336112526064611244605561123634611749565b611cc890919063ffffffff16565b611adf90919063ffffffff16565b61264c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112a6601434611adf90919063ffffffff16565b6040516112b2906130ce565b60006040518083038185875af1925050503d80600081146112ef576040519150601f19603f3d011682016040523d82523d6000602084013e6112f4565b606091505b5050905080611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613300565b60405180910390fd5b7fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a4261136b670de0b6b3a7640000611a9b565b60405161137992919061347b565b60405180910390a150565b565b600080600080600c54600a54600b54600d54935093509350935090919293565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6103e88111611471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611468906133a0565b60405180910390fd5b600061147c82611a9b565b9050611488338361226f565b60003373ffffffffffffffffffffffffffffffffffffffff166114c860646114ba605a86611cc890919063ffffffff16565b611adf90919063ffffffff16565b6040516114d4906130ce565b60006040518083038185875af1925050503d8060008114611511576040519150601f19603f3d011682016040523d82523d6000602084013e611516565b606091505b505090508061155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613300565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115a9602185611adf90919063ffffffff16565b6040516115b5906130ce565b60006040518083038185875af1925050503d80600081146115f2576040519150601f19603f3d011682016040523d82523d6000602084013e6115f7565b606091505b505090508061163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613300565b60405180910390fd5b7fd1353c68e79ef70de84ee90d2facf845ec24895116d4a03505aa41785af71f5a4261166e670de0b6b3a7640000611a9b565b60405161167c92919061347b565b60405180910390a150505050565b600063f23a6e6160e01b90509695505050505050565b6116a8611cde565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613260565b60405180910390fd5b611721816127ac565b50565b61172c611cde565b6001600760146101000a81548160ff021916908315150217905550565b6000611789611761834761287290919063ffffffff16565b61177b61176c61089d565b85611cc890919063ffffffff16565b611adf90919063ffffffff16565b9050919050565b6000806000806000806000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561180657600080fd5b505afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612ce1565b9450945094509450945060006118626402540be40086611cc890919063ffffffff16565b9050600d5483116118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613320565b60405180910390fd5b6000671bc16d674ec800008211156118fc5760006118d7671bc16d674ec8000084611adf90919063ffffffff16565b90506118f481670de0b6b3a7640000611adf90919063ffffffff16565b91505061191a565b61191782671bc16d674ec80000611adf90919063ffffffff16565b90505b3373ffffffffffffffffffffffffffffffffffffffff16611939610f1d565b73ffffffffffffffffffffffffffffffffffffffff16148061198f57508061196d6002600c54611adf90919063ffffffff16565b10801561198e57508061198c6096600c54611cc890919063ffffffff16565b115b5b6119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590613220565b60405180910390fd5b80600c81905550678ac7230489e80000821115611a2b576000611a02678ac7230489e8000084611adf90919063ffffffff16565b9050611a1f81670de0b6b3a7640000611adf90919063ffffffff16565b600a8190555050611a4d565b611a4682678ac7230489e80000611adf90919063ffffffff16565b600a819055505b611a58600a54611749565b600b81905550611a746201518085611ac990919063ffffffff16565b600d81905550600c54600a54600b54600d549a509a509a509a505050505050505090919293565b6000611ac2611aa861089d565b4784611ab491906135c3565b611adf90919063ffffffff16565b9050919050565b60008183611ad7919061353c565b905092915050565b60008183611aed9190613592565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b64906133e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613280565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cbb9190613460565b60405180910390a3505050565b60008183611cd691906135c3565b905092915050565b611ce6611af5565b73ffffffffffffffffffffffffffffffffffffffff16611d04610f1d565b73ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613340565b60405180910390fd5b565b6000611d6884846113a6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611de25781811015611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb906132c0565b60405180910390fd5b611de18484848403611afd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906133c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90613200565b60405180910390fd5b611ed3838383612888565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f50906132e0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fec919061353c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120509190613460565b60405180910390a361206384848461288d565b50505050565b60005b828290508110156121395784848281811061208a5761208961382d565b5b905060200201602081019061209f91906129fd565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e30338686868181106120cf576120ce61382d565b5b905060200201356040518463ffffffff1660e01b81526004016120f4939291906130fe565b600060405180830381600087803b15801561210e57600080fd5b505af1158015612122573d6000803e3d6000fd5b50505050808061213190613757565b91505061206c565b5050505050565b6000806000905060005b868690508110156122605761218185858381811061216b5761216a61382d565b5b9050602002013583611ac990919063ffffffff16565b91508888828181106121965761219561382d565b5b90506020020160208101906121ab91906129fd565b73ffffffffffffffffffffffffffffffffffffffff1663f242432a30338a8a868181106121db576121da61382d565b5b905060200201358989878181106121f5576121f461382d565b5b905060200201356040518563ffffffff1660e01b815260040161221b9493929190613135565b600060405180830381600087803b15801561223557600080fd5b505af1158015612249573d6000803e3d6000fd5b50505050808061225890613757565b91505061214a565b50809150509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690613380565b60405180910390fd5b6122eb82600083612888565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890613240565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546123c8919061361d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161242d9190613460565b60405180910390a36124418360008461288d565b505050565b60005b82829050811015612516578484828181106124675761246661382d565b5b905060200201602081019061247c91906129fd565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd33308686868181106124ac576124ab61382d565b5b905060200201356040518463ffffffff1660e01b81526004016124d1939291906130fe565b600060405180830381600087803b1580156124eb57600080fd5b505af11580156124ff573d6000803e3d6000fd5b50505050808061250e90613757565b915050612449565b5050505050565b6000806000905060005b8686905081101561263d5761255e8585838181106125485761254761382d565b5b9050602002013583611ac990919063ffffffff16565b91508888828181106125735761257261382d565b5b905060200201602081019061258891906129fd565b73ffffffffffffffffffffffffffffffffffffffff1663f242432a33308a8a868181106125b8576125b761382d565b5b905060200201358989878181106125d2576125d161382d565b5b905060200201356040518563ffffffff1660e01b81526004016125f89493929190613135565b600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050808061263590613757565b915050612527565b50809150509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390613440565b60405180910390fd5b6126c860008383612888565b80600260008282546126da919061353c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461272f919061353c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127949190613460565b60405180910390a36127a86000838361288d565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612880919061361d565b905092915050565b505050565b505050565b6000813590506128a181613cea565b92915050565b60008083601f8401126128bd576128bc613861565b5b8235905067ffffffffffffffff8111156128da576128d961385c565b5b6020830191508360208202830111156128f6576128f5613866565b5b9250929050565b60008083601f84011261291357612912613861565b5b8235905067ffffffffffffffff8111156129305761292f61385c565b5b60208301915083602082028301111561294c5761294b613866565b5b9250929050565b60008083601f84011261296957612968613861565b5b8235905067ffffffffffffffff8111156129865761298561385c565b5b6020830191508360018202830111156129a2576129a1613866565b5b9250929050565b6000815190506129b881613d01565b92915050565b6000813590506129cd81613d18565b92915050565b6000815190506129e281613d18565b92915050565b6000815190506129f781613d2f565b92915050565b600060208284031215612a1357612a12613870565b5b6000612a2184828501612892565b91505092915050565b60008060408385031215612a4157612a40613870565b5b6000612a4f85828601612892565b9250506020612a6085828601612892565b9150509250929050565b600080600060608486031215612a8357612a82613870565b5b6000612a9186828701612892565b9350506020612aa286828701612892565b9250506040612ab3868287016129be565b9150509250925092565b60008060008060008060a08789031215612ada57612ad9613870565b5b6000612ae889828a01612892565b9650506020612af989828a01612892565b9550506040612b0a89828a016129be565b9450506060612b1b89828a016129be565b935050608087013567ffffffffffffffff811115612b3c57612b3b61386b565b5b612b4889828a01612953565b92509250509295509295509295565b60008060408385031215612b6e57612b6d613870565b5b6000612b7c85828601612892565b9250506020612b8d858286016129be565b9150509250929050565b60008060008060008060008060008060a08b8d031215612bba57612bb9613870565b5b60008b013567ffffffffffffffff811115612bd857612bd761386b565b5b612be48d828e016128a7565b9a509a505060208b013567ffffffffffffffff811115612c0757612c0661386b565b5b612c138d828e016128fd565b985098505060408b013567ffffffffffffffff811115612c3657612c3561386b565b5b612c428d828e016128a7565b965096505060608b013567ffffffffffffffff811115612c6557612c6461386b565b5b612c718d828e016128fd565b945094505060808b013567ffffffffffffffff811115612c9457612c9361386b565b5b612ca08d828e016128fd565b92509250509295989b9194979a5092959850565b600060208284031215612cca57612cc9613870565b5b6000612cd8848285016129be565b91505092915050565b600080600080600060a08688031215612cfd57612cfc613870565b5b6000612d0b888289016129e8565b9550506020612d1c888289016129a9565b9450506040612d2d888289016129d3565b9350506060612d3e888289016129d3565b9250506080612d4f888289016129e8565b9150509295509295909350565b612d6581613651565b82525050565b612d7481613663565b82525050565b612d838161366f565b82525050565b612d928161369b565b82525050565b6000612da382613504565b612dad818561352b565b9350612dbd8185602086016136f2565b612dc681613875565b840191505092915050565b6000612dde60238361352b565b9150612de982613886565b604082019050919050565b6000612e0160128361352b565b9150612e0c826138d5565b602082019050919050565b6000612e2460228361352b565b9150612e2f826138fe565b604082019050919050565b6000612e4760268361352b565b9150612e528261394d565b604082019050919050565b6000612e6a60228361352b565b9150612e758261399c565b604082019050919050565b6000612e8d60188361352b565b9150612e98826139eb565b602082019050919050565b6000612eb0601d8361352b565b9150612ebb82613a14565b602082019050919050565b6000612ed360268361352b565b9150612ede82613a3d565b604082019050919050565b6000612ef660148361352b565b9150612f0182613a8c565b602082019050919050565b6000612f1960178361352b565b9150612f2482613ab5565b602082019050919050565b6000612f3c60208361352b565b9150612f4782613ade565b602082019050919050565b6000612f5f600c8361352b565b9150612f6a82613b07565b602082019050919050565b6000612f8260218361352b565b9150612f8d82613b30565b604082019050919050565b6000612fa560078361352b565b9150612fb082613b7f565b602082019050919050565b6000612fc860258361352b565b9150612fd382613ba8565b604082019050919050565b6000612feb60008361350f565b9150612ff682613bf7565b600082019050919050565b600061300e600083613520565b915061301982613bf7565b600082019050919050565b600061303160248361352b565b915061303c82613bfa565b604082019050919050565b600061305460138361352b565b915061305f82613c49565b602082019050919050565b600061307760258361352b565b915061308282613c72565b604082019050919050565b600061309a601f8361352b565b91506130a582613cc1565b602082019050919050565b6130b9816136c5565b82525050565b6130c8816136cf565b82525050565b60006130d982613001565b9150819050919050565b60006020820190506130f86000830184612d5c565b92915050565b60006060820190506131136000830186612d5c565b6131206020830185612d5c565b61312d60408301846130b0565b949350505050565b600060a08201905061314a6000830187612d5c565b6131576020830186612d5c565b61316460408301856130b0565b61317160608301846130b0565b818103608083015261318281612fde565b905095945050505050565b60006020820190506131a26000830184612d6b565b92915050565b60006020820190506131bd6000830184612d7a565b92915050565b60006020820190506131d86000830184612d89565b92915050565b600060208201905081810360008301526131f88184612d98565b905092915050565b6000602082019050818103600083015261321981612dd1565b9050919050565b6000602082019050818103600083015261323981612df4565b9050919050565b6000602082019050818103600083015261325981612e17565b9050919050565b6000602082019050818103600083015261327981612e3a565b9050919050565b6000602082019050818103600083015261329981612e5d565b9050919050565b600060208201905081810360008301526132b981612e80565b9050919050565b600060208201905081810360008301526132d981612ea3565b9050919050565b600060208201905081810360008301526132f981612ec6565b9050919050565b6000602082019050818103600083015261331981612ee9565b9050919050565b6000602082019050818103600083015261333981612f0c565b9050919050565b6000602082019050818103600083015261335981612f2f565b9050919050565b6000602082019050818103600083015261337981612f52565b9050919050565b6000602082019050818103600083015261339981612f75565b9050919050565b600060208201905081810360008301526133b981612f98565b9050919050565b600060208201905081810360008301526133d981612fbb565b9050919050565b600060208201905081810360008301526133f981613024565b9050919050565b6000602082019050818103600083015261341981613047565b9050919050565b600060208201905081810360008301526134398161306a565b9050919050565b600060208201905081810360008301526134598161308d565b9050919050565b600060208201905061347560008301846130b0565b92915050565b600060408201905061349060008301856130b0565b61349d60208301846130b0565b9392505050565b60006080820190506134b960008301876130b0565b6134c660208301866130b0565b6134d360408301856130b0565b6134e060608301846130b0565b95945050505050565b60006020820190506134fe60008301846130bf565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613547826136c5565b9150613552836136c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613587576135866137a0565b5b828201905092915050565b600061359d826136c5565b91506135a8836136c5565b9250826135b8576135b76137cf565b5b828204905092915050565b60006135ce826136c5565b91506135d9836136c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613612576136116137a0565b5b828202905092915050565b6000613628826136c5565b9150613633836136c5565b925082821015613646576136456137a0565b5b828203905092915050565b600061365c826136a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b60005b838110156137105780820151818401526020810190506136f5565b8381111561371f576000848401525b50505050565b6000600282049050600182168061373d57607f821691505b60208210811415613751576137506137fe565b5b50919050565b6000613762826136c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613795576137946137a0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f466565207377696e6720746f6f20686967680000000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f2070617920455448206d6f72650000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f455448205472616e73666572206661696c65642e000000000000000000000000600082015250565b7f4665652075706461746520657665727920323420687273000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742073746172746564210000000000000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4475646520746600000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d757374207472616465206f766572206d696e00000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613cf381613651565b8114613cfe57600080fd5b50565b613d0a8161369b565b8114613d1557600080fd5b50565b613d21816136c5565b8114613d2c57600080fd5b50565b613d38816136dc565b8114613d4357600080fd5b5056fea2646970667358221220986c1275073fa016f9ea7d4c767cf954a6d45fbc866ef194760014dd823f6bfa64736f6c63430008070033

Deployed Bytecode Sourcemap

32290:9876:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13793:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16144:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38945:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14913:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33343:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16925:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14755:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32436:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17629:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33478:75;;;;;;;;;;;;;:::i;:::-;;33665:947;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35551:1306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15084:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30924:103;;;;;;;;;;;;;:::i;:::-;;39772:177;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30276:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41466:295;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14012:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18370:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15417:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38727:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38310:396;;;:::i;:::-;;41793:36;;;:::i;:::-;;39509:255;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15673:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37806:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41912:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31182:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33561:68;;;;;;;;;;;;;:::i;:::-;;39308:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39959:1499;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39161:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13793:100;13847:13;13880:5;13873:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13793:100;:::o;16144:201::-;16227:4;16244:13;16260:12;:10;:12::i;:::-;16244:28;;16283:32;16292:5;16299:7;16308:6;16283:8;:32::i;:::-;16333:4;16326:11;;;16144:201;;;;:::o;38945:208::-;39004:7;39044:101;39127:3;39044:60;39101:2;39044:52;39074:21;39044:25;39055:13;:11;:13::i;:::-;39044:6;:10;;:25;;;;:::i;:::-;:29;;:52;;;;:::i;:::-;:56;;:60;;;;:::i;:::-;:64;;:101;;;;:::i;:::-;39024:121;;38945:208;;;:::o;14913:108::-;14974:7;15001:12;;14994:19;;14913:108;:::o;33343:129::-;30162:13;:11;:13::i;:::-;33433:5:::1;33422:16;;:7;;;;;;;;;;;:16;;;33414:25;;;::::0;::::1;;33456:8;33450:3;;:14;;;;;;;;;;;;;;;;;;33343:129:::0;:::o;16925:295::-;17056:4;17073:15;17091:12;:10;:12::i;:::-;17073:30;;17114:38;17130:4;17136:7;17145:6;17114:15;:38::i;:::-;17163:27;17173:4;17179:2;17183:6;17163:9;:27::i;:::-;17208:4;17201:11;;;16925:295;;;;;:::o;14755:93::-;14813:5;14838:2;14831:9;;14755:93;:::o;32436:34::-;32466:4;32436:34;:::o;17629:238::-;17717:4;17734:13;17750:12;:10;:12::i;:::-;17734:28;;17773:64;17782:5;17789:7;17826:10;17798:25;17808:5;17815:7;17798:9;:25::i;:::-;:38;;;;:::i;:::-;17773:8;:64::i;:::-;17855:4;17848:11;;;17629:238;;;;:::o;33478:75::-;30162:13;:11;:13::i;:::-;33541:4:::1;33531:7;;:14;;;;;;;;;;;;;;;;;;33478:75::o:0;33665:947::-;33935:13;33951:18;;:25;;33935:41;;34000:1;33991:5;:10;33987:56;;34003:40;34013:18;;34033:9;;34003;:40::i;:::-;33987:56;34090:1;34060:19;;:26;;:31;34056:160;;34114:102;34142:59;34153:19;;34174:10;;34186:14;;34142:10;:59::i;:::-;34114:5;:9;;:102;;;;:::i;:::-;34106:110;;34056:160;34264:25;34276:12;;34265:5;34264:11;;:25;;;;:::i;:::-;34251:9;:38;;34229:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;34353:12;34371:3;;;;;;;;;;;:8;;34387:16;34401:1;34387:9;:13;;:16;;;;:::i;:::-;34371:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34352:56;;;34427:7;34419:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;34470:42;34476:10;34488:23;34498:12;;34488:5;:9;;:23;;;;:::i;:::-;34470:5;:42::i;:::-;34537:5;34523:10;;:19;;;;;;;:::i;:::-;;;;;;;;34560:44;34566:15;34583:20;34592:10;34583:8;:20::i;:::-;34560:44;;;;;;;:::i;:::-;;;;;;;;33924:688;;33665:947;;;;;;;;;;:::o;35551:1306::-;35828:5;;;;;;;;;;;35820:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;35861:13;35877:18;;:25;;35861:41;;35926:1;35917:5;:10;35913:63;;35929:47;35946:18;;35966:9;;35929:16;:47::i;:::-;35913:63;36023:1;35993:19;;:26;;:31;35989:249;;36047:191;36075:148;36115:19;;36157:10;;36190:14;;36075:17;:148::i;:::-;36047:5;:9;;:191;;;;:::i;:::-;36039:199;;35989:249;36264:3;36255:5;:12;36251:317;;36321:33;36352:1;36321:26;36333:13;;36322:5;36321:11;;:26;;;;:::i;:::-;:30;;:33;;;;:::i;:::-;36308:9;:46;;36282:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;36251:317;;;36482:26;36494:13;;36483:5;36482:11;;:26;;;;:::i;:::-;36469:9;:39;;36443:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;36251:317;36581:55;36587:10;36599:36;36631:3;36599:27;36623:2;36599:19;36608:9;36599:8;:19::i;:::-;:23;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;36581:5;:55::i;:::-;36650:12;36668:3;;;;;;;;;;;:8;;36684:17;36698:2;36684:9;:13;;:17;;;;:::i;:::-;36668:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36649:57;;;36725:7;36717:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;36782:5;36770:8;;:17;;;;;;;:::i;:::-;;;;;;;;36805:44;36811:15;36828:20;36837:10;36828:8;:20::i;:::-;36805:44;;;;;;;:::i;:::-;;;;;;;;35809:1048;;35551:1306;;;;;;;;;;:::o;15084:127::-;15158:7;15185:9;:18;15195:7;15185:18;;;;;;;;;;;;;;;;15178:25;;15084:127;;;:::o;30924:103::-;30162:13;:11;:13::i;:::-;30989:30:::1;31016:1;30989:18;:30::i;:::-;30924:103::o:0;39772:177::-;39855:7;39877;39920:10;;39932:8;;39912:29;;;;39772:177;;:::o;30276:87::-;30322:7;30349:6;;;;;;;;;;;30342:13;;30276:87;:::o;41466:295::-;41513:6;41547:14;41576:12;41603:17;41635;41667:22;41703:9;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41532:198;;;;;;;;;;41748:5;41741:12;;;;;;;41466:295;:::o;14012:104::-;14068:13;14101:7;14094:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14012:104;:::o;18370:436::-;18463:4;18480:13;18496:12;:10;:12::i;:::-;18480:28;;18519:24;18546:25;18556:5;18563:7;18546:9;:25::i;:::-;18519:52;;18610:15;18590:16;:35;;18582:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18703:60;18712:5;18719:7;18747:15;18728:16;:34;18703:8;:60::i;:::-;18794:4;18787:11;;;;18370:436;;;;:::o;15417:193::-;15496:4;15513:13;15529:12;:10;:12::i;:::-;15513:28;;15552;15562:5;15569:2;15573:6;15552:9;:28::i;:::-;15598:4;15591:11;;;15417:193;;;;:::o;38727:210::-;38788:7;38828:101;38911:3;38828:60;38885:2;38828:52;38858:21;38828:25;38839:13;:11;:13::i;:::-;38828:6;:10;;:25;;;;:::i;:::-;:29;;:52;;;;:::i;:::-;:56;;:60;;;;:::i;:::-;:64;;:101;;;;:::i;:::-;38808:121;;38727:210;;;:::o;38310:396::-;32466:4;38367:9;:15;38359:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;38425:5;;;;;;;;;;;38417:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;38460:55;38466:10;38478:36;38510:3;38478:27;38502:2;38478:19;38487:9;38478:8;:19::i;:::-;:23;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;38460:5;:55::i;:::-;38529:12;38547:3;;;;;;;;;;;:8;;38563:17;38577:2;38563:9;:13;;:17;;;;:::i;:::-;38547:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38528:57;;;38604:7;38596:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;38654:44;38660:15;38677:20;38686:10;38677:8;:20::i;:::-;38654:44;;;;;;;:::i;:::-;;;;;;;;38348:358;38310:396::o;41793:36::-;:::o;39509:255::-;39590:7;39612;39634;39656;39699:13;;39714:12;;39728;;39742:13;;39691:65;;;;;;;;39509:255;;;;:::o;15673:151::-;15762:7;15789:11;:18;15801:5;15789:18;;;;;;;;;;;;;;;:27;15808:7;15789:27;;;;;;;;;;;;;;;;15782:34;;15673:151;;;;:::o;37806:471::-;32466:4;37861:5;:11;37853:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;37897:11;37911:15;37920:5;37911:8;:15::i;:::-;37897:29;;37937:24;37943:10;37955:5;37937;:24::i;:::-;37975:12;37993:10;:15;;38016:20;38032:3;38016:11;38024:2;38016:3;:7;;:11;;;;:::i;:::-;:15;;:20;;;;:::i;:::-;37993:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37974:67;;;38060:7;38052:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;38104:13;38123:3;;;;;;;;;;;:8;;38139:11;38147:2;38139:3;:7;;:11;;;;:::i;:::-;38123:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38103:52;;;38174:8;38166:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;38225:44;38231:15;38248:20;38257:10;38248:8;:20::i;:::-;38225:44;;;;;;;:::i;:::-;;;;;;;;37842:435;;;37806:471;:::o;41912:251::-;42086:6;42112:43;;;42105:50;;41912:251;;;;;;;;:::o;31182:201::-;30162:13;:11;:13::i;:::-;31291:1:::1;31271:22;;:8;:22;;;;31263:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31347:28;31366:8;31347:18;:28::i;:::-;31182:201:::0;:::o;33561:68::-;30162:13;:11;:13::i;:::-;33617:4:::1;33609:5;;:12;;;;;;;;;;;;;;;;;;33561:68::o:0;39308:151::-;39362:7;39389:62;39418:32;39444:5;39418:21;:25;;:32;;;;:::i;:::-;39389:24;39399:13;:11;:13::i;:::-;39389:5;:9;;:24;;;;:::i;:::-;:28;;:62;;;;:::i;:::-;39382:69;;39308:151;;;:::o;39959:1499::-;40029:7;40051;40073;40095;40145:14;40174:12;40201:17;40233;40265:22;40301:9;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40130:198;;;;;;;;;;40339:14;40356:30;40375:10;40364:5;40356:18;;:30;;;;:::i;:::-;40339:47;;40431:13;;40419:9;:25;40397:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;40508:22;32812:10;40545:6;:23;40541:230;;;40585:10;40598:26;32812:10;40598:6;:10;;:26;;;;:::i;:::-;40585:39;;40656:27;40680:2;40664:10;40656:23;;:27;;;;:::i;:::-;40639:44;;40570:125;40541:230;;;40733:26;40752:6;32812:10;40733:18;;:26;;;;:::i;:::-;40716:43;;40541:230;40816:10;40805:21;;:7;:5;:7::i;:::-;:21;;;:145;;;;40871:14;40848:20;40866:1;40848:13;;:17;;:20;;;;:::i;:::-;:37;:101;;;;;40935:14;40910:22;40928:3;40910:13;;:17;;:22;;;;:::i;:::-;:39;40848:101;40805:145;40783:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;41025:14;41009:13;:30;;;;32870:11;41056:6;:22;41052:223;;;41095:10;41108:25;32870:11;41108:6;:10;;:25;;;;:::i;:::-;41095:38;;41163:27;41187:2;41171:10;41163:23;;:27;;;;:::i;:::-;41148:12;:42;;;;41080:122;41052:223;;;41238:25;41256:6;32870:11;41238:17;;:25;;;;:::i;:::-;41223:12;:40;;;;41052:223;41300:22;41309:12;;41300:8;:22::i;:::-;41285:12;:37;;;;41351:23;41365:8;41351:9;:13;;:23;;;;:::i;:::-;41335:13;:39;;;;41393:13;;41408:12;;41422;;41436:13;;41385:65;;;;;;;;;;;;;;;39959:1499;;;;:::o;39161:139::-;39215:7;39242:50;39278:13;:11;:13::i;:::-;39251:21;39243:5;:29;;;;:::i;:::-;39242:35;;:50;;;;:::i;:::-;39235:57;;39161:139;;;:::o;2947:98::-;3005:7;3036:1;3032;:5;;;;:::i;:::-;3025:12;;2947:98;;;;:::o;4084:::-;4142:7;4173:1;4169;:5;;;;:::i;:::-;4162:12;;4084:98;;;;:::o;11427:::-;11480:7;11507:10;11500:17;;11427:98;:::o;21995:380::-;22148:1;22131:19;;:5;:19;;;;22123:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22229:1;22210:21;;:7;:21;;;;22202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22313:6;22283:11;:18;22295:5;22283:18;;;;;;;;;;;;;;;:27;22302:7;22283:27;;;;;;;;;;;;;;;:36;;;;22351:7;22335:32;;22344:5;22335:32;;;22360:6;22335:32;;;;;;:::i;:::-;;;;;;;;21995:380;;;:::o;3685:98::-;3743:7;3774:1;3770;:5;;;;:::i;:::-;3763:12;;3685:98;;;;:::o;30441:132::-;30516:12;:10;:12::i;:::-;30505:23;;:7;:5;:7::i;:::-;:23;;;30497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30441:132::o;22666:453::-;22801:24;22828:25;22838:5;22845:7;22828:9;:25::i;:::-;22801:52;;22888:17;22868:16;:37;22864:248;;22950:6;22930:16;:26;;22922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23034:51;23043:5;23050:7;23078:6;23059:16;:25;23034:8;:51::i;:::-;22864:248;22790:329;22666:453;;;:::o;19276:671::-;19423:1;19407:18;;:4;:18;;;;19399:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19500:1;19486:16;;:2;:16;;;;19478:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19555:38;19576:4;19582:2;19586:6;19555:20;:38::i;:::-;19606:19;19628:9;:15;19638:4;19628:15;;;;;;;;;;;;;;;;19606:37;;19677:6;19662:11;:21;;19654:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;19794:6;19780:11;:20;19762:9;:15;19772:4;19762:15;;;;;;;;;;;;;;;:38;;;;19839:6;19822:9;:13;19832:2;19822:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;19878:2;19863:26;;19872:4;19863:26;;;19882:6;19863:26;;;;;;:::i;:::-;;;;;;;;19902:37;19922:4;19928:2;19932:6;19902:19;:37::i;:::-;19388:559;19276:671;;;:::o;34620:334::-;34736:10;34731:216;34757:3;;:10;;34752:2;:15;34731:216;;;34798:13;;34812:2;34798:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34790:43;;;34860:4;34884:10;34913:3;;34917:2;34913:7;;;;;;;:::i;:::-;;;;;;;;34790:145;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34769:4;;;;;:::i;:::-;;;;34731:216;;;;34620:334;;;;:::o;34962:553::-;35120:7;35140:14;35157:1;35140:18;;35174:10;35169:315;35195:3;;:10;;35190:2;:15;35169:315;;;35237:23;35248:7;;35256:2;35248:11;;;;;;;:::i;:::-;;;;;;;;35237:6;:10;;:23;;;;:::i;:::-;35228:32;;35284:13;;35298:2;35284:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35275:44;;;35346:4;35370:10;35399:3;;35403:2;35399:7;;;;;;;:::i;:::-;;;;;;;;35425;;35433:2;35425:11;;;;;;;:::i;:::-;;;;;;;;35275:197;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35207:4;;;;;:::i;:::-;;;;35169:315;;;;35501:6;35494:13;;;34962:553;;;;;;;;:::o;20966:591::-;21069:1;21050:21;;:7;:21;;;;21042:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21122:49;21143:7;21160:1;21164:6;21122:20;:49::i;:::-;21184:22;21209:9;:18;21219:7;21209:18;;;;;;;;;;;;;;;;21184:43;;21264:6;21246:14;:24;;21238:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21383:6;21366:14;:23;21345:9;:18;21355:7;21345:18;;;;;;;;;;;;;;;:44;;;;21427:6;21411:12;;:22;;;;;;;:::i;:::-;;;;;;;;21477:1;21451:37;;21460:7;21451:37;;;21481:6;21451:37;;;;;;:::i;:::-;;;;;;;;21501:48;21521:7;21538:1;21542:6;21501:19;:48::i;:::-;21031:526;20966:591;;:::o;36865:348::-;36999:10;36994:212;37020:3;;:10;;37015:2;:15;36994:212;;;37061:13;;37075:2;37061:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37053:39;;;37111:10;37148:4;37172:3;;37176:2;37172:7;;;;;;;:::i;:::-;;;;;;;;37053:141;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37032:4;;;;;:::i;:::-;;;;36994:212;;;;36865:348;;;;:::o;37221:560::-;37386:7;37406:14;37423:1;37406:18;;37440:10;37435:315;37461:3;;:10;;37456:2;:15;37435:315;;;37503:23;37514:7;;37522:2;37514:11;;;;;;;:::i;:::-;;;;;;;;37503:6;:10;;:23;;;;:::i;:::-;37494:32;;37550:13;;37564:2;37550:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37541:44;;;37604:10;37641:4;37665:3;;37669:2;37665:7;;;;;;;:::i;:::-;;;;;;;;37691;;37699:2;37691:11;;;;;;;:::i;:::-;;;;;;;;37541:197;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37473:4;;;;;:::i;:::-;;;;37435:315;;;;37767:6;37760:13;;;37221:560;;;;;;;;:::o;20234:399::-;20337:1;20318:21;;:7;:21;;;;20310:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20388:49;20417:1;20421:7;20430:6;20388:20;:49::i;:::-;20466:6;20450:12;;:22;;;;;;;:::i;:::-;;;;;;;;20505:6;20483:9;:18;20493:7;20483:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;20548:7;20527:37;;20544:1;20527:37;;;20557:6;20527:37;;;;;;:::i;:::-;;;;;;;;20577:48;20605:1;20609:7;20618:6;20577:19;:48::i;:::-;20234:399;;:::o;31543:191::-;31617:16;31636:6;;;;;;;;;;;31617:25;;31662:8;31653:6;;:17;;;;;;;;;;;;;;;;;;31717:8;31686:40;;31707:8;31686:40;;;;;;;;;;;;31606:128;31543:191;:::o;3328:98::-;3386:7;3417:1;3413;:5;;;;:::i;:::-;3406:12;;3328:98;;;;:::o;23719:125::-;;;;:::o;24448:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;169:568::-;242:8;252:6;302:3;295:4;287:6;283:17;279:27;269:122;;310:79;;:::i;:::-;269:122;423:6;410:20;400:30;;453:18;445:6;442:30;439:117;;;475:79;;:::i;:::-;439:117;589:4;581:6;577:17;565:29;;643:3;635:4;627:6;623:17;613:8;609:32;606:41;603:128;;;650:79;;:::i;:::-;603:128;169:568;;;;;:::o;760:::-;833:8;843:6;893:3;886:4;878:6;874:17;870:27;860:122;;901:79;;:::i;:::-;860:122;1014:6;1001:20;991:30;;1044:18;1036:6;1033:30;1030:117;;;1066:79;;:::i;:::-;1030:117;1180:4;1172:6;1168:17;1156:29;;1234:3;1226:4;1218:6;1214:17;1204:8;1200:32;1197:41;1194:128;;;1241:79;;:::i;:::-;1194:128;760:568;;;;;:::o;1347:552::-;1404:8;1414:6;1464:3;1457:4;1449:6;1445:17;1441:27;1431:122;;1472:79;;:::i;:::-;1431:122;1585:6;1572:20;1562:30;;1615:18;1607:6;1604:30;1601:117;;;1637:79;;:::i;:::-;1601:117;1751:4;1743:6;1739:17;1727:29;;1805:3;1797:4;1789:6;1785:17;1775:8;1771:32;1768:41;1765:128;;;1812:79;;:::i;:::-;1765:128;1347:552;;;;;:::o;1905:141::-;1961:5;1992:6;1986:13;1977:22;;2008:32;2034:5;2008:32;:::i;:::-;1905:141;;;;:::o;2052:139::-;2098:5;2136:6;2123:20;2114:29;;2152:33;2179:5;2152:33;:::i;:::-;2052:139;;;;:::o;2197:143::-;2254:5;2285:6;2279:13;2270:22;;2301:33;2328:5;2301:33;:::i;:::-;2197:143;;;;:::o;2346:141::-;2402:5;2433:6;2427:13;2418:22;;2449:32;2475:5;2449:32;:::i;:::-;2346:141;;;;:::o;2493:329::-;2552:6;2601:2;2589:9;2580:7;2576:23;2572:32;2569:119;;;2607:79;;:::i;:::-;2569:119;2727:1;2752:53;2797:7;2788:6;2777:9;2773:22;2752:53;:::i;:::-;2742:63;;2698:117;2493:329;;;;:::o;2828:474::-;2896:6;2904;2953:2;2941:9;2932:7;2928:23;2924:32;2921:119;;;2959:79;;:::i;:::-;2921:119;3079:1;3104:53;3149:7;3140:6;3129:9;3125:22;3104:53;:::i;:::-;3094:63;;3050:117;3206:2;3232:53;3277:7;3268:6;3257:9;3253:22;3232:53;:::i;:::-;3222:63;;3177:118;2828:474;;;;;:::o;3308:619::-;3385:6;3393;3401;3450:2;3438:9;3429:7;3425:23;3421:32;3418:119;;;3456:79;;:::i;:::-;3418:119;3576:1;3601:53;3646:7;3637:6;3626:9;3622:22;3601:53;:::i;:::-;3591:63;;3547:117;3703:2;3729:53;3774:7;3765:6;3754:9;3750:22;3729:53;:::i;:::-;3719:63;;3674:118;3831:2;3857:53;3902:7;3893:6;3882:9;3878:22;3857:53;:::i;:::-;3847:63;;3802:118;3308:619;;;;;:::o;3933:1109::-;4039:6;4047;4055;4063;4071;4079;4128:3;4116:9;4107:7;4103:23;4099:33;4096:120;;;4135:79;;:::i;:::-;4096:120;4255:1;4280:53;4325:7;4316:6;4305:9;4301:22;4280:53;:::i;:::-;4270:63;;4226:117;4382:2;4408:53;4453:7;4444:6;4433:9;4429:22;4408:53;:::i;:::-;4398:63;;4353:118;4510:2;4536:53;4581:7;4572:6;4561:9;4557:22;4536:53;:::i;:::-;4526:63;;4481:118;4638:2;4664:53;4709:7;4700:6;4689:9;4685:22;4664:53;:::i;:::-;4654:63;;4609:118;4794:3;4783:9;4779:19;4766:33;4826:18;4818:6;4815:30;4812:117;;;4848:79;;:::i;:::-;4812:117;4961:64;5017:7;5008:6;4997:9;4993:22;4961:64;:::i;:::-;4943:82;;;;4737:298;3933:1109;;;;;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:2061::-;5758:6;5766;5774;5782;5790;5798;5806;5814;5822;5830;5879:3;5867:9;5858:7;5854:23;5850:33;5847:120;;;5886:79;;:::i;:::-;5847:120;6034:1;6023:9;6019:17;6006:31;6064:18;6056:6;6053:30;6050:117;;;6086:79;;:::i;:::-;6050:117;6199:80;6271:7;6262:6;6251:9;6247:22;6199:80;:::i;:::-;6181:98;;;;5977:312;6356:2;6345:9;6341:18;6328:32;6387:18;6379:6;6376:30;6373:117;;;6409:79;;:::i;:::-;6373:117;6522:80;6594:7;6585:6;6574:9;6570:22;6522:80;:::i;:::-;6504:98;;;;6299:313;6679:2;6668:9;6664:18;6651:32;6710:18;6702:6;6699:30;6696:117;;;6732:79;;:::i;:::-;6696:117;6845:80;6917:7;6908:6;6897:9;6893:22;6845:80;:::i;:::-;6827:98;;;;6622:313;7002:2;6991:9;6987:18;6974:32;7033:18;7025:6;7022:30;7019:117;;;7055:79;;:::i;:::-;7019:117;7168:80;7240:7;7231:6;7220:9;7216:22;7168:80;:::i;:::-;7150:98;;;;6945:313;7325:3;7314:9;7310:19;7297:33;7357:18;7349:6;7346:30;7343:117;;;7379:79;;:::i;:::-;7343:117;7492:80;7564:7;7555:6;7544:9;7540:22;7492:80;:::i;:::-;7474:98;;;;7268:314;5528:2061;;;;;;;;;;;;;:::o;7595:329::-;7654:6;7703:2;7691:9;7682:7;7678:23;7674:32;7671:119;;;7709:79;;:::i;:::-;7671:119;7829:1;7854:53;7899:7;7890:6;7879:9;7875:22;7854:53;:::i;:::-;7844:63;;7800:117;7595:329;;;;:::o;7930:971::-;8033:6;8041;8049;8057;8065;8114:3;8102:9;8093:7;8089:23;8085:33;8082:120;;;8121:79;;:::i;:::-;8082:120;8241:1;8266:63;8321:7;8312:6;8301:9;8297:22;8266:63;:::i;:::-;8256:73;;8212:127;8378:2;8404:63;8459:7;8450:6;8439:9;8435:22;8404:63;:::i;:::-;8394:73;;8349:128;8516:2;8542:64;8598:7;8589:6;8578:9;8574:22;8542:64;:::i;:::-;8532:74;;8487:129;8655:2;8681:64;8737:7;8728:6;8717:9;8713:22;8681:64;:::i;:::-;8671:74;;8626:129;8794:3;8821:63;8876:7;8867:6;8856:9;8852:22;8821:63;:::i;:::-;8811:73;;8765:129;7930:971;;;;;;;;:::o;8907:118::-;8994:24;9012:5;8994:24;:::i;:::-;8989:3;8982:37;8907:118;;:::o;9031:109::-;9112:21;9127:5;9112:21;:::i;:::-;9107:3;9100:34;9031:109;;:::o;9146:115::-;9231:23;9248:5;9231:23;:::i;:::-;9226:3;9219:36;9146:115;;:::o;9267:::-;9352:23;9369:5;9352:23;:::i;:::-;9347:3;9340:36;9267:115;;:::o;9388:364::-;9476:3;9504:39;9537:5;9504:39;:::i;:::-;9559:71;9623:6;9618:3;9559:71;:::i;:::-;9552:78;;9639:52;9684:6;9679:3;9672:4;9665:5;9661:16;9639:52;:::i;:::-;9716:29;9738:6;9716:29;:::i;:::-;9711:3;9707:39;9700:46;;9480:272;9388:364;;;;:::o;9758:366::-;9900:3;9921:67;9985:2;9980:3;9921:67;:::i;:::-;9914:74;;9997:93;10086:3;9997:93;:::i;:::-;10115:2;10110:3;10106:12;10099:19;;9758:366;;;:::o;10130:::-;10272:3;10293:67;10357:2;10352:3;10293:67;:::i;:::-;10286:74;;10369:93;10458:3;10369:93;:::i;:::-;10487:2;10482:3;10478:12;10471:19;;10130:366;;;:::o;10502:::-;10644:3;10665:67;10729:2;10724:3;10665:67;:::i;:::-;10658:74;;10741:93;10830:3;10741:93;:::i;:::-;10859:2;10854:3;10850:12;10843:19;;10502:366;;;:::o;10874:::-;11016:3;11037:67;11101:2;11096:3;11037:67;:::i;:::-;11030:74;;11113:93;11202:3;11113:93;:::i;:::-;11231:2;11226:3;11222:12;11215:19;;10874:366;;;:::o;11246:::-;11388:3;11409:67;11473:2;11468:3;11409:67;:::i;:::-;11402:74;;11485:93;11574:3;11485:93;:::i;:::-;11603:2;11598:3;11594:12;11587:19;;11246:366;;;:::o;11618:::-;11760:3;11781:67;11845:2;11840:3;11781:67;:::i;:::-;11774:74;;11857:93;11946:3;11857:93;:::i;:::-;11975:2;11970:3;11966:12;11959:19;;11618:366;;;:::o;11990:::-;12132:3;12153:67;12217:2;12212:3;12153:67;:::i;:::-;12146:74;;12229:93;12318:3;12229:93;:::i;:::-;12347:2;12342:3;12338:12;12331:19;;11990:366;;;:::o;12362:::-;12504:3;12525:67;12589:2;12584:3;12525:67;:::i;:::-;12518:74;;12601:93;12690:3;12601:93;:::i;:::-;12719:2;12714:3;12710:12;12703:19;;12362:366;;;:::o;12734:::-;12876:3;12897:67;12961:2;12956:3;12897:67;:::i;:::-;12890:74;;12973:93;13062:3;12973:93;:::i;:::-;13091:2;13086:3;13082:12;13075:19;;12734:366;;;:::o;13106:::-;13248:3;13269:67;13333:2;13328:3;13269:67;:::i;:::-;13262:74;;13345:93;13434:3;13345:93;:::i;:::-;13463:2;13458:3;13454:12;13447:19;;13106:366;;;:::o;13478:::-;13620:3;13641:67;13705:2;13700:3;13641:67;:::i;:::-;13634:74;;13717:93;13806:3;13717:93;:::i;:::-;13835:2;13830:3;13826:12;13819:19;;13478:366;;;:::o;13850:::-;13992:3;14013:67;14077:2;14072:3;14013:67;:::i;:::-;14006:74;;14089:93;14178:3;14089:93;:::i;:::-;14207:2;14202:3;14198:12;14191:19;;13850:366;;;:::o;14222:::-;14364:3;14385:67;14449:2;14444:3;14385:67;:::i;:::-;14378:74;;14461:93;14550:3;14461:93;:::i;:::-;14579:2;14574:3;14570:12;14563:19;;14222:366;;;:::o;14594:365::-;14736:3;14757:66;14821:1;14816:3;14757:66;:::i;:::-;14750:73;;14832:93;14921:3;14832:93;:::i;:::-;14950:2;14945:3;14941:12;14934:19;;14594:365;;;:::o;14965:366::-;15107:3;15128:67;15192:2;15187:3;15128:67;:::i;:::-;15121:74;;15204:93;15293:3;15204:93;:::i;:::-;15322:2;15317:3;15313:12;15306:19;;14965:366;;;:::o;15337:362::-;15478:3;15499:65;15562:1;15557:3;15499:65;:::i;:::-;15492:72;;15573:93;15662:3;15573:93;:::i;:::-;15691:1;15686:3;15682:11;15675:18;;15337:362;;;:::o;15705:398::-;15864:3;15885:83;15966:1;15961:3;15885:83;:::i;:::-;15878:90;;15977:93;16066:3;15977:93;:::i;:::-;16095:1;16090:3;16086:11;16079:18;;15705:398;;;:::o;16109:366::-;16251:3;16272:67;16336:2;16331:3;16272:67;:::i;:::-;16265:74;;16348:93;16437:3;16348:93;:::i;:::-;16466:2;16461:3;16457:12;16450:19;;16109:366;;;:::o;16481:::-;16623:3;16644:67;16708:2;16703:3;16644:67;:::i;:::-;16637:74;;16720:93;16809:3;16720:93;:::i;:::-;16838:2;16833:3;16829:12;16822:19;;16481:366;;;:::o;16853:::-;16995:3;17016:67;17080:2;17075:3;17016:67;:::i;:::-;17009:74;;17092:93;17181:3;17092:93;:::i;:::-;17210:2;17205:3;17201:12;17194:19;;16853:366;;;:::o;17225:::-;17367:3;17388:67;17452:2;17447:3;17388:67;:::i;:::-;17381:74;;17464:93;17553:3;17464:93;:::i;:::-;17582:2;17577:3;17573:12;17566:19;;17225:366;;;:::o;17597:118::-;17684:24;17702:5;17684:24;:::i;:::-;17679:3;17672:37;17597:118;;:::o;17721:112::-;17804:22;17820:5;17804:22;:::i;:::-;17799:3;17792:35;17721:112;;:::o;17839:379::-;18023:3;18045:147;18188:3;18045:147;:::i;:::-;18038:154;;18209:3;18202:10;;17839:379;;;:::o;18224:222::-;18317:4;18355:2;18344:9;18340:18;18332:26;;18368:71;18436:1;18425:9;18421:17;18412:6;18368:71;:::i;:::-;18224:222;;;;:::o;18452:442::-;18601:4;18639:2;18628:9;18624:18;18616:26;;18652:71;18720:1;18709:9;18705:17;18696:6;18652:71;:::i;:::-;18733:72;18801:2;18790:9;18786:18;18777:6;18733:72;:::i;:::-;18815;18883:2;18872:9;18868:18;18859:6;18815:72;:::i;:::-;18452:442;;;;;;:::o;18900:859::-;19177:4;19215:3;19204:9;19200:19;19192:27;;19229:71;19297:1;19286:9;19282:17;19273:6;19229:71;:::i;:::-;19310:72;19378:2;19367:9;19363:18;19354:6;19310:72;:::i;:::-;19392;19460:2;19449:9;19445:18;19436:6;19392:72;:::i;:::-;19474;19542:2;19531:9;19527:18;19518:6;19474:72;:::i;:::-;19594:9;19588:4;19584:20;19578:3;19567:9;19563:19;19556:49;19622:130;19747:4;19622:130;:::i;:::-;19614:138;;18900:859;;;;;;;:::o;19765:210::-;19852:4;19890:2;19879:9;19875:18;19867:26;;19903:65;19965:1;19954:9;19950:17;19941:6;19903:65;:::i;:::-;19765:210;;;;:::o;19981:218::-;20072:4;20110:2;20099:9;20095:18;20087:26;;20123:69;20189:1;20178:9;20174:17;20165:6;20123:69;:::i;:::-;19981:218;;;;:::o;20205:::-;20296:4;20334:2;20323:9;20319:18;20311:26;;20347:69;20413:1;20402:9;20398:17;20389:6;20347:69;:::i;:::-;20205:218;;;;:::o;20429:313::-;20542:4;20580:2;20569:9;20565:18;20557:26;;20629:9;20623:4;20619:20;20615:1;20604:9;20600:17;20593:47;20657:78;20730:4;20721:6;20657:78;:::i;:::-;20649:86;;20429:313;;;;:::o;20748:419::-;20914:4;20952:2;20941:9;20937:18;20929:26;;21001:9;20995:4;20991:20;20987:1;20976:9;20972:17;20965:47;21029:131;21155:4;21029:131;:::i;:::-;21021:139;;20748:419;;;:::o;21173:::-;21339:4;21377:2;21366:9;21362:18;21354:26;;21426:9;21420:4;21416:20;21412:1;21401:9;21397:17;21390:47;21454:131;21580:4;21454:131;:::i;:::-;21446:139;;21173:419;;;:::o;21598:::-;21764:4;21802:2;21791:9;21787:18;21779:26;;21851:9;21845:4;21841:20;21837:1;21826:9;21822:17;21815:47;21879:131;22005:4;21879:131;:::i;:::-;21871:139;;21598:419;;;:::o;22023:::-;22189:4;22227:2;22216:9;22212:18;22204:26;;22276:9;22270:4;22266:20;22262:1;22251:9;22247:17;22240:47;22304:131;22430:4;22304:131;:::i;:::-;22296:139;;22023:419;;;:::o;22448:::-;22614:4;22652:2;22641:9;22637:18;22629:26;;22701:9;22695:4;22691:20;22687:1;22676:9;22672:17;22665:47;22729:131;22855:4;22729:131;:::i;:::-;22721:139;;22448:419;;;:::o;22873:::-;23039:4;23077:2;23066:9;23062:18;23054:26;;23126:9;23120:4;23116:20;23112:1;23101:9;23097:17;23090:47;23154:131;23280:4;23154:131;:::i;:::-;23146:139;;22873:419;;;:::o;23298:::-;23464:4;23502:2;23491:9;23487:18;23479:26;;23551:9;23545:4;23541:20;23537:1;23526:9;23522:17;23515:47;23579:131;23705:4;23579:131;:::i;:::-;23571:139;;23298:419;;;:::o;23723:::-;23889:4;23927:2;23916:9;23912:18;23904:26;;23976:9;23970:4;23966:20;23962:1;23951:9;23947:17;23940:47;24004:131;24130:4;24004:131;:::i;:::-;23996:139;;23723:419;;;:::o;24148:::-;24314:4;24352:2;24341:9;24337:18;24329:26;;24401:9;24395:4;24391:20;24387:1;24376:9;24372:17;24365:47;24429:131;24555:4;24429:131;:::i;:::-;24421:139;;24148:419;;;:::o;24573:::-;24739:4;24777:2;24766:9;24762:18;24754:26;;24826:9;24820:4;24816:20;24812:1;24801:9;24797:17;24790:47;24854:131;24980:4;24854:131;:::i;:::-;24846:139;;24573:419;;;:::o;24998:::-;25164:4;25202:2;25191:9;25187:18;25179:26;;25251:9;25245:4;25241:20;25237:1;25226:9;25222:17;25215:47;25279:131;25405:4;25279:131;:::i;:::-;25271:139;;24998:419;;;:::o;25423:::-;25589:4;25627:2;25616:9;25612:18;25604:26;;25676:9;25670:4;25666:20;25662:1;25651:9;25647:17;25640:47;25704:131;25830:4;25704:131;:::i;:::-;25696:139;;25423:419;;;:::o;25848:::-;26014:4;26052:2;26041:9;26037:18;26029:26;;26101:9;26095:4;26091:20;26087:1;26076:9;26072:17;26065:47;26129:131;26255:4;26129:131;:::i;:::-;26121:139;;25848:419;;;:::o;26273:::-;26439:4;26477:2;26466:9;26462:18;26454:26;;26526:9;26520:4;26516:20;26512:1;26501:9;26497:17;26490:47;26554:131;26680:4;26554:131;:::i;:::-;26546:139;;26273:419;;;:::o;26698:::-;26864:4;26902:2;26891:9;26887:18;26879:26;;26951:9;26945:4;26941:20;26937:1;26926:9;26922:17;26915:47;26979:131;27105:4;26979:131;:::i;:::-;26971:139;;26698:419;;;:::o;27123:::-;27289:4;27327:2;27316:9;27312:18;27304:26;;27376:9;27370:4;27366:20;27362:1;27351:9;27347:17;27340:47;27404:131;27530:4;27404:131;:::i;:::-;27396:139;;27123:419;;;:::o;27548:::-;27714:4;27752:2;27741:9;27737:18;27729:26;;27801:9;27795:4;27791:20;27787:1;27776:9;27772:17;27765:47;27829:131;27955:4;27829:131;:::i;:::-;27821:139;;27548:419;;;:::o;27973:::-;28139:4;28177:2;28166:9;28162:18;28154:26;;28226:9;28220:4;28216:20;28212:1;28201:9;28197:17;28190:47;28254:131;28380:4;28254:131;:::i;:::-;28246:139;;27973:419;;;:::o;28398:::-;28564:4;28602:2;28591:9;28587:18;28579:26;;28651:9;28645:4;28641:20;28637:1;28626:9;28622:17;28615:47;28679:131;28805:4;28679:131;:::i;:::-;28671:139;;28398:419;;;:::o;28823:222::-;28916:4;28954:2;28943:9;28939:18;28931:26;;28967:71;29035:1;29024:9;29020:17;29011:6;28967:71;:::i;:::-;28823:222;;;;:::o;29051:332::-;29172:4;29210:2;29199:9;29195:18;29187:26;;29223:71;29291:1;29280:9;29276:17;29267:6;29223:71;:::i;:::-;29304:72;29372:2;29361:9;29357:18;29348:6;29304:72;:::i;:::-;29051:332;;;;;:::o;29389:553::-;29566:4;29604:3;29593:9;29589:19;29581:27;;29618:71;29686:1;29675:9;29671:17;29662:6;29618:71;:::i;:::-;29699:72;29767:2;29756:9;29752:18;29743:6;29699:72;:::i;:::-;29781;29849:2;29838:9;29834:18;29825:6;29781:72;:::i;:::-;29863;29931:2;29920:9;29916:18;29907:6;29863:72;:::i;:::-;29389:553;;;;;;;:::o;29948:214::-;30037:4;30075:2;30064:9;30060:18;30052:26;;30088:67;30152:1;30141:9;30137:17;30128:6;30088:67;:::i;:::-;29948:214;;;;:::o;30249:99::-;30301:6;30335:5;30329:12;30319:22;;30249:99;;;:::o;30354:168::-;30437:11;30471:6;30466:3;30459:19;30511:4;30506:3;30502:14;30487:29;;30354:168;;;;:::o;30528:147::-;30629:11;30666:3;30651:18;;30528:147;;;;:::o;30681:169::-;30765:11;30799:6;30794:3;30787:19;30839:4;30834:3;30830:14;30815:29;;30681:169;;;;:::o;30856:305::-;30896:3;30915:20;30933:1;30915:20;:::i;:::-;30910:25;;30949:20;30967:1;30949:20;:::i;:::-;30944:25;;31103:1;31035:66;31031:74;31028:1;31025:81;31022:107;;;31109:18;;:::i;:::-;31022:107;31153:1;31150;31146:9;31139:16;;30856:305;;;;:::o;31167:185::-;31207:1;31224:20;31242:1;31224:20;:::i;:::-;31219:25;;31258:20;31276:1;31258:20;:::i;:::-;31253:25;;31297:1;31287:35;;31302:18;;:::i;:::-;31287:35;31344:1;31341;31337:9;31332:14;;31167:185;;;;:::o;31358:348::-;31398:7;31421:20;31439:1;31421:20;:::i;:::-;31416:25;;31455:20;31473:1;31455:20;:::i;:::-;31450:25;;31643:1;31575:66;31571:74;31568:1;31565:81;31560:1;31553:9;31546:17;31542:105;31539:131;;;31650:18;;:::i;:::-;31539:131;31698:1;31695;31691:9;31680:20;;31358:348;;;;:::o;31712:191::-;31752:4;31772:20;31790:1;31772:20;:::i;:::-;31767:25;;31806:20;31824:1;31806:20;:::i;:::-;31801:25;;31845:1;31842;31839:8;31836:34;;;31850:18;;:::i;:::-;31836:34;31895:1;31892;31888:9;31880:17;;31712:191;;;;:::o;31909:96::-;31946:7;31975:24;31993:5;31975:24;:::i;:::-;31964:35;;31909:96;;;:::o;32011:90::-;32045:7;32088:5;32081:13;32074:21;32063:32;;32011:90;;;:::o;32107:149::-;32143:7;32183:66;32176:5;32172:78;32161:89;;32107:149;;;:::o;32262:76::-;32298:7;32327:5;32316:16;;32262:76;;;:::o;32344:126::-;32381:7;32421:42;32414:5;32410:54;32399:65;;32344:126;;;:::o;32476:77::-;32513:7;32542:5;32531:16;;32476:77;;;:::o;32559:86::-;32594:7;32634:4;32627:5;32623:16;32612:27;;32559:86;;;:::o;32651:105::-;32687:7;32727:22;32720:5;32716:34;32705:45;;32651:105;;;:::o;32762:307::-;32830:1;32840:113;32854:6;32851:1;32848:13;32840:113;;;32939:1;32934:3;32930:11;32924:18;32920:1;32915:3;32911:11;32904:39;32876:2;32873:1;32869:10;32864:15;;32840:113;;;32971:6;32968:1;32965:13;32962:101;;;33051:1;33042:6;33037:3;33033:16;33026:27;32962:101;32811:258;32762:307;;;:::o;33075:320::-;33119:6;33156:1;33150:4;33146:12;33136:22;;33203:1;33197:4;33193:12;33224:18;33214:81;;33280:4;33272:6;33268:17;33258:27;;33214:81;33342:2;33334:6;33331:14;33311:18;33308:38;33305:84;;;33361:18;;:::i;:::-;33305:84;33126:269;33075:320;;;:::o;33401:233::-;33440:3;33463:24;33481:5;33463:24;:::i;:::-;33454:33;;33509:66;33502:5;33499:77;33496:103;;;33579:18;;:::i;:::-;33496:103;33626:1;33619:5;33615:13;33608:20;;33401:233;;;:::o;33640:180::-;33688:77;33685:1;33678:88;33785:4;33782:1;33775:15;33809:4;33806:1;33799:15;33826:180;33874:77;33871:1;33864:88;33971:4;33968:1;33961:15;33995:4;33992:1;33985:15;34012:180;34060:77;34057:1;34050:88;34157:4;34154:1;34147:15;34181:4;34178:1;34171:15;34198:180;34246:77;34243:1;34236:88;34343:4;34340:1;34333:15;34367:4;34364:1;34357:15;34384:117;34493:1;34490;34483:12;34507:117;34616:1;34613;34606:12;34630:117;34739:1;34736;34729:12;34753:117;34862:1;34859;34852:12;34876:117;34985:1;34982;34975:12;34999:102;35040:6;35091:2;35087:7;35082:2;35075:5;35071:14;35067:28;35057:38;;34999:102;;;:::o;35107:222::-;35247:34;35243:1;35235:6;35231:14;35224:58;35316:5;35311:2;35303:6;35299:15;35292:30;35107:222;:::o;35335:168::-;35475:20;35471:1;35463:6;35459:14;35452:44;35335:168;:::o;35509:221::-;35649:34;35645:1;35637:6;35633:14;35626:58;35718:4;35713:2;35705:6;35701:15;35694:29;35509:221;:::o;35736:225::-;35876:34;35872:1;35864:6;35860:14;35853:58;35945:8;35940:2;35932:6;35928:15;35921:33;35736:225;:::o;35967:221::-;36107:34;36103:1;36095:6;36091:14;36084:58;36176:4;36171:2;36163:6;36159:15;36152:29;35967:221;:::o;36194:174::-;36334:26;36330:1;36322:6;36318:14;36311:50;36194:174;:::o;36374:179::-;36514:31;36510:1;36502:6;36498:14;36491:55;36374:179;:::o;36559:225::-;36699:34;36695:1;36687:6;36683:14;36676:58;36768:8;36763:2;36755:6;36751:15;36744:33;36559:225;:::o;36790:170::-;36930:22;36926:1;36918:6;36914:14;36907:46;36790:170;:::o;36966:173::-;37106:25;37102:1;37094:6;37090:14;37083:49;36966:173;:::o;37145:182::-;37285:34;37281:1;37273:6;37269:14;37262:58;37145:182;:::o;37333:162::-;37473:14;37469:1;37461:6;37457:14;37450:38;37333:162;:::o;37501:220::-;37641:34;37637:1;37629:6;37625:14;37618:58;37710:3;37705:2;37697:6;37693:15;37686:28;37501:220;:::o;37727:157::-;37867:9;37863:1;37855:6;37851:14;37844:33;37727:157;:::o;37890:224::-;38030:34;38026:1;38018:6;38014:14;38007:58;38099:7;38094:2;38086:6;38082:15;38075:32;37890:224;:::o;38120:114::-;;:::o;38240:223::-;38380:34;38376:1;38368:6;38364:14;38357:58;38449:6;38444:2;38436:6;38432:15;38425:31;38240:223;:::o;38469:169::-;38609:21;38605:1;38597:6;38593:14;38586:45;38469:169;:::o;38644:224::-;38784:34;38780:1;38772:6;38768:14;38761:58;38853:7;38848:2;38840:6;38836:15;38829:32;38644:224;:::o;38874:181::-;39014:33;39010:1;39002:6;38998:14;38991:57;38874:181;:::o;39061:122::-;39134:24;39152:5;39134:24;:::i;:::-;39127:5;39124:35;39114:63;;39173:1;39170;39163:12;39114:63;39061:122;:::o;39189:120::-;39261:23;39278:5;39261:23;:::i;:::-;39254:5;39251:34;39241:62;;39299:1;39296;39289:12;39241:62;39189:120;:::o;39315:122::-;39388:24;39406:5;39388:24;:::i;:::-;39381:5;39378:35;39368:63;;39427:1;39424;39417:12;39368:63;39315:122;:::o;39443:120::-;39515:23;39532:5;39515:23;:::i;:::-;39508:5;39505:34;39495:62;;39553:1;39550;39543:12;39495:62;39443:120;:::o

Swarm Source

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