ETH Price: $3,250.56 (+2.50%)
Gas: 7 Gwei

Token

Math Gold (MATH)
 

Overview

Max Total Supply

5,256,969 MATH

Holders

12

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
100,000 MATH

Value
$0.00
0xe1f3554a0a7d58cbc8c2da2561a84210686362ac
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:
MathGold

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-18
*/

// SPDX-License-Identifier: UNLICENSED

/*
    ▄▄▄▄███▄▄▄▄      ▄████████     ███        ▄█    █▄       ▄██████▄   ▄██████▄   ▄█       ████████▄  
    ▄██▀▀▀███▀▀▀██▄   ███    ███ ▀█████████▄   ███    ███     ███    ███ ███    ███ ███       ███   ▀███ 
    ███   ███   ███   ███    ███    ▀███▀▀██   ███    ███     ███    █▀  ███    ███ ███       ███    ███ 
    ███   ███   ███   ███    ███     ███   ▀  ▄███▄▄▄▄███▄▄  ▄███        ███    ███ ███       ███    ███ 
    ███   ███   ███ ▀███████████     ███     ▀▀███▀▀▀▀███▀  ▀▀███ ████▄  ███    ███ ███       ███    ███ 
    ███   ███   ███   ███    ███     ███       ███    ███     ███    ███ ███    ███ ███       ███    ███ 
    ███   ███   ███   ███    ███     ███       ███    ███     ███    ███ ███    ███ ███▌    ▄ ███   ▄███ 
    ▀█   ███   █▀    ███    █▀     ▄████▀     ███    █▀      ████████▀   ▀██████▀  █████▄▄██ ████████▀  

    𝕾𝖒𝖆𝖗𝖙 𝖈𝖔𝖓𝖙𝖗𝖆𝖈𝖙𝖘 𝖆𝖗𝖊 𝖈𝖆𝖘𝖙𝖑𝖊𝖘 𝖒𝖆𝖉𝖊 𝖔𝖋 𝖒𝖆𝖙𝖍, 𝖋𝖗𝖊𝖊𝖑𝖞 𝖙𝖗𝖆𝖉𝖎𝖓𝖌 𝖜𝖎𝖙𝖍 𝖊𝖆𝖈𝖍 𝖔𝖙𝖍𝖊𝖗.
    𝕱𝖔𝖗 𝖙𝖍𝖊 𝖊𝖙𝖊𝖗𝖓𝖆𝖑 𝖕𝖗𝖔𝖘𝖕𝖊𝖗𝖎𝖙𝖞 𝖔𝖋 𝖔𝖚𝖗 𝖔𝖓𝖈𝖍𝖆𝖎𝖓 𝖈𝖆𝖘𝖙𝖑𝖊.
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

/// @title Math Gold for Terraforms holders!
/// @author Will Papper <https://twitter.com/WillPapper>
/// Modified by zefram.eth
/// @notice This contract mints Math Gold for Math holders and provides
/// administrative functions to the Math Gold DAO. It allows:
/// * Terraforms holders to claim Math Gold
/// * A DAO to set seasons for new opportunities to claim Math Gold
/// * A DAO to mint Math Gold for use within the Mathcastles ecosystem
/// @custom:unaudited This contract has not been audited. Use at your own risk.
contract MathGold is Context, Ownable, ERC20 {
    // Math contract is available at https://etherscan.io/address/0xff9c1b15b16263c61d017ee9f65c50e4ae0113d7
    address public mathContractAddress =
        0x5BDf397bB2912859Dbd8011F320a222f79A28d2E;
    IERC721Enumerable public mathContract;

    // Give out 10,000 Math Gold for every Math that a user holds
    uint256 public mathGoldPerTokenId = 10000 * (10**decimals());

    // tokenIdStart of 1
    uint256 public tokenIdStart = 1;

    // tokenIdEnd of 4196
    uint256 public tokenIdEnd = 4196;

    // Seasons are used to allow users to claim tokens regularly. Seasons are
    // decided by the DAO.
    uint256 public season = 0;

    // Track claimed tokens within a season
    // IMPORTANT: The format of the mapping is:
    // claimedForSeason[season][tokenId][claimed]
    mapping(uint256 => mapping(uint256 => bool)) public seasonClaimedByTokenId;

    constructor() Ownable() ERC20("Math Gold", "MATH") {
        mathContract = IERC721Enumerable(mathContractAddress);

        // it's fair launch my dear apes
        _mint(0x5f350bF5feE8e254D6077f8661E9C7B83a30364e, 4206969 * (10**decimals()));
    }

    /// @notice Claim Math Gold for a given Math ID
    /// @param tokenId The tokenId of the Math NFT
    function claimById(uint256 tokenId) external {
        // Follow the Checks-Effects-Interactions pattern to prevent reentrancy
        // attacks

        // Checks

        // Check that the msgSender owns the token that is being claimed
        require(
            _msgSender() == mathContract.ownerOf(tokenId),
            "MUST_OWN_TOKEN_ID"
        );

        // Further Checks, Effects, and Interactions are contained within the
        // _claim() function
        _claim(tokenId, _msgSender());
    }

    /// @notice Claim Math Gold for all tokens owned by the sender
    /// @notice This function will run out of gas if you have too much loot! If
    /// this is a concern, you should use claimRangeForOwner and claim Math
    /// Gold in batches.
    function claimAllForOwner() external {
        uint256 tokenBalanceOwner = mathContract.balanceOf(_msgSender());

        // Checks
        require(tokenBalanceOwner > 0, "NO_TOKENS_OWNED");

        // i < tokenBalanceOwner because tokenBalanceOwner is 1-indexed
        for (uint256 i = 0; i < tokenBalanceOwner; i++) {
            // Further Checks, Effects, and Interactions are contained within
            // the _claim() function
            _claim(
                mathContract.tokenOfOwnerByIndex(_msgSender(), i),
                _msgSender()
            );
        }
    }

    /// @notice Claim Math Gold for all tokens owned by the sender within a
    /// given range
    /// @notice This function is useful if you own too much Math to claim all at
    /// once or if you want to leave some Math unclaimed. If you leave Math
    /// unclaimed, however, you cannot claim it once the next season starts.
    function claimRangeForOwner(uint256 ownerIndexStart, uint256 ownerIndexEnd)
        external
    {
        uint256 tokenBalanceOwner = mathContract.balanceOf(_msgSender());

        // Checks
        require(tokenBalanceOwner > 0, "NO_TOKENS_OWNED");

        // We use < for ownerIndexEnd and tokenBalanceOwner because
        // tokenOfOwnerByIndex is 0-indexed while the token balance is 1-indexed
        require(
            ownerIndexStart >= 0 && ownerIndexEnd < tokenBalanceOwner,
            "INDEX_OUT_OF_RANGE"
        );

        // i <= ownerIndexEnd because ownerIndexEnd is 0-indexed
        for (uint256 i = ownerIndexStart; i <= ownerIndexEnd; i++) {
            // Further Checks, Effects, and Interactions are contained within
            // the _claim() function
            _claim(
                mathContract.tokenOfOwnerByIndex(_msgSender(), i),
                _msgSender()
            );
        }
    }

    /// @dev Internal function to mint Math upon claiming
    function _claim(uint256 tokenId, address tokenOwner) internal {
        // Checks
        // Check that the token ID is in range
        // We use >= and <= to here because all of the token IDs are 0-indexed
        require(
            tokenId >= tokenIdStart && tokenId <= tokenIdEnd,
            "TOKEN_ID_OUT_OF_RANGE"
        );

        // Check that Math Gold have not already been claimed this season
        // for a given tokenId
        require(
            !seasonClaimedByTokenId[season][tokenId],
            "GOLD_CLAIMED_FOR_TOKEN_ID"
        );

        // Effects

        // Mark that Math Gold has been claimed for this season for the
        // given tokenId
        seasonClaimedByTokenId[season][tokenId] = true;

        // Interactions

        // Send Math Gold to the owner of the token ID
        _mint(tokenOwner, mathGoldPerTokenId);
    }

    /// @notice Allows the DAO to mint new tokens for use within the Math
    /// Ecosystem
    /// @param amountDisplayValue The amount of Math to mint. This should be
    /// input as the display value, not in raw decimals. If you want to mint
    /// 100 Math, you should enter "100" rather than the value of 100 * 10^18.
    function daoMint(uint256 amountDisplayValue) external onlyOwner {
        _mint(owner(), amountDisplayValue * (10**decimals()));
    }

    /// @notice Allows the DAO to set a new contract address for Math. This is
    /// relevant in the event that Math migrates to a new contract.
    /// @param mathContractAddress_ The new contract address for Math
    function daoSetMathContractAddress(address mathContractAddress_)
        external
        onlyOwner
    {
        mathContractAddress = mathContractAddress_;
        mathContract = IERC721Enumerable(mathContractAddress);
    }

    /// @notice Allows the DAO to set the token IDs that are eligible to claim
    /// Math
    /// @param tokenIdStart_ The start of the eligible token range
    /// @param tokenIdEnd_ The end of the eligible token range
    /// @dev This is relevant in case a future Math contract has a different
    /// total supply of Math
    function daoSetTokenIdRange(uint256 tokenIdStart_, uint256 tokenIdEnd_)
        external
        onlyOwner
    {
        tokenIdStart = tokenIdStart_;
        tokenIdEnd = tokenIdEnd_;
    }

    /// @notice Allows the DAO to set a season for new Math Gold claims
    /// @param season_ The season to use for claiming Math
    function daoSetSeason(uint256 season_) public onlyOwner {
        season = season_;
    }

    /// @notice Allows the DAO to set the amount of Math Gold that is
    /// claimed per token ID
    /// @param mathGoldDisplayValue The amount of Math a user can claim.
    /// This should be input as the display value, not in raw decimals. If you
    /// want to mint 100 Math, you should enter "100" rather than the value of
    /// 100 * 10^18.
    function daoSetMathGoldPerTokenId(uint256 mathGoldDisplayValue)
        public
        onlyOwner
    {
        mathGoldPerTokenId = mathGoldDisplayValue * (10**decimals());
    }

    /// @notice Allows the DAO to set the season and Math Gold per token ID
    /// in one transaction. This ensures that there is not a gap where a user
    /// can claim more Math Gold than others
    /// @param season_ The season to use for claiming loot
    /// @param mathGoldDisplayValue The amount of Math a user can claim.
    /// This should be input as the display value, not in raw decimals. If you
    /// want to mint 100 Math, you should enter "100" rather than the value of
    /// 100 * 10^18.
    /// @dev We would save a tiny amount of gas by modifying the season and
    /// mathGold variables directly. It is better practice for security,
    /// however, to avoid repeating code. This function is so rarely used that
    /// it's not worth moving these values into their own internal function to
    /// skip the gas used on the modifier check.
    function daoSetSeasonAndMathGoldPerTokenID(
        uint256 season_,
        uint256 mathGoldDisplayValue
    ) external onlyOwner {
        daoSetSeason(season_);
        daoSetMathGoldPerTokenId(mathGoldDisplayValue);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ownerIndexStart","type":"uint256"},{"internalType":"uint256","name":"ownerIndexEnd","type":"uint256"}],"name":"claimRangeForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountDisplayValue","type":"uint256"}],"name":"daoMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mathContractAddress_","type":"address"}],"name":"daoSetMathContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mathGoldDisplayValue","type":"uint256"}],"name":"daoSetMathGoldPerTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"}],"name":"daoSetSeason","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"},{"internalType":"uint256","name":"mathGoldDisplayValue","type":"uint256"}],"name":"daoSetSeasonAndMathGoldPerTokenID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIdStart_","type":"uint256"},{"internalType":"uint256","name":"tokenIdEnd_","type":"uint256"}],"name":"daoSetTokenIdRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mathContract","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mathContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mathGoldPerTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"season","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"seasonClaimedByTokenId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052735bdf397bb2912859dbd8011f320a222f79a28d2e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000696200022360201b60201c565b600a6200007791906200066c565b612710620000869190620007a9565b6008556001600955611064600a556000600b55348015620000a657600080fd5b506040518060400160405280600981526020017f4d61746820476f6c6400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4154480000000000000000000000000000000000000000000000000000000081525062000133620001276200022c60201b60201c565b6200023460201b60201c565b81600490805190602001906200014b9291906200047c565b508060059080519060200190620001649291906200047c565b505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200021d735f350bf5fee8e254d6077f8661e9c7b83a30364e620001f36200022360201b60201c565b600a6200020191906200066c565b62403179620002119190620007a9565b620002f860201b60201c565b620008eb565b60006012905090565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200036b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003629062000564565b60405180910390fd5b6200037f600083836200047260201b60201c565b8060036000828254620003939190620005b4565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003eb9190620005b4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000452919062000586565b60405180910390a36200046e600083836200047760201b60201c565b5050565b505050565b505050565b8280546200048a9062000821565b90600052602060002090601f016020900481019282620004ae5760008555620004fa565b82601f10620004c957805160ff1916838001178555620004fa565b82800160010185558215620004fa579182015b82811115620004f9578251825591602001919060010190620004dc565b5b5090506200050991906200050d565b5090565b5b80821115620005285760008160009055506001016200050e565b5090565b60006200053b601f83620005a3565b91506200054882620008c2565b602082019050919050565b6200055e816200080a565b82525050565b600060208201905081810360008301526200057f816200052c565b9050919050565b60006020820190506200059d600083018462000553565b92915050565b600082825260208201905092915050565b6000620005c1826200080a565b9150620005ce836200080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000606576200060562000857565b5b828201905092915050565b6000808291508390505b600185111562000663578086048111156200063b576200063a62000857565b5b60018516156200064b5780820291505b80810290506200065b85620008b5565b94506200061b565b94509492505050565b600062000679826200080a565b9150620006868362000814565b9250620006b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006bd565b905092915050565b600082620006cf5760019050620007a2565b81620006df5760009050620007a2565b8160018114620006f85760028114620007035762000739565b6001915050620007a2565b60ff84111562000718576200071762000857565b5b8360020a91508482111562000732576200073162000857565b5b50620007a2565b5060208310610133831016604e8410600b8410161715620007735782820a9050838111156200076d576200076c62000857565b5b620007a2565b62000782848484600162000611565b925090508184048111156200079c576200079b62000857565b5b81810290505b9392505050565b6000620007b6826200080a565b9150620007c3836200080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007ff57620007fe62000857565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200083a57607f821691505b6020821081141562000851576200085062000886565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d1280620008fb6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063becf7741116100a2578063dd62ed3e11610071578063dd62ed3e1461051f578063e5e808cb1461054f578063f2fde38b1461057f578063f751a8311461059b576101da565b8063becf7741146104bd578063c50b0fb0146104d9578063cbf0b276146104f7578063d23bfa1214610501576101da565b80638da5cb5b116100de5780638da5cb5b1461042157806395d89b411461043f578063a457c2d71461045d578063a9059cbb1461048d576101da565b806370a08231146103cb578063715018a6146103fb578063878e7ea514610405576101da565b8063364c3c281161017c57806343f428021161014b57806343f42802146103595780634da7808a1461037757806362759f6c146103935780636990be49146103af576101da565b8063364c3c28146102d357806339509351146102ef5780633f0ca1011461031f57806342e473151461033d576101da565b806319481994116101b8578063194819941461024b57806323b872dd146102675780632a38906214610297578063313ce567146102b5576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105b9565b6040516101f491906122e8565b60405180910390f35b61021760048036038101906102129190611f03565b61064b565b60405161022491906122b2565b60405180910390f35b610235610669565b60405161024291906124ea565b60405180910390f35b61026560048036038101906102609190611e16565b610673565b005b610281600480360381019061027c9190611eb0565b610796565b60405161028e91906122b2565b60405180910390f35b61029f61088e565b6040516102ac91906124ea565b60405180910390f35b6102bd610894565b6040516102ca9190612505565b60405180910390f35b6102ed60048036038101906102e89190611f9d565b61089d565b005b61030960048036038101906103049190611f03565b61092f565b60405161031691906122b2565b60405180910390f35b6103276109db565b60405161033491906122cd565b60405180910390f35b61035760048036038101906103529190611f43565b610a01565b005b610361610a87565b60405161036e91906124ea565b60405180910390f35b610391600480360381019061038c9190611f9d565b610a8d565b005b6103ad60048036038101906103a89190611f43565b610b1b565b005b6103c960048036038101906103c49190611f43565b610bc9565b005b6103e560048036038101906103e09190611e16565b610c6d565b6040516103f291906124ea565b60405180910390f35b610403610cb6565b005b61041f600480360381019061041a9190611f9d565b610d3e565b005b610429610f70565b604051610436919061226e565b60405180910390f35b610447610f99565b60405161045491906122e8565b60405180910390f35b61047760048036038101906104729190611f03565b61102b565b60405161048491906122b2565b60405180910390f35b6104a760048036038101906104a29190611f03565b611116565b6040516104b491906122b2565b60405180910390f35b6104d760048036038101906104d29190611f43565b611134565b005b6104e1611267565b6040516104ee91906124ea565b60405180910390f35b6104ff61126d565b005b61050961144c565b60405161051691906124ea565b60405180910390f35b61053960048036038101906105349190611e70565b611452565b60405161054691906124ea565b60405180910390f35b61056960048036038101906105649190611f9d565b6114d9565b60405161057691906122b2565b60405180910390f35b61059960048036038101906105949190611e16565b611508565b005b6105a3611600565b6040516105b0919061226e565b60405180910390f35b6060600480546105c89061281b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061281b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b600061065f610658611626565b848461162e565b6001905092915050565b6000600354905090565b61067b611626565b73ffffffffffffffffffffffffffffffffffffffff16610699610f70565b73ffffffffffffffffffffffffffffffffffffffff16146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906123ea565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107a38484846117f9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107ee611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561086e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610865906123ca565b60405180910390fd5b6108828561087a611626565b85840361162e565b60019150509392505050565b60095481565b60006012905090565b6108a5611626565b73ffffffffffffffffffffffffffffffffffffffff166108c3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610910906123ea565b60405180910390fd5b61092282610a01565b61092b81610bc9565b5050565b60006109d161093c611626565b84846002600061094a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109cc919061253c565b61162e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a09611626565b73ffffffffffffffffffffffffffffffffffffffff16610a27610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a74906123ea565b60405180910390fd5b80600b8190555050565b600a5481565b610a95611626565b73ffffffffffffffffffffffffffffffffffffffff16610ab3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b00906123ea565b60405180910390fd5b8160098190555080600a819055505050565b610b23611626565b73ffffffffffffffffffffffffffffffffffffffff16610b41610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906123ea565b60405180910390fd5b610bc6610ba2610f70565b610baa610894565b600a610bb691906125e5565b83610bc19190612703565b611a7d565b50565b610bd1611626565b73ffffffffffffffffffffffffffffffffffffffff16610bef610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c906123ea565b60405180910390fd5b610c4d610894565b600a610c5991906125e5565b81610c649190612703565b60088190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cbe611626565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d29906123ea565b60405180910390fd5b610d3c6000611bde565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610d86611626565b6040518263ffffffff1660e01b8152600401610da2919061226e565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190611f70565b905060008111610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e9061248a565b60405180910390fd5b60008310158015610e4757508082105b610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061232a565b60405180910390fd5b60008390505b828111610f6a57610f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59610edc611626565b846040518363ffffffff1660e01b8152600401610efa929190612289565b60206040518083038186803b158015610f1257600080fd5b505afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a9190611f70565b610f52611626565b611ca2565b8080610f629061284d565b915050610e8c565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610fa89061281b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd49061281b565b80156110215780601f10610ff657610100808354040283529160200191611021565b820191906000526020600020905b81548152906001019060200180831161100457829003601f168201915b5050505050905090565b6000806002600061103a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee906124aa565b60405180910390fd5b61110b611102611626565b8585840361162e565b600191505092915050565b600061112a611123611626565b84846117f9565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b815260040161118f91906124ea565b60206040518083038186803b1580156111a757600080fd5b505afa1580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190611e43565b73ffffffffffffffffffffffffffffffffffffffff166111fd611626565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906123aa565b60405180910390fd5b6112648161125f611626565b611ca2565b50565b600b5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316112b5611626565b6040518263ffffffff1660e01b81526004016112d1919061226e565b60206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190611f70565b905060008111611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d9061248a565b60405180910390fd5b60005b8181101561144857611435600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596113ba611626565b846040518363ffffffff1660e01b81526004016113d8929190612289565b60206040518083038186803b1580156113f057600080fd5b505afa158015611404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114289190611f70565b611430611626565b611ca2565b80806114409061284d565b915050611369565b5050565b60085481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611510611626565b73ffffffffffffffffffffffffffffffffffffffff1661152e610f70565b73ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b906123ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb9061234a565b60405180910390fd5b6115fd81611bde565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116959061244a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117059061236a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117ec91906124ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611869576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118609061240a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d09061230a565b60405180910390fd5b6118e4838383611db8565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561196b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119629061238a565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a00919061253c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a6491906124ea565b60405180910390a3611a77848484611dbd565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906124ca565b60405180910390fd5b611af960008383611db8565b8060036000828254611b0b919061253c565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b61919061253c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bc691906124ea565b60405180910390a3611bda60008383611dbd565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6009548210158015611cb65750600a548211155b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec9061246a565b60405180910390fd5b600c6000600b548152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1615611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d609061242a565b60405180910390fd5b6001600c6000600b548152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611db481600854611a7d565b5050565b505050565b505050565b600081359050611dd181612cae565b92915050565b600081519050611de681612cae565b92915050565b600081359050611dfb81612cc5565b92915050565b600081519050611e1081612cc5565b92915050565b600060208284031215611e2c57611e2b6128f4565b5b6000611e3a84828501611dc2565b91505092915050565b600060208284031215611e5957611e586128f4565b5b6000611e6784828501611dd7565b91505092915050565b60008060408385031215611e8757611e866128f4565b5b6000611e9585828601611dc2565b9250506020611ea685828601611dc2565b9150509250929050565b600080600060608486031215611ec957611ec86128f4565b5b6000611ed786828701611dc2565b9350506020611ee886828701611dc2565b9250506040611ef986828701611dec565b9150509250925092565b60008060408385031215611f1a57611f196128f4565b5b6000611f2885828601611dc2565b9250506020611f3985828601611dec565b9150509250929050565b600060208284031215611f5957611f586128f4565b5b6000611f6784828501611dec565b91505092915050565b600060208284031215611f8657611f856128f4565b5b6000611f9484828501611e01565b91505092915050565b60008060408385031215611fb457611fb36128f4565b5b6000611fc285828601611dec565b9250506020611fd385828601611dec565b9150509250929050565b611fe68161275d565b82525050565b611ff58161276f565b82525050565b612004816127b2565b82525050565b600061201582612520565b61201f818561252b565b935061202f8185602086016127e8565b612038816128f9565b840191505092915050565b600061205060238361252b565b915061205b82612917565b604082019050919050565b600061207360128361252b565b915061207e82612966565b602082019050919050565b600061209660268361252b565b91506120a18261298f565b604082019050919050565b60006120b960228361252b565b91506120c4826129de565b604082019050919050565b60006120dc60268361252b565b91506120e782612a2d565b604082019050919050565b60006120ff60118361252b565b915061210a82612a7c565b602082019050919050565b600061212260288361252b565b915061212d82612aa5565b604082019050919050565b600061214560208361252b565b915061215082612af4565b602082019050919050565b600061216860258361252b565b915061217382612b1d565b604082019050919050565b600061218b60198361252b565b915061219682612b6c565b602082019050919050565b60006121ae60248361252b565b91506121b982612b95565b604082019050919050565b60006121d160158361252b565b91506121dc82612be4565b602082019050919050565b60006121f4600f8361252b565b91506121ff82612c0d565b602082019050919050565b600061221760258361252b565b915061222282612c36565b604082019050919050565b600061223a601f8361252b565b915061224582612c85565b602082019050919050565b6122598161279b565b82525050565b612268816127a5565b82525050565b60006020820190506122836000830184611fdd565b92915050565b600060408201905061229e6000830185611fdd565b6122ab6020830184612250565b9392505050565b60006020820190506122c76000830184611fec565b92915050565b60006020820190506122e26000830184611ffb565b92915050565b60006020820190508181036000830152612302818461200a565b905092915050565b6000602082019050818103600083015261232381612043565b9050919050565b6000602082019050818103600083015261234381612066565b9050919050565b6000602082019050818103600083015261236381612089565b9050919050565b60006020820190508181036000830152612383816120ac565b9050919050565b600060208201905081810360008301526123a3816120cf565b9050919050565b600060208201905081810360008301526123c3816120f2565b9050919050565b600060208201905081810360008301526123e381612115565b9050919050565b6000602082019050818103600083015261240381612138565b9050919050565b600060208201905081810360008301526124238161215b565b9050919050565b600060208201905081810360008301526124438161217e565b9050919050565b60006020820190508181036000830152612463816121a1565b9050919050565b60006020820190508181036000830152612483816121c4565b9050919050565b600060208201905081810360008301526124a3816121e7565b9050919050565b600060208201905081810360008301526124c38161220a565b9050919050565b600060208201905081810360008301526124e38161222d565b9050919050565b60006020820190506124ff6000830184612250565b92915050565b600060208201905061251a600083018461225f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006125478261279b565b91506125528361279b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561258757612586612896565b5b828201905092915050565b6000808291508390505b60018511156125dc578086048111156125b8576125b7612896565b5b60018516156125c75780820291505b80810290506125d58561290a565b945061259c565b94509492505050565b60006125f08261279b565b91506125fb836127a5565b92506126287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612630565b905092915050565b60008261264057600190506126fc565b8161264e57600090506126fc565b8160018114612664576002811461266e5761269d565b60019150506126fc565b60ff8411156126805761267f612896565b5b8360020a91508482111561269757612696612896565b5b506126fc565b5060208310610133831016604e8410600b84101617156126d25782820a9050838111156126cd576126cc612896565b5b6126fc565b6126df8484846001612592565b925090508184048111156126f6576126f5612896565b5b81810290505b9392505050565b600061270e8261279b565b91506127198361279b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561275257612751612896565b5b828202905092915050565b60006127688261277b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127bd826127c4565b9050919050565b60006127cf826127d6565b9050919050565b60006127e18261277b565b9050919050565b60005b838110156128065780820151818401526020810190506127eb565b83811115612815576000848401525b50505050565b6000600282049050600182168061283357607f821691505b60208210811415612847576128466128c5565b5b50919050565b60006128588261279b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561288b5761288a612896565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f494e4445585f4f55545f4f465f52414e47450000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4d5553545f4f574e5f544f4b454e5f4944000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f474f4c445f434c41494d45445f464f525f544f4b454e5f494400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e5f49445f4f55545f4f465f52414e47450000000000000000000000600082015250565b7f4e4f5f544f4b454e535f4f574e45440000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612cb78161275d565b8114612cc257600080fd5b50565b612cce8161279b565b8114612cd957600080fd5b5056fea26469706673582212200b1db8d2d7673053a72d5c5f29814e8ea5e382bb78e04eaaa563acdc820fa88764736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063becf7741116100a2578063dd62ed3e11610071578063dd62ed3e1461051f578063e5e808cb1461054f578063f2fde38b1461057f578063f751a8311461059b576101da565b8063becf7741146104bd578063c50b0fb0146104d9578063cbf0b276146104f7578063d23bfa1214610501576101da565b80638da5cb5b116100de5780638da5cb5b1461042157806395d89b411461043f578063a457c2d71461045d578063a9059cbb1461048d576101da565b806370a08231146103cb578063715018a6146103fb578063878e7ea514610405576101da565b8063364c3c281161017c57806343f428021161014b57806343f42802146103595780634da7808a1461037757806362759f6c146103935780636990be49146103af576101da565b8063364c3c28146102d357806339509351146102ef5780633f0ca1011461031f57806342e473151461033d576101da565b806319481994116101b8578063194819941461024b57806323b872dd146102675780632a38906214610297578063313ce567146102b5576101da565b806306fdde03146101df578063095ea7b3146101fd57806318160ddd1461022d575b600080fd5b6101e76105b9565b6040516101f491906122e8565b60405180910390f35b61021760048036038101906102129190611f03565b61064b565b60405161022491906122b2565b60405180910390f35b610235610669565b60405161024291906124ea565b60405180910390f35b61026560048036038101906102609190611e16565b610673565b005b610281600480360381019061027c9190611eb0565b610796565b60405161028e91906122b2565b60405180910390f35b61029f61088e565b6040516102ac91906124ea565b60405180910390f35b6102bd610894565b6040516102ca9190612505565b60405180910390f35b6102ed60048036038101906102e89190611f9d565b61089d565b005b61030960048036038101906103049190611f03565b61092f565b60405161031691906122b2565b60405180910390f35b6103276109db565b60405161033491906122cd565b60405180910390f35b61035760048036038101906103529190611f43565b610a01565b005b610361610a87565b60405161036e91906124ea565b60405180910390f35b610391600480360381019061038c9190611f9d565b610a8d565b005b6103ad60048036038101906103a89190611f43565b610b1b565b005b6103c960048036038101906103c49190611f43565b610bc9565b005b6103e560048036038101906103e09190611e16565b610c6d565b6040516103f291906124ea565b60405180910390f35b610403610cb6565b005b61041f600480360381019061041a9190611f9d565b610d3e565b005b610429610f70565b604051610436919061226e565b60405180910390f35b610447610f99565b60405161045491906122e8565b60405180910390f35b61047760048036038101906104729190611f03565b61102b565b60405161048491906122b2565b60405180910390f35b6104a760048036038101906104a29190611f03565b611116565b6040516104b491906122b2565b60405180910390f35b6104d760048036038101906104d29190611f43565b611134565b005b6104e1611267565b6040516104ee91906124ea565b60405180910390f35b6104ff61126d565b005b61050961144c565b60405161051691906124ea565b60405180910390f35b61053960048036038101906105349190611e70565b611452565b60405161054691906124ea565b60405180910390f35b61056960048036038101906105649190611f9d565b6114d9565b60405161057691906122b2565b60405180910390f35b61059960048036038101906105949190611e16565b611508565b005b6105a3611600565b6040516105b0919061226e565b60405180910390f35b6060600480546105c89061281b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f49061281b565b80156106415780601f1061061657610100808354040283529160200191610641565b820191906000526020600020905b81548152906001019060200180831161062457829003601f168201915b5050505050905090565b600061065f610658611626565b848461162e565b6001905092915050565b6000600354905090565b61067b611626565b73ffffffffffffffffffffffffffffffffffffffff16610699610f70565b73ffffffffffffffffffffffffffffffffffffffff16146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906123ea565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107a38484846117f9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107ee611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561086e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610865906123ca565b60405180910390fd5b6108828561087a611626565b85840361162e565b60019150509392505050565b60095481565b60006012905090565b6108a5611626565b73ffffffffffffffffffffffffffffffffffffffff166108c3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610919576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610910906123ea565b60405180910390fd5b61092282610a01565b61092b81610bc9565b5050565b60006109d161093c611626565b84846002600061094a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109cc919061253c565b61162e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a09611626565b73ffffffffffffffffffffffffffffffffffffffff16610a27610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a74906123ea565b60405180910390fd5b80600b8190555050565b600a5481565b610a95611626565b73ffffffffffffffffffffffffffffffffffffffff16610ab3610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b00906123ea565b60405180910390fd5b8160098190555080600a819055505050565b610b23611626565b73ffffffffffffffffffffffffffffffffffffffff16610b41610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906123ea565b60405180910390fd5b610bc6610ba2610f70565b610baa610894565b600a610bb691906125e5565b83610bc19190612703565b611a7d565b50565b610bd1611626565b73ffffffffffffffffffffffffffffffffffffffff16610bef610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c906123ea565b60405180910390fd5b610c4d610894565b600a610c5991906125e5565b81610c649190612703565b60088190555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cbe611626565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610f70565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d29906123ea565b60405180910390fd5b610d3c6000611bde565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610d86611626565b6040518263ffffffff1660e01b8152600401610da2919061226e565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190611f70565b905060008111610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e9061248a565b60405180910390fd5b60008310158015610e4757508082105b610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061232a565b60405180910390fd5b60008390505b828111610f6a57610f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59610edc611626565b846040518363ffffffff1660e01b8152600401610efa929190612289565b60206040518083038186803b158015610f1257600080fd5b505afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a9190611f70565b610f52611626565b611ca2565b8080610f629061284d565b915050610e8c565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610fa89061281b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd49061281b565b80156110215780601f10610ff657610100808354040283529160200191611021565b820191906000526020600020905b81548152906001019060200180831161100457829003601f168201915b5050505050905090565b6000806002600061103a611626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee906124aa565b60405180910390fd5b61110b611102611626565b8585840361162e565b600191505092915050565b600061112a611123611626565b84846117f9565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b815260040161118f91906124ea565b60206040518083038186803b1580156111a757600080fd5b505afa1580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190611e43565b73ffffffffffffffffffffffffffffffffffffffff166111fd611626565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906123aa565b60405180910390fd5b6112648161125f611626565b611ca2565b50565b600b5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316112b5611626565b6040518263ffffffff1660e01b81526004016112d1919061226e565b60206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190611f70565b905060008111611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d9061248a565b60405180910390fd5b60005b8181101561144857611435600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596113ba611626565b846040518363ffffffff1660e01b81526004016113d8929190612289565b60206040518083038186803b1580156113f057600080fd5b505afa158015611404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114289190611f70565b611430611626565b611ca2565b80806114409061284d565b915050611369565b5050565b60085481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611510611626565b73ffffffffffffffffffffffffffffffffffffffff1661152e610f70565b73ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b906123ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb9061234a565b60405180910390fd5b6115fd81611bde565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116959061244a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117059061236a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117ec91906124ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611869576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118609061240a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d09061230a565b60405180910390fd5b6118e4838383611db8565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561196b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119629061238a565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a00919061253c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a6491906124ea565b60405180910390a3611a77848484611dbd565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae4906124ca565b60405180910390fd5b611af960008383611db8565b8060036000828254611b0b919061253c565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b61919061253c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bc691906124ea565b60405180910390a3611bda60008383611dbd565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6009548210158015611cb65750600a548211155b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec9061246a565b60405180910390fd5b600c6000600b548152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1615611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d609061242a565b60405180910390fd5b6001600c6000600b548152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611db481600854611a7d565b5050565b505050565b505050565b600081359050611dd181612cae565b92915050565b600081519050611de681612cae565b92915050565b600081359050611dfb81612cc5565b92915050565b600081519050611e1081612cc5565b92915050565b600060208284031215611e2c57611e2b6128f4565b5b6000611e3a84828501611dc2565b91505092915050565b600060208284031215611e5957611e586128f4565b5b6000611e6784828501611dd7565b91505092915050565b60008060408385031215611e8757611e866128f4565b5b6000611e9585828601611dc2565b9250506020611ea685828601611dc2565b9150509250929050565b600080600060608486031215611ec957611ec86128f4565b5b6000611ed786828701611dc2565b9350506020611ee886828701611dc2565b9250506040611ef986828701611dec565b9150509250925092565b60008060408385031215611f1a57611f196128f4565b5b6000611f2885828601611dc2565b9250506020611f3985828601611dec565b9150509250929050565b600060208284031215611f5957611f586128f4565b5b6000611f6784828501611dec565b91505092915050565b600060208284031215611f8657611f856128f4565b5b6000611f9484828501611e01565b91505092915050565b60008060408385031215611fb457611fb36128f4565b5b6000611fc285828601611dec565b9250506020611fd385828601611dec565b9150509250929050565b611fe68161275d565b82525050565b611ff58161276f565b82525050565b612004816127b2565b82525050565b600061201582612520565b61201f818561252b565b935061202f8185602086016127e8565b612038816128f9565b840191505092915050565b600061205060238361252b565b915061205b82612917565b604082019050919050565b600061207360128361252b565b915061207e82612966565b602082019050919050565b600061209660268361252b565b91506120a18261298f565b604082019050919050565b60006120b960228361252b565b91506120c4826129de565b604082019050919050565b60006120dc60268361252b565b91506120e782612a2d565b604082019050919050565b60006120ff60118361252b565b915061210a82612a7c565b602082019050919050565b600061212260288361252b565b915061212d82612aa5565b604082019050919050565b600061214560208361252b565b915061215082612af4565b602082019050919050565b600061216860258361252b565b915061217382612b1d565b604082019050919050565b600061218b60198361252b565b915061219682612b6c565b602082019050919050565b60006121ae60248361252b565b91506121b982612b95565b604082019050919050565b60006121d160158361252b565b91506121dc82612be4565b602082019050919050565b60006121f4600f8361252b565b91506121ff82612c0d565b602082019050919050565b600061221760258361252b565b915061222282612c36565b604082019050919050565b600061223a601f8361252b565b915061224582612c85565b602082019050919050565b6122598161279b565b82525050565b612268816127a5565b82525050565b60006020820190506122836000830184611fdd565b92915050565b600060408201905061229e6000830185611fdd565b6122ab6020830184612250565b9392505050565b60006020820190506122c76000830184611fec565b92915050565b60006020820190506122e26000830184611ffb565b92915050565b60006020820190508181036000830152612302818461200a565b905092915050565b6000602082019050818103600083015261232381612043565b9050919050565b6000602082019050818103600083015261234381612066565b9050919050565b6000602082019050818103600083015261236381612089565b9050919050565b60006020820190508181036000830152612383816120ac565b9050919050565b600060208201905081810360008301526123a3816120cf565b9050919050565b600060208201905081810360008301526123c3816120f2565b9050919050565b600060208201905081810360008301526123e381612115565b9050919050565b6000602082019050818103600083015261240381612138565b9050919050565b600060208201905081810360008301526124238161215b565b9050919050565b600060208201905081810360008301526124438161217e565b9050919050565b60006020820190508181036000830152612463816121a1565b9050919050565b60006020820190508181036000830152612483816121c4565b9050919050565b600060208201905081810360008301526124a3816121e7565b9050919050565b600060208201905081810360008301526124c38161220a565b9050919050565b600060208201905081810360008301526124e38161222d565b9050919050565b60006020820190506124ff6000830184612250565b92915050565b600060208201905061251a600083018461225f565b92915050565b600081519050919050565b600082825260208201905092915050565b60006125478261279b565b91506125528361279b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561258757612586612896565b5b828201905092915050565b6000808291508390505b60018511156125dc578086048111156125b8576125b7612896565b5b60018516156125c75780820291505b80810290506125d58561290a565b945061259c565b94509492505050565b60006125f08261279b565b91506125fb836127a5565b92506126287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612630565b905092915050565b60008261264057600190506126fc565b8161264e57600090506126fc565b8160018114612664576002811461266e5761269d565b60019150506126fc565b60ff8411156126805761267f612896565b5b8360020a91508482111561269757612696612896565b5b506126fc565b5060208310610133831016604e8410600b84101617156126d25782820a9050838111156126cd576126cc612896565b5b6126fc565b6126df8484846001612592565b925090508184048111156126f6576126f5612896565b5b81810290505b9392505050565b600061270e8261279b565b91506127198361279b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561275257612751612896565b5b828202905092915050565b60006127688261277b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127bd826127c4565b9050919050565b60006127cf826127d6565b9050919050565b60006127e18261277b565b9050919050565b60005b838110156128065780820151818401526020810190506127eb565b83811115612815576000848401525b50505050565b6000600282049050600182168061283357607f821691505b60208210811415612847576128466128c5565b5b50919050565b60006128588261279b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561288b5761288a612896565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f494e4445585f4f55545f4f465f52414e47450000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4d5553545f4f574e5f544f4b454e5f4944000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f474f4c445f434c41494d45445f464f525f544f4b454e5f494400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e5f49445f4f55545f4f465f52414e47450000000000000000000000600082015250565b7f4e4f5f544f4b454e535f4f574e45440000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612cb78161275d565b8114612cc257600080fd5b50565b612cce8161279b565b8114612cd957600080fd5b5056fea26469706673582212200b1db8d2d7673053a72d5c5f29814e8ea5e382bb78e04eaaa563acdc820fa88764736f6c63430008070033

Deployed Bytecode Sourcemap

28735:8324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10581:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12889:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11701:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34388:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13581:529;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29200:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11543:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36825:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14519:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28992:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35299:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29267:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34962:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34024:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35755:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11872:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4565:94;;;:::i;:::-;;31771:953;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3914:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10800:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15319:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12262:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30045:525;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29415:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830:598;;;:::i;:::-;;29105:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12541:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29594:74;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4814:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28897:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10581:100;10635:13;10668:5;10661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10581:100;:::o;12889:210::-;13008:4;13030:39;13039:12;:10;:12::i;:::-;13053:7;13062:6;13030:8;:39::i;:::-;13087:4;13080:11;;12889:210;;;;:::o;11701:108::-;11762:7;11789:12;;11782:19;;11701:108;:::o;34388:232::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34528:20:::1;34506:19;;:42;;;;;;;;;;;;;;;;;;34592:19;;;;;;;;;;;34559:12;;:53;;;;;;;;;;;;;;;;;;34388:232:::0;:::o;13581:529::-;13721:4;13738:36;13748:6;13756:9;13767:6;13738:9;:36::i;:::-;13787:24;13814:11;:19;13826:6;13814:19;;;;;;;;;;;;;;;:33;13834:12;:10;:12::i;:::-;13814:33;;;;;;;;;;;;;;;;13787:60;;13900:6;13880:16;:26;;13858:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14010:57;14019:6;14027:12;:10;:12::i;:::-;14060:6;14041:16;:25;14010:8;:57::i;:::-;14098:4;14091:11;;;13581:529;;;;;:::o;29200:31::-;;;;:::o;11543:93::-;11601:5;11626:2;11619:9;;11543:93;:::o;36825:231::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36970:21:::1;36983:7;36970:12;:21::i;:::-;37002:46;37027:20;37002:24;:46::i;:::-;36825:231:::0;;:::o;14519:297::-;14634:4;14656:130;14679:12;:10;:12::i;:::-;14706:7;14765:10;14728:11;:25;14740:12;:10;:12::i;:::-;14728:25;;;;;;;;;;;;;;;:34;14754:7;14728:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14656:8;:130::i;:::-;14804:4;14797:11;;14519:297;;;;:::o;28992:37::-;;;;;;;;;;;;;:::o;35299:91::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35375:7:::1;35366:6;:16;;;;35299:91:::0;:::o;29267:32::-;;;;:::o;34962:196::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35102:13:::1;35087:12;:28;;;;35139:11;35126:10;:24;;;;34962:196:::0;;:::o;34024:136::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34099:53:::1;34105:7;:5;:7::i;:::-;34140:10;:8;:10::i;:::-;34136:2;:14;;;;:::i;:::-;34114:18;:37;;;;:::i;:::-;34099:5;:53::i;:::-;34024:136:::0;:::o;35755:183::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35919:10:::1;:8;:10::i;:::-;35915:2;:14;;;;:::i;:::-;35891:20;:39;;;;:::i;:::-;35870:18;:60;;;;35755:183:::0;:::o;11872:177::-;11991:7;12023:9;:18;12033:7;12023:18;;;;;;;;;;;;;;;;12016:25;;11872:177;;;:::o;4565:94::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4630:21:::1;4648:1;4630:9;:21::i;:::-;4565:94::o:0;31771:953::-;31881:25;31909:12;;;;;;;;;;;:22;;;31932:12;:10;:12::i;:::-;31909:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31881:64;;32005:1;31985:17;:21;31977:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;32231:1;32212:15;:20;;:57;;;;;32252:17;32236:13;:33;32212:57;32190:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;32399:9;32411:15;32399:27;;32394:323;32433:13;32428:1;:18;32394:323;;32585:120;32610:12;;;;;;;;;;;:32;;;32643:12;:10;:12::i;:::-;32657:1;32610:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32678:12;:10;:12::i;:::-;32585:6;:120::i;:::-;32448:3;;;;;:::i;:::-;;;;32394:323;;;;31870:854;31771:953;;:::o;3914:87::-;3960:7;3987:6;;;;;;;;;;;3980:13;;3914:87;:::o;10800:104::-;10856:13;10889:7;10882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10800:104;:::o;15319:482::-;15439:4;15461:24;15488:11;:25;15500:12;:10;:12::i;:::-;15488:25;;;;;;;;;;;;;;;:34;15514:7;15488:34;;;;;;;;;;;;;;;;15461:61;;15575:15;15555:16;:35;;15533:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15691:67;15700:12;:10;:12::i;:::-;15714:7;15742:15;15723:16;:34;15691:8;:67::i;:::-;15789:4;15782:11;;;15319:482;;;;:::o;12262:216::-;12384:4;12406:42;12416:12;:10;:12::i;:::-;12430:9;12441:6;12406:9;:42::i;:::-;12466:4;12459:11;;12262:216;;;;:::o;30045:525::-;30337:12;;;;;;;;;;;:20;;;30358:7;30337:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30321:45;;:12;:10;:12::i;:::-;:45;;;30299:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;30533:29;30540:7;30549:12;:10;:12::i;:::-;30533:6;:29::i;:::-;30045:525;:::o;29415:25::-;;;;:::o;30830:598::-;30878:25;30906:12;;;;;;;;;;;:22;;;30929:12;:10;:12::i;:::-;30906:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30878:64;;31002:1;30982:17;:21;30974:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;31114:9;31109:312;31133:17;31129:1;:21;31109:312;;;31289:120;31314:12;;;;;;;;;;;:32;;;31347:12;:10;:12::i;:::-;31361:1;31314:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31382:12;:10;:12::i;:::-;31289:6;:120::i;:::-;31152:3;;;;;:::i;:::-;;;;31109:312;;;;30867:561;30830:598::o;29105:60::-;;;;:::o;12541:201::-;12675:7;12707:11;:18;12719:5;12707:18;;;;;;;;;;;;;;;:27;12726:7;12707:27;;;;;;;;;;;;;;;;12700:34;;12541:201;;;;:::o;29594:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4814:229::-;4145:12;:10;:12::i;:::-;4134:23;;:7;:5;:7::i;:::-;:23;;;4126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4937:1:::1;4917:22;;:8;:22;;;;4895:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5016:19;5026:8;5016:9;:19::i;:::-;4814:229:::0;:::o;28897:88::-;;;;;;;;;;;;;:::o;2765:98::-;2818:7;2845:10;2838:17;;2765:98;:::o;19109:380::-;19262:1;19245:19;;:5;:19;;;;19237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19343:1;19324:21;;:7;:21;;;;19316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19427:6;19397:11;:18;19409:5;19397:18;;;;;;;;;;;;;;;:27;19416:7;19397:27;;;;;;;;;;;;;;;:36;;;;19465:7;19449:32;;19458:5;19449:32;;;19474:6;19449:32;;;;;;:::i;:::-;;;;;;;;19109:380;;;:::o;16291:770::-;16449:1;16431:20;;:6;:20;;;;16423:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16533:1;16512:23;;:9;:23;;;;16504:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16588:47;16609:6;16617:9;16628:6;16588:20;:47::i;:::-;16648:21;16672:9;:17;16682:6;16672:17;;;;;;;;;;;;;;;;16648:41;;16739:6;16722:13;:23;;16700:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16883:6;16867:13;:22;16847:9;:17;16857:6;16847:17;;;;;;;;;;;;;;;:42;;;;16935:6;16911:9;:20;16921:9;16911:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16976:9;16959:35;;16968:6;16959:35;;;16987:6;16959:35;;;;;;:::i;:::-;;;;;;;;17007:46;17027:6;17035:9;17046:6;17007:19;:46::i;:::-;16412:649;16291:770;;;:::o;17348:399::-;17451:1;17432:21;;:7;:21;;;;17424:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17502:49;17531:1;17535:7;17544:6;17502:20;:49::i;:::-;17580:6;17564:12;;:22;;;;;;;:::i;:::-;;;;;;;;17619:6;17597:9;:18;17607:7;17597:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;17662:7;17641:37;;17658:1;17641:37;;;17671:6;17641:37;;;;;;:::i;:::-;;;;;;;;17691:48;17719:1;17723:7;17732:6;17691:19;:48::i;:::-;17348:399;;:::o;5051:173::-;5107:16;5126:6;;;;;;;;;;;5107:25;;5152:8;5143:6;;:17;;;;;;;;;;;;;;;;;;5207:8;5176:40;;5197:8;5176:40;;;;;;;;;;;;5096:128;5051:173;:::o;32791:895::-;33044:12;;33033:7;:23;;:48;;;;;33071:10;;33060:7;:21;;33033:48;33011:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;33273:22;:30;33296:6;;33273:30;;;;;;;;;;;:39;33304:7;33273:39;;;;;;;;;;;;;;;;;;;;;33272:40;33250:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;33541:4;33499:22;:30;33522:6;;33499:30;;;;;;;;;;;:39;33530:7;33499:39;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33641:37;33647:10;33659:18;;33641:5;:37::i;:::-;32791:895;;:::o;20089:125::-;;;;:::o;20818:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:139::-;347:5;385:6;372:20;363:29;;401:33;428:5;401:33;:::i;:::-;301:139;;;;:::o;446:143::-;503:5;534:6;528:13;519:22;;550:33;577:5;550:33;:::i;:::-;446:143;;;;:::o;595:329::-;654:6;703:2;691:9;682:7;678:23;674:32;671:119;;;709:79;;:::i;:::-;671:119;829:1;854:53;899:7;890:6;879:9;875:22;854:53;:::i;:::-;844:63;;800:117;595:329;;;;:::o;930:351::-;1000:6;1049:2;1037:9;1028:7;1024:23;1020:32;1017:119;;;1055:79;;:::i;:::-;1017:119;1175:1;1200:64;1256:7;1247:6;1236:9;1232:22;1200:64;:::i;:::-;1190:74;;1146:128;930:351;;;;:::o;1287:474::-;1355:6;1363;1412:2;1400:9;1391:7;1387:23;1383:32;1380:119;;;1418:79;;:::i;:::-;1380:119;1538:1;1563:53;1608:7;1599:6;1588:9;1584:22;1563:53;:::i;:::-;1553:63;;1509:117;1665:2;1691:53;1736:7;1727:6;1716:9;1712:22;1691:53;:::i;:::-;1681:63;;1636:118;1287:474;;;;;:::o;1767:619::-;1844:6;1852;1860;1909:2;1897:9;1888:7;1884:23;1880:32;1877:119;;;1915:79;;:::i;:::-;1877:119;2035:1;2060:53;2105:7;2096:6;2085:9;2081:22;2060:53;:::i;:::-;2050:63;;2006:117;2162:2;2188:53;2233:7;2224:6;2213:9;2209:22;2188:53;:::i;:::-;2178:63;;2133:118;2290:2;2316:53;2361:7;2352:6;2341:9;2337:22;2316:53;:::i;:::-;2306:63;;2261:118;1767:619;;;;;:::o;2392:474::-;2460:6;2468;2517:2;2505:9;2496:7;2492:23;2488:32;2485:119;;;2523:79;;:::i;:::-;2485:119;2643:1;2668:53;2713:7;2704:6;2693:9;2689:22;2668:53;:::i;:::-;2658:63;;2614:117;2770:2;2796:53;2841:7;2832:6;2821:9;2817:22;2796:53;:::i;:::-;2786:63;;2741:118;2392:474;;;;;:::o;2872:329::-;2931:6;2980:2;2968:9;2959:7;2955:23;2951:32;2948:119;;;2986:79;;:::i;:::-;2948:119;3106:1;3131:53;3176:7;3167:6;3156:9;3152:22;3131:53;:::i;:::-;3121:63;;3077:117;2872:329;;;;:::o;3207:351::-;3277:6;3326:2;3314:9;3305:7;3301:23;3297:32;3294:119;;;3332:79;;:::i;:::-;3294:119;3452:1;3477:64;3533:7;3524:6;3513:9;3509:22;3477:64;:::i;:::-;3467:74;;3423:128;3207:351;;;;:::o;3564:474::-;3632:6;3640;3689:2;3677:9;3668:7;3664:23;3660:32;3657:119;;;3695:79;;:::i;:::-;3657:119;3815:1;3840:53;3885:7;3876:6;3865:9;3861:22;3840:53;:::i;:::-;3830:63;;3786:117;3942:2;3968:53;4013:7;4004:6;3993:9;3989:22;3968:53;:::i;:::-;3958:63;;3913:118;3564:474;;;;;:::o;4044:118::-;4131:24;4149:5;4131:24;:::i;:::-;4126:3;4119:37;4044:118;;:::o;4168:109::-;4249:21;4264:5;4249:21;:::i;:::-;4244:3;4237:34;4168:109;;:::o;4283:181::-;4395:62;4451:5;4395:62;:::i;:::-;4390:3;4383:75;4283:181;;:::o;4470:364::-;4558:3;4586:39;4619:5;4586:39;:::i;:::-;4641:71;4705:6;4700:3;4641:71;:::i;:::-;4634:78;;4721:52;4766:6;4761:3;4754:4;4747:5;4743:16;4721:52;:::i;:::-;4798:29;4820:6;4798:29;:::i;:::-;4793:3;4789:39;4782:46;;4562:272;4470:364;;;;:::o;4840:366::-;4982:3;5003:67;5067:2;5062:3;5003:67;:::i;:::-;4996:74;;5079:93;5168:3;5079:93;:::i;:::-;5197:2;5192:3;5188:12;5181:19;;4840:366;;;:::o;5212:::-;5354:3;5375:67;5439:2;5434:3;5375:67;:::i;:::-;5368:74;;5451:93;5540:3;5451:93;:::i;:::-;5569:2;5564:3;5560:12;5553:19;;5212:366;;;:::o;5584:::-;5726:3;5747:67;5811:2;5806:3;5747:67;:::i;:::-;5740:74;;5823:93;5912:3;5823:93;:::i;:::-;5941:2;5936:3;5932:12;5925:19;;5584:366;;;:::o;5956:::-;6098:3;6119:67;6183:2;6178:3;6119:67;:::i;:::-;6112:74;;6195:93;6284:3;6195:93;:::i;:::-;6313:2;6308:3;6304:12;6297:19;;5956:366;;;:::o;6328:::-;6470:3;6491:67;6555:2;6550:3;6491:67;:::i;:::-;6484:74;;6567:93;6656:3;6567:93;:::i;:::-;6685:2;6680:3;6676:12;6669:19;;6328:366;;;:::o;6700:::-;6842:3;6863:67;6927:2;6922:3;6863:67;:::i;:::-;6856:74;;6939:93;7028:3;6939:93;:::i;:::-;7057:2;7052:3;7048:12;7041:19;;6700:366;;;:::o;7072:::-;7214:3;7235:67;7299:2;7294:3;7235:67;:::i;:::-;7228:74;;7311:93;7400:3;7311:93;:::i;:::-;7429:2;7424:3;7420:12;7413:19;;7072:366;;;:::o;7444:::-;7586:3;7607:67;7671:2;7666:3;7607:67;:::i;:::-;7600:74;;7683:93;7772:3;7683:93;:::i;:::-;7801:2;7796:3;7792:12;7785:19;;7444:366;;;:::o;7816:::-;7958:3;7979:67;8043:2;8038:3;7979:67;:::i;:::-;7972:74;;8055:93;8144:3;8055:93;:::i;:::-;8173:2;8168:3;8164:12;8157:19;;7816:366;;;:::o;8188:::-;8330:3;8351:67;8415:2;8410:3;8351:67;:::i;:::-;8344:74;;8427:93;8516:3;8427:93;:::i;:::-;8545:2;8540:3;8536:12;8529:19;;8188:366;;;:::o;8560:::-;8702:3;8723:67;8787:2;8782:3;8723:67;:::i;:::-;8716:74;;8799:93;8888:3;8799:93;:::i;:::-;8917:2;8912:3;8908:12;8901:19;;8560:366;;;:::o;8932:::-;9074:3;9095:67;9159:2;9154:3;9095:67;:::i;:::-;9088:74;;9171:93;9260:3;9171:93;:::i;:::-;9289:2;9284:3;9280:12;9273:19;;8932:366;;;:::o;9304:::-;9446:3;9467:67;9531:2;9526:3;9467:67;:::i;:::-;9460:74;;9543:93;9632:3;9543:93;:::i;:::-;9661:2;9656:3;9652:12;9645:19;;9304:366;;;:::o;9676:::-;9818:3;9839:67;9903:2;9898:3;9839:67;:::i;:::-;9832:74;;9915:93;10004:3;9915:93;:::i;:::-;10033:2;10028:3;10024:12;10017:19;;9676:366;;;:::o;10048:::-;10190:3;10211:67;10275:2;10270:3;10211:67;:::i;:::-;10204:74;;10287:93;10376:3;10287:93;:::i;:::-;10405:2;10400:3;10396:12;10389:19;;10048:366;;;:::o;10420:118::-;10507:24;10525:5;10507:24;:::i;:::-;10502:3;10495:37;10420:118;;:::o;10544:112::-;10627:22;10643:5;10627:22;:::i;:::-;10622:3;10615:35;10544:112;;:::o;10662:222::-;10755:4;10793:2;10782:9;10778:18;10770:26;;10806:71;10874:1;10863:9;10859:17;10850:6;10806:71;:::i;:::-;10662:222;;;;:::o;10890:332::-;11011:4;11049:2;11038:9;11034:18;11026:26;;11062:71;11130:1;11119:9;11115:17;11106:6;11062:71;:::i;:::-;11143:72;11211:2;11200:9;11196:18;11187:6;11143:72;:::i;:::-;10890:332;;;;;:::o;11228:210::-;11315:4;11353:2;11342:9;11338:18;11330:26;;11366:65;11428:1;11417:9;11413:17;11404:6;11366:65;:::i;:::-;11228:210;;;;:::o;11444:272::-;11562:4;11600:2;11589:9;11585:18;11577:26;;11613:96;11706:1;11695:9;11691:17;11682:6;11613:96;:::i;:::-;11444:272;;;;:::o;11722:313::-;11835:4;11873:2;11862:9;11858:18;11850:26;;11922:9;11916:4;11912:20;11908:1;11897:9;11893:17;11886:47;11950:78;12023:4;12014:6;11950:78;:::i;:::-;11942:86;;11722:313;;;;:::o;12041:419::-;12207:4;12245:2;12234:9;12230:18;12222:26;;12294:9;12288:4;12284:20;12280:1;12269:9;12265:17;12258:47;12322:131;12448:4;12322:131;:::i;:::-;12314:139;;12041:419;;;:::o;12466:::-;12632:4;12670:2;12659:9;12655:18;12647:26;;12719:9;12713:4;12709:20;12705:1;12694:9;12690:17;12683:47;12747:131;12873:4;12747:131;:::i;:::-;12739:139;;12466:419;;;:::o;12891:::-;13057:4;13095:2;13084:9;13080:18;13072:26;;13144:9;13138:4;13134:20;13130:1;13119:9;13115:17;13108:47;13172:131;13298:4;13172:131;:::i;:::-;13164:139;;12891:419;;;:::o;13316:::-;13482:4;13520:2;13509:9;13505:18;13497:26;;13569:9;13563:4;13559:20;13555:1;13544:9;13540:17;13533:47;13597:131;13723:4;13597:131;:::i;:::-;13589:139;;13316:419;;;:::o;13741:::-;13907:4;13945:2;13934:9;13930:18;13922:26;;13994:9;13988:4;13984:20;13980:1;13969:9;13965:17;13958:47;14022:131;14148:4;14022:131;:::i;:::-;14014:139;;13741:419;;;:::o;14166:::-;14332:4;14370:2;14359:9;14355:18;14347:26;;14419:9;14413:4;14409:20;14405:1;14394:9;14390:17;14383:47;14447:131;14573:4;14447:131;:::i;:::-;14439:139;;14166:419;;;:::o;14591:::-;14757:4;14795:2;14784:9;14780:18;14772:26;;14844:9;14838:4;14834:20;14830:1;14819:9;14815:17;14808:47;14872:131;14998:4;14872:131;:::i;:::-;14864:139;;14591:419;;;:::o;15016:::-;15182:4;15220:2;15209:9;15205:18;15197:26;;15269:9;15263:4;15259:20;15255:1;15244:9;15240:17;15233:47;15297:131;15423:4;15297:131;:::i;:::-;15289:139;;15016:419;;;:::o;15441:::-;15607:4;15645:2;15634:9;15630:18;15622:26;;15694:9;15688:4;15684:20;15680:1;15669:9;15665:17;15658:47;15722:131;15848:4;15722:131;:::i;:::-;15714:139;;15441:419;;;:::o;15866:::-;16032:4;16070:2;16059:9;16055:18;16047:26;;16119:9;16113:4;16109:20;16105:1;16094:9;16090:17;16083:47;16147:131;16273:4;16147:131;:::i;:::-;16139:139;;15866:419;;;:::o;16291:::-;16457:4;16495:2;16484:9;16480:18;16472:26;;16544:9;16538:4;16534:20;16530:1;16519:9;16515:17;16508:47;16572:131;16698:4;16572:131;:::i;:::-;16564:139;;16291:419;;;:::o;16716:::-;16882:4;16920:2;16909:9;16905:18;16897:26;;16969:9;16963:4;16959:20;16955:1;16944:9;16940:17;16933:47;16997:131;17123:4;16997:131;:::i;:::-;16989:139;;16716:419;;;:::o;17141:::-;17307:4;17345:2;17334:9;17330:18;17322:26;;17394:9;17388:4;17384:20;17380:1;17369:9;17365:17;17358:47;17422:131;17548:4;17422:131;:::i;:::-;17414:139;;17141:419;;;:::o;17566:::-;17732:4;17770:2;17759:9;17755:18;17747:26;;17819:9;17813:4;17809:20;17805:1;17794:9;17790:17;17783:47;17847:131;17973:4;17847:131;:::i;:::-;17839:139;;17566:419;;;:::o;17991:::-;18157:4;18195:2;18184:9;18180:18;18172:26;;18244:9;18238:4;18234:20;18230:1;18219:9;18215:17;18208:47;18272:131;18398:4;18272:131;:::i;:::-;18264:139;;17991:419;;;:::o;18416:222::-;18509:4;18547:2;18536:9;18532:18;18524:26;;18560:71;18628:1;18617:9;18613:17;18604:6;18560:71;:::i;:::-;18416:222;;;;:::o;18644:214::-;18733:4;18771:2;18760:9;18756:18;18748:26;;18784:67;18848:1;18837:9;18833:17;18824:6;18784:67;:::i;:::-;18644:214;;;;:::o;18945:99::-;18997:6;19031:5;19025:12;19015:22;;18945:99;;;:::o;19050:169::-;19134:11;19168:6;19163:3;19156:19;19208:4;19203:3;19199:14;19184:29;;19050:169;;;;:::o;19225:305::-;19265:3;19284:20;19302:1;19284:20;:::i;:::-;19279:25;;19318:20;19336:1;19318:20;:::i;:::-;19313:25;;19472:1;19404:66;19400:74;19397:1;19394:81;19391:107;;;19478:18;;:::i;:::-;19391:107;19522:1;19519;19515:9;19508:16;;19225:305;;;;:::o;19536:848::-;19597:5;19604:4;19628:6;19619:15;;19652:5;19643:14;;19666:712;19687:1;19677:8;19674:15;19666:712;;;19782:4;19777:3;19773:14;19767:4;19764:24;19761:50;;;19791:18;;:::i;:::-;19761:50;19841:1;19831:8;19827:16;19824:451;;;20256:4;20249:5;20245:16;20236:25;;19824:451;20306:4;20300;20296:15;20288:23;;20336:32;20359:8;20336:32;:::i;:::-;20324:44;;19666:712;;;19536:848;;;;;;;:::o;20390:281::-;20448:5;20472:23;20490:4;20472:23;:::i;:::-;20464:31;;20516:25;20532:8;20516:25;:::i;:::-;20504:37;;20560:104;20597:66;20587:8;20581:4;20560:104;:::i;:::-;20551:113;;20390:281;;;;:::o;20677:1073::-;20731:5;20922:8;20912:40;;20943:1;20934:10;;20945:5;;20912:40;20971:4;20961:36;;20988:1;20979:10;;20990:5;;20961:36;21057:4;21105:1;21100:27;;;;21141:1;21136:191;;;;21050:277;;21100:27;21118:1;21109:10;;21120:5;;;21136:191;21181:3;21171:8;21168:17;21165:43;;;21188:18;;:::i;:::-;21165:43;21237:8;21234:1;21230:16;21221:25;;21272:3;21265:5;21262:14;21259:40;;;21279:18;;:::i;:::-;21259:40;21312:5;;;21050:277;;21436:2;21426:8;21423:16;21417:3;21411:4;21408:13;21404:36;21386:2;21376:8;21373:16;21368:2;21362:4;21359:12;21355:35;21339:111;21336:246;;;21492:8;21486:4;21482:19;21473:28;;21527:3;21520:5;21517:14;21514:40;;;21534:18;;:::i;:::-;21514:40;21567:5;;21336:246;21607:42;21645:3;21635:8;21629:4;21626:1;21607:42;:::i;:::-;21592:57;;;;21681:4;21676:3;21672:14;21665:5;21662:25;21659:51;;;21690:18;;:::i;:::-;21659:51;21739:4;21732:5;21728:16;21719:25;;20677:1073;;;;;;:::o;21756:348::-;21796:7;21819:20;21837:1;21819:20;:::i;:::-;21814:25;;21853:20;21871:1;21853:20;:::i;:::-;21848:25;;22041:1;21973:66;21969:74;21966:1;21963:81;21958:1;21951:9;21944:17;21940:105;21937:131;;;22048:18;;:::i;:::-;21937:131;22096:1;22093;22089:9;22078:20;;21756:348;;;;:::o;22110:96::-;22147:7;22176:24;22194:5;22176:24;:::i;:::-;22165:35;;22110:96;;;:::o;22212:90::-;22246:7;22289:5;22282:13;22275:21;22264:32;;22212:90;;;:::o;22308:126::-;22345:7;22385:42;22378:5;22374:54;22363:65;;22308:126;;;:::o;22440:77::-;22477:7;22506:5;22495:16;;22440:77;;;:::o;22523:86::-;22558:7;22598:4;22591:5;22587:16;22576:27;;22523:86;;;:::o;22615:151::-;22690:9;22723:37;22754:5;22723:37;:::i;:::-;22710:50;;22615:151;;;:::o;22772:126::-;22822:9;22855:37;22886:5;22855:37;:::i;:::-;22842:50;;22772:126;;;:::o;22904:113::-;22954:9;22987:24;23005:5;22987:24;:::i;:::-;22974:37;;22904:113;;;:::o;23023:307::-;23091:1;23101:113;23115:6;23112:1;23109:13;23101:113;;;23200:1;23195:3;23191:11;23185:18;23181:1;23176:3;23172:11;23165:39;23137:2;23134:1;23130:10;23125:15;;23101:113;;;23232:6;23229:1;23226:13;23223:101;;;23312:1;23303:6;23298:3;23294:16;23287:27;23223:101;23072:258;23023:307;;;:::o;23336:320::-;23380:6;23417:1;23411:4;23407:12;23397:22;;23464:1;23458:4;23454:12;23485:18;23475:81;;23541:4;23533:6;23529:17;23519:27;;23475:81;23603:2;23595:6;23592:14;23572:18;23569:38;23566:84;;;23622:18;;:::i;:::-;23566:84;23387:269;23336:320;;;:::o;23662:233::-;23701:3;23724:24;23742:5;23724:24;:::i;:::-;23715:33;;23770:66;23763:5;23760:77;23757:103;;;23840:18;;:::i;:::-;23757:103;23887:1;23880:5;23876:13;23869:20;;23662:233;;;:::o;23901:180::-;23949:77;23946:1;23939:88;24046:4;24043:1;24036:15;24070:4;24067:1;24060:15;24087:180;24135:77;24132:1;24125:88;24232:4;24229:1;24222:15;24256:4;24253:1;24246:15;24396:117;24505:1;24502;24495:12;24519:102;24560:6;24611:2;24607:7;24602:2;24595:5;24591:14;24587:28;24577:38;;24519:102;;;:::o;24627:::-;24669:8;24716:5;24713:1;24709:13;24688:34;;24627:102;;;:::o;24735:222::-;24875:34;24871:1;24863:6;24859:14;24852:58;24944:5;24939:2;24931:6;24927:15;24920:30;24735:222;:::o;24963:168::-;25103:20;25099:1;25091:6;25087:14;25080:44;24963:168;:::o;25137:225::-;25277:34;25273:1;25265:6;25261:14;25254:58;25346:8;25341:2;25333:6;25329:15;25322:33;25137:225;:::o;25368:221::-;25508:34;25504:1;25496:6;25492:14;25485:58;25577:4;25572:2;25564:6;25560:15;25553:29;25368:221;:::o;25595:225::-;25735:34;25731:1;25723:6;25719:14;25712:58;25804:8;25799:2;25791:6;25787:15;25780:33;25595:225;:::o;25826:167::-;25966:19;25962:1;25954:6;25950:14;25943:43;25826:167;:::o;25999:227::-;26139:34;26135:1;26127:6;26123:14;26116:58;26208:10;26203:2;26195:6;26191:15;26184:35;25999:227;:::o;26232:182::-;26372:34;26368:1;26360:6;26356:14;26349:58;26232:182;:::o;26420:224::-;26560:34;26556:1;26548:6;26544:14;26537:58;26629:7;26624:2;26616:6;26612:15;26605:32;26420:224;:::o;26650:175::-;26790:27;26786:1;26778:6;26774:14;26767:51;26650:175;:::o;26831:223::-;26971:34;26967:1;26959:6;26955:14;26948:58;27040:6;27035:2;27027:6;27023:15;27016:31;26831:223;:::o;27060:171::-;27200:23;27196:1;27188:6;27184:14;27177:47;27060:171;:::o;27237:165::-;27377:17;27373:1;27365:6;27361:14;27354:41;27237:165;:::o;27408:224::-;27548:34;27544:1;27536:6;27532:14;27525:58;27617:7;27612:2;27604:6;27600:15;27593:32;27408:224;:::o;27638:181::-;27778:33;27774:1;27766:6;27762:14;27755:57;27638:181;:::o;27825:122::-;27898:24;27916:5;27898:24;:::i;:::-;27891:5;27888:35;27878:63;;27937:1;27934;27927:12;27878:63;27825:122;:::o;27953:::-;28026:24;28044:5;28026:24;:::i;:::-;28019:5;28016:35;28006:63;;28065:1;28062;28055:12;28006:63;27953:122;:::o

Swarm Source

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