creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "src/proxy/Proxy.sol": {
        "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.20;\n\n/**\n * @title Proxy\n * @notice Adheres to the Universal Upgradeable Proxy Standard (ERC-1822). This contract\n *         is in charge of handling delegate calls from external addresses to the\n *         implementation contract.\n */\ncontract Proxy {\n    // This is keccak256(\"eip1967.proxy.implementation\") subtracted by 1.\n    bytes32 internal constant IMPLEMENTATION_SLOT =\n        0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Instantiate this contract with an inital logic implementation and\n     *      data to pass on to the implementation.\n     *\n     * @param _implementation Address of the kernel contract.\n     * @param _data           Initialization data to pass on to the\n     *                        implementation contract.\n     */\n    constructor(address _implementation, bytes memory _data) payable {\n        // Store the implementation address.\n        assembly {\n            sstore(IMPLEMENTATION_SLOT, _implementation)\n        }\n\n        // Perform the delegate call.\n        (bool success, ) = _implementation.delegatecall(_data);\n\n        // Require a successfull transaction.\n        require(success, \"Construction failed\");\n    }\n\n    /**\n     * @dev Delegates the call to the implementation address.\n     */\n    function _delegate() internal virtual {\n        assembly {\n            // Load the implementation contract.\n            let implementation := sload(IMPLEMENTATION_SLOT)\n\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            // else, return the data.\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev Delegate to implementation contract always.\n     */\n    fallback() external payable {\n        _delegate();\n    }\n\n    /**\n     * @dev Delegate to implementation contract when ether is received.\n     */\n    receive() external payable {\n        _delegate();\n    }\n}\n"
      }
    },
    "settings": {
      "remappings": [
        "@ds-test/=lib/forge-std/lib/ds-test/src/",
        "@forge-std/=lib/forge-std/src/",
        "@openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
        "@safe-contracts/=lib/safe-contracts/contracts/",
        "@src/=src/",
        "@test/=test/",
        "@merkle-generator/=lib/merkle-proof-generator/src/",
        "@scripts/=scripts/",
        "@seaport-types/=lib/seaport-types/src/",
        "@seaport-core/=lib/seaport-core/src/",
        "seaport-types/=lib/seaport-types/",
        "seaport-core/=lib/seaport-core/",
        "@solady/=lib/Solady/src/",
        "@seaport-sol/=lib/seaport-sol/src/",
        "@rari-capital/solmate/=lib/seaport-sol/lib/seaport/lib/solmate/",
        "Solady/=lib/Solady/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=lib/forge-std/src/",
        "murky/=lib/seaport-sol/lib/murky/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "openzeppelin/=lib/openzeppelin-contracts/contracts/",
        "safe-contracts/=lib/safe-contracts/",
        "seaport-sol/=lib/seaport-sol/src/",
        "seaport/=lib/seaport-sol/lib/seaport/contracts/",
        "solady/=lib/seaport-sol/lib/solady/",
        "solarray/=lib/seaport-sol/lib/solarray/src/",
        "solmate/=lib/seaport-sol/lib/seaport/lib/solmate/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "useLiteralContent": false,
        "bytecodeHash": "ipfs",
        "appendCBOR": true
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "evmVersion": "paris",
      "viaIR": false,
      "libraries": {}
    }
  }}