creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "@openzeppelin/contracts/proxy/Proxy.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n     * and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _beforeFallback();\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n     * is empty.\n     */\n    receive() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n     * call, or as part of the Solidity `fallback` or `receive` functions.\n     *\n     * If overridden should call `super._beforeFallback()`.\n     */\n    function _beforeFallback() internal virtual {}\n}\n"
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     *\n     * Furthermore, `isContract` will also return true if the target contract within\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n     * which only has an effect at the end of a transaction.\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n     *\n     * _Available since v4.8._\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        if (success) {\n            if (returndata.length == 0) {\n                // only check isContract if the call was successful and the return data is empty\n                // otherwise we already know that it was a contract\n                require(isContract(target), \"Address: call to non-contract\");\n            }\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason or using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert(errorMessage);\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/StorageSlot.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\n * _Available since v4.9 for `string`, `bytes`._\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    struct StringSlot {\n        string value;\n    }\n\n    struct BytesSlot {\n        bytes value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\n     */\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n     */\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n     */\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n     */\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n}\n"
      },
      "contracts/erc721/instances/GenerativeSeries.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\nimport \"../../mint/interfaces/IAbridgedMintVector.sol\";\nimport \"../../mint/mechanics/interfaces/IMechanicMintManager.sol\";\nimport \"@openzeppelin/contracts/proxy/Proxy.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\nimport \"@openzeppelin/contracts/utils/StorageSlot.sol\";\n\n/**\n * @notice Instance of Generative Series contract\n * @author highlight.xyz\n */\ncontract GenerativeSeries is Proxy {\n    /**\n     * @notice Set up Generative Series instance\n     * @param implementation_ Generative721 implementation\n     * @param initializeData Data to initialize Generative contract\n     * @ param creator Creator/owner of contract\n     * @ param _contractURI Contract metadata\n     * @ param defaultRoyalty Default royalty object for contract (optional)\n     * @ param _defaultTokenManager Default token manager for contract (optional)\n     * @ param _name Name of token edition\n     * @ param _symbol Symbol of the token edition\n     * @ param trustedForwarder Trusted minimal forwarder\n     * @ param initialMinter Initial minter to register\n     * @ param _generativeCodeURI Generative code URI\n     * @ param newBaseURI Base URI for contract\n     * @ param _limitSupply Initial limit supply\n     * @ param useMarketplaceFiltererRegistry Denotes whether to use marketplace filterer registry\n     * @param mintVectorData Mint vector data\n     * @ param mintManager\n     * @ param paymentRecipient\n     * @ param startTimestamp\n     * @ param endTimestamp\n     * @ param pricePerToken\n     * @ param tokenLimitPerTx\n     * @ param maxTotalClaimableViaVector\n     * @ param maxUserClaimableViaVector\n     * @ param allowlistRoot\n     * @param mechanicVectorData Mechanic mint vector data\n     * @ param mechanicVectorId Global mechanic vector ID\n     * @ param mechanic Mechanic address\n     * @ param mintManager Mint manager address\n     * @ param vectorData Vector data\n     * @param _observability Observability contract address\n     */\n    constructor(\n        address implementation_,\n        bytes memory initializeData,\n        bytes memory mintVectorData,\n        bytes memory mechanicVectorData,\n        address _observability\n    ) {\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = implementation_;\n        Address.functionDelegateCall(\n            implementation_,\n            abi.encodeWithSignature(\"initialize(bytes,address)\", initializeData, _observability)\n        );\n\n        if (mintVectorData.length > 0) {\n            (\n                address mintManager,\n                address paymentRecipient,\n                uint48 startTimestamp,\n                uint48 endTimestamp,\n                uint192 pricePerToken,\n                uint48 tokenLimitPerTx,\n                uint48 maxTotalClaimableViaVector,\n                uint48 maxUserClaimableViaVector,\n                bytes32 allowlistRoot\n            ) = abi.decode(\n                    mintVectorData,\n                    (address, address, uint48, uint48, uint192, uint48, uint48, uint48, bytes32)\n                );\n\n            IAbridgedMintVector(mintManager).createAbridgedVector(\n                IAbridgedMintVector.AbridgedVectorData(\n                    uint160(address(this)),\n                    startTimestamp,\n                    endTimestamp,\n                    uint160(paymentRecipient),\n                    maxTotalClaimableViaVector,\n                    0,\n                    0,\n                    tokenLimitPerTx,\n                    maxUserClaimableViaVector,\n                    pricePerToken,\n                    0,\n                    false,\n                    false,\n                    allowlistRoot\n                )\n            );\n        }\n\n        if (mechanicVectorData.length != 0) {\n            (uint96 seed, address mechanic, address mintManager, bytes memory vectorData) = abi.decode(\n                mechanicVectorData,\n                (uint96, address, address, bytes)\n            );\n\n            IMechanicMintManager(mintManager).registerMechanicVector(\n                IMechanicData.MechanicVectorMetadata(address(this), 0, mechanic, false, false, false),\n                seed,\n                vectorData\n            );\n        }\n    }\n\n    /**\n     * @notice Return the contract type\n     */\n    function standard() external pure returns (string memory) {\n        return \"GenerativeSeries2\";\n    }\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function implementation() public view returns (address) {\n        return _implementation();\n    }\n\n    function _implementation() internal view override returns (address) {\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n    }\n}\n"
      },
      "contracts/mint/interfaces/IAbridgedMintVector.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\n\npragma solidity 0.8.10;\n\n/**\n * @title MintManager interface for onchain abridged mint vectors\n * @author highlight.xyz\n */\ninterface IAbridgedMintVector {\n    /**\n     * @notice On-chain mint vector (stored data)\n     * @param contractAddress NFT smart contract address\n     * @param startTimestamp When minting opens on vector\n     * @param endTimestamp When minting ends on vector\n     * @param paymentRecipient Payment recipient\n     * @param maxTotalClaimableViaVector Max number of tokens that can be minted via vector\n     * @param totalClaimedViaVector Total number of tokens minted via vector\n     * @param currency Currency used for payment. Native gas token, if zero address\n     * @param tokenLimitPerTx Max number of tokens that can be minted in one transaction\n     * @param maxUserClaimableViaVector Max number of tokens that can be minted by user via vector\n     * @param pricePerToken Price that has to be paid per minted token\n     * @param editionId Edition ID, if vector is for edition based collection\n     * @param editionBasedCollection If vector is for an edition based collection\n     * @param requireDirectEOA Require minters to directly be EOAs\n     * @param allowlistRoot Root of merkle tree with allowlist\n     */\n    struct AbridgedVectorData {\n        uint160 contractAddress;\n        uint48 startTimestamp;\n        uint48 endTimestamp;\n        uint160 paymentRecipient;\n        uint48 maxTotalClaimableViaVector;\n        uint48 totalClaimedViaVector;\n        uint160 currency;\n        uint48 tokenLimitPerTx;\n        uint48 maxUserClaimableViaVector;\n        uint192 pricePerToken;\n        uint48 editionId;\n        bool editionBasedCollection;\n        bool requireDirectEOA;\n        bytes32 allowlistRoot;\n    }\n\n    /**\n     * @notice On-chain mint vector (public) - See {AbridgedVectorData}\n     */\n    struct AbridgedVector {\n        address contractAddress;\n        uint48 startTimestamp;\n        uint48 endTimestamp;\n        address paymentRecipient;\n        uint48 maxTotalClaimableViaVector;\n        uint48 totalClaimedViaVector;\n        address currency;\n        uint48 tokenLimitPerTx;\n        uint48 maxUserClaimableViaVector;\n        uint192 pricePerToken;\n        uint48 editionId;\n        bool editionBasedCollection;\n        bool requireDirectEOA;\n        bytes32 allowlistRoot;\n    }\n\n    /**\n     * @notice Config defining what fields to update\n     * @param updateStartTimestamp If 1, update startTimestamp\n     * @param updateEndTimestamp If 1, update endTimestamp\n     * @param updatePaymentRecipient If 1, update paymentRecipient\n     * @param updateMaxTotalClaimableViaVector If 1, update maxTotalClaimableViaVector\n     * @param updateTokenLimitPerTx If 1, update tokenLimitPerTx\n     * @param updateMaxUserClaimableViaVector If 1, update maxUserClaimableViaVector\n     * @param updatePricePerToken If 1, update pricePerToken\n     * @param updateAllowlistRoot If 1, update allowlistRoot\n     * @param updateRequireDirectEOA If 1, update requireDirectEOA\n     * @param updateMetadata If 1, update MintVector metadata\n     */\n    struct UpdateAbridgedVectorConfig {\n        uint16 updateStartTimestamp;\n        uint16 updateEndTimestamp;\n        uint16 updatePaymentRecipient;\n        uint16 updateMaxTotalClaimableViaVector;\n        uint16 updateTokenLimitPerTx;\n        uint16 updateMaxUserClaimableViaVector;\n        uint8 updatePricePerToken;\n        uint8 updateAllowlistRoot;\n        uint8 updateRequireDirectEOA;\n        uint8 updateMetadata;\n    }\n\n    /**\n     * @notice Creates on-chain vector\n     * @param _vector Vector to create\n     */\n    function createAbridgedVector(AbridgedVectorData memory _vector) external;\n\n    /**\n     * @notice Updates on-chain vector\n     * @param vectorId ID of vector to update\n     * @param _newVector New vector details\n     * @param updateConfig Number encoding what fields to update\n     * @param pause Pause / unpause vector\n     * @param flexibleData Flexible data in vector metadata\n     */\n    function updateAbridgedVector(\n        uint256 vectorId,\n        AbridgedVector calldata _newVector,\n        UpdateAbridgedVectorConfig calldata updateConfig,\n        bool pause,\n        uint128 flexibleData\n    ) external;\n\n    /**\n     * @notice Deletes on-chain vector\n     * @param vectorId ID of abridged vector to delete\n     */\n    function deleteAbridgedVector(uint256 vectorId) external;\n\n    /**\n     * @notice Pauses or unpauses an on-chain mint vector\n     * @param vectorId ID of abridged vector to pause\n     * @param pause True to pause, False to unpause\n     * @param flexibleData Flexible data that can be interpreted differently\n     */\n    function setAbridgedVectorMetadata(uint256 vectorId, bool pause, uint128 flexibleData) external;\n\n    /**\n     * @notice Get on-chain abridged vector\n     * @param vectorId ID of abridged vector to get\n     */\n    function getAbridgedVector(uint256 vectorId) external view returns (AbridgedVector memory);\n\n    /**\n     * @notice Get on-chain abridged vector metadata\n     * @param vectorId ID of abridged vector to get\n     */\n    function getAbridgedVectorMetadata(uint256 vectorId) external view returns (bool, uint128);\n}\n"
      },
      "contracts/mint/mechanics/interfaces/IMechanicData.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.10;\n\n/**\n * @notice Defines a mechanic's metadata on the MintManager\n */\ninterface IMechanicData {\n    /**\n     * @notice A mechanic's metadata\n     * @param contractAddress Collection contract address\n     * @param editionId Edition ID if the collection is edition based\n     * @param mechanic Address of mint mechanic contract\n     * @param isEditionBased True if collection is edition based\n     * @param isChoose True if collection uses a collector's choice mint paradigm\n     * @param paused True if mechanic vector is paused\n     */\n    struct MechanicVectorMetadata {\n        address contractAddress;\n        uint96 editionId;\n        address mechanic;\n        bool isEditionBased;\n        bool isChoose;\n        bool paused;\n    }\n}\n"
      },
      "contracts/mint/mechanics/interfaces/IMechanicMintManager.sol": {
        "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.10;\n\nimport \"./IMechanicData.sol\";\n\n/**\n * @notice Capabilities on MintManager pertaining to mechanics\n */\ninterface IMechanicMintManager is IMechanicData {\n    /**\n     * @notice Register a new mechanic vector\n     * @param _mechanicVectorMetadata Mechanic vector metadata\n     * @param seed Used to seed uniqueness into mechanic vector ID generation\n     * @param vectorData Vector data to store on mechanic (optional)\n     */\n    function registerMechanicVector(\n        MechanicVectorMetadata calldata _mechanicVectorMetadata,\n        uint96 seed,\n        bytes calldata vectorData\n    ) external;\n\n    /**\n     * @notice Pause or unpause a mechanic vector\n     * @param mechanicVectorId Global mechanic ID\n     * @param pause If true, pause the mechanic mint vector. If false, unpause\n     */\n    function setPauseOnMechanicMintVector(bytes32 mechanicVectorId, bool pause) external;\n\n    /**\n     * @notice Mint a number of tokens sequentially via a mechanic vector\n     * @param mechanicVectorId Global mechanic ID\n     * @param recipient Mint recipient\n     * @param numToMint Number of tokens to mint\n     * @param data Custom data to be processed by mechanic\n     */\n    function mechanicMintNum(\n        bytes32 mechanicVectorId,\n        address recipient,\n        uint32 numToMint,\n        bytes calldata data\n    ) external payable;\n\n    /**\n     * @notice Mint a specific set of token ids via a mechanic vector\n     * @param mechanicVectorId Global mechanic ID\n     * @param recipient Mint recipient\n     * @param tokenIds IDs of tokens to mint\n     * @param data Custom data to be processed by mechanic\n     */\n    function mechanicMintChoose(\n        bytes32 mechanicVectorId,\n        address recipient,\n        uint256[] calldata tokenIds,\n        bytes calldata data\n    ) external payable;\n}\n"
      }
    },
    "settings": {
      "metadata": {
        "bytecodeHash": "none"
      },
      "optimizer": {
        "enabled": true,
        "runs": 1
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "libraries": {}
    }
  }}