ETH Price: $2,608.76 (-0.48%)

Token

skomra-editions (SKOMRA-EDITIONS)
 

Overview

Max Total Supply

0 SKOMRA-EDITIONS

Holders

21

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 SKOMRA-EDITIONS
0x65C7432E6662A96f4e999603991d5E929E57f60A
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:
editions

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-17
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/utils/StringsUpgradeable.sol



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library StringsUpgradeable {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/utils/AddressUpgradeable.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library AddressUpgradeable {
    /**
     * @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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/proxy/utils/Initializable.sol



// solhint-disable-next-line compiler-version
pragma solidity ^0.8.0;


/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 */
abstract contract Initializable {

    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/utils/ContextUpgradeable.sol



pragma solidity ^0.8.0;


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

    function __Context_init_unchained() internal initializer {
    }
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
    uint256[50] private __gap;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/access/OwnableUpgradeable.sol



pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    function __Ownable_init() internal initializer {
        __Context_init_unchained();
        __Ownable_init_unchained();
    }

    function __Ownable_init_unchained() internal initializer {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    uint256[49] private __gap;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/token/ERC721/IERC721ReceiverUpgradeable.sol



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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/utils/introspection/IERC165Upgradeable.sol



pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/utils/introspection/ERC165Upgradeable.sol



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 ERC165Upgradeable is Initializable, IERC165Upgradeable {
    function __ERC165_init() internal initializer {
        __ERC165_init_unchained();
    }

    function __ERC165_init_unchained() internal initializer {
    }
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165Upgradeable).interfaceId;
    }
    uint256[50] private __gap;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/token/ERC721/IERC721Upgradeable.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721Upgradeable is IERC165Upgradeable {
    /**
     * @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;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/token/ERC721/extensions/IERC721EnumerableUpgradeable.sol



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 IERC721EnumerableUpgradeable is IERC721Upgradeable {

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/token/ERC721/extensions/IERC721MetadataUpgradeable.sol



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 IERC721MetadataUpgradeable is IERC721Upgradeable {

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/token/ERC721/ERC721Upgradeable.sol



pragma solidity ^0.8.0;










/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {
    using AddressUpgradeable for address;
    using StringsUpgradeable for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping (uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping (address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    function __ERC721_init(string memory name_, string memory symbol_) internal initializer {
        __Context_init_unchained();
        __ERC165_init_unchained();
        __ERC721_init_unchained(name_, symbol_);
    }

    function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165Upgradeable) returns (bool) {
        return interfaceId == type(IERC721Upgradeable).interfaceId
            || interfaceId == type(IERC721MetadataUpgradeable).interfaceId
            || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    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;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString()))
            : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721Upgradeable.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    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);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    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);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    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);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    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");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721Upgradeable.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    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");
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    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);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721Upgradeable.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721Upgradeable.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);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721ReceiverUpgradeable(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v4.0/contracts/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol



pragma solidity ^0.8.0;



/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorageUpgradeable is Initializable, ERC721Upgradeable {
    function __ERC721URIStorage_init() internal initializer {
        __Context_init_unchained();
        __ERC165_init_unchained();
        __ERC721URIStorage_init_unchained();
    }

    function __ERC721URIStorage_init_unchained() internal initializer {
    }
    using StringsUpgradeable for uint256;

    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
    uint256[49] private __gap;
}

// File: contracts/editions_for_flat.sol


pragma solidity ^0.8.1;


//import "./HasSecondarySaleFees.sol";

contract editions is ERC721URIStorageUpgradeable, OwnableUpgradeable {
    string baseURI;
    
    function initialize() initializer public {
        __ERC721_init("skomra-editions", "SKOMRA-EDITIONS");
       __Ownable_init_unchained();
       __ERC721URIStorage_init();
    }
    
    function mint(
        address account,
        uint256 tokenId,
        string memory tokenURI
    ) public onlyOwner {
        _mint(account, tokenId);
        _setTokenURI(tokenId, tokenURI);
    }

    function setBaseURI(string memory baseURI_) public onlyOwner {
        baseURI = baseURI_;
    }
    
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"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":[{"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"baseURI_","type":"string"}],"name":"setBaseURI","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]

608060405234801561001057600080fd5b50613a93806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063b88d4fde11610071578063b88d4fde146102e0578063c87b56dd146102fc578063d3fc98641461032c578063e985e9c514610348578063f2fde38b1461037857610121565b8063715018a6146102745780638129fc1c1461027e5780638da5cb5b1461028857806395d89b41146102a6578063a22cb465146102c457610121565b806323b872dd116100f457806323b872dd146101c057806342842e0e146101dc57806355f804b3146101f85780636352211e1461021457806370a082311461024457610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b919061296f565b610394565b60405161014d9190612e1f565b60405180910390f35b61015e610476565b60405161016b9190612e3a565b60405180910390f35b61018e60048036038101906101899190612a02565b610508565b60405161019b9190612db8565b60405180910390f35b6101be60048036038101906101b991906128cc565b61058d565b005b6101da60048036038101906101d591906127c6565b6106a5565b005b6101f660048036038101906101f191906127c6565b610705565b005b610212600480360381019061020d91906129c1565b610725565b005b61022e60048036038101906102299190612a02565b6107bb565b60405161023b9190612db8565b60405180910390f35b61025e60048036038101906102599190612761565b61086d565b60405161026b91906130bc565b60405180910390f35b61027c610925565b005b610286610a62565b005b610290610bbf565b60405161029d9190612db8565b60405180910390f35b6102ae610be9565b6040516102bb9190612e3a565b60405180910390f35b6102de60048036038101906102d99190612890565b610c7b565b005b6102fa60048036038101906102f59190612815565b610dfc565b005b61031660048036038101906103119190612a02565b610e5e565b6040516103239190612e3a565b60405180910390f35b61034660048036038101906103419190612908565b610fb0565b005b610362600480360381019061035d919061278a565b611045565b60405161036f9190612e1f565b60405180910390f35b610392600480360381019061038d9190612761565b6110d9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046f575061046e82611285565b5b9050919050565b60606065805461048590613312565b80601f01602080910402602001604051908101604052809291908181526020018280546104b190613312565b80156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b6000610513826112ef565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054990612ffc565b60405180910390fd5b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610598826107bb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106009061307c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661062861135b565b73ffffffffffffffffffffffffffffffffffffffff16148061065757506106568161065161135b565b611045565b5b610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90612f1c565b60405180910390fd5b6106a08383611363565b505050565b6106b66106b061135b565b8261141c565b6106f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ec9061309c565b60405180910390fd5b6107008383836114fa565b505050565b61072083838360405180602001604052806000815250610dfc565b505050565b61072d61135b565b73ffffffffffffffffffffffffffffffffffffffff1661074b610bbf565b73ffffffffffffffffffffffffffffffffffffffff16146107a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107989061301c565b60405180910390fd5b8060fb90805190602001906107b7929190612585565b5050565b6000806067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90612f5c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612f3c565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61092d61135b565b73ffffffffffffffffffffffffffffffffffffffff1661094b610bbf565b73ffffffffffffffffffffffffffffffffffffffff16146109a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109989061301c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900460ff1680610a88575060008054906101000a900460ff16155b610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015610b17576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610b8b6040518060400160405280600f81526020017f736b6f6d72612d65646974696f6e7300000000000000000000000000000000008152506040518060400160405280600f81526020017f534b4f4d52412d45444954494f4e530000000000000000000000000000000000815250611756565b610b9361184b565b610b9b6119cd565b8015610bbc5760008060016101000a81548160ff0219169083151502179055505b50565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060668054610bf890613312565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490613312565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b610c8361135b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890612edc565b60405180910390fd5b80606a6000610cfe61135b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610dab61135b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610df09190612e1f565b60405180910390a35050565b610e0d610e0761135b565b8361141c565b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e439061309c565b60405180910390fd5b610e5884848484611abe565b50505050565b6060610e69826112ef565b610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612fdc565b60405180910390fd5b6000609760008481526020019081526020016000208054610ec890613312565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef490613312565b8015610f415780601f10610f1657610100808354040283529160200191610f41565b820191906000526020600020905b815481529060010190602001808311610f2457829003601f168201915b505050505090506000610f52611b1a565b9050600081511415610f68578192505050610fab565b600082511115610f9d578082604051602001610f85929190612d94565b60405160208183030381529060405292505050610fab565b610fa684611bac565b925050505b919050565b610fb861135b565b73ffffffffffffffffffffffffffffffffffffffff16610fd6610bbf565b73ffffffffffffffffffffffffffffffffffffffff161461102c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110239061301c565b60405180910390fd5b6110368383611c53565b6110408282611e21565b505050565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110e161135b565b73ffffffffffffffffffffffffffffffffffffffff166110ff610bbf565b73ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c9061301c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90612e7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113d6836107bb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611427826112ef565b611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90612efc565b60405180910390fd5b6000611471836107bb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114e057508373ffffffffffffffffffffffffffffffffffffffff166114c884610508565b73ffffffffffffffffffffffffffffffffffffffff16145b806114f157506114f08185611045565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661151a826107bb565b73ffffffffffffffffffffffffffffffffffffffff1614611570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115679061303c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790612ebc565b60405180910390fd5b6115eb838383611e95565b6115f6600082611363565b6001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116469190613228565b925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461169d91906131a1565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600060019054906101000a900460ff168061177c575060008054906101000a900460ff16155b6117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b290612f9c565b60405180910390fd5b60008060019054906101000a900460ff16159050801561180b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611813611e9a565b61181b611f73565b611825838361204c565b80156118465760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680611871575060008054906101000a900460ff16155b6118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015611900576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061190a61135b565b90508060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156119ca5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806119f3575060008054906101000a900460ff16155b611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015611a82576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611a8a611e9a565b611a92611f73565b611a9a612155565b8015611abb5760008060016101000a81548160ff0219169083151502179055505b50565b611ac98484846114fa565b611ad58484848461222e565b611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90612e5c565b60405180910390fd5b50505050565b606060fb8054611b2990613312565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5590613312565b8015611ba25780601f10611b7757610100808354040283529160200191611ba2565b820191906000526020600020905b815481529060010190602001808311611b8557829003601f168201915b5050505050905090565b6060611bb7826112ef565b611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed9061305c565b60405180910390fd5b6000611c00611b1a565b90506000815111611c205760405180602001604052806000815250611c4b565b80611c2a846123c5565b604051602001611c3b929190612d94565b6040516020818303038152906040525b915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90612fbc565b60405180910390fd5b611ccc816112ef565b15611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390612e9c565b60405180910390fd5b611d1860008383611e95565b6001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d6891906131a1565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611e2a826112ef565b611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090612f7c565b60405180910390fd5b80609760008481526020019081526020016000209080519060200190611e90929190612585565b505050565b505050565b600060019054906101000a900460ff1680611ec0575060008054906101000a900460ff16155b611eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef690612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015611f4f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611f705760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611f99575060008054906101000a900460ff16155b611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612028576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156120495760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612072575060008054906101000a900460ff16155b6120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612101576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8260659080519060200190612117929190612585565b50816066908051906020019061212e929190612585565b5080156121505760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061217b575060008054906101000a900460ff16155b6121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190612f9c565b60405180910390fd5b60008060019054906101000a900460ff16159050801561220a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801561222b5760008060016101000a81548160ff0219169083151502179055505b50565b600061224f8473ffffffffffffffffffffffffffffffffffffffff16612572565b156123b8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261227861135b565b8786866040518563ffffffff1660e01b815260040161229a9493929190612dd3565b602060405180830381600087803b1580156122b457600080fd5b505af19250505080156122e557506040513d601f19601f820116820180604052508101906122e29190612998565b60015b612368573d8060008114612315576040519150601f19603f3d011682016040523d82523d6000602084013e61231a565b606091505b50600081511415612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790612e5c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123bd565b600190505b949350505050565b6060600082141561240d576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061256d565b600082905060005b6000821461243f57808061242890613375565b915050600a8261243891906131f7565b9150612415565b60008167ffffffffffffffff811115612481577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124b35781602001600182028036833780820191505090505b5090505b60008514612566576001826124cc9190613228565b9150600a856124db91906133be565b60306124e791906131a1565b60f81b818381518110612523577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561255f91906131f7565b94506124b7565b8093505050505b919050565b600080823b905060008111915050919050565b82805461259190613312565b90600052602060002090601f0160209004810192826125b357600085556125fa565b82601f106125cc57805160ff19168380011785556125fa565b828001600101855582156125fa579182015b828111156125f95782518255916020019190600101906125de565b5b509050612607919061260b565b5090565b5b8082111561262457600081600090555060010161260c565b5090565b600061263b612636846130fc565b6130d7565b90508281526020810184848401111561265357600080fd5b61265e8482856132d0565b509392505050565b60006126796126748461312d565b6130d7565b90508281526020810184848401111561269157600080fd5b61269c8482856132d0565b509392505050565b6000813590506126b381613a01565b92915050565b6000813590506126c881613a18565b92915050565b6000813590506126dd81613a2f565b92915050565b6000815190506126f281613a2f565b92915050565b600082601f83011261270957600080fd5b8135612719848260208601612628565b91505092915050565b600082601f83011261273357600080fd5b8135612743848260208601612666565b91505092915050565b60008135905061275b81613a46565b92915050565b60006020828403121561277357600080fd5b6000612781848285016126a4565b91505092915050565b6000806040838503121561279d57600080fd5b60006127ab858286016126a4565b92505060206127bc858286016126a4565b9150509250929050565b6000806000606084860312156127db57600080fd5b60006127e9868287016126a4565b93505060206127fa868287016126a4565b925050604061280b8682870161274c565b9150509250925092565b6000806000806080858703121561282b57600080fd5b6000612839878288016126a4565b945050602061284a878288016126a4565b935050604061285b8782880161274c565b925050606085013567ffffffffffffffff81111561287857600080fd5b612884878288016126f8565b91505092959194509250565b600080604083850312156128a357600080fd5b60006128b1858286016126a4565b92505060206128c2858286016126b9565b9150509250929050565b600080604083850312156128df57600080fd5b60006128ed858286016126a4565b92505060206128fe8582860161274c565b9150509250929050565b60008060006060848603121561291d57600080fd5b600061292b868287016126a4565b935050602061293c8682870161274c565b925050604084013567ffffffffffffffff81111561295957600080fd5b61296586828701612722565b9150509250925092565b60006020828403121561298157600080fd5b600061298f848285016126ce565b91505092915050565b6000602082840312156129aa57600080fd5b60006129b8848285016126e3565b91505092915050565b6000602082840312156129d357600080fd5b600082013567ffffffffffffffff8111156129ed57600080fd5b6129f984828501612722565b91505092915050565b600060208284031215612a1457600080fd5b6000612a228482850161274c565b91505092915050565b612a348161325c565b82525050565b612a438161326e565b82525050565b6000612a548261315e565b612a5e8185613174565b9350612a6e8185602086016132df565b612a77816134ab565b840191505092915050565b6000612a8d82613169565b612a978185613185565b9350612aa78185602086016132df565b612ab0816134ab565b840191505092915050565b6000612ac682613169565b612ad08185613196565b9350612ae08185602086016132df565b80840191505092915050565b6000612af9603283613185565b9150612b04826134bc565b604082019050919050565b6000612b1c602683613185565b9150612b278261350b565b604082019050919050565b6000612b3f601c83613185565b9150612b4a8261355a565b602082019050919050565b6000612b62602483613185565b9150612b6d82613583565b604082019050919050565b6000612b85601983613185565b9150612b90826135d2565b602082019050919050565b6000612ba8602c83613185565b9150612bb3826135fb565b604082019050919050565b6000612bcb603883613185565b9150612bd68261364a565b604082019050919050565b6000612bee602a83613185565b9150612bf982613699565b604082019050919050565b6000612c11602983613185565b9150612c1c826136e8565b604082019050919050565b6000612c34602e83613185565b9150612c3f82613737565b604082019050919050565b6000612c57602e83613185565b9150612c6282613786565b604082019050919050565b6000612c7a602083613185565b9150612c85826137d5565b602082019050919050565b6000612c9d603183613185565b9150612ca8826137fe565b604082019050919050565b6000612cc0602c83613185565b9150612ccb8261384d565b604082019050919050565b6000612ce3602083613185565b9150612cee8261389c565b602082019050919050565b6000612d06602983613185565b9150612d11826138c5565b604082019050919050565b6000612d29602f83613185565b9150612d3482613914565b604082019050919050565b6000612d4c602183613185565b9150612d5782613963565b604082019050919050565b6000612d6f603183613185565b9150612d7a826139b2565b604082019050919050565b612d8e816132c6565b82525050565b6000612da08285612abb565b9150612dac8284612abb565b91508190509392505050565b6000602082019050612dcd6000830184612a2b565b92915050565b6000608082019050612de86000830187612a2b565b612df56020830186612a2b565b612e026040830185612d85565b8181036060830152612e148184612a49565b905095945050505050565b6000602082019050612e346000830184612a3a565b92915050565b60006020820190508181036000830152612e548184612a82565b905092915050565b60006020820190508181036000830152612e7581612aec565b9050919050565b60006020820190508181036000830152612e9581612b0f565b9050919050565b60006020820190508181036000830152612eb581612b32565b9050919050565b60006020820190508181036000830152612ed581612b55565b9050919050565b60006020820190508181036000830152612ef581612b78565b9050919050565b60006020820190508181036000830152612f1581612b9b565b9050919050565b60006020820190508181036000830152612f3581612bbe565b9050919050565b60006020820190508181036000830152612f5581612be1565b9050919050565b60006020820190508181036000830152612f7581612c04565b9050919050565b60006020820190508181036000830152612f9581612c27565b9050919050565b60006020820190508181036000830152612fb581612c4a565b9050919050565b60006020820190508181036000830152612fd581612c6d565b9050919050565b60006020820190508181036000830152612ff581612c90565b9050919050565b6000602082019050818103600083015261301581612cb3565b9050919050565b6000602082019050818103600083015261303581612cd6565b9050919050565b6000602082019050818103600083015261305581612cf9565b9050919050565b6000602082019050818103600083015261307581612d1c565b9050919050565b6000602082019050818103600083015261309581612d3f565b9050919050565b600060208201905081810360008301526130b581612d62565b9050919050565b60006020820190506130d16000830184612d85565b92915050565b60006130e16130f2565b90506130ed8282613344565b919050565b6000604051905090565b600067ffffffffffffffff8211156131175761311661347c565b5b613120826134ab565b9050602081019050919050565b600067ffffffffffffffff8211156131485761314761347c565b5b613151826134ab565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131ac826132c6565b91506131b7836132c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131ec576131eb6133ef565b5b828201905092915050565b6000613202826132c6565b915061320d836132c6565b92508261321d5761321c61341e565b5b828204905092915050565b6000613233826132c6565b915061323e836132c6565b925082821015613251576132506133ef565b5b828203905092915050565b6000613267826132a6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132fd5780820151818401526020810190506132e2565b8381111561330c576000848401525b50505050565b6000600282049050600182168061332a57607f821691505b6020821081141561333e5761333d61344d565b5b50919050565b61334d826134ab565b810181811067ffffffffffffffff8211171561336c5761336b61347c565b5b80604052505050565b6000613380826132c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133b3576133b26133ef565b5b600182019050919050565b60006133c9826132c6565b91506133d4836132c6565b9250826133e4576133e361341e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a0a8161325c565b8114613a1557600080fd5b50565b613a218161326e565b8114613a2c57600080fd5b50565b613a388161327a565b8114613a4357600080fd5b50565b613a4f816132c6565b8114613a5a57600080fd5b5056fea26469706673582212207c27fc7bd7657ceefb56d92258469c1b9c853d6392dd43034110ec5cf2d5e95064736f6c63430008010033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063b88d4fde11610071578063b88d4fde146102e0578063c87b56dd146102fc578063d3fc98641461032c578063e985e9c514610348578063f2fde38b1461037857610121565b8063715018a6146102745780638129fc1c1461027e5780638da5cb5b1461028857806395d89b41146102a6578063a22cb465146102c457610121565b806323b872dd116100f457806323b872dd146101c057806342842e0e146101dc57806355f804b3146101f85780636352211e1461021457806370a082311461024457610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b919061296f565b610394565b60405161014d9190612e1f565b60405180910390f35b61015e610476565b60405161016b9190612e3a565b60405180910390f35b61018e60048036038101906101899190612a02565b610508565b60405161019b9190612db8565b60405180910390f35b6101be60048036038101906101b991906128cc565b61058d565b005b6101da60048036038101906101d591906127c6565b6106a5565b005b6101f660048036038101906101f191906127c6565b610705565b005b610212600480360381019061020d91906129c1565b610725565b005b61022e60048036038101906102299190612a02565b6107bb565b60405161023b9190612db8565b60405180910390f35b61025e60048036038101906102599190612761565b61086d565b60405161026b91906130bc565b60405180910390f35b61027c610925565b005b610286610a62565b005b610290610bbf565b60405161029d9190612db8565b60405180910390f35b6102ae610be9565b6040516102bb9190612e3a565b60405180910390f35b6102de60048036038101906102d99190612890565b610c7b565b005b6102fa60048036038101906102f59190612815565b610dfc565b005b61031660048036038101906103119190612a02565b610e5e565b6040516103239190612e3a565b60405180910390f35b61034660048036038101906103419190612908565b610fb0565b005b610362600480360381019061035d919061278a565b611045565b60405161036f9190612e1f565b60405180910390f35b610392600480360381019061038d9190612761565b6110d9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046f575061046e82611285565b5b9050919050565b60606065805461048590613312565b80601f01602080910402602001604051908101604052809291908181526020018280546104b190613312565b80156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b6000610513826112ef565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054990612ffc565b60405180910390fd5b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610598826107bb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106009061307c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661062861135b565b73ffffffffffffffffffffffffffffffffffffffff16148061065757506106568161065161135b565b611045565b5b610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90612f1c565b60405180910390fd5b6106a08383611363565b505050565b6106b66106b061135b565b8261141c565b6106f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ec9061309c565b60405180910390fd5b6107008383836114fa565b505050565b61072083838360405180602001604052806000815250610dfc565b505050565b61072d61135b565b73ffffffffffffffffffffffffffffffffffffffff1661074b610bbf565b73ffffffffffffffffffffffffffffffffffffffff16146107a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107989061301c565b60405180910390fd5b8060fb90805190602001906107b7929190612585565b5050565b6000806067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90612f5c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612f3c565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61092d61135b565b73ffffffffffffffffffffffffffffffffffffffff1661094b610bbf565b73ffffffffffffffffffffffffffffffffffffffff16146109a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109989061301c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900460ff1680610a88575060008054906101000a900460ff16155b610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015610b17576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610b8b6040518060400160405280600f81526020017f736b6f6d72612d65646974696f6e7300000000000000000000000000000000008152506040518060400160405280600f81526020017f534b4f4d52412d45444954494f4e530000000000000000000000000000000000815250611756565b610b9361184b565b610b9b6119cd565b8015610bbc5760008060016101000a81548160ff0219169083151502179055505b50565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060668054610bf890613312565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490613312565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b610c8361135b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890612edc565b60405180910390fd5b80606a6000610cfe61135b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610dab61135b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610df09190612e1f565b60405180910390a35050565b610e0d610e0761135b565b8361141c565b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e439061309c565b60405180910390fd5b610e5884848484611abe565b50505050565b6060610e69826112ef565b610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90612fdc565b60405180910390fd5b6000609760008481526020019081526020016000208054610ec890613312565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef490613312565b8015610f415780601f10610f1657610100808354040283529160200191610f41565b820191906000526020600020905b815481529060010190602001808311610f2457829003601f168201915b505050505090506000610f52611b1a565b9050600081511415610f68578192505050610fab565b600082511115610f9d578082604051602001610f85929190612d94565b60405160208183030381529060405292505050610fab565b610fa684611bac565b925050505b919050565b610fb861135b565b73ffffffffffffffffffffffffffffffffffffffff16610fd6610bbf565b73ffffffffffffffffffffffffffffffffffffffff161461102c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110239061301c565b60405180910390fd5b6110368383611c53565b6110408282611e21565b505050565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110e161135b565b73ffffffffffffffffffffffffffffffffffffffff166110ff610bbf565b73ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c9061301c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90612e7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113d6836107bb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611427826112ef565b611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90612efc565b60405180910390fd5b6000611471836107bb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114e057508373ffffffffffffffffffffffffffffffffffffffff166114c884610508565b73ffffffffffffffffffffffffffffffffffffffff16145b806114f157506114f08185611045565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661151a826107bb565b73ffffffffffffffffffffffffffffffffffffffff1614611570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115679061303c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790612ebc565b60405180910390fd5b6115eb838383611e95565b6115f6600082611363565b6001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116469190613228565b925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461169d91906131a1565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600060019054906101000a900460ff168061177c575060008054906101000a900460ff16155b6117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b290612f9c565b60405180910390fd5b60008060019054906101000a900460ff16159050801561180b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611813611e9a565b61181b611f73565b611825838361204c565b80156118465760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680611871575060008054906101000a900460ff16155b6118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015611900576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061190a61135b565b90508060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156119ca5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806119f3575060008054906101000a900460ff16155b611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015611a82576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611a8a611e9a565b611a92611f73565b611a9a612155565b8015611abb5760008060016101000a81548160ff0219169083151502179055505b50565b611ac98484846114fa565b611ad58484848461222e565b611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90612e5c565b60405180910390fd5b50505050565b606060fb8054611b2990613312565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5590613312565b8015611ba25780601f10611b7757610100808354040283529160200191611ba2565b820191906000526020600020905b815481529060010190602001808311611b8557829003601f168201915b5050505050905090565b6060611bb7826112ef565b611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed9061305c565b60405180910390fd5b6000611c00611b1a565b90506000815111611c205760405180602001604052806000815250611c4b565b80611c2a846123c5565b604051602001611c3b929190612d94565b6040516020818303038152906040525b915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90612fbc565b60405180910390fd5b611ccc816112ef565b15611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390612e9c565b60405180910390fd5b611d1860008383611e95565b6001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d6891906131a1565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611e2a826112ef565b611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090612f7c565b60405180910390fd5b80609760008481526020019081526020016000209080519060200190611e90929190612585565b505050565b505050565b600060019054906101000a900460ff1680611ec0575060008054906101000a900460ff16155b611eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef690612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015611f4f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611f705760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611f99575060008054906101000a900460ff16155b611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612028576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156120495760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612072575060008054906101000a900460ff16155b6120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890612f9c565b60405180910390fd5b60008060019054906101000a900460ff161590508015612101576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8260659080519060200190612117929190612585565b50816066908051906020019061212e929190612585565b5080156121505760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168061217b575060008054906101000a900460ff16155b6121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190612f9c565b60405180910390fd5b60008060019054906101000a900460ff16159050801561220a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801561222b5760008060016101000a81548160ff0219169083151502179055505b50565b600061224f8473ffffffffffffffffffffffffffffffffffffffff16612572565b156123b8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261227861135b565b8786866040518563ffffffff1660e01b815260040161229a9493929190612dd3565b602060405180830381600087803b1580156122b457600080fd5b505af19250505080156122e557506040513d601f19601f820116820180604052508101906122e29190612998565b60015b612368573d8060008114612315576040519150601f19603f3d011682016040523d82523d6000602084013e61231a565b606091505b50600081511415612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790612e5c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123bd565b600190505b949350505050565b6060600082141561240d576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061256d565b600082905060005b6000821461243f57808061242890613375565b915050600a8261243891906131f7565b9150612415565b60008167ffffffffffffffff811115612481577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124b35781602001600182028036833780820191505090505b5090505b60008514612566576001826124cc9190613228565b9150600a856124db91906133be565b60306124e791906131a1565b60f81b818381518110612523577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561255f91906131f7565b94506124b7565b8093505050505b919050565b600080823b905060008111915050919050565b82805461259190613312565b90600052602060002090601f0160209004810192826125b357600085556125fa565b82601f106125cc57805160ff19168380011785556125fa565b828001600101855582156125fa579182015b828111156125f95782518255916020019190600101906125de565b5b509050612607919061260b565b5090565b5b8082111561262457600081600090555060010161260c565b5090565b600061263b612636846130fc565b6130d7565b90508281526020810184848401111561265357600080fd5b61265e8482856132d0565b509392505050565b60006126796126748461312d565b6130d7565b90508281526020810184848401111561269157600080fd5b61269c8482856132d0565b509392505050565b6000813590506126b381613a01565b92915050565b6000813590506126c881613a18565b92915050565b6000813590506126dd81613a2f565b92915050565b6000815190506126f281613a2f565b92915050565b600082601f83011261270957600080fd5b8135612719848260208601612628565b91505092915050565b600082601f83011261273357600080fd5b8135612743848260208601612666565b91505092915050565b60008135905061275b81613a46565b92915050565b60006020828403121561277357600080fd5b6000612781848285016126a4565b91505092915050565b6000806040838503121561279d57600080fd5b60006127ab858286016126a4565b92505060206127bc858286016126a4565b9150509250929050565b6000806000606084860312156127db57600080fd5b60006127e9868287016126a4565b93505060206127fa868287016126a4565b925050604061280b8682870161274c565b9150509250925092565b6000806000806080858703121561282b57600080fd5b6000612839878288016126a4565b945050602061284a878288016126a4565b935050604061285b8782880161274c565b925050606085013567ffffffffffffffff81111561287857600080fd5b612884878288016126f8565b91505092959194509250565b600080604083850312156128a357600080fd5b60006128b1858286016126a4565b92505060206128c2858286016126b9565b9150509250929050565b600080604083850312156128df57600080fd5b60006128ed858286016126a4565b92505060206128fe8582860161274c565b9150509250929050565b60008060006060848603121561291d57600080fd5b600061292b868287016126a4565b935050602061293c8682870161274c565b925050604084013567ffffffffffffffff81111561295957600080fd5b61296586828701612722565b9150509250925092565b60006020828403121561298157600080fd5b600061298f848285016126ce565b91505092915050565b6000602082840312156129aa57600080fd5b60006129b8848285016126e3565b91505092915050565b6000602082840312156129d357600080fd5b600082013567ffffffffffffffff8111156129ed57600080fd5b6129f984828501612722565b91505092915050565b600060208284031215612a1457600080fd5b6000612a228482850161274c565b91505092915050565b612a348161325c565b82525050565b612a438161326e565b82525050565b6000612a548261315e565b612a5e8185613174565b9350612a6e8185602086016132df565b612a77816134ab565b840191505092915050565b6000612a8d82613169565b612a978185613185565b9350612aa78185602086016132df565b612ab0816134ab565b840191505092915050565b6000612ac682613169565b612ad08185613196565b9350612ae08185602086016132df565b80840191505092915050565b6000612af9603283613185565b9150612b04826134bc565b604082019050919050565b6000612b1c602683613185565b9150612b278261350b565b604082019050919050565b6000612b3f601c83613185565b9150612b4a8261355a565b602082019050919050565b6000612b62602483613185565b9150612b6d82613583565b604082019050919050565b6000612b85601983613185565b9150612b90826135d2565b602082019050919050565b6000612ba8602c83613185565b9150612bb3826135fb565b604082019050919050565b6000612bcb603883613185565b9150612bd68261364a565b604082019050919050565b6000612bee602a83613185565b9150612bf982613699565b604082019050919050565b6000612c11602983613185565b9150612c1c826136e8565b604082019050919050565b6000612c34602e83613185565b9150612c3f82613737565b604082019050919050565b6000612c57602e83613185565b9150612c6282613786565b604082019050919050565b6000612c7a602083613185565b9150612c85826137d5565b602082019050919050565b6000612c9d603183613185565b9150612ca8826137fe565b604082019050919050565b6000612cc0602c83613185565b9150612ccb8261384d565b604082019050919050565b6000612ce3602083613185565b9150612cee8261389c565b602082019050919050565b6000612d06602983613185565b9150612d11826138c5565b604082019050919050565b6000612d29602f83613185565b9150612d3482613914565b604082019050919050565b6000612d4c602183613185565b9150612d5782613963565b604082019050919050565b6000612d6f603183613185565b9150612d7a826139b2565b604082019050919050565b612d8e816132c6565b82525050565b6000612da08285612abb565b9150612dac8284612abb565b91508190509392505050565b6000602082019050612dcd6000830184612a2b565b92915050565b6000608082019050612de86000830187612a2b565b612df56020830186612a2b565b612e026040830185612d85565b8181036060830152612e148184612a49565b905095945050505050565b6000602082019050612e346000830184612a3a565b92915050565b60006020820190508181036000830152612e548184612a82565b905092915050565b60006020820190508181036000830152612e7581612aec565b9050919050565b60006020820190508181036000830152612e9581612b0f565b9050919050565b60006020820190508181036000830152612eb581612b32565b9050919050565b60006020820190508181036000830152612ed581612b55565b9050919050565b60006020820190508181036000830152612ef581612b78565b9050919050565b60006020820190508181036000830152612f1581612b9b565b9050919050565b60006020820190508181036000830152612f3581612bbe565b9050919050565b60006020820190508181036000830152612f5581612be1565b9050919050565b60006020820190508181036000830152612f7581612c04565b9050919050565b60006020820190508181036000830152612f9581612c27565b9050919050565b60006020820190508181036000830152612fb581612c4a565b9050919050565b60006020820190508181036000830152612fd581612c6d565b9050919050565b60006020820190508181036000830152612ff581612c90565b9050919050565b6000602082019050818103600083015261301581612cb3565b9050919050565b6000602082019050818103600083015261303581612cd6565b9050919050565b6000602082019050818103600083015261305581612cf9565b9050919050565b6000602082019050818103600083015261307581612d1c565b9050919050565b6000602082019050818103600083015261309581612d3f565b9050919050565b600060208201905081810360008301526130b581612d62565b9050919050565b60006020820190506130d16000830184612d85565b92915050565b60006130e16130f2565b90506130ed8282613344565b919050565b6000604051905090565b600067ffffffffffffffff8211156131175761311661347c565b5b613120826134ab565b9050602081019050919050565b600067ffffffffffffffff8211156131485761314761347c565b5b613151826134ab565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131ac826132c6565b91506131b7836132c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131ec576131eb6133ef565b5b828201905092915050565b6000613202826132c6565b915061320d836132c6565b92508261321d5761321c61341e565b5b828204905092915050565b6000613233826132c6565b915061323e836132c6565b925082821015613251576132506133ef565b5b828203905092915050565b6000613267826132a6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132fd5780820151818401526020810190506132e2565b8381111561330c576000848401525b50505050565b6000600282049050600182168061332a57607f821691505b6020821081141561333e5761333d61344d565b5b50919050565b61334d826134ab565b810181811067ffffffffffffffff8211171561336c5761336b61347c565b5b80604052505050565b6000613380826132c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133b3576133b26133ef565b5b600182019050919050565b60006133c9826132c6565b91506133d4836132c6565b9250826133e4576133e361341e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a0a8161325c565b8114613a1557600080fd5b50565b613a218161326e565b8114613a2c57600080fd5b50565b613a388161327a565b8114613a4357600080fd5b50565b613a4f816132c6565b8114613a5a57600080fd5b5056fea26469706673582212207c27fc7bd7657ceefb56d92258469c1b9c853d6392dd43034110ec5cf2d5e95064736f6c63430008010033

Deployed Bytecode Sourcemap

41384:725:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26914:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27890:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29379:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28887:426;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30269:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30645:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41896:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27584:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27314:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14554:148;;;:::i;:::-;;41487:182;;;:::i;:::-;;13903:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28059:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29672:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30867:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39741:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41681:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30038:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14857:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26914:336;27038:4;27077:36;27062:51;;;:11;:51;;;;:127;;;;27145:44;27130:59;;;:11;:59;;;;27062:127;:180;;;;27206:36;27230:11;27206:23;:36::i;:::-;27062:180;27055:187;;26914:336;;;:::o;27890:100::-;27944:13;27977:5;27970:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27890:100;:::o;29379:221::-;29455:7;29483:16;29491:7;29483;:16::i;:::-;29475:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29568:15;:24;29584:7;29568:24;;;;;;;;;;;;;;;;;;;;;29561:31;;29379:221;;;:::o;28887:426::-;28968:13;28984:34;29010:7;28984:25;:34::i;:::-;28968:50;;29043:5;29037:11;;:2;:11;;;;29029:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29123:5;29107:21;;:12;:10;:12::i;:::-;:21;;;:80;;;;29132:55;29167:5;29174:12;:10;:12::i;:::-;29132:34;:55::i;:::-;29107:80;29099:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;29284:21;29293:2;29297:7;29284:8;:21::i;:::-;28887:426;;;:::o;30269:305::-;30430:41;30449:12;:10;:12::i;:::-;30463:7;30430:18;:41::i;:::-;30422:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30538:28;30548:4;30554:2;30558:7;30538:9;:28::i;:::-;30269:305;;;:::o;30645:151::-;30749:39;30766:4;30772:2;30776:7;30749:39;;;;;;;;;;;;:16;:39::i;:::-;30645:151;;;:::o;41896:98::-;14134:12;:10;:12::i;:::-;14123:23;;:7;:5;:7::i;:::-;:23;;;14115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41978:8:::1;41968:7;:18;;;;;;;;;;;;:::i;:::-;;41896:98:::0;:::o;27584:239::-;27656:7;27676:13;27692:7;:16;27700:7;27692:16;;;;;;;;;;;;;;;;;;;;;27676:32;;27744:1;27727:19;;:5;:19;;;;27719:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27810:5;27803:12;;;27584:239;;;:::o;27314:208::-;27386:7;27431:1;27414:19;;:5;:19;;;;27406:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27498:9;:16;27508:5;27498:16;;;;;;;;;;;;;;;;27491:23;;27314:208;;;:::o;14554:148::-;14134:12;:10;:12::i;:::-;14123:23;;:7;:5;:7::i;:::-;:23;;;14115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14661:1:::1;14624:40;;14645:6;;;;;;;;;;;14624:40;;;;;;;;;;;;14692:1;14675:6;;:19;;;;;;;;;;;;;;;;;;14554:148::o:0;41487:182::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;41539:51:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:13:::1;:51::i;:::-;41600:26;:24;:26::i;:::-;41636:25;:23;:25::i;:::-;11144:14:::0;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;41487:182;:::o;13903:87::-;13949:7;13976:6;;;;;;;;;;;13969:13;;13903:87;:::o;28059:104::-;28115:13;28148:7;28141:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28059:104;:::o;29672:295::-;29787:12;:10;:12::i;:::-;29775:24;;:8;:24;;;;29767:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29887:8;29842:18;:32;29861:12;:10;:12::i;:::-;29842:32;;;;;;;;;;;;;;;:42;29875:8;29842:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29940:8;29911:48;;29926:12;:10;:12::i;:::-;29911:48;;;29950:8;29911:48;;;;;;:::i;:::-;;;;;;;;29672:295;;:::o;30867:285::-;30999:41;31018:12;:10;:12::i;:::-;31032:7;30999:18;:41::i;:::-;30991:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31105:39;31119:4;31125:2;31129:7;31138:5;31105:13;:39::i;:::-;30867:285;;;;:::o;39741:679::-;39814:13;39848:16;39856:7;39848;:16::i;:::-;39840:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39931:23;39957:10;:19;39968:7;39957:19;;;;;;;;;;;39931:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39987:18;40008:10;:8;:10::i;:::-;39987:31;;40116:1;40100:4;40094:18;:23;40090:72;;;40141:9;40134:16;;;;;;40090:72;40292:1;40272:9;40266:23;:27;40262:108;;;40341:4;40347:9;40324:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40310:48;;;;;;40262:108;40389:23;40404:7;40389:14;:23::i;:::-;40382:30;;;;39741:679;;;;:::o;41681:207::-;14134:12;:10;:12::i;:::-;14123:23;;:7;:5;:7::i;:::-;:23;;;14115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41815:23:::1;41821:7;41830;41815:5;:23::i;:::-;41849:31;41862:7;41871:8;41849:12;:31::i;:::-;41681:207:::0;;;:::o;30038:164::-;30135:4;30159:18;:25;30178:5;30159:25;;;;;;;;;;;;;;;:35;30185:8;30159:35;;;;;;;;;;;;;;;;;;;;;;;;;30152:42;;30038:164;;;;:::o;14857:244::-;14134:12;:10;:12::i;:::-;14123:23;;:7;:5;:7::i;:::-;:23;;;14115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14966:1:::1;14946:22;;:8;:22;;;;14938:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15056:8;15027:38;;15048:6;;;;;;;;;;;15027:38;;;;;;;;;;;;15085:8;15076:6;;:17;;;;;;;;;;;;;;;;;;14857:244:::0;:::o;18181:168::-;18266:4;18305:36;18290:51;;;:11;:51;;;;18283:58;;18181:168;;;:::o;32619:127::-;32684:4;32736:1;32708:30;;:7;:16;32716:7;32708:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32701:37;;32619:127;;;:::o;12129:98::-;12182:7;12209:10;12202:17;;12129:98;:::o;36547:185::-;36649:2;36622:15;:24;36638:7;36622:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36716:7;36712:2;36667:57;;36676:34;36702:7;36676:25;:34::i;:::-;36667:57;;;;;;;;;;;;36547:185;;:::o;32913:377::-;33006:4;33031:16;33039:7;33031;:16::i;:::-;33023:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33107:13;33123:34;33149:7;33123:25;:34::i;:::-;33107:50;;33187:5;33176:16;;:7;:16;;;:51;;;;33220:7;33196:31;;:20;33208:7;33196:11;:20::i;:::-;:31;;;33176:51;:105;;;;33231:50;33266:5;33273:7;33231:34;:50::i;:::-;33176:105;33168:114;;;32913:377;;;;:::o;35874:555::-;36010:4;35972:42;;:34;35998:7;35972:25;:34::i;:::-;:42;;;35964:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36093:1;36079:16;;:2;:16;;;;36071:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36149:39;36170:4;36176:2;36180:7;36149:20;:39::i;:::-;36253:29;36270:1;36274:7;36253:8;:29::i;:::-;36314:1;36295:9;:15;36305:4;36295:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36343:1;36326:9;:13;36336:2;36326:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36374:2;36355:7;:16;36363:7;36355:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36413:7;36409:2;36394:27;;36403:4;36394:27;;;;;;;;;;;;35874:555;;;:::o;26457:219::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;26556:26:::1;:24;:26::i;:::-;26593:25;:23;:25::i;:::-;26629:39;26653:5;26660:7;26629:23;:39::i;:::-;11144:14:::0;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;26457:219;;;:::o;13626:196::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;13694:17:::1;13714:12;:10;:12::i;:::-;13694:32;;13746:9;13737:6;;:18;;;;;;;;;;;;;;;;;;13804:9;13771:43;;13800:1;13771:43;;;;;;;;;;;;11126:1;11144:14:::0;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;13626:196;:::o;39267:183::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;39334:26:::1;:24;:26::i;:::-;39371:25;:23;:25::i;:::-;39407:35;:33;:35::i;:::-;11144:14:::0;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;39267:183;:::o;32034:272::-;32148:28;32158:4;32164:2;32168:7;32148:9;:28::i;:::-;32195:48;32218:4;32224:2;32228:7;32237:5;32195:22;:48::i;:::-;32187:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32034:272;;;;:::o;42006:100::-;42058:13;42091:7;42084:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42006:100;:::o;28234:360::-;28307:13;28341:16;28349:7;28341;:16::i;:::-;28333:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28422:21;28446:10;:8;:10::i;:::-;28422:34;;28498:1;28480:7;28474:21;:25;:112;;;;;;;;;;;;;;;;;28539:7;28548:18;:7;:16;:18::i;:::-;28522:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28474:112;28467:119;;;28234:360;;;:::o;34555:382::-;34649:1;34635:16;;:2;:16;;;;34627:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34708:16;34716:7;34708;:16::i;:::-;34707:17;34699:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34770:45;34799:1;34803:2;34807:7;34770:20;:45::i;:::-;34845:1;34828:9;:13;34838:2;34828:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34876:2;34857:7;:16;34865:7;34857:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34921:7;34917:2;34896:33;;34913:1;34896:33;;;;;;;;;;;;34555:382;;:::o;40576:217::-;40676:16;40684:7;40676;:16::i;:::-;40668:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40776:9;40754:10;:19;40765:7;40754:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;40576:217;;:::o;38775:93::-;;;;:::o;12058:65::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;11144:14;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;12058:65;:::o;18047:64::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;11144:14;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;18047:64;:::o;26684:158::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;26801:5:::1;26793;:13;;;;;;;;;;;;:::i;:::-;;26827:7;26817;:17;;;;;;;;;;;;:::i;:::-;;11144:14:::0;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;26684:158;;;:::o;39458:74::-;10872:13;;;;;;;;;;;:30;;;;10890:12;;;;;;;;;;10889:13;10872:30;10864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:19;10989:13;;;;;;;;;;;10988:14;10966:36;;11017:14;11013:101;;;11064:4;11048:13;;:20;;;;;;;;;;;;;;;;;;11098:4;11083:12;;:19;;;;;;;;;;;;;;;;;;11013:101;11144:14;11140:68;;;11191:5;11175:13;;:21;;;;;;;;;;;;;;;;;;11140:68;39458:74;:::o;37297:865::-;37418:4;37444:15;:2;:13;;;:15::i;:::-;37440:715;;;37507:2;37480:47;;;37528:12;:10;:12::i;:::-;37542:4;37548:7;37557:5;37480:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37476:624;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37765:1;37748:6;:13;:18;37744:341;;;37791:60;;;;;;;;;;:::i;:::-;;;;;;;;37744:341;38035:6;38029:13;38020:6;38016:2;38012:15;38005:38;37476:624;37624:56;;;37614:66;;;:6;:66;;;;37607:73;;;;;37440:715;38139:4;38132:11;;37297:865;;;;;;;:::o;400:723::-;456:13;686:1;677:5;:10;673:53;;;704:10;;;;;;;;;;;;;;;;;;;;;673:53;736:12;751:5;736:20;;767:14;792:78;807:1;799:4;:9;792:78;;825:8;;;;;:::i;:::-;;;;856:2;848:10;;;;;:::i;:::-;;;792:78;;;880:19;912:6;902:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:39;;930:154;946:1;937:5;:10;930:154;;974:1;964:11;;;;;:::i;:::-;;;1041:2;1033:5;:10;;;;:::i;:::-;1020:2;:24;;;;:::i;:::-;1007:39;;990:6;997;990:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1070:2;1061:11;;;;;:::i;:::-;;;930:154;;;1108:6;1094:21;;;;;400:723;;;;:::o;3016:422::-;3076:4;3284:12;3395:7;3383:20;3375:28;;3429:1;3422:4;:8;3415:15;;;3016:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:665::-;;;;5035:2;5023:9;5014:7;5010:23;5006:32;5003:2;;;5051:1;5048;5041:12;5003:2;5094:1;5119:53;5164:7;5155:6;5144:9;5140:22;5119:53;:::i;:::-;5109:63;;5065:117;5221:2;5247:53;5292:7;5283:6;5272:9;5268:22;5247:53;:::i;:::-;5237:63;;5192:118;5377:2;5366:9;5362:18;5349:32;5408:18;5400:6;5397:30;5394:2;;;5440:1;5437;5430:12;5394:2;5468:63;5523:7;5514:6;5503:9;5499:22;5468:63;:::i;:::-;5458:73;;5320:221;4993:555;;;;;:::o;5554:260::-;;5661:2;5649:9;5640:7;5636:23;5632:32;5629:2;;;5677:1;5674;5667:12;5629:2;5720:1;5745:52;5789:7;5780:6;5769:9;5765:22;5745:52;:::i;:::-;5735:62;;5691:116;5619:195;;;;:::o;5820:282::-;;5938:2;5926:9;5917:7;5913:23;5909:32;5906:2;;;5954:1;5951;5944:12;5906:2;5997:1;6022:63;6077:7;6068:6;6057:9;6053:22;6022:63;:::i;:::-;6012:73;;5968:127;5896:206;;;;:::o;6108:375::-;;6226:2;6214:9;6205:7;6201:23;6197:32;6194:2;;;6242:1;6239;6232:12;6194:2;6313:1;6302:9;6298:17;6285:31;6343:18;6335:6;6332:30;6329:2;;;6375:1;6372;6365:12;6329:2;6403:63;6458:7;6449:6;6438:9;6434:22;6403:63;:::i;:::-;6393:73;;6256:220;6184:299;;;;:::o;6489:262::-;;6597:2;6585:9;6576:7;6572:23;6568:32;6565:2;;;6613:1;6610;6603:12;6565:2;6656:1;6681:53;6726:7;6717:6;6706:9;6702:22;6681:53;:::i;:::-;6671:63;;6627:117;6555:196;;;;:::o;6757:118::-;6844:24;6862:5;6844:24;:::i;:::-;6839:3;6832:37;6822:53;;:::o;6881:109::-;6962:21;6977:5;6962:21;:::i;:::-;6957:3;6950:34;6940:50;;:::o;6996:360::-;;7110:38;7142:5;7110:38;:::i;:::-;7164:70;7227:6;7222:3;7164:70;:::i;:::-;7157:77;;7243:52;7288:6;7283:3;7276:4;7269:5;7265:16;7243:52;:::i;:::-;7320:29;7342:6;7320:29;:::i;:::-;7315:3;7311:39;7304:46;;7086:270;;;;;:::o;7362:364::-;;7478:39;7511:5;7478:39;:::i;:::-;7533:71;7597:6;7592:3;7533:71;:::i;:::-;7526:78;;7613:52;7658:6;7653:3;7646:4;7639:5;7635:16;7613:52;:::i;:::-;7690:29;7712:6;7690:29;:::i;:::-;7685:3;7681:39;7674:46;;7454:272;;;;;:::o;7732:377::-;;7866:39;7899:5;7866:39;:::i;:::-;7921:89;8003:6;7998:3;7921:89;:::i;:::-;7914:96;;8019:52;8064:6;8059:3;8052:4;8045:5;8041:16;8019:52;:::i;:::-;8096:6;8091:3;8087:16;8080:23;;7842:267;;;;;:::o;8115:366::-;;8278:67;8342:2;8337:3;8278:67;:::i;:::-;8271:74;;8354:93;8443:3;8354:93;:::i;:::-;8472:2;8467:3;8463:12;8456:19;;8261:220;;;:::o;8487:366::-;;8650:67;8714:2;8709:3;8650:67;:::i;:::-;8643:74;;8726:93;8815:3;8726:93;:::i;:::-;8844:2;8839:3;8835:12;8828:19;;8633:220;;;:::o;8859:366::-;;9022:67;9086:2;9081:3;9022:67;:::i;:::-;9015:74;;9098:93;9187:3;9098:93;:::i;:::-;9216:2;9211:3;9207:12;9200:19;;9005:220;;;:::o;9231:366::-;;9394:67;9458:2;9453:3;9394:67;:::i;:::-;9387:74;;9470:93;9559:3;9470:93;:::i;:::-;9588:2;9583:3;9579:12;9572:19;;9377:220;;;:::o;9603:366::-;;9766:67;9830:2;9825:3;9766:67;:::i;:::-;9759:74;;9842:93;9931:3;9842:93;:::i;:::-;9960:2;9955:3;9951:12;9944:19;;9749:220;;;:::o;9975:366::-;;10138:67;10202:2;10197:3;10138:67;:::i;:::-;10131:74;;10214:93;10303:3;10214:93;:::i;:::-;10332:2;10327:3;10323:12;10316:19;;10121:220;;;:::o;10347:366::-;;10510:67;10574:2;10569:3;10510:67;:::i;:::-;10503:74;;10586:93;10675:3;10586:93;:::i;:::-;10704:2;10699:3;10695:12;10688:19;;10493:220;;;:::o;10719:366::-;;10882:67;10946:2;10941:3;10882:67;:::i;:::-;10875:74;;10958:93;11047:3;10958:93;:::i;:::-;11076:2;11071:3;11067:12;11060:19;;10865:220;;;:::o;11091:366::-;;11254:67;11318:2;11313:3;11254:67;:::i;:::-;11247:74;;11330:93;11419:3;11330:93;:::i;:::-;11448:2;11443:3;11439:12;11432:19;;11237:220;;;:::o;11463:366::-;;11626:67;11690:2;11685:3;11626:67;:::i;:::-;11619:74;;11702:93;11791:3;11702:93;:::i;:::-;11820:2;11815:3;11811:12;11804:19;;11609:220;;;:::o;11835:366::-;;11998:67;12062:2;12057:3;11998:67;:::i;:::-;11991:74;;12074:93;12163:3;12074:93;:::i;:::-;12192:2;12187:3;12183:12;12176:19;;11981:220;;;:::o;12207:366::-;;12370:67;12434:2;12429:3;12370:67;:::i;:::-;12363:74;;12446:93;12535:3;12446:93;:::i;:::-;12564:2;12559:3;12555:12;12548:19;;12353:220;;;:::o;12579:366::-;;12742:67;12806:2;12801:3;12742:67;:::i;:::-;12735:74;;12818:93;12907:3;12818:93;:::i;:::-;12936:2;12931:3;12927:12;12920:19;;12725:220;;;:::o;12951:366::-;;13114:67;13178:2;13173:3;13114:67;:::i;:::-;13107:74;;13190:93;13279:3;13190:93;:::i;:::-;13308:2;13303:3;13299:12;13292:19;;13097:220;;;:::o;13323:366::-;;13486:67;13550:2;13545:3;13486:67;:::i;:::-;13479:74;;13562:93;13651:3;13562:93;:::i;:::-;13680:2;13675:3;13671:12;13664:19;;13469:220;;;:::o;13695:366::-;;13858:67;13922:2;13917:3;13858:67;:::i;:::-;13851:74;;13934:93;14023:3;13934:93;:::i;:::-;14052:2;14047:3;14043:12;14036:19;;13841:220;;;:::o;14067:366::-;;14230:67;14294:2;14289:3;14230:67;:::i;:::-;14223:74;;14306:93;14395:3;14306:93;:::i;:::-;14424:2;14419:3;14415:12;14408:19;;14213:220;;;:::o;14439:366::-;;14602:67;14666:2;14661:3;14602:67;:::i;:::-;14595:74;;14678:93;14767:3;14678:93;:::i;:::-;14796:2;14791:3;14787:12;14780:19;;14585:220;;;:::o;14811:366::-;;14974:67;15038:2;15033:3;14974:67;:::i;:::-;14967:74;;15050:93;15139:3;15050:93;:::i;:::-;15168:2;15163:3;15159:12;15152:19;;14957:220;;;:::o;15183:118::-;15270:24;15288:5;15270:24;:::i;:::-;15265:3;15258:37;15248:53;;:::o;15307:435::-;;15509:95;15600:3;15591:6;15509:95;:::i;:::-;15502:102;;15621:95;15712:3;15703:6;15621:95;:::i;:::-;15614:102;;15733:3;15726:10;;15491:251;;;;;:::o;15748:222::-;;15879:2;15868:9;15864:18;15856:26;;15892:71;15960:1;15949:9;15945:17;15936:6;15892:71;:::i;:::-;15846:124;;;;:::o;15976:640::-;;16209:3;16198:9;16194:19;16186:27;;16223:71;16291:1;16280:9;16276:17;16267:6;16223:71;:::i;:::-;16304:72;16372:2;16361:9;16357:18;16348:6;16304:72;:::i;:::-;16386;16454:2;16443:9;16439:18;16430:6;16386:72;:::i;:::-;16505:9;16499:4;16495:20;16490:2;16479:9;16475:18;16468:48;16533:76;16604:4;16595:6;16533:76;:::i;:::-;16525:84;;16176:440;;;;;;;:::o;16622:210::-;;16747:2;16736:9;16732:18;16724:26;;16760:65;16822:1;16811:9;16807:17;16798:6;16760:65;:::i;:::-;16714:118;;;;:::o;16838:313::-;;16989:2;16978:9;16974:18;16966:26;;17038:9;17032:4;17028:20;17024:1;17013:9;17009:17;17002:47;17066:78;17139:4;17130:6;17066:78;:::i;:::-;17058:86;;16956:195;;;;:::o;17157:419::-;;17361:2;17350:9;17346:18;17338:26;;17410:9;17404:4;17400:20;17396:1;17385:9;17381:17;17374:47;17438:131;17564:4;17438:131;:::i;:::-;17430:139;;17328:248;;;:::o;17582:419::-;;17786:2;17775:9;17771:18;17763:26;;17835:9;17829:4;17825:20;17821:1;17810:9;17806:17;17799:47;17863:131;17989:4;17863:131;:::i;:::-;17855:139;;17753:248;;;:::o;18007:419::-;;18211:2;18200:9;18196:18;18188:26;;18260:9;18254:4;18250:20;18246:1;18235:9;18231:17;18224:47;18288:131;18414:4;18288:131;:::i;:::-;18280:139;;18178:248;;;:::o;18432:419::-;;18636:2;18625:9;18621:18;18613:26;;18685:9;18679:4;18675:20;18671:1;18660:9;18656:17;18649:47;18713:131;18839:4;18713:131;:::i;:::-;18705:139;;18603:248;;;:::o;18857:419::-;;19061:2;19050:9;19046:18;19038:26;;19110:9;19104:4;19100:20;19096:1;19085:9;19081:17;19074:47;19138:131;19264:4;19138:131;:::i;:::-;19130:139;;19028:248;;;:::o;19282:419::-;;19486:2;19475:9;19471:18;19463:26;;19535:9;19529:4;19525:20;19521:1;19510:9;19506:17;19499:47;19563:131;19689:4;19563:131;:::i;:::-;19555:139;;19453:248;;;:::o;19707:419::-;;19911:2;19900:9;19896:18;19888:26;;19960:9;19954:4;19950:20;19946:1;19935:9;19931:17;19924:47;19988:131;20114:4;19988:131;:::i;:::-;19980:139;;19878:248;;;:::o;20132:419::-;;20336:2;20325:9;20321:18;20313:26;;20385:9;20379:4;20375:20;20371:1;20360:9;20356:17;20349:47;20413:131;20539:4;20413:131;:::i;:::-;20405:139;;20303:248;;;:::o;20557:419::-;;20761:2;20750:9;20746:18;20738:26;;20810:9;20804:4;20800:20;20796:1;20785:9;20781:17;20774:47;20838:131;20964:4;20838:131;:::i;:::-;20830:139;;20728:248;;;:::o;20982:419::-;;21186:2;21175:9;21171:18;21163:26;;21235:9;21229:4;21225:20;21221:1;21210:9;21206:17;21199:47;21263:131;21389:4;21263:131;:::i;:::-;21255:139;;21153:248;;;:::o;21407:419::-;;21611:2;21600:9;21596:18;21588:26;;21660:9;21654:4;21650:20;21646:1;21635:9;21631:17;21624:47;21688:131;21814:4;21688:131;:::i;:::-;21680:139;;21578:248;;;:::o;21832:419::-;;22036:2;22025:9;22021:18;22013:26;;22085:9;22079:4;22075:20;22071:1;22060:9;22056:17;22049:47;22113:131;22239:4;22113:131;:::i;:::-;22105:139;;22003:248;;;:::o;22257:419::-;;22461:2;22450:9;22446:18;22438:26;;22510:9;22504:4;22500:20;22496:1;22485:9;22481:17;22474:47;22538:131;22664:4;22538:131;:::i;:::-;22530:139;;22428:248;;;:::o;22682:419::-;;22886:2;22875:9;22871:18;22863:26;;22935:9;22929:4;22925:20;22921:1;22910:9;22906:17;22899:47;22963:131;23089:4;22963:131;:::i;:::-;22955:139;;22853:248;;;:::o;23107:419::-;;23311:2;23300:9;23296:18;23288:26;;23360:9;23354:4;23350:20;23346:1;23335:9;23331:17;23324:47;23388:131;23514:4;23388:131;:::i;:::-;23380:139;;23278:248;;;:::o;23532:419::-;;23736:2;23725:9;23721:18;23713:26;;23785:9;23779:4;23775:20;23771:1;23760:9;23756:17;23749:47;23813:131;23939:4;23813:131;:::i;:::-;23805:139;;23703:248;;;:::o;23957:419::-;;24161:2;24150:9;24146:18;24138:26;;24210:9;24204:4;24200:20;24196:1;24185:9;24181:17;24174:47;24238:131;24364:4;24238:131;:::i;:::-;24230:139;;24128:248;;;:::o;24382:419::-;;24586:2;24575:9;24571:18;24563:26;;24635:9;24629:4;24625:20;24621:1;24610:9;24606:17;24599:47;24663:131;24789:4;24663:131;:::i;:::-;24655:139;;24553:248;;;:::o;24807:419::-;;25011:2;25000:9;24996:18;24988:26;;25060:9;25054:4;25050:20;25046:1;25035:9;25031:17;25024:47;25088:131;25214:4;25088:131;:::i;:::-;25080:139;;24978:248;;;:::o;25232:222::-;;25363:2;25352:9;25348:18;25340:26;;25376:71;25444:1;25433:9;25429:17;25420:6;25376:71;:::i;:::-;25330:124;;;;:::o;25460:129::-;;25521:20;;:::i;:::-;25511:30;;25550:33;25578:4;25570:6;25550:33;:::i;:::-;25501:88;;;:::o;25595:75::-;;25661:2;25655:9;25645:19;;25635:35;:::o;25676:307::-;;25827:18;25819:6;25816:30;25813:2;;;25849:18;;:::i;:::-;25813:2;25887:29;25909:6;25887:29;:::i;:::-;25879:37;;25971:4;25965;25961:15;25953:23;;25742:241;;;:::o;25989:308::-;;26141:18;26133:6;26130:30;26127:2;;;26163:18;;:::i;:::-;26127:2;26201:29;26223:6;26201:29;:::i;:::-;26193:37;;26285:4;26279;26275:15;26267:23;;26056:241;;;:::o;26303:98::-;;26388:5;26382:12;26372:22;;26361:40;;;:::o;26407:99::-;;26493:5;26487:12;26477:22;;26466:40;;;:::o;26512:168::-;;26629:6;26624:3;26617:19;26669:4;26664:3;26660:14;26645:29;;26607:73;;;;:::o;26686:169::-;;26804:6;26799:3;26792:19;26844:4;26839:3;26835:14;26820:29;;26782:73;;;;:::o;26861:148::-;;27000:3;26985:18;;26975:34;;;;:::o;27015:305::-;;27074:20;27092:1;27074:20;:::i;:::-;27069:25;;27108:20;27126:1;27108:20;:::i;:::-;27103:25;;27262:1;27194:66;27190:74;27187:1;27184:81;27181:2;;;27268:18;;:::i;:::-;27181:2;27312:1;27309;27305:9;27298:16;;27059:261;;;;:::o;27326:185::-;;27383:20;27401:1;27383:20;:::i;:::-;27378:25;;27417:20;27435:1;27417:20;:::i;:::-;27412:25;;27456:1;27446:2;;27461:18;;:::i;:::-;27446:2;27503:1;27500;27496:9;27491:14;;27368:143;;;;:::o;27517:191::-;;27577:20;27595:1;27577:20;:::i;:::-;27572:25;;27611:20;27629:1;27611:20;:::i;:::-;27606:25;;27650:1;27647;27644:8;27641:2;;;27655:18;;:::i;:::-;27641:2;27700:1;27697;27693:9;27685:17;;27562:146;;;;:::o;27714:96::-;;27780:24;27798:5;27780:24;:::i;:::-;27769:35;;27759:51;;;:::o;27816:90::-;;27893:5;27886:13;27879:21;27868:32;;27858:48;;;:::o;27912:149::-;;27988:66;27981:5;27977:78;27966:89;;27956:105;;;:::o;28067:126::-;;28144:42;28137:5;28133:54;28122:65;;28112:81;;;:::o;28199:77::-;;28265:5;28254:16;;28244:32;;;:::o;28282:154::-;28366:6;28361:3;28356;28343:30;28428:1;28419:6;28414:3;28410:16;28403:27;28333:103;;;:::o;28442:307::-;28510:1;28520:113;28534:6;28531:1;28528:13;28520:113;;;28619:1;28614:3;28610:11;28604:18;28600:1;28595:3;28591:11;28584:39;28556:2;28553:1;28549:10;28544:15;;28520:113;;;28651:6;28648:1;28645:13;28642:2;;;28731:1;28722:6;28717:3;28713:16;28706:27;28642:2;28491:258;;;;:::o;28755:320::-;;28836:1;28830:4;28826:12;28816:22;;28883:1;28877:4;28873:12;28904:18;28894:2;;28960:4;28952:6;28948:17;28938:27;;28894:2;29022;29014:6;29011:14;28991:18;28988:38;28985:2;;;29041:18;;:::i;:::-;28985:2;28806:269;;;;:::o;29081:281::-;29164:27;29186:4;29164:27;:::i;:::-;29156:6;29152:40;29294:6;29282:10;29279:22;29258:18;29246:10;29243:34;29240:62;29237:2;;;29305:18;;:::i;:::-;29237:2;29345:10;29341:2;29334:22;29124:238;;;:::o;29368:233::-;;29430:24;29448:5;29430:24;:::i;:::-;29421:33;;29476:66;29469:5;29466:77;29463:2;;;29546:18;;:::i;:::-;29463:2;29593:1;29586:5;29582:13;29575:20;;29411:190;;;:::o;29607:176::-;;29656:20;29674:1;29656:20;:::i;:::-;29651:25;;29690:20;29708:1;29690:20;:::i;:::-;29685:25;;29729:1;29719:2;;29734:18;;:::i;:::-;29719:2;29775:1;29772;29768:9;29763:14;;29641:142;;;;:::o;29789:180::-;29837:77;29834:1;29827:88;29934:4;29931:1;29924:15;29958:4;29955:1;29948:15;29975:180;30023:77;30020:1;30013:88;30120:4;30117:1;30110:15;30144:4;30141:1;30134:15;30161:180;30209:77;30206:1;30199:88;30306:4;30303:1;30296:15;30330:4;30327:1;30320:15;30347:180;30395:77;30392:1;30385:88;30492:4;30489:1;30482:15;30516:4;30513:1;30506:15;30533:102;;30625:2;30621:7;30616:2;30609:5;30605:14;30601:28;30591:38;;30581:54;;;:::o;30641:237::-;30781:34;30777:1;30769:6;30765:14;30758:58;30850:20;30845:2;30837:6;30833:15;30826:45;30747:131;:::o;30884:225::-;31024:34;31020:1;31012:6;31008:14;31001:58;31093:8;31088:2;31080:6;31076:15;31069:33;30990:119;:::o;31115:178::-;31255:30;31251:1;31243:6;31239:14;31232:54;31221:72;:::o;31299:223::-;31439:34;31435:1;31427:6;31423:14;31416:58;31508:6;31503:2;31495:6;31491:15;31484:31;31405:117;:::o;31528:175::-;31668:27;31664:1;31656:6;31652:14;31645:51;31634:69;:::o;31709:231::-;31849:34;31845:1;31837:6;31833:14;31826:58;31918:14;31913:2;31905:6;31901:15;31894:39;31815:125;:::o;31946:243::-;32086:34;32082:1;32074:6;32070:14;32063:58;32155:26;32150:2;32142:6;32138:15;32131:51;32052:137;:::o;32195:229::-;32335:34;32331:1;32323:6;32319:14;32312:58;32404:12;32399:2;32391:6;32387:15;32380:37;32301:123;:::o;32430:228::-;32570:34;32566:1;32558:6;32554:14;32547:58;32639:11;32634:2;32626:6;32622:15;32615:36;32536:122;:::o;32664:233::-;32804:34;32800:1;32792:6;32788:14;32781:58;32873:16;32868:2;32860:6;32856:15;32849:41;32770:127;:::o;32903:233::-;33043:34;33039:1;33031:6;33027:14;33020:58;33112:16;33107:2;33099:6;33095:15;33088:41;33009:127;:::o;33142:182::-;33282:34;33278:1;33270:6;33266:14;33259:58;33248:76;:::o;33330:236::-;33470:34;33466:1;33458:6;33454:14;33447:58;33539:19;33534:2;33526:6;33522:15;33515:44;33436:130;:::o;33572:231::-;33712:34;33708:1;33700:6;33696:14;33689:58;33781:14;33776:2;33768:6;33764:15;33757:39;33678:125;:::o;33809:182::-;33949:34;33945:1;33937:6;33933:14;33926:58;33915:76;:::o;33997:228::-;34137:34;34133:1;34125:6;34121:14;34114:58;34206:11;34201:2;34193:6;34189:15;34182:36;34103:122;:::o;34231:234::-;34371:34;34367:1;34359:6;34355:14;34348:58;34440:17;34435:2;34427:6;34423:15;34416:42;34337:128;:::o;34471:220::-;34611:34;34607:1;34599:6;34595:14;34588:58;34680:3;34675:2;34667:6;34663:15;34656:28;34577:114;:::o;34697:236::-;34837:34;34833:1;34825:6;34821:14;34814:58;34906:19;34901:2;34893:6;34889:15;34882:44;34803:130;:::o;34939:122::-;35012:24;35030:5;35012:24;:::i;:::-;35005:5;35002:35;34992:2;;35051:1;35048;35041:12;34992:2;34982:79;:::o;35067:116::-;35137:21;35152:5;35137:21;:::i;:::-;35130:5;35127:32;35117:2;;35173:1;35170;35163:12;35117:2;35107:76;:::o;35189:120::-;35261:23;35278:5;35261:23;:::i;:::-;35254:5;35251:34;35241:2;;35299:1;35296;35289:12;35241:2;35231:78;:::o;35315:122::-;35388:24;35406:5;35388:24;:::i;:::-;35381:5;35378:35;35368:2;;35427:1;35424;35417:12;35368:2;35358:79;:::o

Swarm Source

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