ETH Price: $3,336.99 (-2.59%)

Token

GenesisBloodshedBears (GBSB)
 

Overview

Max Total Supply

7,000 GBSB

Holders

1,188

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
buffalowing28.eth
Balance
1 GBSB
0xbDCaD8330C9b6687E80DcC7fA16343a6bFBEf119
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BloodShedBearsGen0

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 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 These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

pragma solidity ^0.8.10;

interface IERC1155 {
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
}

contract BloodShedBearsGen0 is ERC721Enum, Ownable {
    using Strings for uint256;

    uint256 constant public MAX_SUPPLY = 7000;
    uint256 constant public PASS_MINT_LIMIT = 5;
    uint256 constant public WHITELIST_LIMIT = 3;
    uint256 constant public PUBLIC_MINT_LIMIT = 5;
    uint256 public TEAM_RESERVE_AVAILABLE_MINTS = 100;
    uint256 public COST = 0.07 ether;

    bool public isMintPassMintActive;
    bool public isWhiteListActive;
    bool public isSaleActive;

    bytes32 public merkleTreeRoot;

    mapping(address => uint256) public presaleWhitelistMints;
    mapping(address => uint256) public mintPassPaidMints;
    mapping(address => uint256) public mintPassFreeMints;

    string public baseURI;

    address public mintPassAddress = 0x0000000000000000000000000000000000000000;

    constructor(
        string memory name_,
        string memory symbol_,
        string memory initBaseURI_,
        address mintPassAddress_
    ) ERC721P(name_, symbol_) {
        mintPassAddress = mintPassAddress_;
        setBaseURI(initBaseURI_);
    }

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

    function setMintPassContract(address _contractAddress) external onlyOwner {
        mintPassAddress = _contractAddress;
    }

    function setCost(uint256 cost_) external onlyOwner {
        COST = cost_;
    }

    function flipMintPassMintState() external onlyOwner {
        isMintPassMintActive = !isMintPassMintActive;
    }

    function flipWhitelistState() external onlyOwner {
        isWhiteListActive = !isWhiteListActive;
    }

    function flipSaleState() external onlyOwner {
        isSaleActive = !isSaleActive;
    }

    function setMerkleTreeRoot(bytes32 merkleTreeRoot_) external onlyOwner {
        merkleTreeRoot = merkleTreeRoot_;
    }

    function mint(uint256 mintAmount_, bytes32[] calldata proof) external payable {

        require(isSaleActive || isWhiteListActive || isMintPassMintActive, "INACTIVE");
        require(mintAmount_ > 0, "WHY");
        uint256 totalSupply = totalSupply();

        if (isMintPassMintActive) {
            uint256 passBalance = IERC1155(mintPassAddress).balanceOf(msg.sender, 0);

            require(passBalance > 0, "NO MINT PASS");

            uint256 availableFreeMints = passBalance - mintPassFreeMints[msg.sender];
            uint256 availablePaidMints = passBalance * PASS_MINT_LIMIT - passBalance - mintPassPaidMints[msg.sender];
            require(mintAmount_ <= availableFreeMints + availablePaidMints, "TOO MANY");
            require(mintAmount_ <= availableFreeMints || (msg.value >= COST * (mintAmount_ - availableFreeMints)), "NOT ENOUGH");

            if (mintAmount_ >= availableFreeMints) {
                mintPassFreeMints[msg.sender] += availableFreeMints;
            } else {
                mintPassFreeMints[msg.sender] += mintAmount_;
            }

            if (mintAmount_ > availableFreeMints) {
                mintPassPaidMints[msg.sender] += (mintAmount_ - availableFreeMints);
            }

            delete passBalance;
            delete availableFreeMints;
            delete availablePaidMints;

        } else if (isWhiteListActive) {
            require(
                _verify(_leaf(msg.sender), proof) || IERC1155(mintPassAddress).balanceOf(msg.sender, 0) > 0,
                "NOT WL"
            );

            uint256 availableMints = WHITELIST_LIMIT - presaleWhitelistMints[msg.sender];

            require(mintAmount_ <= availableMints, "TOO MANY");
            require(totalSupply + mintAmount_ <= MAX_SUPPLY, "TOO MANY");
            require(msg.value >= COST * mintAmount_ , "NOT ENOUGH");

            presaleWhitelistMints[msg.sender] += mintAmount_;

        } else {
            require(mintAmount_ <= PUBLIC_MINT_LIMIT, "WRONG AMOUNT" );
            require(totalSupply + mintAmount_ <= MAX_SUPPLY, "TOO MANY" );
            require(msg.value >= COST * mintAmount_);
        }

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

        delete totalSupply;
    }

    function _leaf(address account) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(account));
    }

    function _verify(bytes32 _leafNode, bytes32[] memory proof) internal view returns (bool) {
        return MerkleProof.verify(proof, merkleTreeRoot, _leafNode);
    }

    function withdraw() external onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"initBaseURI_","type":"string"},{"internalType":"address","name":"mintPassAddress_","type":"address"}],"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":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"},{"inputs":[],"name":"COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PASS_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_RESERVE_AVAILABLE_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipMintPassMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhitelistState","outputs":[],"stateMutability":"nonpayable","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":[],"name":"isMintPassMintActive","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":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhiteListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleTreeRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount_","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPassAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintPassFreeMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintPassPaidMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelistMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"cost_","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleTreeRoot_","type":"bytes32"}],"name":"setMerkleTreeRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"setMintPassContract","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052606460065566f8b0a10e470000600755600e80546001600160a01b03191690553480156200003157600080fd5b5060405162002de138038062002de1833981016040819052620000549162000311565b8351849084906200006d9060009060208501906200019e565b508051620000839060019060208401906200019e565b505050620000a06200009a620000d060201b60201c565b620000d4565b600e80546001600160a01b0319166001600160a01b038316179055620000c68262000126565b5050505062000401565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620001855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b80516200019a90600d9060208401906200019e565b5050565b828054620001ac90620003c4565b90600052602060002090601f016020900481019282620001d057600085556200021b565b82601f10620001eb57805160ff19168380011785556200021b565b828001600101855582156200021b579182015b828111156200021b578251825591602001919060010190620001fe565b50620002299291506200022d565b5090565b5b808211156200022957600081556001016200022e565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026c57600080fd5b81516001600160401b038082111562000289576200028962000244565b604051601f8301601f19908116603f01168101908282118183101715620002b457620002b462000244565b81604052838152602092508683858801011115620002d157600080fd5b600091505b83821015620002f55785820183015181830184015290820190620002d6565b83821115620003075760008385830101525b9695505050505050565b600080600080608085870312156200032857600080fd5b84516001600160401b03808211156200034057600080fd5b6200034e888389016200025a565b955060208701519150808211156200036557600080fd5b62000373888389016200025a565b945060408701519150808211156200038a57600080fd5b5062000399878288016200025a565b606087015190935090506001600160a01b0381168114620003b957600080fd5b939692955090935050565b600181811c90821680620003d957607f821691505b60208210811415620003fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6129d080620004116000396000f3fe60806040526004361061027d5760003560e01c806370a082311161014f578063b334b233116100c1578063cc47a40b1161007a578063cc47a40b14610740578063e3affafc14610760578063e985e9c51461077a578063f2fde38b146107c3578063f6fa26ab146107e3578063f716aee9146107f857600080fd5b8063b334b233146106aa578063b88d4fde146106d7578063ba41b0c6146106f7578063bceae77b1461061e578063bf8fbbd21461070a578063c87b56dd1461072057600080fd5b806395d89b411161011357806395d89b41146106095780639db4ab531461061e578063a08c61d314610633578063a22cb46514610648578063acf1cc2714610668578063ad50efc71461067d57600080fd5b806370a0823114610569578063715018a614610589578063735d2a271461059e5780638462151c146105be5780638da5cb5b146105eb57600080fd5b806344a0d68a116101f3578063570152d3116101ac578063570152d3146104bf578063573f5dae146104df5780635a80b926146104fe5780636352211e146105145780636c0360eb146105345780636f9bdf651461054957600080fd5b806344a0d68a146103f25780634f6ccce71461041257806350dc46561461043257806355105e9e1461045257806355f804b31461047f578063564566a81461049f57600080fd5b806323b872dd1161024557806323b872dd146103525780632f745c591461037257806332cb6b0c1461039257806334918dfd146103a85780633ccfd60b146103bd57806342842e0e146103d257600080fd5b806301ffc9a71461028257806306fdde03146102b7578063081812fc146102d9578063095ea7b31461031157806318160ddd14610333575b600080fd5b34801561028e57600080fd5b506102a261029d366004612282565b61080e565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102cc610839565b6040516102ae91906122f7565b3480156102e557600080fd5b506102f96102f436600461230a565b6108cb565b6040516001600160a01b0390911681526020016102ae565b34801561031d57600080fd5b5061033161032c36600461233f565b610958565b005b34801561033f57600080fd5b506002545b6040519081526020016102ae565b34801561035e57600080fd5b5061033161036d366004612369565b610a6e565b34801561037e57600080fd5b5061034461038d36600461233f565b610a9f565b34801561039e57600080fd5b50610344611b5881565b3480156103b457600080fd5b50610331610b4e565b3480156103c957600080fd5b50610331610b97565b3480156103de57600080fd5b506103316103ed366004612369565b610be7565b3480156103fe57600080fd5b5061033161040d36600461230a565b610c02565b34801561041e57600080fd5b5061034461042d36600461230a565b610c31565b34801561043e57600080fd5b5061033161044d36600461230a565b610c8e565b34801561045e57600080fd5b5061034461046d3660046123a5565b600a6020526000908152604090205481565b34801561048b57600080fd5b5061033161049a36600461244c565b610cbd565b3480156104ab57600080fd5b506008546102a29062010000900460ff1681565b3480156104cb57600080fd5b50600e546102f9906001600160a01b031681565b3480156104eb57600080fd5b506008546102a290610100900460ff1681565b34801561050a57600080fd5b5061034460065481565b34801561052057600080fd5b506102f961052f36600461230a565b610cfe565b34801561054057600080fd5b506102cc610d8a565b34801561055557600080fd5b506102a26105643660046124e1565b610e18565b34801561057557600080fd5b506103446105843660046123a5565b610e7f565b34801561059557600080fd5b50610331610f51565b3480156105aa57600080fd5b506103316105b93660046123a5565b610f85565b3480156105ca57600080fd5b506105de6105d93660046123a5565b610fd1565b6040516102ae9190612535565b3480156105f757600080fd5b506005546001600160a01b03166102f9565b34801561061557600080fd5b506102cc61109b565b34801561062a57600080fd5b50610344600581565b34801561063f57600080fd5b50610344600381565b34801561065457600080fd5b50610331610663366004612579565b6110aa565b34801561067457600080fd5b5061033161116f565b34801561068957600080fd5b506103446106983660046123a5565b600c6020526000908152604090205481565b3480156106b657600080fd5b506103446106c53660046123a5565b600b6020526000908152604090205481565b3480156106e357600080fd5b506103316106f23660046125b5565b6111ad565b610331610705366004612631565b6111e5565b34801561071657600080fd5b5061034460075481565b34801561072c57600080fd5b506102cc61073b36600461230a565b611782565b34801561074c57600080fd5b5061033161075b36600461233f565b61183f565b34801561076c57600080fd5b506008546102a29060ff1681565b34801561078657600080fd5b506102a261079536600461267d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b3480156107cf57600080fd5b506103316107de3660046123a5565b61191c565b3480156107ef57600080fd5b506103316119b7565b34801561080457600080fd5b5061034460095481565b60006001600160e01b0319821663780e9d6360e01b14806108335750610833826119fe565b92915050565b606060008054610848906126b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610874906126b0565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b60006108d682611a4e565b61093c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b600061096382610cfe565b9050806001600160a01b0316836001600160a01b031614156109d15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610933565b336001600160a01b03821614806109ed57506109ed8133610795565b610a5f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610933565b610a698383611a98565b505050565b610a783382611b06565b610a945760405162461bcd60e51b8152600401610933906126eb565b610a69838383611bf0565b6000610aaa83610e7f565b8210610ac85760405162461bcd60e51b81526004016109339061273c565b6000805b600254811015610b355760028181548110610ae957610ae961276c565b6000918252602090912001546001600160a01b0386811691161415610b255783821415610b195791506108339050565b610b2282612798565b91505b610b2e81612798565b9050610acc565b5060405162461bcd60e51b81526004016109339061273c565b6005546001600160a01b03163314610b785760405162461bcd60e51b8152600401610933906127b3565b6008805462ff0000198116620100009182900460ff1615909102179055565b6005546001600160a01b03163314610bc15760405162461bcd60e51b8152600401610933906127b3565b60405133904780156108fc02916000818181858888f19350505050610be557600080fd5b565b610a69838383604051806020016040528060008152506111ad565b6005546001600160a01b03163314610c2c5760405162461bcd60e51b8152600401610933906127b3565b600755565b6000610c3c60025490565b8210610c8a5760405162461bcd60e51b815260206004820152601760248201527f455243373231456e756d3a20676c6f62616c20696f6f620000000000000000006044820152606401610933565b5090565b6005546001600160a01b03163314610cb85760405162461bcd60e51b8152600401610933906127b3565b600955565b6005546001600160a01b03163314610ce75760405162461bcd60e51b8152600401610933906127b3565b8051610cfa90600d9060208401906121dc565b5050565b60008060028381548110610d1457610d1461276c565b6000918252602090912001546001600160a01b03169050806108335760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610933565b600d8054610d97906126b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc3906126b0565b8015610e105780601f10610de557610100808354040283529160200191610e10565b820191906000526020600020905b815481529060010190602001808311610df357829003601f168201915b505050505081565b60006001815b84811015610e7657818015610e645750836001600160a01b0316610e59878784818110610e4d57610e4d61276c565b90506020020135610cfe565b6001600160a01b0316145b9150610e6f81612798565b9050610e1e565b50949350505050565b60006001600160a01b038216610eea5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610933565b600254600090815b81811015610f485760028181548110610f0d57610f0d61276c565b6000918252602090912001546001600160a01b0386811691161415610f3857610f3583612798565b92505b610f4181612798565b9050610ef2565b50909392505050565b6005546001600160a01b03163314610f7b5760405162461bcd60e51b8152600401610933906127b3565b610be56000611d46565b6005546001600160a01b03163314610faf5760405162461bcd60e51b8152600401610933906127b3565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6060610fdc82610e7f565b600010610ffb5760405162461bcd60e51b81526004016109339061273c565b600061100683610e7f565b905060008167ffffffffffffffff811115611023576110236123c0565b60405190808252806020026020018201604052801561104c578160200160208202803683370190505b50905060005b82811015611093576110648582610a9f565b8282815181106110765761107661276c565b60209081029190910101528061108b81612798565b915050611052565b509392505050565b606060018054610848906126b0565b6001600160a01b0382163314156111035760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610933565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6005546001600160a01b031633146111995760405162461bcd60e51b8152600401610933906127b3565b6008805460ff19811660ff90911615179055565b6111b73383611b06565b6111d35760405162461bcd60e51b8152600401610933906126eb565b6111df84848484611d98565b50505050565b60085462010000900460ff16806112035750600854610100900460ff165b80611210575060085460ff165b6112475760405162461bcd60e51b8152602060048201526008602482015267494e41435449564560c01b6044820152606401610933565b6000831161127d5760405162461bcd60e51b815260206004820152600360248201526257485960e81b6044820152606401610933565b600061128860025490565b60085490915060ff16156114b657600e54604051627eeac760e11b8152336004820152600060248201819052916001600160a01b03169062fdd58e90604401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130891906127e8565b9050600081116113495760405162461bcd60e51b815260206004820152600c60248201526b4e4f204d494e54205041535360a01b6044820152606401610933565b336000908152600c60205260408120546113639083612801565b336000908152600b60205260408120549192509083611383600582612818565b61138d9190612801565b6113979190612801565b90506113a38183612837565b8711156113c25760405162461bcd60e51b81526004016109339061284f565b81871115806113e757506113d68288612801565b6007546113e39190612818565b3410155b6114205760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b6044820152606401610933565b81871061145157336000908152600c602052604081208054849290611446908490612837565b909155506114769050565b336000908152600c602052604081208054899290611470908490612837565b90915550505b818711156114ad576114888288612801565b336000908152600b6020526040812080549091906114a7908490612837565b90915550505b5061174b915050565b600854610100900460ff16156116c657604080513360601b6bffffffffffffffffffffffff1916602080830191909152825160148184030181526034909201909252805191012061153a90848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611dcb92505050565b806115b45750600e54604051627eeac760e11b8152336004820152600060248201819052916001600160a01b03169062fdd58e90604401602060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b291906127e8565b115b6115e95760405162461bcd60e51b81526020600482015260066024820152651393d50815d360d21b6044820152606401610933565b336000908152600a6020526040812054611604906003612801565b9050808511156116265760405162461bcd60e51b81526004016109339061284f565b611b586116338684612837565b11156116515760405162461bcd60e51b81526004016109339061284f565b8460075461165f9190612818565b34101561169b5760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b6044820152606401610933565b336000908152600a6020526040812080548792906116ba908490612837565b9091555061174b915050565b60058411156117065760405162461bcd60e51b815260206004820152600c60248201526b15d493d391c8105353d5539560a21b6044820152606401610933565b611b586117138583612837565b11156117315760405162461bcd60e51b81526004016109339061284f565b8360075461173f9190612818565b34101561174b57600080fd5b60005b8481101561177b57611769336117648385612837565b611dda565b8061177381612798565b91505061174e565b5050505050565b606061178d82611a4e565b6117e35760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b6064820152608401610933565b60006117ed611df4565b9050600081511161180d5760405180602001604052806000815250611838565b8061181784611e03565b604051602001611828929190612871565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146118695760405162461bcd60e51b8152600401610933906127b3565b600061187460025490565b905060008211801561188857506006548211155b6118d45760405162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d6044820152606401610933565b60005b828110156118ff576118ed846117648385612837565b806118f781612798565b9150506118d7565b5081600660008282546119129190612801565b9091555050505050565b6005546001600160a01b031633146119465760405162461bcd60e51b8152600401610933906127b3565b6001600160a01b0381166119ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610933565b6119b481611d46565b50565b6005546001600160a01b031633146119e15760405162461bcd60e51b8152600401610933906127b3565b6008805461ff001981166101009182900460ff1615909102179055565b60006001600160e01b031982166380ac58cd60e01b1480611a2f57506001600160e01b03198216635b5e139f60e01b145b8061083357506301ffc9a760e01b6001600160e01b0319831614610833565b60025460009082108015610833575060006001600160a01b031660028381548110611a7b57611a7b61276c565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611acd82610cfe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b1182611a4e565b611b725760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610933565b6000611b7d83610cfe565b9050806001600160a01b0316846001600160a01b03161480611bb85750836001600160a01b0316611bad846108cb565b6001600160a01b0316145b80611be857506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c0382610cfe565b6001600160a01b031614611c6b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610933565b6001600160a01b038216611ccd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610933565b611cd8600082611a98565b8160028281548110611cec57611cec61276c565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611da3848484611bf0565b611daf84848484611f01565b6111df5760405162461bcd60e51b8152600401610933906128b0565b60006118388260095485611fff565b610cfa828260405180602001604052806000815250612015565b6060600d8054610848906126b0565b606081611e275750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e515780611e3b81612798565b9150611e4a9050600a83612918565b9150611e2b565b60008167ffffffffffffffff811115611e6c57611e6c6123c0565b6040519080825280601f01601f191660200182016040528015611e96576020820181803683370190505b5090505b8415611be857611eab600183612801565b9150611eb8600a8661292c565b611ec3906030612837565b60f81b818381518110611ed857611ed861276c565b60200101906001600160f81b031916908160001a905350611efa600a86612918565b9450611e9a565b60006001600160a01b0384163b15611ff457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f45903390899088908890600401612940565b6020604051808303816000875af1925050508015611f80575060408051601f3d908101601f19168201909252611f7d9181019061297d565b60015b611fda573d808015611fae576040519150601f19603f3d011682016040523d82523d6000602084013e611fb3565b606091505b508051611fd25760405162461bcd60e51b8152600401610933906128b0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611be8565b506001949350505050565b60008261200c8584612048565b14949350505050565b61201f83836120b4565b61202c6000848484611f01565b610a695760405162461bcd60e51b8152600401610933906128b0565b600081815b845181101561109357600085828151811061206a5761206a61276c565b6020026020010151905080831161209057600083815260208290526040902092506120a1565b600081815260208490526040902092505b50806120ac81612798565b91505061204d565b6001600160a01b03821661210a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610933565b61211381611a4e565b156121605760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610933565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546121e8906126b0565b90600052602060002090601f01602090048101928261220a5760008555612250565b82601f1061222357805160ff1916838001178555612250565b82800160010185558215612250579182015b82811115612250578251825591602001919060010190612235565b50610c8a9291505b80821115610c8a5760008155600101612258565b6001600160e01b0319811681146119b457600080fd5b60006020828403121561229457600080fd5b81356118388161226c565b60005b838110156122ba5781810151838201526020016122a2565b838111156111df5750506000910152565b600081518084526122e381602086016020860161229f565b601f01601f19169290920160200192915050565b60208152600061183860208301846122cb565b60006020828403121561231c57600080fd5b5035919050565b80356001600160a01b038116811461233a57600080fd5b919050565b6000806040838503121561235257600080fd5b61235b83612323565b946020939093013593505050565b60008060006060848603121561237e57600080fd5b61238784612323565b925061239560208501612323565b9150604084013590509250925092565b6000602082840312156123b757600080fd5b61183882612323565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156123f1576123f16123c0565b604051601f8501601f19908116603f01168101908282118183101715612419576124196123c0565b8160405280935085815286868601111561243257600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561245e57600080fd5b813567ffffffffffffffff81111561247557600080fd5b8201601f8101841361248657600080fd5b611be8848235602084016123d6565b60008083601f8401126124a757600080fd5b50813567ffffffffffffffff8111156124bf57600080fd5b6020830191508360208260051b85010111156124da57600080fd5b9250929050565b6000806000604084860312156124f657600080fd5b833567ffffffffffffffff81111561250d57600080fd5b61251986828701612495565b909450925061252c905060208501612323565b90509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561256d57835183529284019291840191600101612551565b50909695505050505050565b6000806040838503121561258c57600080fd5b61259583612323565b9150602083013580151581146125aa57600080fd5b809150509250929050565b600080600080608085870312156125cb57600080fd5b6125d485612323565b93506125e260208601612323565b925060408501359150606085013567ffffffffffffffff81111561260557600080fd5b8501601f8101871361261657600080fd5b612625878235602084016123d6565b91505092959194509250565b60008060006040848603121561264657600080fd5b83359250602084013567ffffffffffffffff81111561266457600080fd5b61267086828701612495565b9497909650939450505050565b6000806040838503121561269057600080fd5b61269983612323565b91506126a760208401612323565b90509250929050565b600181811c908216806126c457607f821691505b602082108114156126e557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526016908201527522a9219b9918a2b73ab69d1037bbb732b91034b7b7b160511b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127ac576127ac612782565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156127fa57600080fd5b5051919050565b60008282101561281357612813612782565b500390565b600081600019048311821515161561283257612832612782565b500290565b6000821982111561284a5761284a612782565b500190565b602080825260089082015267544f4f204d414e5960c01b604082015260600190565b6000835161288381846020880161229f565b83519083019061289781836020880161229f565b64173539b7b760d91b9101908152600501949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261292757612927612902565b500490565b60008261293b5761293b612902565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612973908301846122cb565b9695505050505050565b60006020828403121561298f57600080fd5b81516118388161226c56fea2646970667358221220fc1f93d999467746b42072f4578618e1fac9a669b58de265b89136009cd3c98564736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000628e1ae54610f6c553ec227019526776351cb6d4000000000000000000000000000000000000000000000000000000000000001547656e65736973426c6f6f64736865644265617273000000000000000000000000000000000000000000000000000000000000000000000000000000000000044742534200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003668747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d706c616365686f6c6465722f00000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c806370a082311161014f578063b334b233116100c1578063cc47a40b1161007a578063cc47a40b14610740578063e3affafc14610760578063e985e9c51461077a578063f2fde38b146107c3578063f6fa26ab146107e3578063f716aee9146107f857600080fd5b8063b334b233146106aa578063b88d4fde146106d7578063ba41b0c6146106f7578063bceae77b1461061e578063bf8fbbd21461070a578063c87b56dd1461072057600080fd5b806395d89b411161011357806395d89b41146106095780639db4ab531461061e578063a08c61d314610633578063a22cb46514610648578063acf1cc2714610668578063ad50efc71461067d57600080fd5b806370a0823114610569578063715018a614610589578063735d2a271461059e5780638462151c146105be5780638da5cb5b146105eb57600080fd5b806344a0d68a116101f3578063570152d3116101ac578063570152d3146104bf578063573f5dae146104df5780635a80b926146104fe5780636352211e146105145780636c0360eb146105345780636f9bdf651461054957600080fd5b806344a0d68a146103f25780634f6ccce71461041257806350dc46561461043257806355105e9e1461045257806355f804b31461047f578063564566a81461049f57600080fd5b806323b872dd1161024557806323b872dd146103525780632f745c591461037257806332cb6b0c1461039257806334918dfd146103a85780633ccfd60b146103bd57806342842e0e146103d257600080fd5b806301ffc9a71461028257806306fdde03146102b7578063081812fc146102d9578063095ea7b31461031157806318160ddd14610333575b600080fd5b34801561028e57600080fd5b506102a261029d366004612282565b61080e565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102cc610839565b6040516102ae91906122f7565b3480156102e557600080fd5b506102f96102f436600461230a565b6108cb565b6040516001600160a01b0390911681526020016102ae565b34801561031d57600080fd5b5061033161032c36600461233f565b610958565b005b34801561033f57600080fd5b506002545b6040519081526020016102ae565b34801561035e57600080fd5b5061033161036d366004612369565b610a6e565b34801561037e57600080fd5b5061034461038d36600461233f565b610a9f565b34801561039e57600080fd5b50610344611b5881565b3480156103b457600080fd5b50610331610b4e565b3480156103c957600080fd5b50610331610b97565b3480156103de57600080fd5b506103316103ed366004612369565b610be7565b3480156103fe57600080fd5b5061033161040d36600461230a565b610c02565b34801561041e57600080fd5b5061034461042d36600461230a565b610c31565b34801561043e57600080fd5b5061033161044d36600461230a565b610c8e565b34801561045e57600080fd5b5061034461046d3660046123a5565b600a6020526000908152604090205481565b34801561048b57600080fd5b5061033161049a36600461244c565b610cbd565b3480156104ab57600080fd5b506008546102a29062010000900460ff1681565b3480156104cb57600080fd5b50600e546102f9906001600160a01b031681565b3480156104eb57600080fd5b506008546102a290610100900460ff1681565b34801561050a57600080fd5b5061034460065481565b34801561052057600080fd5b506102f961052f36600461230a565b610cfe565b34801561054057600080fd5b506102cc610d8a565b34801561055557600080fd5b506102a26105643660046124e1565b610e18565b34801561057557600080fd5b506103446105843660046123a5565b610e7f565b34801561059557600080fd5b50610331610f51565b3480156105aa57600080fd5b506103316105b93660046123a5565b610f85565b3480156105ca57600080fd5b506105de6105d93660046123a5565b610fd1565b6040516102ae9190612535565b3480156105f757600080fd5b506005546001600160a01b03166102f9565b34801561061557600080fd5b506102cc61109b565b34801561062a57600080fd5b50610344600581565b34801561063f57600080fd5b50610344600381565b34801561065457600080fd5b50610331610663366004612579565b6110aa565b34801561067457600080fd5b5061033161116f565b34801561068957600080fd5b506103446106983660046123a5565b600c6020526000908152604090205481565b3480156106b657600080fd5b506103446106c53660046123a5565b600b6020526000908152604090205481565b3480156106e357600080fd5b506103316106f23660046125b5565b6111ad565b610331610705366004612631565b6111e5565b34801561071657600080fd5b5061034460075481565b34801561072c57600080fd5b506102cc61073b36600461230a565b611782565b34801561074c57600080fd5b5061033161075b36600461233f565b61183f565b34801561076c57600080fd5b506008546102a29060ff1681565b34801561078657600080fd5b506102a261079536600461267d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b3480156107cf57600080fd5b506103316107de3660046123a5565b61191c565b3480156107ef57600080fd5b506103316119b7565b34801561080457600080fd5b5061034460095481565b60006001600160e01b0319821663780e9d6360e01b14806108335750610833826119fe565b92915050565b606060008054610848906126b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610874906126b0565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b60006108d682611a4e565b61093c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b600061096382610cfe565b9050806001600160a01b0316836001600160a01b031614156109d15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610933565b336001600160a01b03821614806109ed57506109ed8133610795565b610a5f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610933565b610a698383611a98565b505050565b610a783382611b06565b610a945760405162461bcd60e51b8152600401610933906126eb565b610a69838383611bf0565b6000610aaa83610e7f565b8210610ac85760405162461bcd60e51b81526004016109339061273c565b6000805b600254811015610b355760028181548110610ae957610ae961276c565b6000918252602090912001546001600160a01b0386811691161415610b255783821415610b195791506108339050565b610b2282612798565b91505b610b2e81612798565b9050610acc565b5060405162461bcd60e51b81526004016109339061273c565b6005546001600160a01b03163314610b785760405162461bcd60e51b8152600401610933906127b3565b6008805462ff0000198116620100009182900460ff1615909102179055565b6005546001600160a01b03163314610bc15760405162461bcd60e51b8152600401610933906127b3565b60405133904780156108fc02916000818181858888f19350505050610be557600080fd5b565b610a69838383604051806020016040528060008152506111ad565b6005546001600160a01b03163314610c2c5760405162461bcd60e51b8152600401610933906127b3565b600755565b6000610c3c60025490565b8210610c8a5760405162461bcd60e51b815260206004820152601760248201527f455243373231456e756d3a20676c6f62616c20696f6f620000000000000000006044820152606401610933565b5090565b6005546001600160a01b03163314610cb85760405162461bcd60e51b8152600401610933906127b3565b600955565b6005546001600160a01b03163314610ce75760405162461bcd60e51b8152600401610933906127b3565b8051610cfa90600d9060208401906121dc565b5050565b60008060028381548110610d1457610d1461276c565b6000918252602090912001546001600160a01b03169050806108335760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610933565b600d8054610d97906126b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc3906126b0565b8015610e105780601f10610de557610100808354040283529160200191610e10565b820191906000526020600020905b815481529060010190602001808311610df357829003601f168201915b505050505081565b60006001815b84811015610e7657818015610e645750836001600160a01b0316610e59878784818110610e4d57610e4d61276c565b90506020020135610cfe565b6001600160a01b0316145b9150610e6f81612798565b9050610e1e565b50949350505050565b60006001600160a01b038216610eea5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610933565b600254600090815b81811015610f485760028181548110610f0d57610f0d61276c565b6000918252602090912001546001600160a01b0386811691161415610f3857610f3583612798565b92505b610f4181612798565b9050610ef2565b50909392505050565b6005546001600160a01b03163314610f7b5760405162461bcd60e51b8152600401610933906127b3565b610be56000611d46565b6005546001600160a01b03163314610faf5760405162461bcd60e51b8152600401610933906127b3565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6060610fdc82610e7f565b600010610ffb5760405162461bcd60e51b81526004016109339061273c565b600061100683610e7f565b905060008167ffffffffffffffff811115611023576110236123c0565b60405190808252806020026020018201604052801561104c578160200160208202803683370190505b50905060005b82811015611093576110648582610a9f565b8282815181106110765761107661276c565b60209081029190910101528061108b81612798565b915050611052565b509392505050565b606060018054610848906126b0565b6001600160a01b0382163314156111035760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610933565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6005546001600160a01b031633146111995760405162461bcd60e51b8152600401610933906127b3565b6008805460ff19811660ff90911615179055565b6111b73383611b06565b6111d35760405162461bcd60e51b8152600401610933906126eb565b6111df84848484611d98565b50505050565b60085462010000900460ff16806112035750600854610100900460ff165b80611210575060085460ff165b6112475760405162461bcd60e51b8152602060048201526008602482015267494e41435449564560c01b6044820152606401610933565b6000831161127d5760405162461bcd60e51b815260206004820152600360248201526257485960e81b6044820152606401610933565b600061128860025490565b60085490915060ff16156114b657600e54604051627eeac760e11b8152336004820152600060248201819052916001600160a01b03169062fdd58e90604401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130891906127e8565b9050600081116113495760405162461bcd60e51b815260206004820152600c60248201526b4e4f204d494e54205041535360a01b6044820152606401610933565b336000908152600c60205260408120546113639083612801565b336000908152600b60205260408120549192509083611383600582612818565b61138d9190612801565b6113979190612801565b90506113a38183612837565b8711156113c25760405162461bcd60e51b81526004016109339061284f565b81871115806113e757506113d68288612801565b6007546113e39190612818565b3410155b6114205760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b6044820152606401610933565b81871061145157336000908152600c602052604081208054849290611446908490612837565b909155506114769050565b336000908152600c602052604081208054899290611470908490612837565b90915550505b818711156114ad576114888288612801565b336000908152600b6020526040812080549091906114a7908490612837565b90915550505b5061174b915050565b600854610100900460ff16156116c657604080513360601b6bffffffffffffffffffffffff1916602080830191909152825160148184030181526034909201909252805191012061153a90848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611dcb92505050565b806115b45750600e54604051627eeac760e11b8152336004820152600060248201819052916001600160a01b03169062fdd58e90604401602060405180830381865afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b291906127e8565b115b6115e95760405162461bcd60e51b81526020600482015260066024820152651393d50815d360d21b6044820152606401610933565b336000908152600a6020526040812054611604906003612801565b9050808511156116265760405162461bcd60e51b81526004016109339061284f565b611b586116338684612837565b11156116515760405162461bcd60e51b81526004016109339061284f565b8460075461165f9190612818565b34101561169b5760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b6044820152606401610933565b336000908152600a6020526040812080548792906116ba908490612837565b9091555061174b915050565b60058411156117065760405162461bcd60e51b815260206004820152600c60248201526b15d493d391c8105353d5539560a21b6044820152606401610933565b611b586117138583612837565b11156117315760405162461bcd60e51b81526004016109339061284f565b8360075461173f9190612818565b34101561174b57600080fd5b60005b8481101561177b57611769336117648385612837565b611dda565b8061177381612798565b91505061174e565b5050505050565b606061178d82611a4e565b6117e35760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b6064820152608401610933565b60006117ed611df4565b9050600081511161180d5760405180602001604052806000815250611838565b8061181784611e03565b604051602001611828929190612871565b6040516020818303038152906040525b9392505050565b6005546001600160a01b031633146118695760405162461bcd60e51b8152600401610933906127b3565b600061187460025490565b905060008211801561188857506006548211155b6118d45760405162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d6044820152606401610933565b60005b828110156118ff576118ed846117648385612837565b806118f781612798565b9150506118d7565b5081600660008282546119129190612801565b9091555050505050565b6005546001600160a01b031633146119465760405162461bcd60e51b8152600401610933906127b3565b6001600160a01b0381166119ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610933565b6119b481611d46565b50565b6005546001600160a01b031633146119e15760405162461bcd60e51b8152600401610933906127b3565b6008805461ff001981166101009182900460ff1615909102179055565b60006001600160e01b031982166380ac58cd60e01b1480611a2f57506001600160e01b03198216635b5e139f60e01b145b8061083357506301ffc9a760e01b6001600160e01b0319831614610833565b60025460009082108015610833575060006001600160a01b031660028381548110611a7b57611a7b61276c565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611acd82610cfe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b1182611a4e565b611b725760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610933565b6000611b7d83610cfe565b9050806001600160a01b0316846001600160a01b03161480611bb85750836001600160a01b0316611bad846108cb565b6001600160a01b0316145b80611be857506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c0382610cfe565b6001600160a01b031614611c6b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610933565b6001600160a01b038216611ccd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610933565b611cd8600082611a98565b8160028281548110611cec57611cec61276c565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611da3848484611bf0565b611daf84848484611f01565b6111df5760405162461bcd60e51b8152600401610933906128b0565b60006118388260095485611fff565b610cfa828260405180602001604052806000815250612015565b6060600d8054610848906126b0565b606081611e275750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e515780611e3b81612798565b9150611e4a9050600a83612918565b9150611e2b565b60008167ffffffffffffffff811115611e6c57611e6c6123c0565b6040519080825280601f01601f191660200182016040528015611e96576020820181803683370190505b5090505b8415611be857611eab600183612801565b9150611eb8600a8661292c565b611ec3906030612837565b60f81b818381518110611ed857611ed861276c565b60200101906001600160f81b031916908160001a905350611efa600a86612918565b9450611e9a565b60006001600160a01b0384163b15611ff457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f45903390899088908890600401612940565b6020604051808303816000875af1925050508015611f80575060408051601f3d908101601f19168201909252611f7d9181019061297d565b60015b611fda573d808015611fae576040519150601f19603f3d011682016040523d82523d6000602084013e611fb3565b606091505b508051611fd25760405162461bcd60e51b8152600401610933906128b0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611be8565b506001949350505050565b60008261200c8584612048565b14949350505050565b61201f83836120b4565b61202c6000848484611f01565b610a695760405162461bcd60e51b8152600401610933906128b0565b600081815b845181101561109357600085828151811061206a5761206a61276c565b6020026020010151905080831161209057600083815260208290526040902092506120a1565b600081815260208490526040902092505b50806120ac81612798565b91505061204d565b6001600160a01b03821661210a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610933565b61211381611a4e565b156121605760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610933565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546121e8906126b0565b90600052602060002090601f01602090048101928261220a5760008555612250565b82601f1061222357805160ff1916838001178555612250565b82800160010185558215612250579182015b82811115612250578251825591602001919060010190612235565b50610c8a9291505b80821115610c8a5760008155600101612258565b6001600160e01b0319811681146119b457600080fd5b60006020828403121561229457600080fd5b81356118388161226c565b60005b838110156122ba5781810151838201526020016122a2565b838111156111df5750506000910152565b600081518084526122e381602086016020860161229f565b601f01601f19169290920160200192915050565b60208152600061183860208301846122cb565b60006020828403121561231c57600080fd5b5035919050565b80356001600160a01b038116811461233a57600080fd5b919050565b6000806040838503121561235257600080fd5b61235b83612323565b946020939093013593505050565b60008060006060848603121561237e57600080fd5b61238784612323565b925061239560208501612323565b9150604084013590509250925092565b6000602082840312156123b757600080fd5b61183882612323565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156123f1576123f16123c0565b604051601f8501601f19908116603f01168101908282118183101715612419576124196123c0565b8160405280935085815286868601111561243257600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561245e57600080fd5b813567ffffffffffffffff81111561247557600080fd5b8201601f8101841361248657600080fd5b611be8848235602084016123d6565b60008083601f8401126124a757600080fd5b50813567ffffffffffffffff8111156124bf57600080fd5b6020830191508360208260051b85010111156124da57600080fd5b9250929050565b6000806000604084860312156124f657600080fd5b833567ffffffffffffffff81111561250d57600080fd5b61251986828701612495565b909450925061252c905060208501612323565b90509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561256d57835183529284019291840191600101612551565b50909695505050505050565b6000806040838503121561258c57600080fd5b61259583612323565b9150602083013580151581146125aa57600080fd5b809150509250929050565b600080600080608085870312156125cb57600080fd5b6125d485612323565b93506125e260208601612323565b925060408501359150606085013567ffffffffffffffff81111561260557600080fd5b8501601f8101871361261657600080fd5b612625878235602084016123d6565b91505092959194509250565b60008060006040848603121561264657600080fd5b83359250602084013567ffffffffffffffff81111561266457600080fd5b61267086828701612495565b9497909650939450505050565b6000806040838503121561269057600080fd5b61269983612323565b91506126a760208401612323565b90509250929050565b600181811c908216806126c457607f821691505b602082108114156126e557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526016908201527522a9219b9918a2b73ab69d1037bbb732b91034b7b7b160511b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156127ac576127ac612782565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156127fa57600080fd5b5051919050565b60008282101561281357612813612782565b500390565b600081600019048311821515161561283257612832612782565b500290565b6000821982111561284a5761284a612782565b500190565b602080825260089082015267544f4f204d414e5960c01b604082015260600190565b6000835161288381846020880161229f565b83519083019061289781836020880161229f565b64173539b7b760d91b9101908152600501949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261292757612927612902565b500490565b60008261293b5761293b612902565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612973908301846122cb565b9695505050505050565b60006020828403121561298f57600080fd5b81516118388161226c56fea2646970667358221220fc1f93d999467746b42072f4578618e1fac9a669b58de265b89136009cd3c98564736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000628e1ae54610f6c553ec227019526776351cb6d4000000000000000000000000000000000000000000000000000000000000001547656e65736973426c6f6f64736865644265617273000000000000000000000000000000000000000000000000000000000000000000000000000000000000044742534200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003668747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d706c616365686f6c6465722f00000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): GenesisBloodshedBears
Arg [1] : symbol_ (string): GBSB
Arg [2] : initBaseURI_ (string): https://storage.googleapis.com/blood-shed-placeholder/
Arg [3] : mintPassAddress_ (address): 0x628e1AE54610f6c553EC227019526776351CB6D4

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000628e1ae54610f6c553ec227019526776351cb6d4
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [5] : 47656e65736973426c6f6f647368656442656172730000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4742534200000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f62
Arg [10] : 6c6f6f642d736865642d706c616365686f6c6465722f00000000000000000000


Deployed Bytecode Sourcemap

34059:5975:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30088:225;;;;;;;;;;-1:-1:-1;30088:225:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;30088:225:0;;;;;;;;24179:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24813:221::-;;;;;;;;;;-1:-1:-1;24813:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;24813:221:0;1528:203:1;24395:412:0;;;;;;;;;;-1:-1:-1;24395:412:0;;;;;:::i;:::-;;:::i;:::-;;31249:110;;;;;;;;;;-1:-1:-1;31337:7:0;:14;31249:110;;;2319:25:1;;;2307:2;2292:18;31249:110:0;2173:177:1;25511:339:0;;;;;;;;;;-1:-1:-1;25511:339:0;;;;;:::i;:::-;;:::i;30319:500::-;;;;;;;;;;-1:-1:-1;30319:500:0;;;;;:::i;:::-;;:::i;34151:41::-;;;;;;;;;;;;34188:4;34151:41;;35750:91;;;;;;;;;;;;;:::i;38642:114::-;;;;;;;;;;;;;:::i;25856:185::-;;;;;;;;;;-1:-1:-1;25856:185:0;;;;;:::i;:::-;;:::i;35423:82::-;;;;;;;;;;-1:-1:-1;35423:82:0;;;;;:::i;:::-;;:::i;31365:194::-;;;;;;;;;;-1:-1:-1;31365:194:0;;;;;:::i;:::-;;:::i;35849:122::-;;;;;;;;;;-1:-1:-1;35849:122:0;;;;;:::i;:::-;;:::i;34594:56::-;;;;;;;;;;-1:-1:-1;34594:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;39927:104;;;;;;;;;;-1:-1:-1;39927:104:0;;;;;:::i;:::-;;:::i;34523:24::-;;;;;;;;;;-1:-1:-1;34523:24:0;;;;;;;;;;;34807:75;;;;;;;;;;-1:-1:-1;34807:75:0;;;;-1:-1:-1;;;;;34807:75:0;;;34487:29;;;;;;;;;;-1:-1:-1;34487:29:0;;;;;;;;;;;34351:49;;;;;;;;;;;;;;;;23934:239;;;;;;;;;;-1:-1:-1;23934:239:0;;;;;:::i;:::-;;:::i;34777:21::-;;;;;;;;;;;;;:::i;38764:316::-;;;;;;;;;;-1:-1:-1;38764:316:0;;;;;:::i;:::-;;:::i;23506:422::-;;;;;;;;;;-1:-1:-1;23506:422:0;;;;;:::i;:::-;;:::i;3199:94::-;;;;;;;;;;;;;:::i;35288:127::-;;;;;;;;;;-1:-1:-1;35288:127:0;;;;;:::i;:::-;;:::i;30825:418::-;;;;;;;;;;-1:-1:-1;30825:418:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2548:87::-;;;;;;;;;;-1:-1:-1;2621:6:0;;-1:-1:-1;;;;;2621:6:0;2548:87;;24285:104;;;;;;;;;;;;;:::i;34199:43::-;;;;;;;;;;;;34241:1;34199:43;;34249;;;;;;;;;;;;34291:1;34249:43;;25040:295;;;;;;;;;;-1:-1:-1;25040:295:0;;;;;:::i;:::-;;:::i;35513:115::-;;;;;;;;;;;;;:::i;34716:52::-;;;;;;;;;;-1:-1:-1;34716:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;34657;;;;;;;;;;-1:-1:-1;34657:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;26047:328;;;;;;;;;;-1:-1:-1;26047:328:0;;;;;:::i;:::-;;:::i;35979:2346::-;;;;;;:::i;:::-;;:::i;34407:32::-;;;;;;;;;;;;;;;;39566:353;;;;;;;;;;-1:-1:-1;39566:353:0;;;;;:::i;:::-;;:::i;39110:448::-;;;;;;;;;;-1:-1:-1;39110:448:0;;;;;:::i;:::-;;:::i;34448:32::-;;;;;;;;;;-1:-1:-1;34448:32:0;;;;;;;;25341:164;;;;;;;;;;-1:-1:-1;25341:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25462:25:0;;;25438:4;25462:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25341:164;3448:192;;;;;;;;;;-1:-1:-1;3448:192:0;;;;;:::i;:::-;;:::i;35636:106::-;;;;;;;;;;;;;:::i;34556:29::-;;;;;;;;;;;;;;;;30088:225;30191:4;-1:-1:-1;;;;;;30215:50:0;;-1:-1:-1;;;30215:50:0;;:90;;;30269:36;30293:11;30269:23;:36::i;:::-;30208:97;30088:225;-1:-1:-1;;30088:225:0:o;24179:100::-;24233:13;24266:5;24259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24179:100;:::o;24813:221::-;24889:7;24917:16;24925:7;24917;:16::i;:::-;24909:73;;;;-1:-1:-1;;;24909:73:0;;8382:2:1;24909:73:0;;;8364:21:1;8421:2;8401:18;;;8394:30;8460:34;8440:18;;;8433:62;-1:-1:-1;;;8511:18:1;;;8504:42;8563:19;;24909:73:0;;;;;;;;;-1:-1:-1;25002:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25002:24:0;;24813:221::o;24395:412::-;24476:13;24492:24;24508:7;24492:15;:24::i;:::-;24476:40;;24541:5;-1:-1:-1;;;;;24535:11:0;:2;-1:-1:-1;;;;;24535:11:0;;;24527:57;;;;-1:-1:-1;;;24527:57:0;;8795:2:1;24527:57:0;;;8777:21:1;8834:2;8814:18;;;8807:30;8873:34;8853:18;;;8846:62;-1:-1:-1;;;8924:18:1;;;8917:31;8965:19;;24527:57:0;8593:397:1;24527:57:0;1477:10;-1:-1:-1;;;;;24619:21:0;;;;:62;;-1:-1:-1;24644:37:0;24661:5;1477:10;25341:164;:::i;24644:37::-;24597:168;;;;-1:-1:-1;;;24597:168:0;;9197:2:1;24597:168:0;;;9179:21:1;9236:2;9216:18;;;9209:30;9275:34;9255:18;;;9248:62;9346:26;9326:18;;;9319:54;9390:19;;24597:168:0;8995:420:1;24597:168:0;24778:21;24787:2;24791:7;24778:8;:21::i;:::-;24465:342;24395:412;;:::o;25511:339::-;25706:41;1477:10;25739:7;25706:18;:41::i;:::-;25698:103;;;;-1:-1:-1;;;25698:103:0;;;;;;;:::i;:::-;25814:28;25824:4;25830:2;25834:7;25814:9;:28::i;30319:500::-;30408:15;30452:24;30470:5;30452:17;:24::i;:::-;30444:5;:32;30436:67;;;;-1:-1:-1;;;30436:67:0;;;;;;;:::i;:::-;30514:10;30540:6;30535:226;30552:7;:14;30548:18;;30535:226;;;30601:7;30609:1;30601:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;30592:19:0;;;30601:10;;30592:19;30588:162;;;30645:5;30636;:14;30632:102;;;30681:1;-1:-1:-1;30674:8:0;;-1:-1:-1;30674:8:0;30632:102;30727:7;;;:::i;:::-;;;30632:102;30568:3;;;:::i;:::-;;;30535:226;;;-1:-1:-1;30771:40:0;;-1:-1:-1;;;30771:40:0;;;;;;;:::i;35750:91::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;35821:12:::1;::::0;;-1:-1:-1;;35805:28:0;::::1;35821:12:::0;;;;::::1;;;35820:13;35805:28:::0;;::::1;;::::0;;35750:91::o;38642:114::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;38700:47:::1;::::0;38708:10:::1;::::0;38725:21:::1;38700:47:::0;::::1;;;::::0;::::1;::::0;;;38725:21;38708:10;38700:47;::::1;;;;;;38692:56;;;::::0;::::1;;38642:114::o:0;25856:185::-;25994:39;26011:4;26017:2;26021:7;25994:39;;;;;;;;;;;;:16;:39::i;35423:82::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;35485:4:::1;:12:::0;35423:82::o;31365:194::-;31440:7;31476:24;31337:7;:14;;31249:110;31476:24;31468:5;:32;31460:68;;;;-1:-1:-1;;;31460:68:0;;11156:2:1;31460:68:0;;;11138:21:1;11195:2;11175:18;;;11168:30;11234:25;11214:18;;;11207:53;11277:18;;31460:68:0;10954:347:1;31460:68:0;-1:-1:-1;31546:5:0;31365:194::o;35849:122::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;35931:14:::1;:32:::0;35849:122::o;39927:104::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;40002:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;39927:104:::0;:::o;23934:239::-;24006:7;24026:13;24042:7;24050;24042:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24042:16:0;;-1:-1:-1;24077:19:0;24069:73;;;;-1:-1:-1;;;24069:73:0;;11508:2:1;24069:73:0;;;11490:21:1;11547:2;11527:18;;;11520:30;11586:34;11566:18;;;11559:62;-1:-1:-1;;;11637:18:1;;;11630:39;11686:19;;24069:73:0;11306:405:1;34777:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38764:316::-;38859:4;38893;38859;38910:134;38930:20;;;38910:134;;;38984:9;:48;;;;;39023:8;-1:-1:-1;;;;;38998:33:0;:21;39006:9;;39016:1;39006:12;;;;;;;:::i;:::-;;;;;;;38998:7;:21::i;:::-;-1:-1:-1;;;;;38998:33:0;;38984:48;38972:60;-1:-1:-1;38952:3:0;;;:::i;:::-;;;38910:134;;;-1:-1:-1;39063:9:0;38764:316;-1:-1:-1;;;;38764:316:0:o;23506:422::-;23578:7;-1:-1:-1;;;;;23606:19:0;;23598:74;;;;-1:-1:-1;;;23598:74:0;;11918:2:1;23598:74:0;;;11900:21:1;11957:2;11937:18;;;11930:30;11996:34;11976:18;;;11969:62;-1:-1:-1;;;12047:18:1;;;12040:40;12097:19;;23598:74:0;11716:406:1;23598:74:0;23722:7;:14;23683:10;;;23747:127;23768:6;23764:1;:10;23747:127;;;23809:7;23817:1;23809:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23800:19:0;;;23809:10;;23800:19;23796:67;;;23840:7;;;:::i;:::-;;;23796:67;23776:3;;;:::i;:::-;;;23747:127;;;-1:-1:-1;23915:5:0;;23506:422;-1:-1:-1;;;23506:422:0:o;3199:94::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;3264:21:::1;3282:1;3264:9;:21::i;35288:127::-:0;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;35373:15:::1;:34:::0;;-1:-1:-1;;;;;;35373:34:0::1;-1:-1:-1::0;;;;;35373:34:0;;;::::1;::::0;;;::::1;::::0;;35288:127::o;30825:418::-;30884:16;30925:24;30943:5;30925:17;:24::i;:::-;30921:1;:28;30913:63;;;;-1:-1:-1;;;30913:63:0;;;;;;;:::i;:::-;30987:18;31008:16;31018:5;31008:9;:16::i;:::-;30987:37;;31035:25;31077:10;31063:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31063:25:0;;31035:53;;31104:9;31099:111;31123:10;31119:1;:14;31099:111;;;31169:29;31189:5;31196:1;31169:19;:29::i;:::-;31155:8;31164:1;31155:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;31135:3;;;;:::i;:::-;;;;31099:111;;;-1:-1:-1;31227:8:0;30825:418;-1:-1:-1;;;30825:418:0:o;24285:104::-;24341:13;24374:7;24367:14;;;;;:::i;25040:295::-;-1:-1:-1;;;;;25143:24:0;;1477:10;25143:24;;25135:62;;;;-1:-1:-1;;;25135:62:0;;12329:2:1;25135:62:0;;;12311:21:1;12368:2;12348:18;;;12341:30;12407:27;12387:18;;;12380:55;12452:18;;25135:62:0;12127:349:1;25135:62:0;1477:10;25210:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25210:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25210:53:0;;;;;;;;;;25279:48;;540:41:1;;;25210:42:0;;1477:10;25279:48;;513:18:1;25279:48:0;;;;;;;25040:295;;:::o;35513:115::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;35600:20:::1;::::0;;-1:-1:-1;;35576:44:0;::::1;35600:20;::::0;;::::1;35599:21;35576:44;::::0;;35513:115::o;26047:328::-;26222:41;1477:10;26255:7;26222:18;:41::i;:::-;26214:103;;;;-1:-1:-1;;;26214:103:0;;;;;;;:::i;:::-;26328:39;26342:4;26348:2;26352:7;26361:5;26328:13;:39::i;:::-;26047:328;;;;:::o;35979:2346::-;36078:12;;;;;;;;:33;;-1:-1:-1;36094:17:0;;;;;;;36078:33;:57;;;-1:-1:-1;36115:20:0;;;;36078:57;36070:78;;;;-1:-1:-1;;;36070:78:0;;12683:2:1;36070:78:0;;;12665:21:1;12722:1;12702:18;;;12695:29;-1:-1:-1;;;12740:18:1;;;12733:38;12788:18;;36070:78:0;12481:331:1;36070:78:0;36181:1;36167:11;:15;36159:31;;;;-1:-1:-1;;;36159:31:0;;13019:2:1;36159:31:0;;;13001:21:1;13058:1;13038:18;;;13031:29;-1:-1:-1;;;13076:18:1;;;13069:33;13119:18;;36159:31:0;12817:326:1;36159:31:0;36201:19;36223:13;31337:7;:14;;31249:110;36223:13;36253:20;;36201:35;;-1:-1:-1;36253:20:0;;36249:1919;;;36321:15;;36312:50;;-1:-1:-1;;;36312:50:0;;36348:10;36312:50;;;13330:51:1;36290:19:0;13397:18:1;;;13390:34;;;36290:19:0;-1:-1:-1;;;;;36321:15:0;;36312:35;;13303:18:1;;36312:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36290:72;;36401:1;36387:11;:15;36379:40;;;;-1:-1:-1;;;36379:40:0;;13826:2:1;36379:40:0;;;13808:21:1;13865:2;13845:18;;;13838:30;-1:-1:-1;;;13884:18:1;;;13877:42;13936:18;;36379:40:0;13624:336:1;36379:40:0;36497:10;36436:26;36479:29;;;:17;:29;;;;;;36465:43;;:11;:43;:::i;:::-;36616:10;36523:26;36598:29;;;:17;:29;;;;;;36436:72;;-1:-1:-1;36523:26:0;36584:11;36552:29;34241:1;36584:11;36552:29;:::i;:::-;:43;;;;:::i;:::-;:75;;;;:::i;:::-;36523:104;-1:-1:-1;36665:39:0;36523:104;36665:18;:39;:::i;:::-;36650:11;:54;;36642:75;;;;-1:-1:-1;;;36642:75:0;;;;;;;:::i;:::-;36755:18;36740:11;:33;;:93;;;-1:-1:-1;36799:32:0;36813:18;36799:11;:32;:::i;:::-;36791:4;;:41;;;;:::i;:::-;36778:9;:54;;36740:93;36732:116;;;;-1:-1:-1;;;36732:116:0;;14939:2:1;36732:116:0;;;14921:21:1;14978:2;14958:18;;;14951:30;-1:-1:-1;;;14997:18:1;;;14990:40;15047:18;;36732:116:0;14737:334:1;36732:116:0;36884:18;36869:11;:33;36865:210;;36941:10;36923:29;;;;:17;:29;;;;;:51;;36956:18;;36923:29;:51;;36956:18;;36923:51;:::i;:::-;;;;-1:-1:-1;36865:210:0;;-1:-1:-1;36865:210:0;;37033:10;37015:29;;;;:17;:29;;;;;:44;;37048:11;;37015:29;:44;;37048:11;;37015:44;:::i;:::-;;;;-1:-1:-1;;36865:210:0;37109:18;37095:11;:32;37091:140;;;37182:32;37196:18;37182:11;:32;:::i;:::-;37166:10;37148:29;;;;:17;:29;;;;;:67;;:29;;;:67;;;;;:::i;:::-;;;;-1:-1:-1;;37091:140:0;-1:-1:-1;36249:1919:0;;-1:-1:-1;;36249:1919:0;;37369:17;;;;;;;37365:803;;;38425:25;;;37443:10;19359:2:1;19355:15;-1:-1:-1;;19351:53:1;38425:25:0;;;;19339:66:1;;;;38425:25:0;;;;;;;;;19421:12:1;;;;38425:25:0;;;38415:36;;;;;37429:33;;37456:5;;37429:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37429:7:0;;-1:-1:-1;;;37429:33:0:i;:::-;:91;;;-1:-1:-1;37475:15:0;;37466:50;;-1:-1:-1;;;37466:50:0;;37502:10;37466:50;;;13330:51:1;37519:1:0;13397:18:1;;;13390:34;;;37519:1:0;-1:-1:-1;;;;;37475:15:0;;37466:35;;13303:18:1;;37466:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;37429:91;37403:159;;;;-1:-1:-1;;;37403:159:0;;15278:2:1;37403:159:0;;;15260:21:1;15317:1;15297:18;;;15290:29;-1:-1:-1;;;15335:18:1;;;15328:36;15381:18;;37403:159:0;15076:329:1;37403:159:0;37644:10;37579:22;37622:33;;;:21;:33;;;;;;37604:51;;34291:1;37604:51;:::i;:::-;37579:76;;37695:14;37680:11;:29;;37672:50;;;;-1:-1:-1;;;37672:50:0;;;;;;;:::i;:::-;34188:4;37745:25;37759:11;37745;:25;:::i;:::-;:39;;37737:60;;;;-1:-1:-1;;;37737:60:0;;;;;;;:::i;:::-;37840:11;37833:4;;:18;;;;:::i;:::-;37820:9;:31;;37812:55;;;;-1:-1:-1;;;37812:55:0;;14939:2:1;37812:55:0;;;14921:21:1;14978:2;14958:18;;;14951:30;-1:-1:-1;;;14997:18:1;;;14990:40;15047:18;;37812:55:0;14737:334:1;37812:55:0;37906:10;37884:33;;;;:21;:33;;;;;:48;;37921:11;;37884:33;:48;;37921:11;;37884:48;:::i;:::-;;;;-1:-1:-1;37365:803:0;;-1:-1:-1;;37365:803:0;;34343:1;37975:11;:32;;37967:58;;;;-1:-1:-1;;;37967:58:0;;15612:2:1;37967:58:0;;;15594:21:1;15651:2;15631:18;;;15624:30;-1:-1:-1;;;15670:18:1;;;15663:42;15722:18;;37967:58:0;15410:336:1;37967:58:0;34188:4;38048:25;38062:11;38048;:25;:::i;:::-;:39;;38040:61;;;;-1:-1:-1;;;38040:61:0;;;;;;;:::i;:::-;38144:11;38137:4;;:18;;;;:::i;:::-;38124:9;:31;;38116:40;;;;;;38185:9;38180:107;38204:11;38200:1;:15;38180:107;;;38237:38;38247:10;38259:15;38273:1;38259:11;:15;:::i;:::-;38237:9;:38::i;:::-;38217:3;;;;:::i;:::-;;;;38180:107;;;-1:-1:-1;;;;;35979:2346:0:o;39566:353::-;39642:13;39676:17;39684:8;39676:7;:17::i;:::-;39668:63;;;;-1:-1:-1;;;39668:63:0;;15953:2:1;39668:63:0;;;15935:21:1;15992:2;15972:18;;;15965:30;16031:34;16011:18;;;16004:62;-1:-1:-1;;;16082:18:1;;;16075:31;16123:19;;39668:63:0;15751:397:1;39668:63:0;39742:28;39773:10;:8;:10::i;:::-;39742:41;;39832:1;39807:14;39801:28;:32;:110;;;;;;;;;;;;;;;;;39860:14;39876:19;:8;:17;:19::i;:::-;39843:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39801:110;39794:117;39566:353;-1:-1:-1;;;39566:353:0:o;39110:448::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;39194:14:::1;39211:13;31337:7:::0;:14;;31249:110;39211:13:::1;39194:30;;39274:1;39257:14;:18;:68;;;;;39297:28;;39279:14;:46;;39257:68;39235:150;;;::::0;-1:-1:-1;;;39235:150:0;;16997:2:1;39235:150:0::1;::::0;::::1;16979:21:1::0;;;17016:18;;;17009:30;17075:34;17055:18;;;17048:62;17127:18;;39235:150:0::1;16795:356:1::0;39235:150:0::1;39401:9;39396:98;39420:14;39416:1;:18;39396:98;;;39456:26;39466:3:::0;39471:10:::1;39480:1:::0;39471:6;:10:::1;:::i;39456:26::-;39436:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39396:98;;;;39536:14;39504:28;;:46;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;39110:448:0:o;3448:192::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3537:22:0;::::1;3529:73;;;::::0;-1:-1:-1;;;3529:73:0;;17358:2:1;3529:73:0::1;::::0;::::1;17340:21:1::0;17397:2;17377:18;;;17370:30;17436:34;17416:18;;;17409:62;-1:-1:-1;;;17487:18:1;;;17480:36;17533:19;;3529:73:0::1;17156:402:1::0;3529:73:0::1;3613:19;3623:8;3613:9;:19::i;:::-;3448:192:::0;:::o;35636:106::-;2621:6;;-1:-1:-1;;;;;2621:6:0;1477:10;2768:23;2760:68;;;;-1:-1:-1;;;2760:68:0;;;;;;;:::i;:::-;35717:17:::1;::::0;;-1:-1:-1;;35696:38:0;::::1;35717:17;::::0;;;::::1;;;35716:18;35696:38:::0;;::::1;;::::0;;35636:106::o;23207:293::-;23309:4;-1:-1:-1;;;;;;23342:40:0;;-1:-1:-1;;;23342:40:0;;:101;;-1:-1:-1;;;;;;;23395:48:0;;-1:-1:-1;;;23395:48:0;23342:101;:150;;;-1:-1:-1;;;;;;;;;;22669:40:0;;;23456:36;22560:157;26702:155;26801:7;:14;26767:4;;26791:24;;:58;;;;;26847:1;-1:-1:-1;;;;;26819:30:0;:7;26827;26819:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26819:16:0;:30;;26784:65;26702:155;-1:-1:-1;;26702:155:0:o;28875:175::-;28950:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;28950:29:0;-1:-1:-1;;;;;28950:29:0;;;;;;;;:24;;29004;28950;29004:15;:24::i;:::-;-1:-1:-1;;;;;28995:47:0;;;;;;;;;;;28875:175;;:::o;26863:349::-;26956:4;26981:16;26989:7;26981;:16::i;:::-;26973:73;;;;-1:-1:-1;;;26973:73:0;;17765:2:1;26973:73:0;;;17747:21:1;17804:2;17784:18;;;17777:30;17843:34;17823:18;;;17816:62;-1:-1:-1;;;17894:18:1;;;17887:42;17946:19;;26973:73:0;17563:408:1;26973:73:0;27057:13;27073:24;27089:7;27073:15;:24::i;:::-;27057:40;;27127:5;-1:-1:-1;;;;;27116:16:0;:7;-1:-1:-1;;;;;27116:16:0;;:51;;;;27160:7;-1:-1:-1;;;;;27136:31:0;:20;27148:7;27136:11;:20::i;:::-;-1:-1:-1;;;;;27136:31:0;;27116:51;:87;;;-1:-1:-1;;;;;;25462:25:0;;;25438:4;25462:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27171:32;27108:96;26863:349;-1:-1:-1;;;;26863:349:0:o;28352:517::-;28512:4;-1:-1:-1;;;;;28484:32:0;:24;28500:7;28484:15;:24::i;:::-;-1:-1:-1;;;;;28484:32:0;;28476:86;;;;-1:-1:-1;;;28476:86:0;;18178:2:1;28476:86:0;;;18160:21:1;18217:2;18197:18;;;18190:30;18256:34;18236:18;;;18229:62;-1:-1:-1;;;18307:18:1;;;18300:39;18356:19;;28476:86:0;17976:405:1;28476:86:0;-1:-1:-1;;;;;28581:16:0;;28573:65;;;;-1:-1:-1;;;28573:65:0;;18588:2:1;28573:65:0;;;18570:21:1;18627:2;18607:18;;;18600:30;18666:34;18646:18;;;18639:62;-1:-1:-1;;;18717:18:1;;;18710:34;18761:19;;28573:65:0;18386:400:1;28573:65:0;28755:29;28772:1;28776:7;28755:8;:29::i;:::-;28814:2;28795:7;28803;28795:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;28795:21:0;-1:-1:-1;;;;;28795:21:0;;;;;;28834:27;;28853:7;;28834:27;;;;;;;;;;28795:16;28834:27;28352:517;;;:::o;3648:173::-;3723:6;;;-1:-1:-1;;;;;3740:17:0;;;-1:-1:-1;;;;;;3740:17:0;;;;;;;3773:40;;3723:6;;;3740:17;3723:6;;3773:40;;3704:16;;3773:40;3693:128;3648:173;:::o;26381:315::-;26538:28;26548:4;26554:2;26558:7;26538:9;:28::i;:::-;26585:48;26608:4;26614:2;26618:7;26627:5;26585:22;:48::i;:::-;26577:111;;;;-1:-1:-1;;;26577:111:0;;;;;;;:::i;38467:167::-;38550:4;38574:52;38593:5;38600:14;;38616:9;38574:18;:52::i;27218:110::-;27294:26;27304:2;27308:7;27294:26;;;;;;;;;;;;:9;:26::i;35181:99::-;35232:13;35265:7;35258:14;;;;;:::i;4081:723::-;4137:13;4358:10;4354:53;;-1:-1:-1;;4385:10:0;;;;;;;;;;;;-1:-1:-1;;;4385:10:0;;;;;4081:723::o;4354:53::-;4432:5;4417:12;4473:78;4480:9;;4473:78;;4506:8;;;;:::i;:::-;;-1:-1:-1;4529:10:0;;-1:-1:-1;4537:2:0;4529:10;;:::i;:::-;;;4473:78;;;4561:19;4593:6;4583:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4583:17:0;;4561:39;;4611:154;4618:10;;4611:154;;4645:11;4655:1;4645:11;;:::i;:::-;;-1:-1:-1;4714:10:0;4722:2;4714:5;:10;:::i;:::-;4701:24;;:2;:24;:::i;:::-;4688:39;;4671:6;4678;4671:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4671:56:0;;;;;;;;-1:-1:-1;4742:11:0;4751:2;4742:11;;:::i;:::-;;;4611:154;;29056:799;29211:4;-1:-1:-1;;;;;29232:13:0;;14825:20;14873:8;29228:620;;29268:72;;-1:-1:-1;;;29268:72:0;;-1:-1:-1;;;;;29268:36:0;;;;;:72;;1477:10;;29319:4;;29325:7;;29334:5;;29268:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29268:72:0;;;;;;;;-1:-1:-1;;29268:72:0;;;;;;;;;;;;:::i;:::-;;;29264:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29510:13:0;;29506:272;;29553:60;;-1:-1:-1;;;29553:60:0;;;;;;;:::i;29506:272::-;29728:6;29722:13;29713:6;29709:2;29705:15;29698:38;29264:529;-1:-1:-1;;;;;;29391:51:0;-1:-1:-1;;;29391:51:0;;-1:-1:-1;29384:58:0;;29228:620;-1:-1:-1;29832:4:0;29056:799;;;;;;:::o;32328:190::-;32453:4;32506;32477:25;32490:5;32497:4;32477:12;:25::i;:::-;:33;;32328:190;-1:-1:-1;;;;32328:190:0:o;27334:321::-;27464:18;27470:2;27474:7;27464:5;:18::i;:::-;27515:54;27546:1;27550:2;27554:7;27563:5;27515:22;:54::i;:::-;27493:154;;;;-1:-1:-1;;;27493:154:0;;;;;;;:::i;32880:675::-;32963:7;33006:4;32963:7;33021:497;33045:5;:12;33041:1;:16;33021:497;;;33079:20;33102:5;33108:1;33102:8;;;;;;;;:::i;:::-;;;;;;;33079:31;;33145:12;33129;:28;33125:382;;33631:13;33681:15;;;33717:4;33710:15;;;33764:4;33748:21;;33257:57;;33125:382;;;33631:13;33681:15;;;33717:4;33710:15;;;33764:4;33748:21;;33434:57;;33125:382;-1:-1:-1;33059:3:0;;;;:::i;:::-;;;;33021:497;;27661:346;-1:-1:-1;;;;;27741:16:0;;27733:61;;;;-1:-1:-1;;;27733:61:0;;20768:2:1;27733:61:0;;;20750:21:1;;;20787:18;;;20780:30;20846:34;20826:18;;;20819:62;20898:18;;27733:61:0;20566:356:1;27733:61:0;27814:16;27822:7;27814;:16::i;:::-;27813:17;27805:58;;;;-1:-1:-1;;;27805:58:0;;21129:2:1;27805:58:0;;;21111:21:1;21168:2;21148:18;;;21141:30;21207;21187:18;;;21180:58;21255:18;;27805:58:0;20927:352:1;27805:58:0;27932:7;:16;;;;;;;-1:-1:-1;27932:16:0;;;;;;;-1:-1:-1;;;;;;27932:16:0;-1:-1:-1;;;;;27932:16:0;;;;;;;;27966:33;;27991:7;;-1:-1:-1;27966:33:0;;-1:-1:-1;;27966:33:0;27661:346;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2873:186::-;2932:6;2985:2;2973:9;2964:7;2960:23;2956:32;2953:52;;;3001:1;2998;2991:12;2953:52;3024:29;3043:9;3024:29;:::i;3064:127::-;3125:10;3120:3;3116:20;3113:1;3106:31;3156:4;3153:1;3146:15;3180:4;3177:1;3170:15;3196:632;3261:5;3291:18;3332:2;3324:6;3321:14;3318:40;;;3338:18;;:::i;:::-;3413:2;3407:9;3381:2;3467:15;;-1:-1:-1;;3463:24:1;;;3489:2;3459:33;3455:42;3443:55;;;3513:18;;;3533:22;;;3510:46;3507:72;;;3559:18;;:::i;:::-;3599:10;3595:2;3588:22;3628:6;3619:15;;3658:6;3650;3643:22;3698:3;3689:6;3684:3;3680:16;3677:25;3674:45;;;3715:1;3712;3705:12;3674:45;3765:6;3760:3;3753:4;3745:6;3741:17;3728:44;3820:1;3813:4;3804:6;3796;3792:19;3788:30;3781:41;;;;3196:632;;;;;:::o;3833:451::-;3902:6;3955:2;3943:9;3934:7;3930:23;3926:32;3923:52;;;3971:1;3968;3961:12;3923:52;4011:9;3998:23;4044:18;4036:6;4033:30;4030:50;;;4076:1;4073;4066:12;4030:50;4099:22;;4152:4;4144:13;;4140:27;-1:-1:-1;4130:55:1;;4181:1;4178;4171:12;4130:55;4204:74;4270:7;4265:2;4252:16;4247:2;4243;4239:11;4204:74;:::i;4289:367::-;4352:8;4362:6;4416:3;4409:4;4401:6;4397:17;4393:27;4383:55;;4434:1;4431;4424:12;4383:55;-1:-1:-1;4457:20:1;;4500:18;4489:30;;4486:50;;;4532:1;4529;4522:12;4486:50;4569:4;4561:6;4557:17;4545:29;;4629:3;4622:4;4612:6;4609:1;4605:14;4597:6;4593:27;4589:38;4586:47;4583:67;;;4646:1;4643;4636:12;4583:67;4289:367;;;;;:::o;4661:511::-;4756:6;4764;4772;4825:2;4813:9;4804:7;4800:23;4796:32;4793:52;;;4841:1;4838;4831:12;4793:52;4881:9;4868:23;4914:18;4906:6;4903:30;4900:50;;;4946:1;4943;4936:12;4900:50;4985:70;5047:7;5038:6;5027:9;5023:22;4985:70;:::i;:::-;5074:8;;-1:-1:-1;4959:96:1;-1:-1:-1;5128:38:1;;-1:-1:-1;5162:2:1;5147:18;;5128:38;:::i;:::-;5118:48;;4661:511;;;;;:::o;5177:632::-;5348:2;5400:21;;;5470:13;;5373:18;;;5492:22;;;5319:4;;5348:2;5571:15;;;;5545:2;5530:18;;;5319:4;5614:169;5628:6;5625:1;5622:13;5614:169;;;5689:13;;5677:26;;5758:15;;;;5723:12;;;;5650:1;5643:9;5614:169;;;-1:-1:-1;5800:3:1;;5177:632;-1:-1:-1;;;;;;5177:632:1:o;5814:347::-;5879:6;5887;5940:2;5928:9;5919:7;5915:23;5911:32;5908:52;;;5956:1;5953;5946:12;5908:52;5979:29;5998:9;5979:29;:::i;:::-;5969:39;;6058:2;6047:9;6043:18;6030:32;6105:5;6098:13;6091:21;6084:5;6081:32;6071:60;;6127:1;6124;6117:12;6071:60;6150:5;6140:15;;;5814:347;;;;;:::o;6166:667::-;6261:6;6269;6277;6285;6338:3;6326:9;6317:7;6313:23;6309:33;6306:53;;;6355:1;6352;6345:12;6306:53;6378:29;6397:9;6378:29;:::i;:::-;6368:39;;6426:38;6460:2;6449:9;6445:18;6426:38;:::i;:::-;6416:48;;6511:2;6500:9;6496:18;6483:32;6473:42;;6566:2;6555:9;6551:18;6538:32;6593:18;6585:6;6582:30;6579:50;;;6625:1;6622;6615:12;6579:50;6648:22;;6701:4;6693:13;;6689:27;-1:-1:-1;6679:55:1;;6730:1;6727;6720:12;6679:55;6753:74;6819:7;6814:2;6801:16;6796:2;6792;6788:11;6753:74;:::i;:::-;6743:84;;;6166:667;;;;;;;:::o;6838:505::-;6933:6;6941;6949;7002:2;6990:9;6981:7;6977:23;6973:32;6970:52;;;7018:1;7015;7008:12;6970:52;7054:9;7041:23;7031:33;;7115:2;7104:9;7100:18;7087:32;7142:18;7134:6;7131:30;7128:50;;;7174:1;7171;7164:12;7128:50;7213:70;7275:7;7266:6;7255:9;7251:22;7213:70;:::i;:::-;6838:505;;7302:8;;-1:-1:-1;7187:96:1;;-1:-1:-1;;;;6838:505:1:o;7348:260::-;7416:6;7424;7477:2;7465:9;7456:7;7452:23;7448:32;7445:52;;;7493:1;7490;7483:12;7445:52;7516:29;7535:9;7516:29;:::i;:::-;7506:39;;7564:38;7598:2;7587:9;7583:18;7564:38;:::i;:::-;7554:48;;7348:260;;;;;:::o;7795:380::-;7874:1;7870:12;;;;7917;;;7938:61;;7992:4;7984:6;7980:17;7970:27;;7938:61;8045:2;8037:6;8034:14;8014:18;8011:38;8008:161;;;8091:10;8086:3;8082:20;8079:1;8072:31;8126:4;8123:1;8116:15;8154:4;8151:1;8144:15;8008:161;;7795:380;;;:::o;9420:413::-;9622:2;9604:21;;;9661:2;9641:18;;;9634:30;9700:34;9695:2;9680:18;;9673:62;-1:-1:-1;;;9766:2:1;9751:18;;9744:47;9823:3;9808:19;;9420:413::o;9838:346::-;10040:2;10022:21;;;10079:2;10059:18;;;10052:30;-1:-1:-1;;;10113:2:1;10098:18;;10091:52;10175:2;10160:18;;9838:346::o;10189:127::-;10250:10;10245:3;10241:20;10238:1;10231:31;10281:4;10278:1;10271:15;10305:4;10302:1;10295:15;10321:127;10382:10;10377:3;10373:20;10370:1;10363:31;10413:4;10410:1;10403:15;10437:4;10434:1;10427:15;10453:135;10492:3;-1:-1:-1;;10513:17:1;;10510:43;;;10533:18;;:::i;:::-;-1:-1:-1;10580:1:1;10569:13;;10453:135::o;10593:356::-;10795:2;10777:21;;;10814:18;;;10807:30;10873:34;10868:2;10853:18;;10846:62;10940:2;10925:18;;10593:356::o;13435:184::-;13505:6;13558:2;13546:9;13537:7;13533:23;13529:32;13526:52;;;13574:1;13571;13564:12;13526:52;-1:-1:-1;13597:16:1;;13435:184;-1:-1:-1;13435:184:1:o;13965:125::-;14005:4;14033:1;14030;14027:8;14024:34;;;14038:18;;:::i;:::-;-1:-1:-1;14075:9:1;;13965:125::o;14095:168::-;14135:7;14201:1;14197;14193:6;14189:14;14186:1;14183:21;14178:1;14171:9;14164:17;14160:45;14157:71;;;14208:18;;:::i;:::-;-1:-1:-1;14248:9:1;;14095:168::o;14268:128::-;14308:3;14339:1;14335:6;14332:1;14329:13;14326:39;;;14345:18;;:::i;:::-;-1:-1:-1;14381:9:1;;14268:128::o;14401:331::-;14603:2;14585:21;;;14642:1;14622:18;;;14615:29;-1:-1:-1;;;14675:2:1;14660:18;;14653:38;14723:2;14708:18;;14401:331::o;16153:637::-;16433:3;16471:6;16465:13;16487:53;16533:6;16528:3;16521:4;16513:6;16509:17;16487:53;:::i;:::-;16603:13;;16562:16;;;;16625:57;16603:13;16562:16;16659:4;16647:17;;16625:57;:::i;:::-;-1:-1:-1;;;16704:20:1;;16733:22;;;16782:1;16771:13;;16153:637;-1:-1:-1;;;;16153:637:1:o;18791:414::-;18993:2;18975:21;;;19032:2;19012:18;;;19005:30;19071:34;19066:2;19051:18;;19044:62;-1:-1:-1;;;19137:2:1;19122:18;;19115:48;19195:3;19180:19;;18791:414::o;19444:127::-;19505:10;19500:3;19496:20;19493:1;19486:31;19536:4;19533:1;19526:15;19560:4;19557:1;19550:15;19576:120;19616:1;19642;19632:35;;19647:18;;:::i;:::-;-1:-1:-1;19681:9:1;;19576:120::o;19701:112::-;19733:1;19759;19749:35;;19764:18;;:::i;:::-;-1:-1:-1;19798:9:1;;19701:112::o;19818:489::-;-1:-1:-1;;;;;20087:15:1;;;20069:34;;20139:15;;20134:2;20119:18;;20112:43;20186:2;20171:18;;20164:34;;;20234:3;20229:2;20214:18;;20207:31;;;20012:4;;20255:46;;20281:19;;20273:6;20255:46;:::i;:::-;20247:54;19818:489;-1:-1:-1;;;;;;19818:489:1:o;20312:249::-;20381:6;20434:2;20422:9;20413:7;20409:23;20405:32;20402:52;;;20450:1;20447;20440:12;20402:52;20482:9;20476:16;20501:30;20525:5;20501:30;:::i

Swarm Source

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