ETH Price: $3,256.77 (+2.24%)
Gas: 1 Gwei

Token

Bloodshed Bears TokenGenerator (BSBTG)
 

Overview

Max Total Supply

7,000 BSBTG

Holders

293

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
12 BSBTG
0x7d5042Eb49F486b93B152eEeF42cbFEC92bFe57B
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Bloodshed Bears TokenGenerator is a literal $BLD printing machine and must be staked inside the Bloodshed Bears Genesis TreeHouse to yield.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BloodShedBearsTokenGenerator

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-26
*/

// SPDX-License-Identifier: GPL-3.0

/*
 ______     __                            __           __                      __
|_   _ \   [  |                          |  ]         [  |                    |  ]
  | |_) |   | |    .--.     .--.     .--.| |   .--.    | |--.    .---.    .--.| |
  |  __'.   | |  / .'`\ \ / .'`\ \ / /'`\' |  ( (`\]   | .-. |  / /__\\ / /'`\' |
 _| |__) |  | |  | \__. | | \__. | | \__/  |   `'.'.   | | | |  | \__., | \__/  |
|_______/  [___]  '.__.'   '.__.'   '.__.;__] [\__) ) [___]|__]  '.__.'  '.__.;__]
                      ________
                      ___  __ )_____ ______ _________________
                      __  __  |_  _ \_  __ `/__  ___/__  ___/
                      _  /_/ / /  __// /_/ / _  /    _(__  )
                      /_____/  \___/ \__,_/  /_/     /____/
*/

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

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @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;
    }
}
pragma solidity ^0.8.10;

abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    string private _name;
    string private _symbol;
    address[] internal _owners;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint count = 0;
        uint length = _owners.length;
        for( uint i = 0; i < length; ++i ){
            if( owner == _owners[i] ){
                ++count;
            }
        }
        delete length;
        return count;
    }
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721P.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721P.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721P.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721P.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721P.ownerOf(tokenId), to, tokenId);
    }
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.10;

abstract contract ERC721Enum is ERC721P, IERC721Enumerable {
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) {
        require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint count;
        for( uint i; i < _owners.length; ++i ){
            if( owner == _owners[i] ){
                if( count == index )
                    return i;
                else
                    ++count;
            }
        }
        require(false, "ERC721Enum: owner ioob");
    }
    function tokensOfOwner(address owner) public view returns (uint256[] memory) {
        require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob");
        return index;
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

pragma solidity ^0.8.10;

interface IBloodTokenContract {
    function walletsBalances(address wallet) external view returns (uint256);
    function spend(address owner, uint256 amount) external;
}

contract BloodShedBearsTokenGenerator is ERC721Enum, Ownable, Pausable {
    using Strings for uint256;

    uint256 constant private maxSupply = 7000;
    uint256 private teamReserveAvailableMints = 100;
    uint256 private cost = 50000 ether;
    address public bloodTokenContract = 0x0000000000000000000000000000000000000000;

    string private baseURI;

    constructor(
        string memory _initBaseURI
    ) ERC721P("Bloodshed Bears TokenGenerator", "BSBTG") {
        setBaseURI(_initBaseURI);
        pause();
    }

    // internal
    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }

    function setBloodTokenContract(address contractAddress_) external onlyOwner {
        bloodTokenContract = contractAddress_;
    }

    function setCost(uint256 _newCost) external onlyOwner {
        cost = _newCost;
    }

    function mint(uint256 mintAmount_) external payable whenNotPaused {
        uint256 totalSupply = totalSupply();

        require(totalSupply + mintAmount_ <= maxSupply, "TOO MANY");
        require(IBloodTokenContract(bloodTokenContract).walletsBalances(msg.sender) >= mintAmount_ * cost, "NOT ENOUGH");
        IBloodTokenContract(bloodTokenContract).spend(msg.sender, mintAmount_ * cost);

        for (uint256 i = 0; i < mintAmount_; i++) {
            _safeMint(msg.sender, totalSupply + i);
        }

        delete totalSupply;
    }

    function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) {
        require(_exists(_tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0	? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : "";
    }

    // admin minting
    function reserve(address _to, uint256 _reserveAmount) public onlyOwner {
        uint256 supply = totalSupply();
        require(
            _reserveAmount > 0 && _reserveAmount <= teamReserveAvailableMints,
            "Not enough reserve left for team"
        );
        for (uint256 i = 0; i < _reserveAmount; i++) {
            _safeMint(_to, supply + i);
        }
        teamReserveAvailableMints -= _reserveAmount;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function isOwnerOfBatch(uint256[] calldata tokenIds_, address address_) external view returns (bool) {
        bool ownership = true;

        for (uint256 i = 0; i < tokenIds_.length; ++i) {
            ownership = ownership && (ownerOf(tokenIds_[i]) == address_);
        }

        return ownership;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bloodTokenContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address","name":"address_","type":"address"}],"name":"isOwnerOfBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress_","type":"address"}],"name":"setBloodTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526064600655690a968163f0a57b4000006007556000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b5060405162004ad438038062004ad483398181016040528101906200008c9190620006ef565b6040518060400160405280601e81526020017f426c6f6f647368656420426561727320546f6b656e47656e657261746f7200008152506040518060400160405280600581526020017f4253425447000000000000000000000000000000000000000000000000000000815250816000908051906020019062000110929190620004a2565b50806001908051906020019062000129929190620004a2565b5050506200014c620001406200018f60201b60201c565b6200019760201b60201c565b6000600560146101000a81548160ff02191690831515021790555062000178816200025d60201b60201c565b620001886200030860201b60201c565b50620008fc565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200026d6200018f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000293620003a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e390620007a1565b60405180910390fd5b806009908051906020019062000304929190620004a2565b5050565b620003186200018f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200033e620003a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000397576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038e90620007a1565b60405180910390fd5b620003a7620003d360201b60201c565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003e36200048b60201b60201c565b1562000426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041d9062000813565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004726200018f60201b60201c565b6040516200048191906200087a565b60405180910390a1565b6000600560149054906101000a900460ff16905090565b828054620004b090620008c6565b90600052602060002090601f016020900481019282620004d4576000855562000520565b82601f10620004ef57805160ff191683800117855562000520565b8280016001018555821562000520579182015b828111156200051f57825182559160200191906001019062000502565b5b5090506200052f919062000533565b5090565b5b808211156200054e57600081600090555060010162000534565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005bb8262000570565b810181811067ffffffffffffffff82111715620005dd57620005dc62000581565b5b80604052505050565b6000620005f262000552565b9050620006008282620005b0565b919050565b600067ffffffffffffffff82111562000623576200062262000581565b5b6200062e8262000570565b9050602081019050919050565b60005b838110156200065b5780820151818401526020810190506200063e565b838111156200066b576000848401525b50505050565b600062000688620006828462000605565b620005e6565b905082815260208101848484011115620006a757620006a66200056b565b5b620006b48482856200063b565b509392505050565b600082601f830112620006d457620006d362000566565b5b8151620006e684826020860162000671565b91505092915050565b6000602082840312156200070857620007076200055c565b5b600082015167ffffffffffffffff81111562000729576200072862000561565b5b6200073784828501620006bc565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200078960208362000740565b9150620007968262000751565b602082019050919050565b60006020820190508181036000830152620007bc816200077a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620007fb60108362000740565b91506200080882620007c3565b602082019050919050565b600060208201905081810360008301526200082e81620007ec565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008628262000835565b9050919050565b620008748162000855565b82525050565b600060208201905062000891600083018462000869565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008df57607f821691505b60208210811415620008f657620008f562000897565b5b50919050565b6141c8806200090c6000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f75780639b355c2011610095578063c87b56dd11610064578063c87b56dd14610665578063cc47a40b146106a2578063e985e9c5146106cb578063f2fde38b14610708576101cd565b80639b355c20146105cc578063a0712d68146105f7578063a22cb46514610613578063b88d4fde1461063c576101cd565b80638456cb59116100d15780638456cb59146105225780638462151c146105395780638da5cb5b1461057657806395d89b41146105a1576101cd565b806370a08231146104a5578063715018a6146104e25780637f9a62dc146104f9576101cd565b80633f4ba83a1161016f57806355f804b31161013e57806355f804b3146103d75780635c975abb146104005780636352211e1461042b5780636f9bdf6514610468576101cd565b80633f4ba83a1461033157806342842e0e1461034857806344a0d68a146103715780634f6ccce71461039a576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906129b3565b610731565b60405161020691906129fb565b60405180910390f35b34801561021b57600080fd5b506102246107ab565b6040516102319190612aaf565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612b07565b61083d565b60405161026e9190612b75565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612bbc565b6108c2565b005b3480156102ac57600080fd5b506102b56109da565b6040516102c29190612c0b565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612c26565b6109e7565b005b34801561030057600080fd5b5061031b60048036038101906103169190612bbc565b610a47565b6040516103289190612c0b565b60405180910390f35b34801561033d57600080fd5b50610346610b90565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612c26565b610c16565b005b34801561037d57600080fd5b5061039860048036038101906103939190612b07565b610c36565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612b07565b610cbc565b6040516103ce9190612c0b565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612dae565b610d0f565b005b34801561040c57600080fd5b50610415610da5565b60405161042291906129fb565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190612b07565b610dbc565b60405161045f9190612b75565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612e57565b610e79565b60405161049c91906129fb565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190612eb7565b610f06565b6040516104d99190612c0b565b60405180910390f35b3480156104ee57600080fd5b506104f761102c565b005b34801561050557600080fd5b50610520600480360381019061051b9190612eb7565b6110b4565b005b34801561052e57600080fd5b50610537611174565b005b34801561054557600080fd5b50610560600480360381019061055b9190612eb7565b6111fa565b60405161056d9190612fa2565b60405180910390f35b34801561058257600080fd5b5061058b6112f3565b6040516105989190612b75565b60405180910390f35b3480156105ad57600080fd5b506105b661131d565b6040516105c39190612aaf565b60405180910390f35b3480156105d857600080fd5b506105e16113af565b6040516105ee9190612b75565b60405180910390f35b610611600480360381019061060c9190612b07565b6113d5565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612ff0565b61163c565b005b34801561064857600080fd5b50610663600480360381019061065e91906130d1565b6117bd565b005b34801561067157600080fd5b5061068c60048036038101906106879190612b07565b61181f565b6040516106999190612aaf565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190612bbc565b6118c6565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613154565b6119f1565b6040516106ff91906129fb565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190612eb7565b611a85565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a457506107a382611b7d565b5b9050919050565b6060600080546107ba906131c3565b80601f01602080910402602001604051908101604052809291908181526020018280546107e6906131c3565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b5050505050905090565b600061084882611c5f565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613267565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108cd82610dbc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610935906132f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095d611ce7565b73ffffffffffffffffffffffffffffffffffffffff16148061098c575061098b81610986611ce7565b6119f1565b5b6109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c29061338b565b60405180910390fd5b6109d58383611cef565b505050565b6000600280549050905090565b6109f86109f2611ce7565b82611da8565b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e9061341d565b60405180910390fd5b610a42838383611e86565b505050565b6000610a5283610f06565b8210610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90613489565b60405180910390fd5b6000805b600280549050811015610b465760028181548110610ab857610ab76134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610b355783821415610b28578092505050610b8a565b81610b3290613507565b91505b80610b3f90613507565b9050610a97565b506000610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90613489565b60405180910390fd5b505b92915050565b610b98611ce7565b73ffffffffffffffffffffffffffffffffffffffff16610bb66112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061359c565b60405180910390fd5b610c1461203f565b565b610c31838383604051806020016040528060008152506117bd565b505050565b610c3e611ce7565b73ffffffffffffffffffffffffffffffffffffffff16610c5c6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca99061359c565b60405180910390fd5b8060078190555050565b6000610cc66109da565b8210610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613608565b60405180910390fd5b819050919050565b610d17611ce7565b73ffffffffffffffffffffffffffffffffffffffff16610d356112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d829061359c565b60405180910390fd5b8060099080519060200190610da19291906128a4565b5050565b6000600560149054906101000a900460ff16905090565b60008060028381548110610dd357610dd26134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e679061369a565b60405180910390fd5b80915050919050565b6000806001905060005b85859050811015610efa57818015610ee757508373ffffffffffffffffffffffffffffffffffffffff16610ecf878784818110610ec357610ec26134a9565b5b90506020020135610dbc565b73ffffffffffffffffffffffffffffffffffffffff16145b915080610ef390613507565b9050610e83565b50809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e9061372c565b60405180910390fd5b600080600280549050905060005b8181101561101d5760028181548110610fa157610fa06134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561100c578261100990613507565b92505b8061101690613507565b9050610f85565b50600090508192505050919050565b611034611ce7565b73ffffffffffffffffffffffffffffffffffffffff166110526112f3565b73ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f9061359c565b60405180910390fd5b6110b260006120e1565b565b6110bc611ce7565b73ffffffffffffffffffffffffffffffffffffffff166110da6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111279061359c565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117c611ce7565b73ffffffffffffffffffffffffffffffffffffffff1661119a6112f3565b73ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e79061359c565b60405180910390fd5b6111f86121a7565b565b606061120582610f06565b600010611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613489565b60405180910390fd5b600061125283610f06565b905060008167ffffffffffffffff8111156112705761126f612c83565b5b60405190808252806020026020018201604052801561129e5781602001602082028036833780820191505090505b50905060005b828110156112e8576112b68582610a47565b8282815181106112c9576112c86134a9565b5b60200260200101818152505080806112e090613507565b9150506112a4565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132c906131c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611358906131c3565b80156113a55780601f1061137a576101008083540402835291602001916113a5565b820191906000526020600020905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113dd610da5565b1561141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613798565b60405180910390fd5b60006114276109da565b9050611b58828261143891906137b8565b1115611479576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114709061385a565b60405180910390fd5b60075482611487919061387a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663590a4d6a336040518263ffffffff1660e01b81526004016114e29190612b75565b602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152391906138e9565b1015611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613962565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca333600754856115b1919061387a565b6040518363ffffffff1660e01b81526004016115ce929190613982565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b5050505060005b828110156116335761162033828461161b91906137b8565b61224a565b808061162b90613507565b915050611603565b50600090505050565b611644611ce7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a9906139f7565b60405180910390fd5b80600460006116bf611ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661176c611ce7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117b191906129fb565b60405180910390a35050565b6117ce6117c8611ce7565b83611da8565b61180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118049061341d565b60405180910390fd5b61181984848484612268565b50505050565b606061182a82611c5f565b611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186090613a89565b60405180910390fd5b60006118736122c4565b9050600081511161189357604051806020016040528060008152506118be565b8061189d84612356565b6040516020016118ae929190613b31565b6040516020818303038152906040525b915050919050565b6118ce611ce7565b73ffffffffffffffffffffffffffffffffffffffff166118ec6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119399061359c565b60405180910390fd5b600061194c6109da565b905060008211801561196057506006548211155b61199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613bac565b60405180910390fd5b60005b828110156119d2576119bf8482846119ba91906137b8565b61224a565b80806119ca90613507565b9150506119a2565b5081600660008282546119e59190613bcc565b92505081905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a8d611ce7565b73ffffffffffffffffffffffffffffffffffffffff16611aab6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061359c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890613c72565b60405180910390fd5b611b7a816120e1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c4857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c585750611c57826124b7565b5b9050919050565b600060028054905082108015611ce05750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611c9c57611c9b6134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6283610dbc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611db382611c5f565b611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613d04565b60405180910390fd5b6000611dfd83610dbc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e6c57508373ffffffffffffffffffffffffffffffffffffffff16611e548461083d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e7d5750611e7c81856119f1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ea682610dbc565b73ffffffffffffffffffffffffffffffffffffffff1614611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613d96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390613e28565b60405180910390fd5b611f77838383612521565b611f82600082611cef565b8160028281548110611f9757611f966134a9565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612047610da5565b612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207d90613e94565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6120ca611ce7565b6040516120d79190612b75565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121af610da5565b156121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690613798565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612233611ce7565b6040516122409190612b75565b60405180910390a1565b612264828260405180602001604052806000815250612526565b5050565b612273848484611e86565b61227f84848484612581565b6122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613f26565b60405180910390fd5b50505050565b6060600980546122d3906131c3565b80601f01602080910402602001604051908101604052809291908181526020018280546122ff906131c3565b801561234c5780601f106123215761010080835404028352916020019161234c565b820191906000526020600020905b81548152906001019060200180831161232f57829003601f168201915b5050505050905090565b6060600082141561239e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b2565b600082905060005b600082146123d05780806123b990613507565b915050600a826123c99190613f75565b91506123a6565b60008167ffffffffffffffff8111156123ec576123eb612c83565b5b6040519080825280601f01601f19166020018201604052801561241e5781602001600182028036833780820191505090505b5090505b600085146124ab576001826124379190613bcc565b9150600a856124469190613fa6565b603061245291906137b8565b60f81b818381518110612468576124676134a9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a49190613f75565b9450612422565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6125308383612709565b61253d6000848484612581565b61257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390613f26565b60405180910390fd5b505050565b60006125a28473ffffffffffffffffffffffffffffffffffffffff16612891565b156126fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125cb611ce7565b8786866040518563ffffffff1660e01b81526004016125ed949392919061402c565b6020604051808303816000875af192505050801561262957506040513d601f19601f82011682018060405250810190612626919061408d565b60015b6126ac573d8060008114612659576040519150601f19603f3d011682016040523d82523d6000602084013e61265e565b606091505b506000815114156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90613f26565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612701565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277090614106565b60405180910390fd5b61278281611c5f565b156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990614172565b60405180910390fd5b6127ce60008383612521565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546128b0906131c3565b90600052602060002090601f0160209004810192826128d25760008555612919565b82601f106128eb57805160ff1916838001178555612919565b82800160010185558215612919579182015b828111156129185782518255916020019190600101906128fd565b5b509050612926919061292a565b5090565b5b8082111561294357600081600090555060010161292b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129908161295b565b811461299b57600080fd5b50565b6000813590506129ad81612987565b92915050565b6000602082840312156129c9576129c8612951565b5b60006129d78482850161299e565b91505092915050565b60008115159050919050565b6129f5816129e0565b82525050565b6000602082019050612a1060008301846129ec565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a50578082015181840152602081019050612a35565b83811115612a5f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a8182612a16565b612a8b8185612a21565b9350612a9b818560208601612a32565b612aa481612a65565b840191505092915050565b60006020820190508181036000830152612ac98184612a76565b905092915050565b6000819050919050565b612ae481612ad1565b8114612aef57600080fd5b50565b600081359050612b0181612adb565b92915050565b600060208284031215612b1d57612b1c612951565b5b6000612b2b84828501612af2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5f82612b34565b9050919050565b612b6f81612b54565b82525050565b6000602082019050612b8a6000830184612b66565b92915050565b612b9981612b54565b8114612ba457600080fd5b50565b600081359050612bb681612b90565b92915050565b60008060408385031215612bd357612bd2612951565b5b6000612be185828601612ba7565b9250506020612bf285828601612af2565b9150509250929050565b612c0581612ad1565b82525050565b6000602082019050612c206000830184612bfc565b92915050565b600080600060608486031215612c3f57612c3e612951565b5b6000612c4d86828701612ba7565b9350506020612c5e86828701612ba7565b9250506040612c6f86828701612af2565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612cbb82612a65565b810181811067ffffffffffffffff82111715612cda57612cd9612c83565b5b80604052505050565b6000612ced612947565b9050612cf98282612cb2565b919050565b600067ffffffffffffffff821115612d1957612d18612c83565b5b612d2282612a65565b9050602081019050919050565b82818337600083830152505050565b6000612d51612d4c84612cfe565b612ce3565b905082815260208101848484011115612d6d57612d6c612c7e565b5b612d78848285612d2f565b509392505050565b600082601f830112612d9557612d94612c79565b5b8135612da5848260208601612d3e565b91505092915050565b600060208284031215612dc457612dc3612951565b5b600082013567ffffffffffffffff811115612de257612de1612956565b5b612dee84828501612d80565b91505092915050565b600080fd5b600080fd5b60008083601f840112612e1757612e16612c79565b5b8235905067ffffffffffffffff811115612e3457612e33612df7565b5b602083019150836020820283011115612e5057612e4f612dfc565b5b9250929050565b600080600060408486031215612e7057612e6f612951565b5b600084013567ffffffffffffffff811115612e8e57612e8d612956565b5b612e9a86828701612e01565b93509350506020612ead86828701612ba7565b9150509250925092565b600060208284031215612ecd57612ecc612951565b5b6000612edb84828501612ba7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f1981612ad1565b82525050565b6000612f2b8383612f10565b60208301905092915050565b6000602082019050919050565b6000612f4f82612ee4565b612f598185612eef565b9350612f6483612f00565b8060005b83811015612f95578151612f7c8882612f1f565b9750612f8783612f37565b925050600181019050612f68565b5085935050505092915050565b60006020820190508181036000830152612fbc8184612f44565b905092915050565b612fcd816129e0565b8114612fd857600080fd5b50565b600081359050612fea81612fc4565b92915050565b6000806040838503121561300757613006612951565b5b600061301585828601612ba7565b925050602061302685828601612fdb565b9150509250929050565b600067ffffffffffffffff82111561304b5761304a612c83565b5b61305482612a65565b9050602081019050919050565b600061307461306f84613030565b612ce3565b9050828152602081018484840111156130905761308f612c7e565b5b61309b848285612d2f565b509392505050565b600082601f8301126130b8576130b7612c79565b5b81356130c8848260208601613061565b91505092915050565b600080600080608085870312156130eb576130ea612951565b5b60006130f987828801612ba7565b945050602061310a87828801612ba7565b935050604061311b87828801612af2565b925050606085013567ffffffffffffffff81111561313c5761313b612956565b5b613148878288016130a3565b91505092959194509250565b6000806040838503121561316b5761316a612951565b5b600061317985828601612ba7565b925050602061318a85828601612ba7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131db57607f821691505b602082108114156131ef576131ee613194565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613251602c83612a21565b915061325c826131f5565b604082019050919050565b6000602082019050818103600083015261328081613244565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006132e3602183612a21565b91506132ee82613287565b604082019050919050565b60006020820190508181036000830152613312816132d6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613375603883612a21565b915061338082613319565b604082019050919050565b600060208201905081810360008301526133a481613368565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613407603183612a21565b9150613412826133ab565b604082019050919050565b60006020820190508181036000830152613436816133fa565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613473601683612a21565b915061347e8261343d565b602082019050919050565b600060208201905081810360008301526134a281613466565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351282612ad1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613545576135446134d8565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613586602083612a21565b915061359182613550565b602082019050919050565b600060208201905081810360008301526135b581613579565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b60006135f2601783612a21565b91506135fd826135bc565b602082019050919050565b60006020820190508181036000830152613621816135e5565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613684602983612a21565b915061368f82613628565b604082019050919050565b600060208201905081810360008301526136b381613677565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613716602a83612a21565b9150613721826136ba565b604082019050919050565b6000602082019050818103600083015261374581613709565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613782601083612a21565b915061378d8261374c565b602082019050919050565b600060208201905081810360008301526137b181613775565b9050919050565b60006137c382612ad1565b91506137ce83612ad1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613803576138026134d8565b5b828201905092915050565b7f544f4f204d414e59000000000000000000000000000000000000000000000000600082015250565b6000613844600883612a21565b915061384f8261380e565b602082019050919050565b6000602082019050818103600083015261387381613837565b9050919050565b600061388582612ad1565b915061389083612ad1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c9576138c86134d8565b5b828202905092915050565b6000815190506138e381612adb565b92915050565b6000602082840312156138ff576138fe612951565b5b600061390d848285016138d4565b91505092915050565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b600061394c600a83612a21565b915061395782613916565b602082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b60006040820190506139976000830185612b66565b6139a46020830184612bfc565b9392505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006139e1601983612a21565b91506139ec826139ab565b602082019050919050565b60006020820190508181036000830152613a10816139d4565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a73602183612a21565b9150613a7e82613a17565b604082019050919050565b60006020820190508181036000830152613aa281613a66565b9050919050565b600081905092915050565b6000613abf82612a16565b613ac98185613aa9565b9350613ad9818560208601612a32565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613b1b600583613aa9565b9150613b2682613ae5565b600582019050919050565b6000613b3d8285613ab4565b9150613b498284613ab4565b9150613b5482613b0e565b91508190509392505050565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b6000613b96602083612a21565b9150613ba182613b60565b602082019050919050565b60006020820190508181036000830152613bc581613b89565b9050919050565b6000613bd782612ad1565b9150613be283612ad1565b925082821015613bf557613bf46134d8565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c5c602683612a21565b9150613c6782613c00565b604082019050919050565b60006020820190508181036000830152613c8b81613c4f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613cee602c83612a21565b9150613cf982613c92565b604082019050919050565b60006020820190508181036000830152613d1d81613ce1565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613d80602983612a21565b9150613d8b82613d24565b604082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e12602483612a21565b9150613e1d82613db6565b604082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613e7e601483612a21565b9150613e8982613e48565b602082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613f10603283612a21565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f8082612ad1565b9150613f8b83612ad1565b925082613f9b57613f9a613f46565b5b828204905092915050565b6000613fb182612ad1565b9150613fbc83612ad1565b925082613fcc57613fcb613f46565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000613ffe82613fd7565b6140088185613fe2565b9350614018818560208601612a32565b61402181612a65565b840191505092915050565b60006080820190506140416000830187612b66565b61404e6020830186612b66565b61405b6040830185612bfc565b818103606083015261406d8184613ff3565b905095945050505050565b60008151905061408781612987565b92915050565b6000602082840312156140a3576140a2612951565b5b60006140b184828501614078565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006140f0602083612a21565b91506140fb826140ba565b602082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061415c601c83612a21565b915061416782614126565b602082019050919050565b6000602082019050818103600083015261418b8161414f565b905091905056fea264697066735822122047219df748349108279132f9e740e713073ff5a5b5654046bd9e6332c9f29e8664736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d62656172732d746f6b656e2d67656e657261746f722f6d657461646174612f0000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c806370a08231116100f75780639b355c2011610095578063c87b56dd11610064578063c87b56dd14610665578063cc47a40b146106a2578063e985e9c5146106cb578063f2fde38b14610708576101cd565b80639b355c20146105cc578063a0712d68146105f7578063a22cb46514610613578063b88d4fde1461063c576101cd565b80638456cb59116100d15780638456cb59146105225780638462151c146105395780638da5cb5b1461057657806395d89b41146105a1576101cd565b806370a08231146104a5578063715018a6146104e25780637f9a62dc146104f9576101cd565b80633f4ba83a1161016f57806355f804b31161013e57806355f804b3146103d75780635c975abb146104005780636352211e1461042b5780636f9bdf6514610468576101cd565b80633f4ba83a1461033157806342842e0e1461034857806344a0d68a146103715780634f6ccce71461039a576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906129b3565b610731565b60405161020691906129fb565b60405180910390f35b34801561021b57600080fd5b506102246107ab565b6040516102319190612aaf565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612b07565b61083d565b60405161026e9190612b75565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612bbc565b6108c2565b005b3480156102ac57600080fd5b506102b56109da565b6040516102c29190612c0b565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612c26565b6109e7565b005b34801561030057600080fd5b5061031b60048036038101906103169190612bbc565b610a47565b6040516103289190612c0b565b60405180910390f35b34801561033d57600080fd5b50610346610b90565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612c26565b610c16565b005b34801561037d57600080fd5b5061039860048036038101906103939190612b07565b610c36565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612b07565b610cbc565b6040516103ce9190612c0b565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190612dae565b610d0f565b005b34801561040c57600080fd5b50610415610da5565b60405161042291906129fb565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190612b07565b610dbc565b60405161045f9190612b75565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612e57565b610e79565b60405161049c91906129fb565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190612eb7565b610f06565b6040516104d99190612c0b565b60405180910390f35b3480156104ee57600080fd5b506104f761102c565b005b34801561050557600080fd5b50610520600480360381019061051b9190612eb7565b6110b4565b005b34801561052e57600080fd5b50610537611174565b005b34801561054557600080fd5b50610560600480360381019061055b9190612eb7565b6111fa565b60405161056d9190612fa2565b60405180910390f35b34801561058257600080fd5b5061058b6112f3565b6040516105989190612b75565b60405180910390f35b3480156105ad57600080fd5b506105b661131d565b6040516105c39190612aaf565b60405180910390f35b3480156105d857600080fd5b506105e16113af565b6040516105ee9190612b75565b60405180910390f35b610611600480360381019061060c9190612b07565b6113d5565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612ff0565b61163c565b005b34801561064857600080fd5b50610663600480360381019061065e91906130d1565b6117bd565b005b34801561067157600080fd5b5061068c60048036038101906106879190612b07565b61181f565b6040516106999190612aaf565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190612bbc565b6118c6565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613154565b6119f1565b6040516106ff91906129fb565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190612eb7565b611a85565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a457506107a382611b7d565b5b9050919050565b6060600080546107ba906131c3565b80601f01602080910402602001604051908101604052809291908181526020018280546107e6906131c3565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b5050505050905090565b600061084882611c5f565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613267565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108cd82610dbc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610935906132f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095d611ce7565b73ffffffffffffffffffffffffffffffffffffffff16148061098c575061098b81610986611ce7565b6119f1565b5b6109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c29061338b565b60405180910390fd5b6109d58383611cef565b505050565b6000600280549050905090565b6109f86109f2611ce7565b82611da8565b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e9061341d565b60405180910390fd5b610a42838383611e86565b505050565b6000610a5283610f06565b8210610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90613489565b60405180910390fd5b6000805b600280549050811015610b465760028181548110610ab857610ab76134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610b355783821415610b28578092505050610b8a565b81610b3290613507565b91505b80610b3f90613507565b9050610a97565b506000610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90613489565b60405180910390fd5b505b92915050565b610b98611ce7565b73ffffffffffffffffffffffffffffffffffffffff16610bb66112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061359c565b60405180910390fd5b610c1461203f565b565b610c31838383604051806020016040528060008152506117bd565b505050565b610c3e611ce7565b73ffffffffffffffffffffffffffffffffffffffff16610c5c6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca99061359c565b60405180910390fd5b8060078190555050565b6000610cc66109da565b8210610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613608565b60405180910390fd5b819050919050565b610d17611ce7565b73ffffffffffffffffffffffffffffffffffffffff16610d356112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d829061359c565b60405180910390fd5b8060099080519060200190610da19291906128a4565b5050565b6000600560149054906101000a900460ff16905090565b60008060028381548110610dd357610dd26134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e679061369a565b60405180910390fd5b80915050919050565b6000806001905060005b85859050811015610efa57818015610ee757508373ffffffffffffffffffffffffffffffffffffffff16610ecf878784818110610ec357610ec26134a9565b5b90506020020135610dbc565b73ffffffffffffffffffffffffffffffffffffffff16145b915080610ef390613507565b9050610e83565b50809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e9061372c565b60405180910390fd5b600080600280549050905060005b8181101561101d5760028181548110610fa157610fa06134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561100c578261100990613507565b92505b8061101690613507565b9050610f85565b50600090508192505050919050565b611034611ce7565b73ffffffffffffffffffffffffffffffffffffffff166110526112f3565b73ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f9061359c565b60405180910390fd5b6110b260006120e1565b565b6110bc611ce7565b73ffffffffffffffffffffffffffffffffffffffff166110da6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111279061359c565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117c611ce7565b73ffffffffffffffffffffffffffffffffffffffff1661119a6112f3565b73ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e79061359c565b60405180910390fd5b6111f86121a7565b565b606061120582610f06565b600010611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613489565b60405180910390fd5b600061125283610f06565b905060008167ffffffffffffffff8111156112705761126f612c83565b5b60405190808252806020026020018201604052801561129e5781602001602082028036833780820191505090505b50905060005b828110156112e8576112b68582610a47565b8282815181106112c9576112c86134a9565b5b60200260200101818152505080806112e090613507565b9150506112a4565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132c906131c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611358906131c3565b80156113a55780601f1061137a576101008083540402835291602001916113a5565b820191906000526020600020905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113dd610da5565b1561141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613798565b60405180910390fd5b60006114276109da565b9050611b58828261143891906137b8565b1115611479576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114709061385a565b60405180910390fd5b60075482611487919061387a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663590a4d6a336040518263ffffffff1660e01b81526004016114e29190612b75565b602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152391906138e9565b1015611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613962565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca333600754856115b1919061387a565b6040518363ffffffff1660e01b81526004016115ce929190613982565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b5050505060005b828110156116335761162033828461161b91906137b8565b61224a565b808061162b90613507565b915050611603565b50600090505050565b611644611ce7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a9906139f7565b60405180910390fd5b80600460006116bf611ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661176c611ce7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117b191906129fb565b60405180910390a35050565b6117ce6117c8611ce7565b83611da8565b61180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118049061341d565b60405180910390fd5b61181984848484612268565b50505050565b606061182a82611c5f565b611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186090613a89565b60405180910390fd5b60006118736122c4565b9050600081511161189357604051806020016040528060008152506118be565b8061189d84612356565b6040516020016118ae929190613b31565b6040516020818303038152906040525b915050919050565b6118ce611ce7565b73ffffffffffffffffffffffffffffffffffffffff166118ec6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119399061359c565b60405180910390fd5b600061194c6109da565b905060008211801561196057506006548211155b61199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613bac565b60405180910390fd5b60005b828110156119d2576119bf8482846119ba91906137b8565b61224a565b80806119ca90613507565b9150506119a2565b5081600660008282546119e59190613bcc565b92505081905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a8d611ce7565b73ffffffffffffffffffffffffffffffffffffffff16611aab6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061359c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890613c72565b60405180910390fd5b611b7a816120e1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c4857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c585750611c57826124b7565b5b9050919050565b600060028054905082108015611ce05750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611c9c57611c9b6134a9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6283610dbc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611db382611c5f565b611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613d04565b60405180910390fd5b6000611dfd83610dbc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e6c57508373ffffffffffffffffffffffffffffffffffffffff16611e548461083d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e7d5750611e7c81856119f1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ea682610dbc565b73ffffffffffffffffffffffffffffffffffffffff1614611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613d96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390613e28565b60405180910390fd5b611f77838383612521565b611f82600082611cef565b8160028281548110611f9757611f966134a9565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612047610da5565b612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207d90613e94565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6120ca611ce7565b6040516120d79190612b75565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121af610da5565b156121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690613798565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612233611ce7565b6040516122409190612b75565b60405180910390a1565b612264828260405180602001604052806000815250612526565b5050565b612273848484611e86565b61227f84848484612581565b6122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613f26565b60405180910390fd5b50505050565b6060600980546122d3906131c3565b80601f01602080910402602001604051908101604052809291908181526020018280546122ff906131c3565b801561234c5780601f106123215761010080835404028352916020019161234c565b820191906000526020600020905b81548152906001019060200180831161232f57829003601f168201915b5050505050905090565b6060600082141561239e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b2565b600082905060005b600082146123d05780806123b990613507565b915050600a826123c99190613f75565b91506123a6565b60008167ffffffffffffffff8111156123ec576123eb612c83565b5b6040519080825280601f01601f19166020018201604052801561241e5781602001600182028036833780820191505090505b5090505b600085146124ab576001826124379190613bcc565b9150600a856124469190613fa6565b603061245291906137b8565b60f81b818381518110612468576124676134a9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a49190613f75565b9450612422565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6125308383612709565b61253d6000848484612581565b61257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390613f26565b60405180910390fd5b505050565b60006125a28473ffffffffffffffffffffffffffffffffffffffff16612891565b156126fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125cb611ce7565b8786866040518563ffffffff1660e01b81526004016125ed949392919061402c565b6020604051808303816000875af192505050801561262957506040513d601f19601f82011682018060405250810190612626919061408d565b60015b6126ac573d8060008114612659576040519150601f19603f3d011682016040523d82523d6000602084013e61265e565b606091505b506000815114156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90613f26565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612701565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277090614106565b60405180910390fd5b61278281611c5f565b156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990614172565b60405180910390fd5b6127ce60008383612521565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546128b0906131c3565b90600052602060002090601f0160209004810192826128d25760008555612919565b82601f106128eb57805160ff1916838001178555612919565b82800160010185558215612919579182015b828111156129185782518255916020019190600101906128fd565b5b509050612926919061292a565b5090565b5b8082111561294357600081600090555060010161292b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129908161295b565b811461299b57600080fd5b50565b6000813590506129ad81612987565b92915050565b6000602082840312156129c9576129c8612951565b5b60006129d78482850161299e565b91505092915050565b60008115159050919050565b6129f5816129e0565b82525050565b6000602082019050612a1060008301846129ec565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a50578082015181840152602081019050612a35565b83811115612a5f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a8182612a16565b612a8b8185612a21565b9350612a9b818560208601612a32565b612aa481612a65565b840191505092915050565b60006020820190508181036000830152612ac98184612a76565b905092915050565b6000819050919050565b612ae481612ad1565b8114612aef57600080fd5b50565b600081359050612b0181612adb565b92915050565b600060208284031215612b1d57612b1c612951565b5b6000612b2b84828501612af2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5f82612b34565b9050919050565b612b6f81612b54565b82525050565b6000602082019050612b8a6000830184612b66565b92915050565b612b9981612b54565b8114612ba457600080fd5b50565b600081359050612bb681612b90565b92915050565b60008060408385031215612bd357612bd2612951565b5b6000612be185828601612ba7565b9250506020612bf285828601612af2565b9150509250929050565b612c0581612ad1565b82525050565b6000602082019050612c206000830184612bfc565b92915050565b600080600060608486031215612c3f57612c3e612951565b5b6000612c4d86828701612ba7565b9350506020612c5e86828701612ba7565b9250506040612c6f86828701612af2565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612cbb82612a65565b810181811067ffffffffffffffff82111715612cda57612cd9612c83565b5b80604052505050565b6000612ced612947565b9050612cf98282612cb2565b919050565b600067ffffffffffffffff821115612d1957612d18612c83565b5b612d2282612a65565b9050602081019050919050565b82818337600083830152505050565b6000612d51612d4c84612cfe565b612ce3565b905082815260208101848484011115612d6d57612d6c612c7e565b5b612d78848285612d2f565b509392505050565b600082601f830112612d9557612d94612c79565b5b8135612da5848260208601612d3e565b91505092915050565b600060208284031215612dc457612dc3612951565b5b600082013567ffffffffffffffff811115612de257612de1612956565b5b612dee84828501612d80565b91505092915050565b600080fd5b600080fd5b60008083601f840112612e1757612e16612c79565b5b8235905067ffffffffffffffff811115612e3457612e33612df7565b5b602083019150836020820283011115612e5057612e4f612dfc565b5b9250929050565b600080600060408486031215612e7057612e6f612951565b5b600084013567ffffffffffffffff811115612e8e57612e8d612956565b5b612e9a86828701612e01565b93509350506020612ead86828701612ba7565b9150509250925092565b600060208284031215612ecd57612ecc612951565b5b6000612edb84828501612ba7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f1981612ad1565b82525050565b6000612f2b8383612f10565b60208301905092915050565b6000602082019050919050565b6000612f4f82612ee4565b612f598185612eef565b9350612f6483612f00565b8060005b83811015612f95578151612f7c8882612f1f565b9750612f8783612f37565b925050600181019050612f68565b5085935050505092915050565b60006020820190508181036000830152612fbc8184612f44565b905092915050565b612fcd816129e0565b8114612fd857600080fd5b50565b600081359050612fea81612fc4565b92915050565b6000806040838503121561300757613006612951565b5b600061301585828601612ba7565b925050602061302685828601612fdb565b9150509250929050565b600067ffffffffffffffff82111561304b5761304a612c83565b5b61305482612a65565b9050602081019050919050565b600061307461306f84613030565b612ce3565b9050828152602081018484840111156130905761308f612c7e565b5b61309b848285612d2f565b509392505050565b600082601f8301126130b8576130b7612c79565b5b81356130c8848260208601613061565b91505092915050565b600080600080608085870312156130eb576130ea612951565b5b60006130f987828801612ba7565b945050602061310a87828801612ba7565b935050604061311b87828801612af2565b925050606085013567ffffffffffffffff81111561313c5761313b612956565b5b613148878288016130a3565b91505092959194509250565b6000806040838503121561316b5761316a612951565b5b600061317985828601612ba7565b925050602061318a85828601612ba7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131db57607f821691505b602082108114156131ef576131ee613194565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613251602c83612a21565b915061325c826131f5565b604082019050919050565b6000602082019050818103600083015261328081613244565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006132e3602183612a21565b91506132ee82613287565b604082019050919050565b60006020820190508181036000830152613312816132d6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613375603883612a21565b915061338082613319565b604082019050919050565b600060208201905081810360008301526133a481613368565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613407603183612a21565b9150613412826133ab565b604082019050919050565b60006020820190508181036000830152613436816133fa565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613473601683612a21565b915061347e8261343d565b602082019050919050565b600060208201905081810360008301526134a281613466565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351282612ad1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613545576135446134d8565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613586602083612a21565b915061359182613550565b602082019050919050565b600060208201905081810360008301526135b581613579565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b60006135f2601783612a21565b91506135fd826135bc565b602082019050919050565b60006020820190508181036000830152613621816135e5565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613684602983612a21565b915061368f82613628565b604082019050919050565b600060208201905081810360008301526136b381613677565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613716602a83612a21565b9150613721826136ba565b604082019050919050565b6000602082019050818103600083015261374581613709565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613782601083612a21565b915061378d8261374c565b602082019050919050565b600060208201905081810360008301526137b181613775565b9050919050565b60006137c382612ad1565b91506137ce83612ad1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613803576138026134d8565b5b828201905092915050565b7f544f4f204d414e59000000000000000000000000000000000000000000000000600082015250565b6000613844600883612a21565b915061384f8261380e565b602082019050919050565b6000602082019050818103600083015261387381613837565b9050919050565b600061388582612ad1565b915061389083612ad1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c9576138c86134d8565b5b828202905092915050565b6000815190506138e381612adb565b92915050565b6000602082840312156138ff576138fe612951565b5b600061390d848285016138d4565b91505092915050565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b600061394c600a83612a21565b915061395782613916565b602082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b60006040820190506139976000830185612b66565b6139a46020830184612bfc565b9392505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006139e1601983612a21565b91506139ec826139ab565b602082019050919050565b60006020820190508181036000830152613a10816139d4565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a73602183612a21565b9150613a7e82613a17565b604082019050919050565b60006020820190508181036000830152613aa281613a66565b9050919050565b600081905092915050565b6000613abf82612a16565b613ac98185613aa9565b9350613ad9818560208601612a32565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613b1b600583613aa9565b9150613b2682613ae5565b600582019050919050565b6000613b3d8285613ab4565b9150613b498284613ab4565b9150613b5482613b0e565b91508190509392505050565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b6000613b96602083612a21565b9150613ba182613b60565b602082019050919050565b60006020820190508181036000830152613bc581613b89565b9050919050565b6000613bd782612ad1565b9150613be283612ad1565b925082821015613bf557613bf46134d8565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c5c602683612a21565b9150613c6782613c00565b604082019050919050565b60006020820190508181036000830152613c8b81613c4f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613cee602c83612a21565b9150613cf982613c92565b604082019050919050565b60006020820190508181036000830152613d1d81613ce1565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613d80602983612a21565b9150613d8b82613d24565b604082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e12602483612a21565b9150613e1d82613db6565b604082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613e7e601483612a21565b9150613e8982613e48565b602082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613f10603283612a21565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f8082612ad1565b9150613f8b83612ad1565b925082613f9b57613f9a613f46565b5b828204905092915050565b6000613fb182612ad1565b9150613fbc83612ad1565b925082613fcc57613fcb613f46565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000613ffe82613fd7565b6140088185613fe2565b9350614018818560208601612a32565b61402181612a65565b840191505092915050565b60006080820190506140416000830187612b66565b61404e6020830186612b66565b61405b6040830185612bfc565b818103606083015261406d8184613ff3565b905095945050505050565b60008151905061408781612987565b92915050565b6000602082840312156140a3576140a2612951565b5b60006140b184828501614078565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006140f0602083612a21565b91506140fb826140ba565b602082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061415c601c83612a21565b915061416782614126565b602082019050919050565b6000602082019050818103600083015261418b8161414f565b905091905056fea264697066735822122047219df748349108279132f9e740e713073ff5a5b5654046bd9e6332c9f29e8664736f6c634300080a0033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d62656172732d746f6b656e2d67656e657261746f722f6d657461646174612f0000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://storage.googleapis.com/blood-shed-bears-token-generator/metadata/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000049
Arg [2] : 68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f62
Arg [3] : 6c6f6f642d736865642d62656172732d746f6b656e2d67656e657261746f722f
Arg [4] : 6d657461646174612f0000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36585:2874:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32705:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26796:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27430:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27012:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33866:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28128:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32936:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39391:65;;;;;;;;;;;;;:::i;:::-;;28473:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37398:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33982:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38886:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35193:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26551:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38998:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26123:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3199:94;;;;;;;;;;;;;:::i;:::-;;37258:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39322:61;;;;;;;;;;;;;:::i;:::-;;33442:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2548:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26902:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36840:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37494:553;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27657:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28664:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38055:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38438:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27958:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3448:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32705:225;32808:4;32847:35;32832:50;;;:11;:50;;;;:90;;;;32886:36;32910:11;32886:23;:36::i;:::-;32832:90;32825:97;;32705:225;;;:::o;26796:100::-;26850:13;26883:5;26876:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26796:100;:::o;27430:221::-;27506:7;27534:16;27542:7;27534;:16::i;:::-;27526:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27619:15;:24;27635:7;27619:24;;;;;;;;;;;;;;;;;;;;;27612:31;;27430:221;;;:::o;27012:412::-;27093:13;27109:24;27125:7;27109:15;:24::i;:::-;27093:40;;27158:5;27152:11;;:2;:11;;;;27144:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27252:5;27236:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27261:37;27278:5;27285:12;:10;:12::i;:::-;27261:16;:37::i;:::-;27236:62;27214:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27395:21;27404:2;27408:7;27395:8;:21::i;:::-;27082:342;27012:412;;:::o;33866:110::-;33927:7;33954;:14;;;;33947:21;;33866:110;:::o;28128:339::-;28323:41;28342:12;:10;:12::i;:::-;28356:7;28323:18;:41::i;:::-;28315:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28431:28;28441:4;28447:2;28451:7;28431:9;:28::i;:::-;28128:339;;;:::o;32936:500::-;33025:15;33069:24;33087:5;33069:17;:24::i;:::-;33061:5;:32;33053:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33131:10;33157:6;33152:226;33169:7;:14;;;;33165:1;:18;33152:226;;;33218:7;33226:1;33218:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33209:19;;:5;:19;;;33205:162;;;33262:5;33253;:14;33249:102;;;33298:1;33291:8;;;;;;33249:102;33344:7;;;;:::i;:::-;;;33205:162;33185:3;;;;:::i;:::-;;;33152:226;;;;33396:5;33388:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33042:394;32936:500;;;;;:::o;39391:65::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39438:10:::1;:8;:10::i;:::-;39391:65::o:0;28473:185::-;28611:39;28628:4;28634:2;28638:7;28611:39;;;;;;;;;;;;:16;:39::i;:::-;28473:185;;;:::o;37398:88::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37470:8:::1;37463:4;:15;;;;37398:88:::0;:::o;33982:194::-;34057:7;34093:24;:22;:24::i;:::-;34085:5;:32;34077:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34163:5;34156:12;;33982:194;;;:::o;38886:104::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38971:11:::1;38961:7;:21;;;;;;;;;;;;:::i;:::-;;38886:104:::0;:::o;35193:86::-;35240:4;35264:7;;;;;;;;;;;35257:14;;35193:86;:::o;26551:239::-;26623:7;26643:13;26659:7;26667;26659:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26643:32;;26711:1;26694:19;;:5;:19;;;;26686:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26777:5;26770:12;;;26551:239;;;:::o;38998:316::-;39093:4;39110:14;39127:4;39110:21;;39149:9;39144:134;39168:9;;:16;;39164:1;:20;39144:134;;;39218:9;:48;;;;;39257:8;39232:33;;:21;39240:9;;39250:1;39240:12;;;;;;;:::i;:::-;;;;;;;;39232:7;:21::i;:::-;:33;;;39218:48;39206:60;;39186:3;;;;:::i;:::-;;;39144:134;;;;39297:9;39290:16;;;38998:316;;;;;:::o;26123:422::-;26195:7;26240:1;26223:19;;:5;:19;;;;26215:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26300:10;26325:11;26339:7;:14;;;;26325:28;;26369:6;26364:127;26385:6;26381:1;:10;26364:127;;;26426:7;26434:1;26426:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26417:19;;:5;:19;;;26413:67;;;26457:7;;;;:::i;:::-;;;26413:67;26393:3;;;;:::i;:::-;;;26364:127;;;;26501:13;;;26532:5;26525:12;;;;26123:422;;;:::o;3199:94::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3264:21:::1;3282:1;3264:9;:21::i;:::-;3199:94::o:0;37258:132::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37366:16:::1;37345:18;;:37;;;;;;;;;;;;;;;;;;37258:132:::0;:::o;39322:61::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39367:8:::1;:6;:8::i;:::-;39322:61::o:0;33442:418::-;33501:16;33542:24;33560:5;33542:17;:24::i;:::-;33538:1;:28;33530:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33604:18;33625:16;33635:5;33625:9;:16::i;:::-;33604:37;;33652:25;33694:10;33680:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33652:53;;33721:9;33716:111;33740:10;33736:1;:14;33716:111;;;33786:29;33806:5;33813:1;33786:19;:29::i;:::-;33772:8;33781:1;33772:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;33752:3;;;;;:::i;:::-;;;;33716:111;;;;33844:8;33837:15;;;;33442:418;;;:::o;2548:87::-;2594:7;2621:6;;;;;;;;;;;2614:13;;2548:87;:::o;26902:104::-;26958:13;26991:7;26984:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26902:104;:::o;36840:78::-;;;;;;;;;;;;;:::o;37494:553::-;35519:8;:6;:8::i;:::-;35518:9;35510:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37571:19:::1;37593:13;:11;:13::i;:::-;37571:35;;36734:4;37641:11;37627;:25;;;;:::i;:::-;:38;;37619:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;37782:4;;37768:11;:18;;;;:::i;:::-;37717;;;;;;;;;;;37697:55;;;37753:10;37697:67;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;37689:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;37832:18;;;;;;;;;;;37812:45;;;37858:10;37884:4;;37870:11;:18;;;;:::i;:::-;37812:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37907:9;37902:107;37926:11;37922:1;:15;37902:107;;;37959:38;37969:10;37995:1;37981:11;:15;;;;:::i;:::-;37959:9;:38::i;:::-;37939:3;;;;;:::i;:::-;;;;37902:107;;;;38021:18;;;37560:487;37494:553:::0;:::o;27657:295::-;27772:12;:10;:12::i;:::-;27760:24;;:8;:24;;;;27752:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27872:8;27827:18;:32;27846:12;:10;:12::i;:::-;27827:32;;;;;;;;;;;;;;;:42;27860:8;27827:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27925:8;27896:48;;27911:12;:10;:12::i;:::-;27896:48;;;27935:8;27896:48;;;;;;:::i;:::-;;;;;;;;27657:295;;:::o;28664:328::-;28839:41;28858:12;:10;:12::i;:::-;28872:7;28839:18;:41::i;:::-;28831:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28945:39;28959:4;28965:2;28969:7;28978:5;28945:13;:39::i;:::-;28664:328;;;;:::o;38055:353::-;38131:13;38165:17;38173:8;38165:7;:17::i;:::-;38157:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38231:28;38262:10;:8;:10::i;:::-;38231:41;;38321:1;38296:14;38290:28;:32;:110;;;;;;;;;;;;;;;;;38349:14;38365:19;:8;:17;:19::i;:::-;38332:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38290:110;38283:117;;;38055:353;;;:::o;38438:440::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38520:14:::1;38537:13;:11;:13::i;:::-;38520:30;;38600:1;38583:14;:18;:65;;;;;38623:25;;38605:14;:43;;38583:65;38561:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;38724:9;38719:98;38743:14;38739:1;:18;38719:98;;;38779:26;38789:3;38803:1;38794:6;:10;;;;:::i;:::-;38779:9;:26::i;:::-;38759:3;;;;;:::i;:::-;;;;38719:98;;;;38856:14;38827:25;;:43;;;;;;;:::i;:::-;;;;;;;;38509:369;38438:440:::0;;:::o;27958:164::-;28055:4;28079:18;:25;28098:5;28079:25;;;;;;;;;;;;;;;:35;28105:8;28079:35;;;;;;;;;;;;;;;;;;;;;;;;;28072:42;;27958:164;;;;:::o;3448:192::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3557:1:::1;3537:22;;:8;:22;;;;3529:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3613:19;3623:8;3613:9;:19::i;:::-;3448:192:::0;:::o;25824:293::-;25926:4;25974:25;25959:40;;;:11;:40;;;;:101;;;;26027:33;26012:48;;;:11;:48;;;;25959:101;:150;;;;26073:36;26097:11;26073:23;:36::i;:::-;25959:150;25943:166;;25824:293;;;:::o;29319:155::-;29384:4;29418:7;:14;;;;29408:7;:24;:58;;;;;29464:1;29436:30;;:7;29444;29436:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;29408:58;29401:65;;29319:155;;;:::o;1397:98::-;1450:7;1477:10;1470:17;;1397:98;:::o;31492:175::-;31594:2;31567:15;:24;31583:7;31567:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31651:7;31647:2;31612:47;;31621:24;31637:7;31621:15;:24::i;:::-;31612:47;;;;;;;;;;;;31492:175;;:::o;29480:349::-;29573:4;29598:16;29606:7;29598;:16::i;:::-;29590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29674:13;29690:24;29706:7;29690:15;:24::i;:::-;29674:40;;29744:5;29733:16;;:7;:16;;;:51;;;;29777:7;29753:31;;:20;29765:7;29753:11;:20::i;:::-;:31;;;29733:51;:87;;;;29788:32;29805:5;29812:7;29788:16;:32::i;:::-;29733:87;29725:96;;;29480:349;;;;:::o;30969:517::-;31129:4;31101:32;;:24;31117:7;31101:15;:24::i;:::-;:32;;;31093:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;31212:1;31198:16;;:2;:16;;;;31190:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31268:39;31289:4;31295:2;31299:7;31268:20;:39::i;:::-;31372:29;31389:1;31393:7;31372:8;:29::i;:::-;31431:2;31412:7;31420;31412:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31470:7;31466:2;31451:27;;31460:4;31451:27;;;;;;;;;;;;30969:517;;;:::o;36252:120::-;35796:8;:6;:8::i;:::-;35788:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36321:5:::1;36311:7;;:15;;;;;;;;;;;;;;;;;;36342:22;36351:12;:10;:12::i;:::-;36342:22;;;;;;:::i;:::-;;;;;;;;36252:120::o:0;3648:173::-;3704:16;3723:6;;;;;;;;;;;3704:25;;3749:8;3740:6;;:17;;;;;;;;;;;;;;;;;;3804:8;3773:40;;3794:8;3773:40;;;;;;;;;;;;3693:128;3648:173;:::o;35993:118::-;35519:8;:6;:8::i;:::-;35518:9;35510:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36063:4:::1;36053:7;;:14;;;;;;;;;;;;;;;;;;36083:20;36090:12;:10;:12::i;:::-;36083:20;;;;;;:::i;:::-;;;;;;;;35993:118::o:0;29835:110::-;29911:26;29921:2;29925:7;29911:26;;;;;;;;;;;;:9;:26::i;:::-;29835:110;;:::o;28998:315::-;29155:28;29165:4;29171:2;29175:7;29155:9;:28::i;:::-;29202:48;29225:4;29231:2;29235:7;29244:5;29202:22;:48::i;:::-;29194:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28998:315;;;;:::o;37151:99::-;37202:13;37235:7;37228:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37151:99;:::o;4081:723::-;4137:13;4367:1;4358:5;:10;4354:53;;;4385:10;;;;;;;;;;;;;;;;;;;;;4354:53;4417:12;4432:5;4417:20;;4448:14;4473:78;4488:1;4480:4;:9;4473:78;;4506:8;;;;;:::i;:::-;;;;4537:2;4529:10;;;;;:::i;:::-;;;4473:78;;;4561:19;4593:6;4583:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4561:39;;4611:154;4627:1;4618:5;:10;4611:154;;4655:1;4645:11;;;;;:::i;:::-;;;4722:2;4714:5;:10;;;;:::i;:::-;4701:2;:24;;;;:::i;:::-;4688:39;;4671:6;4678;4671:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4751:2;4742:11;;;;;:::i;:::-;;;4611:154;;;4789:6;4775:21;;;;;4081:723;;;;:::o;25177:157::-;25262:4;25301:25;25286:40;;;:11;:40;;;;25279:47;;25177:157;;;:::o;32478:126::-;;;;:::o;29951:321::-;30081:18;30087:2;30091:7;30081:5;:18::i;:::-;30132:54;30163:1;30167:2;30171:7;30180:5;30132:22;:54::i;:::-;30110:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29951:321;;;:::o;31673:799::-;31828:4;31849:15;:2;:13;;;:15::i;:::-;31845:620;;;31901:2;31885:36;;;31922:12;:10;:12::i;:::-;31936:4;31942:7;31951:5;31885:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31881:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32144:1;32127:6;:13;:18;32123:272;;;32170:60;;;;;;;;;;:::i;:::-;;;;;;;;32123:272;32345:6;32339:13;32330:6;32326:2;32322:15;32315:38;31881:529;32018:41;;;32008:51;;;:6;:51;;;;32001:58;;;;;31845:620;32449:4;32442:11;;31673:799;;;;;;;:::o;30278:346::-;30372:1;30358:16;;:2;:16;;;;30350:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30431:16;30439:7;30431;:16::i;:::-;30430:17;30422:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30493:45;30522:1;30526:2;30530:7;30493:20;:45::i;:::-;30549:7;30562:2;30549:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30608:7;30604:2;30583:33;;30600:1;30583:33;;;;;;;;;;;;30278:346;;:::o;17121:387::-;17181:4;17389:12;17456:7;17444:20;17436:28;;17499:1;17492:4;:8;17485:15;;;17121:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:117::-;8645:1;8642;8635:12;8659:117;8768:1;8765;8758:12;8799:568;8872:8;8882:6;8932:3;8925:4;8917:6;8913:17;8909:27;8899:122;;8940:79;;:::i;:::-;8899:122;9053:6;9040:20;9030:30;;9083:18;9075:6;9072:30;9069:117;;;9105:79;;:::i;:::-;9069:117;9219:4;9211:6;9207:17;9195:29;;9273:3;9265:4;9257:6;9253:17;9243:8;9239:32;9236:41;9233:128;;;9280:79;;:::i;:::-;9233:128;8799:568;;;;;:::o;9373:704::-;9468:6;9476;9484;9533:2;9521:9;9512:7;9508:23;9504:32;9501:119;;;9539:79;;:::i;:::-;9501:119;9687:1;9676:9;9672:17;9659:31;9717:18;9709:6;9706:30;9703:117;;;9739:79;;:::i;:::-;9703:117;9852:80;9924:7;9915:6;9904:9;9900:22;9852:80;:::i;:::-;9834:98;;;;9630:312;9981:2;10007:53;10052:7;10043:6;10032:9;10028:22;10007:53;:::i;:::-;9997:63;;9952:118;9373:704;;;;;:::o;10083:329::-;10142:6;10191:2;10179:9;10170:7;10166:23;10162:32;10159:119;;;10197:79;;:::i;:::-;10159:119;10317:1;10342:53;10387:7;10378:6;10367:9;10363:22;10342:53;:::i;:::-;10332:63;;10288:117;10083:329;;;;:::o;10418:114::-;10485:6;10519:5;10513:12;10503:22;;10418:114;;;:::o;10538:184::-;10637:11;10671:6;10666:3;10659:19;10711:4;10706:3;10702:14;10687:29;;10538:184;;;;:::o;10728:132::-;10795:4;10818:3;10810:11;;10848:4;10843:3;10839:14;10831:22;;10728:132;;;:::o;10866:108::-;10943:24;10961:5;10943:24;:::i;:::-;10938:3;10931:37;10866:108;;:::o;10980:179::-;11049:10;11070:46;11112:3;11104:6;11070:46;:::i;:::-;11148:4;11143:3;11139:14;11125:28;;10980:179;;;;:::o;11165:113::-;11235:4;11267;11262:3;11258:14;11250:22;;11165:113;;;:::o;11314:732::-;11433:3;11462:54;11510:5;11462:54;:::i;:::-;11532:86;11611:6;11606:3;11532:86;:::i;:::-;11525:93;;11642:56;11692:5;11642:56;:::i;:::-;11721:7;11752:1;11737:284;11762:6;11759:1;11756:13;11737:284;;;11838:6;11832:13;11865:63;11924:3;11909:13;11865:63;:::i;:::-;11858:70;;11951:60;12004:6;11951:60;:::i;:::-;11941:70;;11797:224;11784:1;11781;11777:9;11772:14;;11737:284;;;11741:14;12037:3;12030:10;;11438:608;;;11314:732;;;;:::o;12052:373::-;12195:4;12233:2;12222:9;12218:18;12210:26;;12282:9;12276:4;12272:20;12268:1;12257:9;12253:17;12246:47;12310:108;12413:4;12404:6;12310:108;:::i;:::-;12302:116;;12052:373;;;;:::o;12431:116::-;12501:21;12516:5;12501:21;:::i;:::-;12494:5;12491:32;12481:60;;12537:1;12534;12527:12;12481:60;12431:116;:::o;12553:133::-;12596:5;12634:6;12621:20;12612:29;;12650:30;12674:5;12650:30;:::i;:::-;12553:133;;;;:::o;12692:468::-;12757:6;12765;12814:2;12802:9;12793:7;12789:23;12785:32;12782:119;;;12820:79;;:::i;:::-;12782:119;12940:1;12965:53;13010:7;13001:6;12990:9;12986:22;12965:53;:::i;:::-;12955:63;;12911:117;13067:2;13093:50;13135:7;13126:6;13115:9;13111:22;13093:50;:::i;:::-;13083:60;;13038:115;12692:468;;;;;:::o;13166:307::-;13227:4;13317:18;13309:6;13306:30;13303:56;;;13339:18;;:::i;:::-;13303:56;13377:29;13399:6;13377:29;:::i;:::-;13369:37;;13461:4;13455;13451:15;13443:23;;13166:307;;;:::o;13479:410::-;13556:5;13581:65;13597:48;13638:6;13597:48;:::i;:::-;13581:65;:::i;:::-;13572:74;;13669:6;13662:5;13655:21;13707:4;13700:5;13696:16;13745:3;13736:6;13731:3;13727:16;13724:25;13721:112;;;13752:79;;:::i;:::-;13721:112;13842:41;13876:6;13871:3;13866;13842:41;:::i;:::-;13562:327;13479:410;;;;;:::o;13908:338::-;13963:5;14012:3;14005:4;13997:6;13993:17;13989:27;13979:122;;14020:79;;:::i;:::-;13979:122;14137:6;14124:20;14162:78;14236:3;14228:6;14221:4;14213:6;14209:17;14162:78;:::i;:::-;14153:87;;13969:277;13908:338;;;;:::o;14252:943::-;14347:6;14355;14363;14371;14420:3;14408:9;14399:7;14395:23;14391:33;14388:120;;;14427:79;;:::i;:::-;14388:120;14547:1;14572:53;14617:7;14608:6;14597:9;14593:22;14572:53;:::i;:::-;14562:63;;14518:117;14674:2;14700:53;14745:7;14736:6;14725:9;14721:22;14700:53;:::i;:::-;14690:63;;14645:118;14802:2;14828:53;14873:7;14864:6;14853:9;14849:22;14828:53;:::i;:::-;14818:63;;14773:118;14958:2;14947:9;14943:18;14930:32;14989:18;14981:6;14978:30;14975:117;;;15011:79;;:::i;:::-;14975:117;15116:62;15170:7;15161:6;15150:9;15146:22;15116:62;:::i;:::-;15106:72;;14901:287;14252:943;;;;;;;:::o;15201:474::-;15269:6;15277;15326:2;15314:9;15305:7;15301:23;15297:32;15294:119;;;15332:79;;:::i;:::-;15294:119;15452:1;15477:53;15522:7;15513:6;15502:9;15498:22;15477:53;:::i;:::-;15467:63;;15423:117;15579:2;15605:53;15650:7;15641:6;15630:9;15626:22;15605:53;:::i;:::-;15595:63;;15550:118;15201:474;;;;;:::o;15681:180::-;15729:77;15726:1;15719:88;15826:4;15823:1;15816:15;15850:4;15847:1;15840:15;15867:320;15911:6;15948:1;15942:4;15938:12;15928:22;;15995:1;15989:4;15985:12;16016:18;16006:81;;16072:4;16064:6;16060:17;16050:27;;16006:81;16134:2;16126:6;16123:14;16103:18;16100:38;16097:84;;;16153:18;;:::i;:::-;16097:84;15918:269;15867:320;;;:::o;16193:231::-;16333:34;16329:1;16321:6;16317:14;16310:58;16402:14;16397:2;16389:6;16385:15;16378:39;16193:231;:::o;16430:366::-;16572:3;16593:67;16657:2;16652:3;16593:67;:::i;:::-;16586:74;;16669:93;16758:3;16669:93;:::i;:::-;16787:2;16782:3;16778:12;16771:19;;16430:366;;;:::o;16802:419::-;16968:4;17006:2;16995:9;16991:18;16983:26;;17055:9;17049:4;17045:20;17041:1;17030:9;17026:17;17019:47;17083:131;17209:4;17083:131;:::i;:::-;17075:139;;16802:419;;;:::o;17227:220::-;17367:34;17363:1;17355:6;17351:14;17344:58;17436:3;17431:2;17423:6;17419:15;17412:28;17227:220;:::o;17453:366::-;17595:3;17616:67;17680:2;17675:3;17616:67;:::i;:::-;17609:74;;17692:93;17781:3;17692:93;:::i;:::-;17810:2;17805:3;17801:12;17794:19;;17453:366;;;:::o;17825:419::-;17991:4;18029:2;18018:9;18014:18;18006:26;;18078:9;18072:4;18068:20;18064:1;18053:9;18049:17;18042:47;18106:131;18232:4;18106:131;:::i;:::-;18098:139;;17825:419;;;:::o;18250:243::-;18390:34;18386:1;18378:6;18374:14;18367:58;18459:26;18454:2;18446:6;18442:15;18435:51;18250:243;:::o;18499:366::-;18641:3;18662:67;18726:2;18721:3;18662:67;:::i;:::-;18655:74;;18738:93;18827:3;18738:93;:::i;:::-;18856:2;18851:3;18847:12;18840:19;;18499:366;;;:::o;18871:419::-;19037:4;19075:2;19064:9;19060:18;19052:26;;19124:9;19118:4;19114:20;19110:1;19099:9;19095:17;19088:47;19152:131;19278:4;19152:131;:::i;:::-;19144:139;;18871:419;;;:::o;19296:236::-;19436:34;19432:1;19424:6;19420:14;19413:58;19505:19;19500:2;19492:6;19488:15;19481:44;19296:236;:::o;19538:366::-;19680:3;19701:67;19765:2;19760:3;19701:67;:::i;:::-;19694:74;;19777:93;19866:3;19777:93;:::i;:::-;19895:2;19890:3;19886:12;19879:19;;19538:366;;;:::o;19910:419::-;20076:4;20114:2;20103:9;20099:18;20091:26;;20163:9;20157:4;20153:20;20149:1;20138:9;20134:17;20127:47;20191:131;20317:4;20191:131;:::i;:::-;20183:139;;19910:419;;;:::o;20335:172::-;20475:24;20471:1;20463:6;20459:14;20452:48;20335:172;:::o;20513:366::-;20655:3;20676:67;20740:2;20735:3;20676:67;:::i;:::-;20669:74;;20752:93;20841:3;20752:93;:::i;:::-;20870:2;20865:3;20861:12;20854:19;;20513:366;;;:::o;20885:419::-;21051:4;21089:2;21078:9;21074:18;21066:26;;21138:9;21132:4;21128:20;21124:1;21113:9;21109:17;21102:47;21166:131;21292:4;21166:131;:::i;:::-;21158:139;;20885:419;;;:::o;21310:180::-;21358:77;21355:1;21348:88;21455:4;21452:1;21445:15;21479:4;21476:1;21469:15;21496:180;21544:77;21541:1;21534:88;21641:4;21638:1;21631:15;21665:4;21662:1;21655:15;21682:233;21721:3;21744:24;21762:5;21744:24;:::i;:::-;21735:33;;21790:66;21783:5;21780:77;21777:103;;;21860:18;;:::i;:::-;21777:103;21907:1;21900:5;21896:13;21889:20;;21682:233;;;:::o;21921:182::-;22061:34;22057:1;22049:6;22045:14;22038:58;21921:182;:::o;22109:366::-;22251:3;22272:67;22336:2;22331:3;22272:67;:::i;:::-;22265:74;;22348:93;22437:3;22348:93;:::i;:::-;22466:2;22461:3;22457:12;22450:19;;22109:366;;;:::o;22481:419::-;22647:4;22685:2;22674:9;22670:18;22662:26;;22734:9;22728:4;22724:20;22720:1;22709:9;22705:17;22698:47;22762:131;22888:4;22762:131;:::i;:::-;22754:139;;22481:419;;;:::o;22906:173::-;23046:25;23042:1;23034:6;23030:14;23023:49;22906:173;:::o;23085:366::-;23227:3;23248:67;23312:2;23307:3;23248:67;:::i;:::-;23241:74;;23324:93;23413:3;23324:93;:::i;:::-;23442:2;23437:3;23433:12;23426:19;;23085:366;;;:::o;23457:419::-;23623:4;23661:2;23650:9;23646:18;23638:26;;23710:9;23704:4;23700:20;23696:1;23685:9;23681:17;23674:47;23738:131;23864:4;23738:131;:::i;:::-;23730:139;;23457:419;;;:::o;23882:228::-;24022:34;24018:1;24010:6;24006:14;23999:58;24091:11;24086:2;24078:6;24074:15;24067:36;23882:228;:::o;24116:366::-;24258:3;24279:67;24343:2;24338:3;24279:67;:::i;:::-;24272:74;;24355:93;24444:3;24355:93;:::i;:::-;24473:2;24468:3;24464:12;24457:19;;24116:366;;;:::o;24488:419::-;24654:4;24692:2;24681:9;24677:18;24669:26;;24741:9;24735:4;24731:20;24727:1;24716:9;24712:17;24705:47;24769:131;24895:4;24769:131;:::i;:::-;24761:139;;24488:419;;;:::o;24913:229::-;25053:34;25049:1;25041:6;25037:14;25030:58;25122:12;25117:2;25109:6;25105:15;25098:37;24913:229;:::o;25148:366::-;25290:3;25311:67;25375:2;25370:3;25311:67;:::i;:::-;25304:74;;25387:93;25476:3;25387:93;:::i;:::-;25505:2;25500:3;25496:12;25489:19;;25148:366;;;:::o;25520:419::-;25686:4;25724:2;25713:9;25709:18;25701:26;;25773:9;25767:4;25763:20;25759:1;25748:9;25744:17;25737:47;25801:131;25927:4;25801:131;:::i;:::-;25793:139;;25520:419;;;:::o;25945:166::-;26085:18;26081:1;26073:6;26069:14;26062:42;25945:166;:::o;26117:366::-;26259:3;26280:67;26344:2;26339:3;26280:67;:::i;:::-;26273:74;;26356:93;26445:3;26356:93;:::i;:::-;26474:2;26469:3;26465:12;26458:19;;26117:366;;;:::o;26489:419::-;26655:4;26693:2;26682:9;26678:18;26670:26;;26742:9;26736:4;26732:20;26728:1;26717:9;26713:17;26706:47;26770:131;26896:4;26770:131;:::i;:::-;26762:139;;26489:419;;;:::o;26914:305::-;26954:3;26973:20;26991:1;26973:20;:::i;:::-;26968:25;;27007:20;27025:1;27007:20;:::i;:::-;27002:25;;27161:1;27093:66;27089:74;27086:1;27083:81;27080:107;;;27167:18;;:::i;:::-;27080:107;27211:1;27208;27204:9;27197:16;;26914:305;;;;:::o;27225:158::-;27365:10;27361:1;27353:6;27349:14;27342:34;27225:158;:::o;27389:365::-;27531:3;27552:66;27616:1;27611:3;27552:66;:::i;:::-;27545:73;;27627:93;27716:3;27627:93;:::i;:::-;27745:2;27740:3;27736:12;27729:19;;27389:365;;;:::o;27760:419::-;27926:4;27964:2;27953:9;27949:18;27941:26;;28013:9;28007:4;28003:20;27999:1;27988:9;27984:17;27977:47;28041:131;28167:4;28041:131;:::i;:::-;28033:139;;27760:419;;;:::o;28185:348::-;28225:7;28248:20;28266:1;28248:20;:::i;:::-;28243:25;;28282:20;28300:1;28282:20;:::i;:::-;28277:25;;28470:1;28402:66;28398:74;28395:1;28392:81;28387:1;28380:9;28373:17;28369:105;28366:131;;;28477:18;;:::i;:::-;28366:131;28525:1;28522;28518:9;28507:20;;28185:348;;;;:::o;28539:143::-;28596:5;28627:6;28621:13;28612:22;;28643:33;28670:5;28643:33;:::i;:::-;28539:143;;;;:::o;28688:351::-;28758:6;28807:2;28795:9;28786:7;28782:23;28778:32;28775:119;;;28813:79;;:::i;:::-;28775:119;28933:1;28958:64;29014:7;29005:6;28994:9;28990:22;28958:64;:::i;:::-;28948:74;;28904:128;28688:351;;;;:::o;29045:160::-;29185:12;29181:1;29173:6;29169:14;29162:36;29045:160;:::o;29211:366::-;29353:3;29374:67;29438:2;29433:3;29374:67;:::i;:::-;29367:74;;29450:93;29539:3;29450:93;:::i;:::-;29568:2;29563:3;29559:12;29552:19;;29211:366;;;:::o;29583:419::-;29749:4;29787:2;29776:9;29772:18;29764:26;;29836:9;29830:4;29826:20;29822:1;29811:9;29807:17;29800:47;29864:131;29990:4;29864:131;:::i;:::-;29856:139;;29583:419;;;:::o;30008:332::-;30129:4;30167:2;30156:9;30152:18;30144:26;;30180:71;30248:1;30237:9;30233:17;30224:6;30180:71;:::i;:::-;30261:72;30329:2;30318:9;30314:18;30305:6;30261:72;:::i;:::-;30008:332;;;;;:::o;30346:175::-;30486:27;30482:1;30474:6;30470:14;30463:51;30346:175;:::o;30527:366::-;30669:3;30690:67;30754:2;30749:3;30690:67;:::i;:::-;30683:74;;30766:93;30855:3;30766:93;:::i;:::-;30884:2;30879:3;30875:12;30868:19;;30527:366;;;:::o;30899:419::-;31065:4;31103:2;31092:9;31088:18;31080:26;;31152:9;31146:4;31142:20;31138:1;31127:9;31123:17;31116:47;31180:131;31306:4;31180:131;:::i;:::-;31172:139;;30899:419;;;:::o;31324:220::-;31464:34;31460:1;31452:6;31448:14;31441:58;31533:3;31528:2;31520:6;31516:15;31509:28;31324:220;:::o;31550:366::-;31692:3;31713:67;31777:2;31772:3;31713:67;:::i;:::-;31706:74;;31789:93;31878:3;31789:93;:::i;:::-;31907:2;31902:3;31898:12;31891:19;;31550:366;;;:::o;31922:419::-;32088:4;32126:2;32115:9;32111:18;32103:26;;32175:9;32169:4;32165:20;32161:1;32150:9;32146:17;32139:47;32203:131;32329:4;32203:131;:::i;:::-;32195:139;;31922:419;;;:::o;32347:148::-;32449:11;32486:3;32471:18;;32347:148;;;;:::o;32501:377::-;32607:3;32635:39;32668:5;32635:39;:::i;:::-;32690:89;32772:6;32767:3;32690:89;:::i;:::-;32683:96;;32788:52;32833:6;32828:3;32821:4;32814:5;32810:16;32788:52;:::i;:::-;32865:6;32860:3;32856:16;32849:23;;32611:267;32501:377;;;;:::o;32884:155::-;33024:7;33020:1;33012:6;33008:14;33001:31;32884:155;:::o;33045:400::-;33205:3;33226:84;33308:1;33303:3;33226:84;:::i;:::-;33219:91;;33319:93;33408:3;33319:93;:::i;:::-;33437:1;33432:3;33428:11;33421:18;;33045:400;;;:::o;33451:701::-;33732:3;33754:95;33845:3;33836:6;33754:95;:::i;:::-;33747:102;;33866:95;33957:3;33948:6;33866:95;:::i;:::-;33859:102;;33978:148;34122:3;33978:148;:::i;:::-;33971:155;;34143:3;34136:10;;33451:701;;;;;:::o;34158:182::-;34298:34;34294:1;34286:6;34282:14;34275:58;34158:182;:::o;34346:366::-;34488:3;34509:67;34573:2;34568:3;34509:67;:::i;:::-;34502:74;;34585:93;34674:3;34585:93;:::i;:::-;34703:2;34698:3;34694:12;34687:19;;34346:366;;;:::o;34718:419::-;34884:4;34922:2;34911:9;34907:18;34899:26;;34971:9;34965:4;34961:20;34957:1;34946:9;34942:17;34935:47;34999:131;35125:4;34999:131;:::i;:::-;34991:139;;34718:419;;;:::o;35143:191::-;35183:4;35203:20;35221:1;35203:20;:::i;:::-;35198:25;;35237:20;35255:1;35237:20;:::i;:::-;35232:25;;35276:1;35273;35270:8;35267:34;;;35281:18;;:::i;:::-;35267:34;35326:1;35323;35319:9;35311:17;;35143:191;;;;:::o;35340:225::-;35480:34;35476:1;35468:6;35464:14;35457:58;35549:8;35544:2;35536:6;35532:15;35525:33;35340:225;:::o;35571:366::-;35713:3;35734:67;35798:2;35793:3;35734:67;:::i;:::-;35727:74;;35810:93;35899:3;35810:93;:::i;:::-;35928:2;35923:3;35919:12;35912:19;;35571:366;;;:::o;35943:419::-;36109:4;36147:2;36136:9;36132:18;36124:26;;36196:9;36190:4;36186:20;36182:1;36171:9;36167:17;36160:47;36224:131;36350:4;36224:131;:::i;:::-;36216:139;;35943:419;;;:::o;36368:231::-;36508:34;36504:1;36496:6;36492:14;36485:58;36577:14;36572:2;36564:6;36560:15;36553:39;36368:231;:::o;36605:366::-;36747:3;36768:67;36832:2;36827:3;36768:67;:::i;:::-;36761:74;;36844:93;36933:3;36844:93;:::i;:::-;36962:2;36957:3;36953:12;36946:19;;36605:366;;;:::o;36977:419::-;37143:4;37181:2;37170:9;37166:18;37158:26;;37230:9;37224:4;37220:20;37216:1;37205:9;37201:17;37194:47;37258:131;37384:4;37258:131;:::i;:::-;37250:139;;36977:419;;;:::o;37402:228::-;37542:34;37538:1;37530:6;37526:14;37519:58;37611:11;37606:2;37598:6;37594:15;37587:36;37402:228;:::o;37636:366::-;37778:3;37799:67;37863:2;37858:3;37799:67;:::i;:::-;37792:74;;37875:93;37964:3;37875:93;:::i;:::-;37993:2;37988:3;37984:12;37977:19;;37636:366;;;:::o;38008:419::-;38174:4;38212:2;38201:9;38197:18;38189:26;;38261:9;38255:4;38251:20;38247:1;38236:9;38232:17;38225:47;38289:131;38415:4;38289:131;:::i;:::-;38281:139;;38008:419;;;:::o;38433:223::-;38573:34;38569:1;38561:6;38557:14;38550:58;38642:6;38637:2;38629:6;38625:15;38618:31;38433:223;:::o;38662:366::-;38804:3;38825:67;38889:2;38884:3;38825:67;:::i;:::-;38818:74;;38901:93;38990:3;38901:93;:::i;:::-;39019:2;39014:3;39010:12;39003:19;;38662:366;;;:::o;39034:419::-;39200:4;39238:2;39227:9;39223:18;39215:26;;39287:9;39281:4;39277:20;39273:1;39262:9;39258:17;39251:47;39315:131;39441:4;39315:131;:::i;:::-;39307:139;;39034:419;;;:::o;39459:170::-;39599:22;39595:1;39587:6;39583:14;39576:46;39459:170;:::o;39635:366::-;39777:3;39798:67;39862:2;39857:3;39798:67;:::i;:::-;39791:74;;39874:93;39963:3;39874:93;:::i;:::-;39992:2;39987:3;39983:12;39976:19;;39635:366;;;:::o;40007:419::-;40173:4;40211:2;40200:9;40196:18;40188:26;;40260:9;40254:4;40250:20;40246:1;40235:9;40231:17;40224:47;40288:131;40414:4;40288:131;:::i;:::-;40280:139;;40007:419;;;:::o;40432:237::-;40572:34;40568:1;40560:6;40556:14;40549:58;40641:20;40636:2;40628:6;40624:15;40617:45;40432:237;:::o;40675:366::-;40817:3;40838:67;40902:2;40897:3;40838:67;:::i;:::-;40831:74;;40914:93;41003:3;40914:93;:::i;:::-;41032:2;41027:3;41023:12;41016:19;;40675:366;;;:::o;41047:419::-;41213:4;41251:2;41240:9;41236:18;41228:26;;41300:9;41294:4;41290:20;41286:1;41275:9;41271:17;41264:47;41328:131;41454:4;41328:131;:::i;:::-;41320:139;;41047:419;;;:::o;41472:180::-;41520:77;41517:1;41510:88;41617:4;41614:1;41607:15;41641:4;41638:1;41631:15;41658:185;41698:1;41715:20;41733:1;41715:20;:::i;:::-;41710:25;;41749:20;41767:1;41749:20;:::i;:::-;41744:25;;41788:1;41778:35;;41793:18;;:::i;:::-;41778:35;41835:1;41832;41828:9;41823:14;;41658:185;;;;:::o;41849:176::-;41881:1;41898:20;41916:1;41898:20;:::i;:::-;41893:25;;41932:20;41950:1;41932:20;:::i;:::-;41927:25;;41971:1;41961:35;;41976:18;;:::i;:::-;41961:35;42017:1;42014;42010:9;42005:14;;41849:176;;;;:::o;42031:98::-;42082:6;42116:5;42110:12;42100:22;;42031:98;;;:::o;42135:168::-;42218:11;42252:6;42247:3;42240:19;42292:4;42287:3;42283:14;42268:29;;42135:168;;;;:::o;42309:360::-;42395:3;42423:38;42455:5;42423:38;:::i;:::-;42477:70;42540:6;42535:3;42477:70;:::i;:::-;42470:77;;42556:52;42601:6;42596:3;42589:4;42582:5;42578:16;42556:52;:::i;:::-;42633:29;42655:6;42633:29;:::i;:::-;42628:3;42624:39;42617:46;;42399:270;42309:360;;;;:::o;42675:640::-;42870:4;42908:3;42897:9;42893:19;42885:27;;42922:71;42990:1;42979:9;42975:17;42966:6;42922:71;:::i;:::-;43003:72;43071:2;43060:9;43056:18;43047:6;43003:72;:::i;:::-;43085;43153:2;43142:9;43138:18;43129:6;43085:72;:::i;:::-;43204:9;43198:4;43194:20;43189:2;43178:9;43174:18;43167:48;43232:76;43303:4;43294:6;43232:76;:::i;:::-;43224:84;;42675:640;;;;;;;:::o;43321:141::-;43377:5;43408:6;43402:13;43393:22;;43424:32;43450:5;43424:32;:::i;:::-;43321:141;;;;:::o;43468:349::-;43537:6;43586:2;43574:9;43565:7;43561:23;43557:32;43554:119;;;43592:79;;:::i;:::-;43554:119;43712:1;43737:63;43792:7;43783:6;43772:9;43768:22;43737:63;:::i;:::-;43727:73;;43683:127;43468:349;;;;:::o;43823:182::-;43963:34;43959:1;43951:6;43947:14;43940:58;43823:182;:::o;44011:366::-;44153:3;44174:67;44238:2;44233:3;44174:67;:::i;:::-;44167:74;;44250:93;44339:3;44250:93;:::i;:::-;44368:2;44363:3;44359:12;44352:19;;44011:366;;;:::o;44383:419::-;44549:4;44587:2;44576:9;44572:18;44564:26;;44636:9;44630:4;44626:20;44622:1;44611:9;44607:17;44600:47;44664:131;44790:4;44664:131;:::i;:::-;44656:139;;44383:419;;;:::o;44808:178::-;44948:30;44944:1;44936:6;44932:14;44925:54;44808:178;:::o;44992:366::-;45134:3;45155:67;45219:2;45214:3;45155:67;:::i;:::-;45148:74;;45231:93;45320:3;45231:93;:::i;:::-;45349:2;45344:3;45340:12;45333:19;;44992:366;;;:::o;45364:419::-;45530:4;45568:2;45557:9;45553:18;45545:26;;45617:9;45611:4;45607:20;45603:1;45592:9;45588:17;45581:47;45645:131;45771:4;45645:131;:::i;:::-;45637:139;;45364:419;;;:::o

Swarm Source

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