{
    "address": "0x41F7B1047563A82021D0bAe2e4Dd156AAFD64119",
    "abi": [
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "datasetId",
            "type": "uint64"
          },
          {
            "internalType": "address",
            "name": "submitter",
            "type": "address"
          }
        ],
        "name": "InvalidDatasetProofsSubmitter",
        "type": "error"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "datasetId",
            "type": "uint64"
          }
        ],
        "name": "InvalidDatasetState",
        "type": "error"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": false,
            "internalType": "address",
            "name": "previousAdmin",
            "type": "address"
          },
          {
            "indexed": false,
            "internalType": "address",
            "name": "newAdmin",
            "type": "address"
          }
        ],
        "name": "AdminChanged",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "internalType": "address",
            "name": "beacon",
            "type": "address"
          }
        ],
        "name": "BeaconUpgraded",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "indexed": true,
            "internalType": "address",
            "name": "_provider",
            "type": "address"
          }
        ],
        "name": "CollateralEnough",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "indexed": true,
            "internalType": "address",
            "name": "_provider",
            "type": "address"
          }
        ],
        "name": "CollateralNotEnough",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "indexed": true,
            "internalType": "address",
            "name": "_provider",
            "type": "address"
          }
        ],
        "name": "DatasetProofSubmitted",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": false,
            "internalType": "uint8",
            "name": "version",
            "type": "uint8"
          }
        ],
        "name": "Initialized",
        "type": "event"
      },
      {
        "anonymous": false,
        "inputs": [
          {
            "indexed": true,
            "internalType": "address",
            "name": "implementation",
            "type": "address"
          }
        ],
        "name": "Upgraded",
        "type": "event"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          }
        ],
        "name": "appendDatasetCollateral",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
      },
      {
        "inputs": [],
        "name": "escrow",
        "outputs": [
          {
            "internalType": "contract IEscrow",
            "name": "",
            "type": "address"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          }
        ],
        "name": "getDatasetAppendCollateral",
        "outputs": [
          {
            "internalType": "uint256",
            "name": "",
            "type": "uint256"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          },
          {
            "internalType": "uint64",
            "name": "_index",
            "type": "uint64"
          },
          {
            "internalType": "uint64",
            "name": "_len",
            "type": "uint64"
          }
        ],
        "name": "getDatasetCars",
        "outputs": [
          {
            "internalType": "bytes32[]",
            "name": "",
            "type": "bytes32[]"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          }
        ],
        "name": "getDatasetCarsCount",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          }
        ],
        "name": "getDatasetCollateralRequirement",
        "outputs": [
          {
            "internalType": "uint256",
            "name": "",
            "type": "uint256"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          },
          {
            "internalType": "uint64",
            "name": "_index",
            "type": "uint64"
          },
          {
            "internalType": "uint64",
            "name": "_len",
            "type": "uint64"
          }
        ],
        "name": "getDatasetProof",
        "outputs": [
          {
            "internalType": "bytes32[]",
            "name": "",
            "type": "bytes32[]"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          }
        ],
        "name": "getDatasetProofCount",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          }
        ],
        "name": "getDatasetProofSubmitter",
        "outputs": [
          {
            "internalType": "address",
            "name": "",
            "type": "address"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          }
        ],
        "name": "getDatasetSize",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [],
        "name": "getImplementation",
        "outputs": [
          {
            "internalType": "address",
            "name": "",
            "type": "address"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [],
        "name": "governanceAddress",
        "outputs": [
          {
            "internalType": "address",
            "name": "",
            "type": "address"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "_governanceAddress",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_roles",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_filplus",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_carstore",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_datasets",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_datasetsRequirement",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "_escrow",
            "type": "address"
          }
        ],
        "name": "initialize",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "uint64",
            "name": "_id",
            "type": "uint64"
          }
        ],
        "name": "isDatasetContainsCar",
        "outputs": [
          {
            "internalType": "bool",
            "name": "",
            "type": "bool"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "uint64[]",
            "name": "_ids",
            "type": "uint64[]"
          }
        ],
        "name": "isDatasetContainsCars",
        "outputs": [
          {
            "internalType": "bool",
            "name": "",
            "type": "bool"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "address",
            "name": "_submitter",
            "type": "address"
          }
        ],
        "name": "isDatasetProofSubmitter",
        "outputs": [
          {
            "internalType": "bool",
            "name": "",
            "type": "bool"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          }
        ],
        "name": "isDatasetProofallCompleted",
        "outputs": [
          {
            "internalType": "bool",
            "name": "",
            "type": "bool"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [],
        "name": "proxiableUUID",
        "outputs": [
          {
            "internalType": "bytes32",
            "name": "",
            "type": "bytes32"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [],
        "name": "roles",
        "outputs": [
          {
            "internalType": "contract IRoles",
            "name": "",
            "type": "address"
          }
        ],
        "stateMutability": "view",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          },
          {
            "internalType": "bytes32[]",
            "name": "_leafHashes",
            "type": "bytes32[]"
          },
          {
            "internalType": "uint64",
            "name": "_leafIndex",
            "type": "uint64"
          },
          {
            "internalType": "uint64[]",
            "name": "_leafSizes",
            "type": "uint64[]"
          },
          {
            "internalType": "bool",
            "name": "_completed",
            "type": "bool"
          }
        ],
        "name": "submitDatasetProof",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          }
        ],
        "name": "submitDatasetProofCompleted",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "uint64",
            "name": "_datasetId",
            "type": "uint64"
          },
          {
            "internalType": "enum DatasetType.DataType",
            "name": "_dataType",
            "type": "uint8"
          },
          {
            "internalType": "string",
            "name": "_mappingFilesAccessMethod",
            "type": "string"
          },
          {
            "internalType": "bytes32",
            "name": "_rootHash",
            "type": "bytes32"
          }
        ],
        "name": "submitDatasetProofRoot",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "newImplementation",
            "type": "address"
          }
        ],
        "name": "upgradeTo",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "newImplementation",
            "type": "address"
          },
          {
            "internalType": "bytes",
            "name": "data",
            "type": "bytes"
          }
        ],
        "name": "upgradeToAndCall",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
      }
    ],
    "numDeployments": 1,
    "solcInputHash": "f41acfe2ac725f0bc4f65421a2d4b920",
    "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"datasetId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"submitter\",\"type\":\"address\"}],\"name\":\"InvalidDatasetProofsSubmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"datasetId\",\"type\":\"uint64\"}],\"name\":\"InvalidDatasetState\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"}],\"name\":\"CollateralEnough\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"}],\"name\":\"CollateralNotEnough\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"}],\"name\":\"DatasetProofSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"appendDatasetCollateral\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"escrow\",\"outputs\":[{\"internalType\":\"contract IEscrow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"getDatasetAppendCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"_index\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_len\",\"type\":\"uint64\"}],\"name\":\"getDatasetCars\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"}],\"name\":\"getDatasetCarsCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"getDatasetCollateralRequirement\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"_index\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_len\",\"type\":\"uint64\"}],\"name\":\"getDatasetProof\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"}],\"name\":\"getDatasetProofCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"getDatasetProofSubmitter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"}],\"name\":\"getDatasetSize\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governanceAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_roles\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_filplus\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_carstore\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_datasets\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_datasetsRequirement\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_escrow\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_id\",\"type\":\"uint64\"}],\"name\":\"isDatasetContainsCar\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"uint64[]\",\"name\":\"_ids\",\"type\":\"uint64[]\"}],\"name\":\"isDatasetContainsCars\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_submitter\",\"type\":\"address\"}],\"name\":\"isDatasetProofSubmitter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"}],\"name\":\"isDatasetProofallCompleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"roles\",\"outputs\":[{\"internalType\":\"contract IRoles\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[]\",\"name\":\"_leafHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"_leafIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64[]\",\"name\":\"_leafSizes\",\"type\":\"uint64[]\"},{\"internalType\":\"bool\",\"name\":\"_completed\",\"type\":\"bool\"}],\"name\":\"submitDatasetProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"submitDatasetProofCompleted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"internalType\":\"enum DatasetType.DataType\",\"name\":\"_dataType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_mappingFilesAccessMethod\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"_rootHash\",\"type\":\"bytes32\"}],\"name\":\"submitDatasetProofRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is intended to be inherited by specific dataset-related contracts.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"submitDatasetProof(uint64,uint8,bytes32[],uint64,uint64[],bool)\":{\"details\":\"Submit the proof of the dataset in batches, specifically by submitting the _leafHashes in the order of _leafIndexes.\"},\"submitDatasetProofRoot(uint64,uint8,string,bytes32)\":{\"details\":\"Submit the rootHash of the dataset, the mappingFilesAccessMethod, and confirm that the sender is the submitter of the dataset.\"},\"upgradeTo(address)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new\"}},\"title\":\"DatasetsProof Contract\",\"version\":1},\"userdoc\":{\"events\":{\"CollateralEnough(uint64,address)\":{\"notice\":\"Event emitted when a dataset has enough collateral.\"},\"CollateralNotEnough(uint64,address)\":{\"notice\":\"Event emitted when a dataset has not enough collateral.\"},\"DatasetProofSubmitted(uint64,address)\":{\"notice\":\"Event emitted when a proof is submitted for a dataset.\"}},\"kind\":\"user\",\"methods\":{\"appendDatasetCollateral(uint64)\":{\"notice\":\"Append dataset collateral funds\"},\"getDatasetAppendCollateral(uint64)\":{\"notice\":\"Get dataset need append collateral funds\"},\"getDatasetCars(uint64,uint8,uint64,uint64)\":{\"notice\":\"Get dataset source CIDs\"},\"getDatasetCarsCount(uint64,uint8)\":{\"notice\":\"Get dataset source CIDs\"},\"getDatasetCollateralRequirement(uint64)\":{\"notice\":\"Get dataset minimum conditional\"},\"getDatasetProof(uint64,uint8,uint64,uint64)\":{\"notice\":\"Get dataset source CIDs\"},\"getDatasetProofCount(uint64,uint8)\":{\"notice\":\"Get the number of leaf nodes (cars) in the dataset proofs.\"},\"getDatasetProofSubmitter(uint64)\":{\"notice\":\"Get submitter of dataset's proofs\"},\"getDatasetSize(uint64,uint8)\":{\"notice\":\"Get dataset size\"},\"getImplementation()\":{\"notice\":\"Returns the implementation contract\"},\"initialize(address,address,address,address,address,address,address)\":{\"notice\":\"initialize function to initialize the contract and grant the default admin role to the deployer.\"},\"isDatasetContainsCar(uint64,uint64)\":{\"notice\":\"Check if a dataset has a cid\"},\"isDatasetContainsCars(uint64,uint64[])\":{\"notice\":\"Check if a dataset has cids\"},\"isDatasetProofSubmitter(uint64,address)\":{\"notice\":\"Check if a dataset has submitter\"},\"isDatasetProofallCompleted(uint64,uint8)\":{\"notice\":\"Check if a dataset proof all completed\"},\"submitDatasetProof(uint64,uint8,bytes32[],uint64,uint64[],bool)\":{\"notice\":\"Submit proof for a dataset\"},\"submitDatasetProofCompleted(uint64)\":{\"notice\":\"Submit proof completed for a dataset\"},\"submitDatasetProofRoot(uint64,uint8,string,bytes32)\":{\"notice\":\"Submit proof root for a dataset\"}},\"notice\":\"This contract serves as the base for managing datasetProof.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v0.8/module/dataset/DatasetsProof.sol\":\"DatasetsProof\"},\"evmVersion\":\"paris\",\"libraries\":{\":__CACHE_BREAKER__\":\"0x0000000000000031363939383631363036343935\"},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":false},\"runs\":0},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlUpgradeable.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerableUpgradeable is IAccessControlUpgradeable {\\n    /**\\n     * @dev Returns one of the accounts that have `role`. `index` must be a\\n     * value between 0 and {getRoleMemberCount}, non-inclusive.\\n     *\\n     * Role bearers are not sorted in any particular way, and their ordering may\\n     * change at any point.\\n     *\\n     * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n     * you perform all queries on the same block. See the following\\n     * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n     * for more information.\\n     */\\n    function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n    /**\\n     * @dev Returns the number of accounts that have `role`. Can be used\\n     * together with {getRoleMember} to enumerate all bearers of a role.\\n     */\\n    function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x7acbc538aad6eb4614e26612a8c5c0149bb8808db95e2638d245a8365f63e572\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControlUpgradeable {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0xb8f5302f12138c5561362e88a78d061573e6298b7a1a5afe84a1e2c8d4d5aeaa\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967Upgradeable {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x47d6e06872b12e72c79d1b5eb55842f860b5fb1207b2317c2358d2766b950a7b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822ProxiableUpgradeable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeaconUpgradeable.sol\\\";\\nimport \\\"../../interfaces/IERC1967Upgradeable.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822Upgradeable.sol\\\";\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\nimport \\\"../../utils/StorageSlotUpgradeable.sol\\\";\\nimport \\\"../utils/Initializable.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967UpgradeUpgradeable is Initializable, IERC1967Upgradeable {\\n    function __ERC1967Upgrade_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC1967Upgrade_init_unchained() internal onlyInitializing {\\n    }\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\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 _getImplementation() internal view returns (address) {\\n        return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(AddressUpgradeable.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            AddressUpgradeable.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(AddressUpgradeable.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            AddressUpgradeable.functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data);\\n        }\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x584ebdf9c1118a7c773f98788e3f3ede01982bdf8932aa06f5acc7d54876e161\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeaconUpgradeable {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822Upgradeable.sol\\\";\\nimport \\\"../ERC1967/ERC1967UpgradeUpgradeable.sol\\\";\\nimport \\\"./Initializable.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable {\\n    function __UUPSUpgradeable_init() internal onlyInitializing {\\n    }\\n\\n    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\\n    }\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n    address private immutable __self = address(this);\\n\\n    /**\\n     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n     * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n     * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n     * fail.\\n     */\\n    modifier onlyProxy() {\\n        require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n        require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n     * callable on the implementing contract but not through proxies.\\n     */\\n    modifier notDelegated() {\\n        require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n     * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n     */\\n    function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n        return _IMPLEMENTATION_SLOT;\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n     *\\n     * Calls {_authorizeUpgrade}.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\\n     */\\n    function upgradeTo(address newImplementation) public virtual onlyProxy {\\n        _authorizeUpgrade(newImplementation);\\n        _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n     * encoded in `data`.\\n     *\\n     * Calls {_authorizeUpgrade}.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\\n        _authorizeUpgrade(newImplementation);\\n        _upgradeToAndCallUUPS(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n     * {upgradeTo} and {upgradeToAndCall}.\\n     *\\n     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n     *\\n     * ```solidity\\n     * function _authorizeUpgrade(address) internal override onlyOwner {}\\n     * ```\\n     */\\n    function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xb607cb94c27e89750f5ae2ccebcb94e654e926f6125f4fd4c6262c89875118ad\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.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 AddressUpgradeable {\\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\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.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 StorageSlotUpgradeable {\\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\",\"keccak256\":\"0x07ac95acad040f1fb1f6120dd0aa5f702db69446e95f82613721879d30de0908\",\"license\":\"MIT\"},\"src/v0.8/interfaces/core/ICarstore.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {CarReplicaType} from \\\"src/v0.8/types/CarReplicaType.sol\\\";\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IFilplus} from \\\"src/v0.8/interfaces/core/IFilplus.sol\\\";\\nimport {IFilecoin} from \\\"src/v0.8/interfaces/core/IFilecoin.sol\\\";\\n\\n/// @title ICarstoreReadOnly\\n/// @notice This interface defines the functions for get car status.\\ninterface ICarstoreReadOnly {\\n    /// @notice Get the dataset ID associated with a car.\\n    /// @param _id Car ID to check.\\n    /// @return The car size of the car.\\n    function getCarSize(uint64 _id) external view returns (uint64);\\n\\n    /// @notice Get the total size of cars based on an array of car IDs.\\n    /// @param _ids An array of car IDs for which to calculate the size.\\n    /// @return The total size of cars.\\n    function getCarsSize(uint64[] memory _ids) external view returns (uint64);\\n\\n    /// @notice Get the dataset ID associated with a car.\\n    /// @param _id Car ID to check.\\n    /// @return The dataset ID of the car.\\n    /// NOTE: a car only belongs a datasets\\n    function getCarDatasetId(uint64 _id) external view returns (uint64);\\n\\n    /// @notice Get the matching ids of a replica associated with a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @return The matching ids of the car's replica.\\n    function getCarMatchingIds(\\n        uint64 _id\\n    ) external view returns (uint64[] memory);\\n\\n    /// @notice Get the replica details associated with a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @return The dataset ID, state, and Filecoin claim ID of the replica.\\n    function getCarReplica(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (CarReplicaType.State, uint64);\\n\\n    /// @notice Get the count of replicas associated with a car.\\n    /// @param _id Car ID for which to retrieve the replica count.\\n    /// @return The count of replicas associated with the car.\\n    function getCarReplicasCount(uint64 _id) external view returns (uint16);\\n\\n    /// @notice Get the Filecoin claim ID associated with a specific replica of a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @return The Filecoin claim ID of the replica.\\n    function getCarReplicaFilecoinClaimId(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (uint64);\\n\\n    /// @notice Get the state of a replica associated with a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @return The state of the replica.\\n    function getCarReplicaState(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (CarReplicaType.State);\\n\\n    /// @notice Get the hash of car based on the car id.\\n    /// @param _id Car ID which to get car hash.\\n    /// @return The hash of the car.\\n    function getCarHash(uint64 _id) external view returns (bytes32);\\n\\n    /// @notice Get the hashs of cars based on an array of car IDs.\\n    /// @param _ids An array of car IDs for which to get car hashs.\\n    /// @return The hashs of cars.\\n    function getCarsHashs(\\n        uint64[] memory _ids\\n    ) external view returns (bytes32[] memory);\\n\\n    /// @notice Get the car's id based on the car's hash.\\n    /// @param _hash The hash which to get car id.\\n    /// @return The id of the car.\\n    function getCarId(bytes32 _hash) external view returns (uint64);\\n\\n    /// @notice Get the ids of cars based on an array of car hashs.\\n    /// @param _hashs An array of car hashs for which to cat car hashs.\\n    /// @return The ids of cars.\\n    function getCarsIds(\\n        bytes32[] memory _hashs\\n    ) external view returns (uint64[] memory);\\n\\n    /// @notice Check if a car exists based on its Hash.\\n    /// @param _hash Car Hash to check.\\n    /// @return True if the car exists, false otherwise.\\n    function hasCarHash(bytes32 _hash) external view returns (bool);\\n\\n    /// @notice Check if a car exists based on its ID.\\n    /// @param _id Car ID to check.\\n    /// @return True if the car exists, false otherwise.\\n    function hasCar(uint64 _id) external view returns (bool);\\n\\n    /// @notice Check if a replica exists within a car based on its matching ID.\\n    /// @param _id Car ID to check.\\n    /// @param _matchingId Matching ID of the replica to check.\\n    /// @return True if the replica exists, false otherwise.\\n    function hasCarReplica(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (bool);\\n\\n    /// @notice Check if a car exists based on its Hashs.\\n    /// @dev This function returns whether a car exists or not.\\n    /// @param _hashs  Array of car Hashs to check.\\n    /// @return True if the car exists, false otherwise.\\n    function hasCarsHashs(bytes32[] memory _hashs) external view returns (bool);\\n\\n    /// @notice Check if multiple cars exist based on their IDs.\\n    /// @param _ids Array of car IDs to check.\\n    /// @return True if all specified cars exist, false if any one does not exist.\\n    function hasCars(uint64[] memory _ids) external view returns (bool);\\n\\n    // Default getter functions for public variables\\n    function carsCount() external view returns (uint64);\\n\\n    /// @notice get filecoin object\\n    function filecoin() external view returns (IFilecoin);\\n\\n    /// @notice get filplus object\\n    function filplus() external view returns (IFilplus);\\n}\\n\\n/// @title ICarStore\\n/// @notice This interface defines the functions for managing car data and associated replicas.\\ninterface ICarstore is ICarstoreReadOnly {\\n    /// @dev Internal function to add a car based on its CID.\\n    ///      tips: diffent dataset has the same car is dones't matter,maybe need limit replicas count for a car.\\n    ///      filplus requires dataset replicas,but not limit for car replicas\\n    /// @param _cid Car CID to be added.\\n    /// @param _datasetId dataset index of approved dataset.\\n    /// @param _size car size.\\n    /// @param _replicaCount count of car's replicas.\\n    /// @return The id of the car.\\n    function addCar(\\n        bytes32 _cid,\\n        uint64 _datasetId,\\n        uint64 _size,\\n        uint16 _replicaCount\\n    ) external returns (uint64);\\n\\n    /// @notice Add multiple cars to the storage.\\n    /// @dev This function allows the addition of multiple cars at once.\\n    /// @param _cids Array of car CIDs to be added.\\n    /// @param _datasetId dataset index of approved dataset.\\n    /// @param _sizes car size array.\\n    /// @param _replicaCount count of car's replicas.\\n    /// @return The ids of the cars and the size.\\n    function addCars(\\n        bytes32[] memory _cids,\\n        uint64 _datasetId,\\n        uint64[] memory _sizes,\\n        uint16 _replicaCount\\n    ) external returns (uint64[] memory, uint64);\\n\\n    /// @notice Regist a replica to a car.\\n    /// @dev This function allows adding a replica to an existing car.\\n    /// @param _id Car ID to which the replica will be added.\\n    /// @param _matchingId Matching ID for the new replica.\\n    /// @param _replicaIndex The index of the replica.\\n    function registCarReplica(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint16 _replicaIndex\\n    ) external;\\n\\n    /// @notice Report that matching's state for a replica.\\n    /// @dev This function allows reporting that the matching for a replica is failed.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @param _matchingState Matching's state of the replica, true for success ,false for failed.\\n    function reportCarReplicaMatchingState(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        bool _matchingState\\n    ) external;\\n\\n    /// @notice Report that storage deal for a replica has expired.\\n    /// @dev This function allows reporting that the storage deal for a replica has expired.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    function reportCarReplicaExpired(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint64 _claimId\\n    ) external;\\n\\n    /// @notice Report that storage of a replica has been slashed.\\n    /// @dev This function allows reporting that the storage of a replica has been slashed.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    function reportCarReplicaSlashed(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint64 _claimId\\n    ) external;\\n\\n    /// @notice Set the Filecoin claim ID for a replica's storage.\\n    /// @dev This function allows setting the Filecoin claim ID for a specific replica's storage.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @param _claimId New Filecoin claim ID to set for the replica's storage.\\n    function setCarReplicaFilecoinClaimId(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint64 _claimId\\n    ) external;\\n}\\n\",\"keccak256\":\"0xc41c469d6b54a1e15f6e0a8c06ccb3f5980c49df88e704bb270c4f7365481917\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IEscrow.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {EscrowType} from \\\"src/v0.8/types/EscrowType.sol\\\";\\n\\n/// @title IEscrow Interface\\n/// @notice This interface defines the escrow-related functions within the system.\\ninterface IEscrow {\\n    /// @dev Records the sent amount as credit for future withdrawals.\\n    /// Note Called by the payer to store the sent amount as credit to be pulled.\\n    /// Funds sent in this way are stored in an intermediate {Escrow} contract, so\\n    /// there is no danger of them being spent before withdrawal.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _amount The collateral funds.\\n    /// @notice Emits a {Collateral} event upon successful credit recording.\\n    function collateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        uint256 _amount\\n    ) external payable;\\n\\n    /// @notice Withdraw funds authorized for an address.\\n    /// @dev This function allows the owner to initiate a withdrawal of authorized funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @notice Emits a {Withdrawn} event upon successful withdrawal.\\n    function withdraw(\\n        EscrowType.Type _type,\\n        address payable _owner,\\n        uint64 _id\\n    ) external;\\n\\n    /// @dev Records the sent amount as credit for future payment withdraw.\\n    /// Note Called by the payer to store the sent amount as credit to be pulled.\\n    /// Funds sent in this way are stored in an intermediate {Escrow} contract, so\\n    /// there is no danger of them being spent before withdrawal.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _amount The collateral funds.\\n    /// @notice Emits a {PaymentCollateral} event upon successful credit recording.\\n    function paymentCollateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        uint256 _amount\\n    ) external payable;\\n\\n    /// @dev Records the sent amount as credit for future payment withdraw.\\n    /// Note Called by the payer to store the sent amount as credit to be pulled.\\n    /// Funds sent in this way are stored in an intermediate {Escrow} contract, so\\n    /// there is no danger of them being spent before withdrawal.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    /// @param _amount The collateral funds.\\n    /// @notice Emits a {PaymentSingleBeneficiaryCollateral} event upon successful credit recording.\\n    function paymentSingleBeneficiaryCollateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary,\\n        uint256 _amount\\n    ) external payable;\\n\\n    /// @notice Payment withdraw funds authorized for an address.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    /// @notice Emits a {PaymentWithdrawn} event upon successful credit recording.\\n    function paymentWithdraw(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary\\n    ) external;\\n\\n    /// @notice Post an event for collateral type.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function emitCollateralEvent(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        EscrowType.CollateralEvent _event\\n    ) external;\\n\\n    /// @notice Post an event for payment type.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    function emitPaymentEvent(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary,\\n        EscrowType.PaymentEvent _event\\n    ) external;\\n\\n    /// @notice Get owner created block number.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerCreatedBlockNumber(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint64);\\n\\n    /// @notice Get owner collateral funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerCollateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get owner total funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerTotal(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get owner lock funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerLock(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get owner burned funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerBurned(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get beneficiariesList.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getBeneficiariesList(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (address[] memory);\\n\\n    /// @notice Get beneficiary fund.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    function getBeneficiaryFund(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary\\n    )\\n        external\\n        view\\n        returns (\\n            uint256 total, // Total amount in fund account\\n            uint256 lock, // Lock amount in fund account for payment beneficiaries\\n            uint256 collateral, // Collateral amount in fund account for withdraw and punishment\\n            uint256 burned, // burned amount in fund account\\n            uint64 createdBlockNumber // Fund account created block number\\n        );\\n}\\n\",\"keccak256\":\"0x379552be51d20f8e5bf6b7a980efde842e98b3865ba6c3b403feeae0d1d05afd\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IFilecoin.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {FilecoinType} from \\\"src/v0.8/types/FilecoinType.sol\\\";\\n\\n/// @title IFilplus\\ninterface IFilecoin {\\n    /// @notice The function to init the dependencies of a filecoin.\\n    function initDependencies(address _datacap) external;\\n\\n    /// @notice The function to allocate the datacap of a storage deal.\\n    function allocateDatacap(address client, uint256 _size) external;\\n\\n    /// @notice The function to get the state of a Filecoin storage deal for a replica.\\n    function getReplicaDealState(\\n        bytes32 _cid,\\n        uint64 _claimId\\n    ) external returns (FilecoinType.DealState);\\n\\n    /// @dev do nothing,just for mock\\n    function setMockDealState(FilecoinType.DealState _state) external;\\n\\n    /// @notice The function to get the data of a claim for a replica.\\n    function getReplicaClaimData(\\n        uint64 _provider,\\n        uint64 _claimId\\n    ) external returns (bytes memory);\\n\\n    /// @dev mock the filecoin claim data\\n    function setMockClaimData(uint64 claimId, bytes memory _data) external;\\n}\\n\",\"keccak256\":\"0x1fa5146ddafb3ad304dc3964065a8e7fa91df40b77fc1c47290a738491fe33cb\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IFilplus.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title IFilplus\\ninterface IFilplus {\\n    // Public getter function to access datasetRuleMaxReplicasInCountries\\n    function getDatasetRuleMaxReplicasInCountry(\\n        uint16 _countryCode\\n    ) external view returns (uint16);\\n\\n    // Set functions for public variables\\n    function setDatasetRuleMinRegionsPerDataset(uint16 _newValue) external;\\n\\n    function setDatasetRuleDefaultMaxReplicasPerCountry(\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMaxReplicasInCountry(\\n        uint16 _countryCode,\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMaxReplicasPerCity(uint16 _newValue) external;\\n\\n    // set maximum proportion of dataset mapping files\\n    function setDatasetRuleMaxProportionOfMappingFilesToDataset(\\n        uint8 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMinSPsPerDataset(uint16 _newValue) external;\\n\\n    function setDatasetRuleMaxReplicasPerSP(uint16 _newValue) external;\\n\\n    function setDatasetRuleMinTotalReplicasPerDataset(\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMaxTotalReplicasPerDataset(\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatacapRulesMaxAllocatedSizePerTime(uint64 _newValue) external;\\n\\n    function setDatacapRulesMaxRemainingPercentageForNext(\\n        uint8 _newValue\\n    ) external;\\n\\n    // Default getter functions for public variables\\n    function datasetRuleMinRegionsPerDataset() external view returns (uint16);\\n\\n    function datasetRuleDefaultMaxReplicasPerCountry()\\n        external\\n        view\\n        returns (uint16);\\n\\n    function datasetRuleMaxReplicasPerCity() external view returns (uint16);\\n\\n    function datasetRuleMaxProportionOfMappingFilesToDataset()\\n        external\\n        view\\n        returns (uint8);\\n\\n    function datasetRuleMinSPsPerDataset() external view returns (uint16);\\n\\n    function datasetRuleMaxReplicasPerSP() external view returns (uint16);\\n\\n    function datasetRuleMinTotalReplicasPerDataset()\\n        external\\n        view\\n        returns (uint16);\\n\\n    function datasetRuleMaxTotalReplicasPerDataset()\\n        external\\n        view\\n        returns (uint16);\\n\\n    function datacapRulesMaxAllocatedSizePerTime()\\n        external\\n        view\\n        returns (uint64);\\n\\n    function datacapRulesMaxRemainingPercentageForNext()\\n        external\\n        view\\n        returns (uint8);\\n\\n    /// @notice Check if the storage area complies with filplus rules.\\n    function isCompliantRuleGeolocation(\\n        uint16[] memory _regions,\\n        uint16[] memory _countrys,\\n        uint32[][] memory _citys\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the mappingFiles percentage in the dataset complies with filplus rules.\\n    function isCompliantRuleMaxProportionOfMappingFilesToDataset(\\n        uint64 _mappingFilesSize,\\n        uint64 _sourceSize\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the total number of storage replicas complies with filplus rules.\\n    function isCompliantRuleTotalReplicasPerDataset(\\n        address[][] memory _dataPreparers,\\n        address[][] memory _storageProviders,\\n        uint16[] memory _regions,\\n        uint16[] memory _countrys,\\n        uint32[][] memory _citys\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the storage provider for each dataset complies with filplus rules `datasetRuleMinSPsPerDataset`.\\n    function isCompliantRuleMinSPsPerDataset(\\n        uint16 _requirementValue,\\n        uint16 _totalExists,\\n        uint16 _uniqueExists\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the storage provider for each dataset complies with filplus rules `datasetRuleMaxReplicasPerSP`.\\n    function isCompliantRuleMaxReplicasPerSP(\\n        uint16 _value\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xee080dc0e2c87242039aff68c3d2a30cece9afd59cd5260218efc6a4d4fad0a5\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IRoles.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {IAccessControlEnumerableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol\\\";\\n\\n/// @title IRoles Interface\\n/// @notice This interface defines the role-based access control for various roles within the system.\\ninterface IRoles is IAccessControlEnumerableUpgradeable {\\n    ///@dev The new owner accepts the ownership transfer.\\n    function acceptOwnership() external;\\n\\n    /**\\n     * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n     * Overriding this function changes the behavior of the {onlyRole} modifier.\\n     *\\n     * Format of the revert message is described in {_checkRole}.\\n     *\\n     * _Available since v4.6._\\n     */\\n    function checkRole(bytes32 _role) external view;\\n\\n    ///@dev Returns the address of the current owner.\\n    function owner() external view returns (address);\\n\\n    ///@dev Returns the address of the pending owner.\\n    function pendingOwner() external view returns (address);\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() external;\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address _newOwner) external;\\n}\\n\",\"keccak256\":\"0xc03390a62336f7c9e77db4d08a65644439764fb69bd616b499aa502d836e66f8\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/module/IDatasets.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IMerkleUtils} from \\\"src/v0.8/interfaces/utils/IMerkleUtils.sol\\\";\\n\\n/// @title IDatasets\\ninterface IDatasets {\\n    ///@notice Approve a dataset.\\n    ///@dev This function changes the state of the dataset to DatasetApproved and emits the DatasetApproved event.\\n    function approveDataset(uint64 _datasetId) external;\\n\\n    ///@notice Approve the metadata of a dataset.\\n    ///@dev This function changes the state of the dataset to MetadataApproved and emits the MetadataApproved event.\\n    function approveDatasetMetadata(uint64 _datasetId) external;\\n\\n    ///@notice Reject a dataset.\\n    ///@dev This function changes the state of the dataset to DatasetRejected and emits the DatasetRejected event.\\n    function rejectDataset(uint64 _datasetId) external;\\n\\n    ///@notice Reject the metadata of a dataset.\\n    ///@dev This function changes the state of the dataset to MetadataRejected and emits the MetadataRejected event.\\n    function rejectDatasetMetadata(uint64 _datasetId) external;\\n\\n    ///@notice Submit metadata for a dataset\\n    ///        Note:anyone can submit dataset metadata\\n    function submitDatasetMetadata(\\n        string memory _title,\\n        string memory _industry,\\n        string memory _name,\\n        string memory _description,\\n        string memory _source,\\n        string memory _accessMethod,\\n        uint64 _sizeInBytes,\\n        bool _isPublic,\\n        uint64 _version\\n    ) external;\\n\\n    ///@notice Get dataset metadata\\n    function getDatasetMetadata(\\n        uint64 _datasetId\\n    )\\n        external\\n        view\\n        returns (\\n            string memory title,\\n            string memory industry,\\n            string memory name,\\n            string memory description,\\n            string memory source,\\n            string memory accessMethod,\\n            address submitter,\\n            uint64 createdBlockNumber,\\n            uint64 sizeInBytes,\\n            bool isPublic,\\n            uint64 version\\n        );\\n\\n    /// @notice Get submitter of dataset's metadata\\n    function getDatasetMetadataSubmitter(\\n        uint64 _datasetId\\n    ) external view returns (address);\\n\\n    ///@notice Get dataset state\\n    function getDatasetState(\\n        uint64 _datasetId\\n    ) external view returns (DatasetType.State);\\n\\n    ///@notice Check if a dataset has metadata\\n    function hasDatasetMetadata(\\n        string memory _accessMethod\\n    ) external view returns (bool);\\n\\n    /// @notice Checks if metadata fields are valid.\\n    function requireValidDatasetMetadata(\\n        uint64 _datasetId\\n    ) external view returns (bool);\\n\\n    /// @notice Report the dataset has not enough collateral.\\n    function reportCollateralNotEnough(uint64 _datasetId) external;\\n\\n    /// @notice Report the dataset has enough collateral.\\n    function reportCollateralEnough(uint64 _datasetId) external;\\n\\n    /// @notice Report the dataset replica has already been submitted.\\n    function reportDatasetReplicaRequirementSubmitted(\\n        uint64 _datasetId\\n    ) external;\\n\\n    /// @notice Report the dataset proof has already been submitted.\\n    function reportDatasetProofSubmitted(uint64 _datasetId) external;\\n\\n    /// @notice Default getter functions for public variables\\n    function datasetsCount() external view returns (uint64);\\n\\n    /// @notice get  roles instance\\n    function roles() external view returns (IRoles);\\n\\n    /// @notice get  governance address\\n    function governanceAddress() external view returns (address);\\n}\\n\",\"keccak256\":\"0x126e414cd17fc1882984d63dfe2fa17623e5235372b07d9a63236a98d8ff75ad\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/module/IDatasetsProof.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IMerkleUtils} from \\\"src/v0.8/interfaces/utils/IMerkleUtils.sol\\\";\\n\\n/// @title IDatasetsProof\\ninterface IDatasetsProof {\\n    ///@notice Submit proof root for a dataset\\n    function submitDatasetProofRoot(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        string calldata _mappingFilesAccessMethod,\\n        bytes32 _rootHash\\n    ) external;\\n\\n    ///@notice Submit proof for a dataset\\n    function submitDatasetProof(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        bytes32[] memory _leafHashes,\\n        uint64 _leafIndex,\\n        uint64[] memory _leafSizes,\\n        bool _completed\\n    ) external;\\n\\n    ///@notice Submit proof completed for a dataset\\n    function submitDatasetProofCompleted(uint64 _datasetId) external;\\n\\n    /// @notice Append dataset collateral funds\\n    function appendDatasetCollateral(uint64 _datasetId) external payable;\\n\\n    /// @notice Get dataset need append collateral funds\\n    function getDatasetAppendCollateral(\\n        uint64 _datasetId\\n    ) external view returns (uint256);\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetProof(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) external view returns (bytes32[] memory);\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetCars(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) external view returns (bytes32[] memory);\\n\\n    function getDatasetProofCount(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (uint64);\\n\\n    ///@notice Get dataset proof's submitter\\n    function getDatasetProofSubmitter(\\n        uint64 _datasetId\\n    ) external view returns (address);\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetCarsCount(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (uint64);\\n\\n    ///@notice Get dataset size\\n    function getDatasetSize(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (uint64);\\n\\n    ///@notice Get dataset minimum conditional\\n    function getDatasetCollateralRequirement(\\n        uint64 _datasetId\\n    ) external view returns (uint256);\\n\\n    ///@notice Check if a dataset has a car id\\n    function isDatasetContainsCar(\\n        uint64 _datasetId,\\n        uint64 _id\\n    ) external returns (bool);\\n\\n    ///@notice Check if a dataset has car ids\\n    function isDatasetContainsCars(\\n        uint64 _datasetId,\\n        uint64[] memory _ids\\n    ) external view returns (bool);\\n\\n    ///@notice Check if a dataset has submitter\\n    function isDatasetProofSubmitter(\\n        uint64 _datasetId,\\n        address _submitter\\n    ) external view returns (bool);\\n\\n    ///@notice Check if a dataset proof all completed\\n    function isDatasetProofallCompleted(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe6f984da1ffcf0bb6dec2e79a232f394d564107972c727420d21a2d084c0a584\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/module/IDatasetsRequirement.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IMerkleUtils} from \\\"src/v0.8/interfaces/utils/IMerkleUtils.sol\\\";\\n\\n/// @title IDatasetsRequirement\\ninterface IDatasetsRequirement {\\n    ///@notice Submit storage requirement for a dataset\\n    ///        Note: submmiter of dataset can submit dataset storage requirement\\n    function submitDatasetReplicaRequirements(\\n        uint64 _datasetId,\\n        address[][] memory _dataPreparers,\\n        address[][] memory _storageProviders,\\n        uint16[] memory _regions,\\n        uint16[] memory _countrys,\\n        uint32[][] memory _citys\\n    ) external payable;\\n\\n    ///@notice Get dataset replicas count\\n    function getDatasetReplicasCount(\\n        uint64 _datasetId\\n    ) external view returns (uint16);\\n\\n    ///@notice Get dataset replica requirement\\n    function getDatasetReplicaRequirement(\\n        uint64 _datasetId,\\n        uint64 _index\\n    )\\n        external\\n        view\\n        returns (\\n            address[] memory,\\n            address[] memory,\\n            uint16,\\n            uint16,\\n            uint32[] memory\\n        );\\n\\n    ///@notice Get dataset pre conditional\\n    function getDatasetPreCollateralRequirements(\\n        uint64 _datasetId\\n    ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x7dc6c2d7dfaa3f6aaa56052304f36adda27182c1c34e7d6fead3671245d3e9bc\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/utils/IMerkleUtils.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title IMerkleUtils\\ninterface IMerkleUtils {\\n    /// @notice Validate a Merkle proof.\\n    /// @dev This function checks if a given Merkle proof is valid.\\n    function isValidMerkleProof(\\n        bytes32 _root,\\n        bytes32 _leaf,\\n        bytes32[] memory _siblings,\\n        uint32 _path\\n    ) external view returns (bool);\\n\\n    /// @notice Set mock valid state\\n    function setMockValidState(bool _state) external;\\n}\\n\",\"keccak256\":\"0xbd575f25c6eb78a215a4594e1506ffef15196c48b9666592155359492e9e34d5\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/DatasetsProof.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// interface\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IEscrow} from \\\"src/v0.8/interfaces/core/IEscrow.sol\\\";\\nimport {IFilplus} from \\\"src/v0.8/interfaces/core/IFilplus.sol\\\";\\nimport {ICarstore} from \\\"src/v0.8/interfaces/core/ICarstore.sol\\\";\\nimport {IDatasets} from \\\"src/v0.8/interfaces/module/IDatasets.sol\\\";\\nimport {IDatasetsRequirement} from \\\"src/v0.8/interfaces/module/IDatasetsRequirement.sol\\\";\\nimport {IDatasetsProof} from \\\"src/v0.8/interfaces/module/IDatasetsProof.sol\\\";\\n\\n///shared\\nimport {DatasetsEvents} from \\\"src/v0.8/shared/events/DatasetsEvents.sol\\\";\\nimport {DatasetsModifiers} from \\\"src/v0.8/shared/modifiers/DatasetsModifiers.sol\\\";\\n/// library\\nimport {DatasetProofLIB} from \\\"src/v0.8/module/dataset/library/proof/DatasetProofLIB.sol\\\";\\n\\n/// type\\nimport {RolesType} from \\\"src/v0.8/types/RolesType.sol\\\";\\nimport {EscrowType} from \\\"src/v0.8/types/EscrowType.sol\\\";\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {GeolocationType} from \\\"src/v0.8/types/GeolocationType.sol\\\";\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport {UUPSUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\\\";\\n\\n/// @title DatasetsProof Contract\\n/// @notice This contract serves as the base for managing datasetProof.\\n/// @dev This contract is intended to be inherited by specific dataset-related contracts.\\ncontract DatasetsProof is\\n    Initializable,\\n    UUPSUpgradeable,\\n    IDatasetsProof,\\n    DatasetsModifiers\\n{\\n    using DatasetProofLIB for DatasetType.DatasetProof;\\n\\n    mapping(uint64 => DatasetType.DatasetProof) private datasetProofs; // Mapping of dataset ID to dataset details\\n\\n    address public governanceAddress;\\n    IRoles public roles;\\n    IEscrow public escrow;\\n    IFilplus private filplus;\\n    ICarstore private carstore;\\n    IDatasets private datasets;\\n    IDatasetsRequirement private datasetsRequirement;\\n\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    uint256[32] private __gap;\\n\\n    /// @notice initialize function to initialize the contract and grant the default admin role to the deployer.\\n    function initialize(\\n        address _governanceAddress,\\n        address _roles,\\n        address _filplus,\\n        address _carstore,\\n        address _datasets,\\n        address _datasetsRequirement,\\n        address _escrow\\n    ) public initializer {\\n        governanceAddress = _governanceAddress;\\n        roles = IRoles(_roles);\\n        escrow = IEscrow(_escrow);\\n        filplus = IFilplus(_filplus);\\n        carstore = ICarstore(_carstore);\\n        datasets = IDatasets(_datasets);\\n        datasetsRequirement = IDatasetsRequirement(_datasetsRequirement);\\n\\n        __UUPSUpgradeable_init();\\n    }\\n\\n    /// @notice UUPS Upgradeable function to update the roles implementation\\n    /// @dev Only triggered by contract admin\\n    function _authorizeUpgrade(\\n        address newImplementation\\n    )\\n        internal\\n        override\\n        onlyRole(roles, RolesType.DEFAULT_ADMIN_ROLE) // solhint-disable-next-line\\n    {}\\n\\n    /// @notice Returns the implementation contract\\n    function getImplementation() external view returns (address) {\\n        return _getImplementation();\\n    }\\n\\n    ///@notice Submit proof root for a dataset\\n    ///@dev Submit the rootHash of the dataset, the mappingFilesAccessMethod,\\n    /// and confirm that the sender is the submitter of the dataset.\\n    function submitDatasetProofRoot(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        string calldata _mappingFilesAccessMethod,\\n        bytes32 _rootHash\\n    )\\n        external\\n        onlyDatasetProofSubmitterOrSubmitterNotExsits(\\n            this,\\n            _datasetId,\\n            msg.sender\\n        )\\n        onlyDatasetState(\\n            datasets,\\n            _datasetId,\\n            DatasetType.State.MetadataApproved\\n        )\\n    {\\n        //Note: params check in lib\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        if (_dataType == DatasetType.DataType.MappingFiles) {\\n            if (bytes(datasetProof.mappingFilesAccessMethod).length == 0) {\\n                datasetProof\\n                    .mappingFilesAccessMethod = _mappingFilesAccessMethod;\\n            }\\n        }\\n        // If the Dataset proof has not been submitted before,\\n        // then set the current sender as the submitter.\\n        if (\\n            datasetProof.getDatasetCount(DatasetType.DataType.Source) == 0 &&\\n            datasetProof.getDatasetCount(DatasetType.DataType.MappingFiles) == 0\\n        ) {\\n            datasetProof.proofSubmitter = msg.sender;\\n        }\\n        require(\\n            datasetProof.isDatasetSubmitter(msg.sender),\\n            \\\"Invalid Dataset submitter\\\"\\n        );\\n        datasetProof.addDatasetProofRoot(_dataType, _rootHash);\\n    }\\n\\n    ///@notice Internal submit proof for a dataset\\n    ///@dev Submit the proof of the dataset in batches,\\n    /// specifically by submitting the _leafHashes in the order of _leafIndexes.\\n    function _submitDatasetProof(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        bytes32[] memory _leafHashes,\\n        uint64 _leafIndex,\\n        uint64[] memory _leafSizes,\\n        bool _completed\\n    )\\n        internal\\n        onlyDatasetState(\\n            datasets,\\n            _datasetId,\\n            DatasetType.State.MetadataApproved\\n        )\\n    {\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n\\n        // Checking if the current sender is the submitter.\\n        require(\\n            datasetProof.isDatasetSubmitter(msg.sender),\\n            \\\"Invalid Dataset submitter\\\"\\n        );\\n\\n        uint16 replicaCount = datasetsRequirement.getDatasetReplicasCount(\\n            _datasetId\\n        );\\n\\n        (uint64[] memory leafIds, uint64 size) = carstore.addCars(\\n            _leafHashes,\\n            _datasetId,\\n            _leafSizes,\\n            replicaCount\\n        );\\n\\n        datasetProof.addDatasetProofBatch(\\n            _dataType,\\n            leafIds,\\n            _leafIndex,\\n            size,\\n            _completed\\n        );\\n    }\\n\\n    ///@notice Submit proof completed for a dataset\\n    function submitDatasetProofCompleted(uint64 _datasetId) public {\\n        //Note: params check in lib\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        if (\\n            datasetProof.sourceProof.allCompleted &&\\n            datasetProof.mappingFilesProof.allCompleted\\n        ) {\\n            require(\\n                filplus.isCompliantRuleMaxProportionOfMappingFilesToDataset(\\n                    datasetProof.getDatasetSize(\\n                        DatasetType.DataType.MappingFiles\\n                    ),\\n                    datasetProof.getDatasetSize(DatasetType.DataType.Source)\\n                ),\\n                \\\"Invalid mappingFiles percentage\\\"\\n            );\\n\\n            uint256 collateralRequirement = getDatasetCollateralRequirement(\\n                _datasetId\\n            );\\n            if (\\n                escrow.getOwnerTotal(\\n                    EscrowType.Type.DatacapCollateral,\\n                    datasets.getDatasetMetadataSubmitter(_datasetId),\\n                    _datasetId\\n                ) < collateralRequirement\\n            ) {\\n                datasets.reportCollateralNotEnough(_datasetId);\\n                emit DatasetsEvents.CollateralNotEnough(_datasetId, msg.sender);\\n            } else {\\n                // Update collateral funds to collateral requirement\\n                escrow.emitCollateralEvent(\\n                    EscrowType.Type.DatacapCollateral,\\n                    datasets.getDatasetMetadataSubmitter(_datasetId),\\n                    _datasetId,\\n                    EscrowType.CollateralEvent.SyncCollateral\\n                );\\n\\n                datasets.reportDatasetProofSubmitted(_datasetId);\\n                emit DatasetsEvents.DatasetProofSubmitted(\\n                    _datasetId,\\n                    msg.sender\\n                );\\n            }\\n        }\\n    }\\n\\n    ///@notice Submit proof for a dataset\\n    ///@dev Submit the proof of the dataset in batches,\\n    /// specifically by submitting the _leafHashes in the order of _leafIndexes.\\n    function submitDatasetProof(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        bytes32[] memory _leafHashes,\\n        uint64 _leafIndex,\\n        uint64[] memory _leafSizes,\\n        bool _completed\\n    ) external {\\n        _submitDatasetProof(\\n            _datasetId,\\n            _dataType,\\n            _leafHashes,\\n            _leafIndex,\\n            _leafSizes,\\n            _completed\\n        );\\n\\n        if (_completed) {\\n            submitDatasetProofCompleted(_datasetId);\\n        }\\n    }\\n\\n    /// @notice Append dataset collateral funds\\n    function appendDatasetCollateral(uint64 _datasetId) public payable {\\n        uint256 amount = msg.value;\\n        uint256 appendCollateral = getDatasetAppendCollateral(_datasetId);\\n        require(amount >= appendCollateral, \\\"Insufficient collateral funds\\\");\\n\\n        escrow.collateral{value: amount}(\\n            EscrowType.Type.DatacapCollateral,\\n            datasets.getDatasetMetadataSubmitter(_datasetId),\\n            _datasetId,\\n            appendCollateral\\n        );\\n\\n        datasets.reportCollateralEnough(_datasetId);\\n        emit DatasetsEvents.CollateralEnough(_datasetId, msg.sender);\\n    }\\n\\n    /// @notice Get dataset need append collateral funds\\n    function getDatasetAppendCollateral(\\n        uint64 _datasetId\\n    ) public view returns (uint256) {\\n        uint256 collateralRequirement = getDatasetCollateralRequirement(\\n            _datasetId\\n        );\\n        uint256 total = escrow.getOwnerTotal(\\n            EscrowType.Type.DatacapCollateral,\\n            datasets.getDatasetMetadataSubmitter(_datasetId),\\n            _datasetId\\n        );\\n\\n        uint256 appendCollateral = 0;\\n        if (collateralRequirement > total) {\\n            appendCollateral = collateralRequirement - total;\\n        }\\n\\n        return appendCollateral;\\n    }\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetProof(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) public view onlyNotZero(_datasetId) returns (bytes32[] memory) {\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        return\\n            carstore.getCarsHashs(\\n                datasetProof.getDatasetProof(_dataType, _index, _len)\\n            );\\n    }\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetCars(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) public view onlyNotZero(_datasetId) returns (bytes32[] memory) {\\n        return getDatasetProof(_datasetId, _dataType, _index, _len);\\n    }\\n\\n    /// @notice Get the number of leaf nodes (cars) in the dataset proofs.\\n    function getDatasetProofCount(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) public view onlyNotZero(_datasetId) returns (uint64) {\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        return datasetProof.getDatasetCount(_dataType);\\n    }\\n\\n    /// @notice Get submitter of dataset's proofs\\n    function getDatasetProofSubmitter(\\n        uint64 _datasetId\\n    ) public view returns (address) {\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        return datasetProof.getDatasetSubmitter();\\n    }\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetCarsCount(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) public view onlyNotZero(_datasetId) returns (uint64) {\\n        return getDatasetProofCount(_datasetId, _dataType);\\n    }\\n\\n    ///@notice Get dataset size\\n    function getDatasetSize(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) public view onlyNotZero(_datasetId) returns (uint64) {\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        return datasetProof.getDatasetSize(_dataType);\\n    }\\n\\n    ///@notice Get dataset minimum conditional\\n    function getDatasetCollateralRequirement(\\n        uint64 _datasetId\\n    ) public view onlyNotZero(_datasetId) returns (uint256) {\\n        // TODO: PRICE_PER_BYTE import from governance\\n        uint64 PER_TIB_BYTE = (1024 * 1024 * 1024 * 1024);\\n        uint256 PRICE_PER_BYTE = (1000000000000000000 / PER_TIB_BYTE);\\n        return\\n            getDatasetSize(_datasetId, DatasetType.DataType.Source) *\\n            datasetsRequirement.getDatasetReplicasCount(_datasetId) *\\n            PRICE_PER_BYTE;\\n    }\\n\\n    ///@notice Check if a dataset proof all completed\\n    function isDatasetProofallCompleted(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) public view onlyNotZero(_datasetId) returns (bool) {\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        return datasetProof.isDatasetProofallCompleted(_dataType);\\n    }\\n\\n    ///@notice Check if a dataset has a cid\\n    function isDatasetContainsCar(\\n        uint64 _datasetId,\\n        uint64 _id\\n    ) public view onlyNotZero(_datasetId) returns (bool) {\\n        return _datasetId == carstore.getCarDatasetId(_id);\\n    }\\n\\n    ///@notice Check if a dataset has cids\\n    function isDatasetContainsCars(\\n        uint64 _datasetId,\\n        uint64[] memory _ids\\n    ) external view onlyNotZero(_datasetId) returns (bool) {\\n        for (uint64 i = 0; i < _ids.length; i++) {\\n            if (!isDatasetContainsCar(_datasetId, _ids[i])) return false;\\n        }\\n        return true;\\n    }\\n\\n    ///@notice Check if a dataset has submitter\\n    function isDatasetProofSubmitter(\\n        uint64 _datasetId,\\n        address _submitter\\n    ) public view returns (bool) {\\n        DatasetType.DatasetProof storage datasetProof = datasetProofs[\\n            _datasetId\\n        ];\\n        return datasetProof.isDatasetSubmitter(_submitter);\\n    }\\n}\\n\",\"keccak256\":\"0xb36e85bf5e1b6e914b71fd003722bbf2ff9e827324be1fdfa4fdc354bf691bb1\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/library/metadata/DatasetStateMachineLIB.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\n\\n/// @title DatasetStateMachineLIB Library,include add,get,verify.\\n/// @notice This library defines the state machine for managing the states of datasets.\\nlibrary DatasetStateMachineLIB {\\n    /// @notice Post an event for a dataset.\\n    /// @dev This function updates the dataset's state based on the event and emits the corresponding event.\\n    /// @param self The dataset for which the event will be posted.\\n    /// @param _event The event to be posted.\\n    function _emitDatasetEvent(\\n        DatasetType.Dataset storage self,\\n        DatasetType.Event _event\\n    ) internal {\\n        DatasetType.State currentState = self.state;\\n        DatasetType.State newState;\\n        // Apply the state transition based on the event\\n        if (_event == DatasetType.Event.SubmitMetadata) {\\n            if (currentState == DatasetType.State.None) {\\n                newState = DatasetType.State.MetadataSubmitted;\\n            }\\n        } else if (_event == DatasetType.Event.MetadataApproved) {\\n            if (currentState == DatasetType.State.MetadataSubmitted) {\\n                newState = DatasetType.State.MetadataApproved;\\n            }\\n        } else if (_event == DatasetType.Event.MetadataRejected) {\\n            if (currentState == DatasetType.State.MetadataSubmitted) {\\n                newState = DatasetType.State.MetadataRejected;\\n            }\\n        } else if (_event == DatasetType.Event.NotEnoughCollateral) {\\n            if (currentState == DatasetType.State.MetadataApproved) {\\n                newState = DatasetType.State.CollateralNotEnough;\\n            }\\n        } else if (_event == DatasetType.Event.EnoughCollateral) {\\n            if (currentState == DatasetType.State.CollateralNotEnough) {\\n                newState = DatasetType.State.MetadataApproved;\\n            }\\n        } else if (_event == DatasetType.Event.SubmitDatasetProof) {\\n            if (currentState == DatasetType.State.MetadataApproved) {\\n                newState = DatasetType.State.DatasetProofSubmitted;\\n            }\\n        } else if (_event == DatasetType.Event.DatasetApproved) {\\n            if (currentState == DatasetType.State.DatasetProofSubmitted) {\\n                newState = DatasetType.State.DatasetApproved;\\n            }\\n        } else if (_event == DatasetType.Event.DatasetRejected) {\\n            if (currentState == DatasetType.State.DatasetProofSubmitted) {\\n                newState = DatasetType.State.MetadataApproved;\\n            }\\n        }\\n\\n        // Update the state if newState is not None (i.e., a valid transition)\\n        if (newState != DatasetType.State.None) {\\n            self.state = newState;\\n        }\\n    }\\n\\n    /// @notice Get the state of a dataset.\\n    /// @dev This function returns the current state of a dataset.\\n    /// @param self The dataset for which to retrieve the state.\\n    /// @return The current state of the dataset.\\n    function getDatasetState(\\n        DatasetType.Dataset storage self\\n    ) internal view returns (DatasetType.State) {\\n        return self.state;\\n    }\\n}\\n\",\"keccak256\":\"0x5c973fe363d8544a1a4eabde5a0fc24b0ca3b50e6575fecd90d390b89d7de627\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/library/proof/DatasetProofInnerLIB.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {DatasetStateMachineLIB} from \\\"src/v0.8/module/dataset/library/metadata/DatasetStateMachineLIB.sol\\\";\\n\\nlibrary DatasetProofInnerLIB {\\n    using DatasetStateMachineLIB for DatasetType.Dataset;\\n\\n    /// @notice Set the root hash of the data's Merkle tree for a dataset proof.\\n    /// @dev This function allows setting the root hash of the Merkle tree associated with a dataset proof.\\n    /// @param self The dataset proof to which the root hash will be set.\\n    /// @param _rootHash The root hash of the data's Merkle tree.\\n    function setRootHash(\\n        DatasetType.Proof storage self,\\n        bytes32 _rootHash\\n    ) internal {\\n        self.rootHash = _rootHash;\\n    }\\n\\n    /// @notice Get the root hash of the data's Merkle tree from a dataset proof.\\n    /// @dev This function allows getting the root hash of the Merkle tree associated with a dataset proof.\\n    /// @param self The dataset proof from which the root hash will be retrieved.\\n    /// @return The root hash of the data's Merkle tree.\\n    function getRootHash(\\n        DatasetType.Proof storage self\\n    ) internal view returns (bytes32) {\\n        return self.rootHash;\\n    }\\n\\n    /// @notice Set the completion status for all proof batches in a dataset proof.\\n    /// @dev This function allows setting the completion status for all proof batches in a dataset proof.\\n    /// @param self The dataset proof for which the completion status will be set.\\n    /// @param _completed The completion status to be set.\\n    function setAllCompleted(\\n        DatasetType.Proof storage self,\\n        bool _completed\\n    ) internal {\\n        self.allCompleted = _completed;\\n    }\\n\\n    /// @notice Get the completion status for all proof batches in a dataset proof.\\n    /// @dev This function allows getting the completion status for all proof batches in a dataset proof.\\n    /// @param self The dataset proof from which the completion status will be retrieved.\\n    /// @return The completion status for all proof batches.\\n    function getAllCompleted(\\n        DatasetType.Proof storage self\\n    ) internal view returns (bool) {\\n        return self.allCompleted;\\n    }\\n\\n    /// @notice Set a specific proof batch for a dataset proof.\\n    /// @dev This function allows setting a specific proof batch in a dataset proof.\\n    /// @param self The dataset proof to which the proof batch will be added.\\n    /// @param _leafHashes Array of leaf hashes representing items in the data.\\n    /// @param _leafIndex The sizes of the leaf hashes.\\n    function addProofBatch(\\n        DatasetType.Proof storage self,\\n        uint64[] memory _leafHashes,\\n        uint64 _leafIndex\\n    ) internal {\\n        uint64 index = _leafIndex;\\n        for (uint64 i; i < _leafHashes.length; i++) {\\n            require(index == self.leafHashesCount, \\\"index must match Count\\\");\\n            index++;\\n            self.leafHashesCount++;\\n            self.leafHashes.push(_leafHashes[i]);\\n        }\\n    }\\n\\n    /// @notice Get a specific proof batch from a dataset proof.\\n    /// @dev This function allows getting a specific proof batch from a dataset proof.\\n    /// @param self The dataset proof from which the proof batch will be retrieved.\\n    function getProof(\\n        DatasetType.Proof storage self,\\n        uint64 _index,\\n        uint64 _len\\n    ) internal view returns (uint64[] memory) {\\n        require(\\n            _index + _len <= self.leafHashes.length,\\n            \\\"Index+len out of bounds\\\"\\n        );\\n        require(\\n            self.leafHashesCount == self.leafHashes.length,\\n            \\\"length must matched\\\"\\n        );\\n        uint64[] memory result = new uint64[](_len);\\n        for (uint64 i = 0; i < _len; i++) {\\n            result[i] = self.leafHashes[i + _index];\\n        }\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x736319998a408d961dd0c8ae7bf8fd0d1f02c530c2be15bf2528e3772c488e2b\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/library/proof/DatasetProofLIB.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {DatasetProofInnerLIB} from \\\"src/v0.8/module/dataset/library/proof/DatasetProofInnerLIB.sol\\\";\\nimport {IDatasetsRequirement} from \\\"src/v0.8/interfaces/module/IDatasetsRequirement.sol\\\";\\nimport {ICarstore} from \\\"src/v0.8/interfaces/core/ICarstore.sol\\\";\\n\\n/// @title DatasetProofLIB Library,include add,get,verify.\\n/// @notice This library provides functions for managing proofs associated with datasets.\\nlibrary DatasetProofLIB {\\n    using DatasetProofInnerLIB for DatasetType.Proof;\\n\\n    /// @notice Submit a proof root for a dataset.\\n    /// @dev This function allows submitting a proof root for a dataset and emits the SubmitDatasetProof event.\\n    /// @param self The dataset to which the proof will be submitted.\\n    /// @param _dataType The type of the dataset proof.\\n    /// @param _rootHash The root hash of the dataset proofs.\\n    function addDatasetProofRoot(\\n        DatasetType.DatasetProof storage self,\\n        DatasetType.DataType _dataType,\\n        bytes32 _rootHash\\n    ) internal {\\n        DatasetType.Proof storage proof;\\n        if (_dataType == DatasetType.DataType.Source) {\\n            proof = self.sourceProof;\\n        } else {\\n            proof = self.mappingFilesProof;\\n        }\\n        if (proof.leafHashesCount == 0) {\\n            require(_rootHash.length == 32, \\\"length must matched\\\");\\n            proof.rootHash = _rootHash;\\n        }\\n    }\\n\\n    /// @notice Submit a proof for a dataset.\\n    /// @dev This function allows submitting a proof for a dataset and emits the SubmitDatasetProof event.\\n    /// @param self The dataset to which the proof will be submitted.\\n    /// @param _dataType The type of the dataset proof.\\n    /// @param _leafHashes The leaf hashes of the proof.\\n    /// @param _leafIndex The sizes of the leaf hashes.\\n    /// @param _size The total size of the leaf hashes.\\n    /// @param _allCompleted A boolean indicating if the proof is completed.\\n    function addDatasetProofBatch(\\n        DatasetType.DatasetProof storage self,\\n        DatasetType.DataType _dataType,\\n        uint64[] memory _leafHashes,\\n        uint64 _leafIndex,\\n        uint64 _size,\\n        bool _allCompleted\\n    ) internal {\\n        DatasetType.Proof storage proof;\\n        if (_dataType == DatasetType.DataType.Source) {\\n            proof = self.sourceProof;\\n        } else {\\n            proof = self.mappingFilesProof;\\n        }\\n\\n        if (proof.allCompleted == false && _allCompleted == true)\\n            proof.allCompleted = _allCompleted;\\n        proof.addProofBatch(_leafHashes, _leafIndex);\\n\\n        proof.datasetSize += _size;\\n    }\\n\\n    /// @notice Get the source dataset proof from the submitted dataset proof.\\n    /// @dev This function returns the root hash and array of leaf hashes of the Merkle proof for the source dataset.\\n    /// @param self The dataset from which to retrieve the source dataset proof.\\n    /// @param _dataType The type of the dataset proof.\\n    /// @param _index The starting index to get dataset proof..\\n    /// @param _len The length to get dataset proof..\\n    /// @return The car hashs of the dataset proof.\\n    function getDatasetProof(\\n        DatasetType.DatasetProof storage self,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) internal view returns (uint64[] memory) {\\n        DatasetType.Proof storage proof;\\n        if (_dataType == DatasetType.DataType.Source) {\\n            proof = self.sourceProof;\\n        } else {\\n            proof = self.mappingFilesProof;\\n        }\\n        return proof.getProof(_index, _len);\\n    }\\n\\n    /// @notice Get the source dataset proof from the submitted dataset proof.\\n    /// @dev This function returns the root hash and array of leaf hashes of the Merkle proof for the source dataset.\\n    /// @param self The dataset from which to retrieve the source dataset proof.\\n    /// @param _dataType The type of the dataset proof.\\n    /// @param _index The starting index to get dataset proof..\\n    /// @param _len The length to get dataset proof..\\n    /// @return The car hashs of the dataset proof.\\n    function getDatasetCars(\\n        DatasetType.DatasetProof storage self,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) internal view returns (uint64[] memory) {\\n        uint64[] memory hashes = getDatasetProof(self, _dataType, _index, _len);\\n        //TODO: hashes to cid\\n        return hashes;\\n    }\\n\\n    /// @notice Get the source dataset proof from the submitted dataset proof.\\n    /// @dev This function returns the root hash and array of leaf hashes of the Merkle proof for the source dataset.\\n    /// @param self The dataset from which to retrieve the source dataset proof.\\n    /// @param _dataType The type of the dataset proof.\\n    /// @return The count of the hashs of dataset proof.\\n    function getDatasetCount(\\n        DatasetType.DatasetProof storage self,\\n        DatasetType.DataType _dataType\\n    ) internal view returns (uint64) {\\n        DatasetType.Proof storage proof;\\n        if (_dataType == DatasetType.DataType.Source) {\\n            proof = self.sourceProof;\\n        } else {\\n            proof = self.mappingFilesProof;\\n        }\\n        return proof.leafHashesCount;\\n    }\\n\\n    /// @notice Get the source dataset proof from the submitted dataset proof.\\n    /// @dev This function returns the root hash and array of leaf hashes of the Merkle proof for the source dataset.\\n    /// @param self The dataset from which to retrieve the source dataset proof.\\n    /// @param _dataType The type of the dataset proof.\\n    function getDatasetSize(\\n        DatasetType.DatasetProof storage self,\\n        DatasetType.DataType _dataType\\n    ) internal view returns (uint64) {\\n        DatasetType.Proof storage proof;\\n        if (_dataType == DatasetType.DataType.Source) {\\n            proof = self.sourceProof;\\n        } else {\\n            proof = self.mappingFilesProof;\\n        }\\n        return proof.datasetSize;\\n    }\\n\\n    /// @notice Get submitter of dataset's proofs.\\n    /// @param self The dataset from which to retrieve the source dataset proof.\\n    /// @return The address of submitter\\n    function getDatasetSubmitter(\\n        DatasetType.DatasetProof storage self\\n    ) internal view returns (address) {\\n        return self.proofSubmitter;\\n    }\\n\\n    /// @notice Check if a dataset has submitter\\n    /// @param self The dataset from which to retrieve the source dataset proof.\\n    /// @param submitter The address being compared.\\n    function isDatasetSubmitter(\\n        DatasetType.DatasetProof storage self,\\n        address submitter\\n    ) internal view returns (bool) {\\n        if (submitter == self.proofSubmitter) {\\n            return true;\\n        }\\n        return false;\\n    }\\n\\n    /// @notice Check if a dataset proof has completed\\n    /// @param self The dataset from which to retrieve the source dataset proof.\\n    /// @param _dataType The type of the dataset proof.\\n    function isDatasetProofallCompleted(\\n        DatasetType.DatasetProof storage self,\\n        DatasetType.DataType _dataType\\n    ) internal view returns (bool) {\\n        if (_dataType == DatasetType.DataType.Source) {\\n            return self.sourceProof.allCompleted;\\n        } else {\\n            return self.mappingFilesProof.allCompleted;\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x50fa437bb65dd0a80358f1ff13b986a967a366d718c29fb5a65f23b57f2f1911\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/errors/Errors.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {MatchingType} from \\\"src/v0.8/types/MatchingType.sol\\\";\\n\\nlibrary Errors {\\n    /// @notice commmon errors\\n    error ParamLengthMismatch(uint256 _expectedLength, uint256 _actualLength);\\n\\n    /// @notice car errors\\n    error CarNotExist(uint64 _id);\\n    error CarAlreadyExists(uint64 _id, bytes32 _hash);\\n    error ReplicaNotExist(uint64 _id, uint64 _matchingId);\\n    error ReplicaAlreadyExists(uint64 _id, uint64 _matchingId);\\n    error ReplicaFilecoinClaimIdExists(uint64 _id, uint64 _matchingId);\\n    error InvalidReplicaState(uint64 _id, uint64 _matchingId);\\n    error InvalidReplicaFilecoinDealState(uint64 _id, uint64 _filecoinId);\\n\\n    /// @notice Dataset errors\\n    error DatasetMetadataNotExist(string accessMethod);\\n    error DatasetMetadataAlreadyExist(string accessMethod);\\n    error InvalidDatasetState(uint64 datasetId);\\n    error InvalidDatasetProofsSubmitter(uint64 datasetId, address submitter);\\n\\n    /// @notice matching errors\\n    error InvalidMatchingState(\\n        uint64 matchingId,\\n        MatchingType.State expectedState,\\n        MatchingType.State actualState\\n    );\\n    error NotMatchingInitiator(\\n        uint64 matchingId,\\n        address expectedInitiator,\\n        address actualInitiator\\n    );\\n\\n    error NotMatchingsTarget(uint64 _matchingId, address actualAddress);\\n    error NotMatchingsBids(uint64 _matchingId, address actualAddress);\\n\\n    /// @notice storage errors\\n    error StorageDealNotSuccessful(uint64 _claimId);\\n    error StorageClaimIdAlreadySet(\\n        uint64 _matchingId,\\n        bytes32 _cid,\\n        uint64 _claimId\\n    );\\n\\n    /// @notice datacap errors\\n    error AllocatedDatacapExceedsTotalRequirement(\\n        uint64 _allocatedDatacap,\\n        uint64 _totalDatacapAllocationRequirement\\n    );\\n    error AvailableDatacapExceedAllocationThreshold(\\n        uint64 availableDatacap,\\n        uint64 allocationThreshold\\n    );\\n    error NextDatacapAllocationInvalid(uint64 _matchingId);\\n    error StoredExceedsAllocatedDatacap(\\n        uint64 reallyStored,\\n        uint64 allocatedDatacap\\n    );\\n    error NotCompliantRuleMaxReplicasPerSP(address winner, bytes32 cid);\\n    error NotCompliantRuleMatchingTargetMeetsFilPlusRequirements(\\n        uint64 matchingId,\\n        address winner\\n    );\\n    error TestCase(uint64 code);\\n}\\n\",\"keccak256\":\"0xac984a7eb594a4810e085dad2ad264307e9c657c652023a821f3ab901850bd11\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/events/DatasetsEvents.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nlibrary DatasetsEvents {\\n    /// @notice Event emitted when metadata is approved for a dataset.\\n    event DatasetMetadataApproved(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when metadata is rejected for a dataset.\\n    event DatasetMetadataRejected(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when a dataset is approved.\\n    event DatasetApproved(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when a dataset is rejected.\\n    event DatasetRejected(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when metadata is submitted for a new dataset.\\n    event DatasetMetadataSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when replica requirement is submitted for a new dataset.\\n    event DatasetReplicaRequirementSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a dataset has not enough collateral.\\n    event CollateralNotEnough(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a dataset has enough collateral.\\n    event CollateralEnough(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a proof is submitted for a dataset.\\n    event DatasetProofSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a dataset is verified.\\n    event DatasetChallengeProofsSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _verifier\\n    );\\n    event LogMessage(address indexed sender, string message);\\n}\\n\",\"keccak256\":\"0xaa9544e84d8b8ea3af08a3211926c3f480e59a7ecda9df36459ea3cf6ce87742\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/CarstoreModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n///interface\\nimport {IFilecoin} from \\\"src/v0.8/interfaces/core/IFilecoin.sol\\\";\\nimport {ICarstore} from \\\"src/v0.8/interfaces/core/ICarstore.sol\\\";\\n///shared\\nimport {RolesModifiers} from \\\"src/v0.8/shared/modifiers/RolesModifiers.sol\\\";\\nimport {FilplusModifiers} from \\\"src/v0.8/shared/modifiers/FilplusModifiers.sol\\\";\\nimport {Errors} from \\\"src/v0.8/shared/errors/Errors.sol\\\";\\n///types\\nimport {CarReplicaType} from \\\"src/v0.8/types/CarReplicaType.sol\\\";\\nimport {FilecoinType} from \\\"src/v0.8/types/FilecoinType.sol\\\";\\n\\n/// @title storages\\n/// @dev Manages the storage of matched data after successful matching with Filecoin storage deals.\\ncontract CarstoreModifiers is RolesModifiers, FilplusModifiers {\\n    /// @dev Modifier to ensure that a car with the given ID exists.\\n    modifier onlyCarExist(ICarstore _carstore, uint64 _id) {\\n        if (!_carstore.hasCar(_id)) {\\n            revert Errors.CarNotExist(_id);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a car with the given hash does not exist.\\n    modifier onlyCarNotExist(ICarstore _carstore, bytes32 _hash) {\\n        if (_carstore.hasCarHash(_hash)) {\\n            revert Errors.CarAlreadyExists(_carstore.getCarId(_hash), _hash);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica of a car exists.\\n    modifier onlyCarReplicaExist(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) {\\n        if (!_carstore.hasCarReplica(_id, _matchingId)) {\\n            revert Errors.ReplicaNotExist(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica of a car not exists.\\n    modifier onlyCarReplicaNotExist(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) {\\n        if (_carstore.hasCarReplica(_id, _matchingId)) {\\n            revert Errors.ReplicaAlreadyExists(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica of a car exists.\\n    modifier onlyUnsetCarReplicaFilecoinClaimId(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) {\\n        if (_carstore.getCarReplicaFilecoinClaimId(_id, _matchingId) != 0) {\\n            revert Errors.ReplicaFilecoinClaimIdExists(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica state before function do.\\n    modifier onlyCarReplicaState(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId,\\n        CarReplicaType.State _state\\n    ) {\\n        if (_state != _carstore.getCarReplicaState(_id, _matchingId)) {\\n            revert Errors.InvalidReplicaState(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica filecoin deal state before function do.\\n    modifier onlyCarReplicaFilecoinDealState(\\n        ICarstore _carstore,\\n        IFilecoin _filecoin,\\n        uint64 _id,\\n        uint64 _claimId,\\n        FilecoinType.DealState _filecoinDealState\\n    ) {\\n        if (\\n            _filecoinDealState !=\\n            _filecoin.getReplicaDealState(_carstore.getCarHash(_id), _claimId)\\n        ) {\\n            revert Errors.InvalidReplicaFilecoinDealState(_id, _claimId);\\n        }\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf6a01638b6d8ca801f9af67cf728e40038ab5dc0d3374899243fdfc4d8a97f3c\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/CommonModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n/// @title ModifierCommon\\ncontract CommonModifiers {\\n    /// @dev Modifier to check if an ID is not zero.\\n    modifier onlyNotZero(uint64 _value) {\\n        require(_value != 0, \\\"Value must not be zero\\\");\\n        _;\\n    }\\n\\n    /// @dev Modifier to check if an address is not zero\\n    modifier onlyNotZeroAddress(address _address) {\\n        require(address(0) != _address, \\\"Address must not be zero\\\");\\n        _;\\n    }\\n\\n    /// @dev Modifier to check the sender's address\\n    modifier onlyAddress(address allowedAddress) {\\n        require(msg.sender == allowedAddress, \\\"Only allowed address can call\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0x724b2ab7816874ad6285ec7bd538f1ee1e44984c1190b1d0a8b1be33620df029\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/DatasetsModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n///interface\\nimport {IDatasets} from \\\"src/v0.8/interfaces/module/IDatasets.sol\\\";\\nimport {IDatasetsProof} from \\\"src/v0.8/interfaces/module/IDatasetsProof.sol\\\";\\n///shared\\nimport {CarstoreModifiers} from \\\"src/v0.8/shared/modifiers/CarstoreModifiers.sol\\\";\\nimport {Errors} from \\\"src/v0.8/shared/errors/Errors.sol\\\";\\n\\n///types\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\n\\n/// @title storages\\n/// @dev Manages the storage of matched data after successful matching with Filecoin storage deals.\\ncontract DatasetsModifiers is CarstoreModifiers {\\n    /// @dev Modifier to ensure that a dataset metadata  with the given accessMethod exists.\\n    modifier onlyDatasetMetadataExsits(\\n        IDatasets _datasets,\\n        string memory _accessMethod\\n    ) {\\n        if (!_datasets.hasDatasetMetadata(_accessMethod)) {\\n            revert Errors.DatasetMetadataNotExist(_accessMethod);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a dataset metadata with the given accessMethod not exists.\\n    modifier onlyDatasetMetadataNotExsits(\\n        IDatasets _datasets,\\n        string memory _accessMethod\\n    ) {\\n        if (_datasets.hasDatasetMetadata(_accessMethod)) {\\n            revert Errors.DatasetMetadataAlreadyExist(_accessMethod);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that dataset has the special state\\n    modifier onlyDatasetState(\\n        IDatasets _datasets,\\n        uint64 _datasetId,\\n        DatasetType.State _state\\n    ) {\\n        if (_state != _datasets.getDatasetState(_datasetId)) {\\n            revert Errors.InvalidDatasetState(_datasetId);\\n        }\\n        _;\\n    }\\n\\n    /// @notice The sender of the dataset proof transaction must be the submitter of the proof.\\n    modifier onlyDatasetProofSubmitterOrSubmitterNotExsits(\\n        IDatasetsProof _datasetsProof,\\n        uint64 _datasetId,\\n        address _sender\\n    ) {\\n        if (\\n            _datasetsProof.getDatasetProofCount(\\n                _datasetId,\\n                DatasetType.DataType.Source\\n            ) !=\\n            0 ||\\n            _datasetsProof.getDatasetProofCount(\\n                _datasetId,\\n                DatasetType.DataType.MappingFiles\\n            ) !=\\n            0\\n        ) {\\n            if (\\n                _datasetsProof.isDatasetProofSubmitter(_datasetId, _sender) !=\\n                true\\n            ) {\\n                revert Errors.InvalidDatasetProofsSubmitter(\\n                    _datasetId,\\n                    _sender\\n                );\\n            }\\n        }\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf28c27366123751064e0f13b4d7ac9e03abd7da9d6fa4137ee23563b1af2c8da\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/FilplusModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n///interface\\nimport {IFilplus} from \\\"src/v0.8/interfaces/core/IFilplus.sol\\\";\\n///shared\\nimport {CommonModifiers} from \\\"src/v0.8/shared/modifiers/CommonModifiers.sol\\\";\\n\\n/// @title storages\\n/// @dev Manages the storage of matched data after successful matching with Filecoin storage deals.\\ncontract FilplusModifiers is CommonModifiers {\\n\\n}\\n\",\"keccak256\":\"0x7bbe3eebb23a2b4315765aff340b2a38bdbde846734ded1a983536075ce92548\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/RolesModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {CommonModifiers} from \\\"src/v0.8/shared/modifiers/CommonModifiers.sol\\\";\\n\\n/// @title RolesModifier\\ncontract RolesModifiers is CommonModifiers {\\n    modifier onlyRole(IRoles _roles, bytes32 _role) {\\n        // roles.checkRole(_role);\\n        require(\\n            _roles.hasRole(_role, msg.sender),\\n            \\\"Only allowed role can call\\\"\\n        );\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0x478efe3520eedf7d6cde667b377bdf4d2a721616c7f2e66603d364e51f02ad3f\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/CarReplicaType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n/// @title CarReplicaType Library\\n/// @notice This library defines data structures and enums related to car replicas and their states.\\n/// @dev This library provides enums for different states and events related to car replicas.\\nlibrary CarReplicaType {\\n    /// @notice Enum representing the possible states of a car replica.\\n    enum State {\\n        None, //justify if Replica exsits\\n        Matched, // Replica has been matched for storage\\n        Stored, // Replica has been successfully stored\\n        StorageFailed, // The filecoin claim id's verification failed.\\n        Slashed, // The filecoin storage has been slashed.\\n        Expired // The filecoin storage has expired.\\n    }\\n\\n    /// @notice Enum representing the events associated with car replicas.\\n    enum Event {\\n        MatchingFailed, // Matching for a replica has been failed\\n        MatchingCompleted, // Matching for a replica has been completed\\n        StorageCompleted, // Storage for a replica has been completed\\n        StorageFailed, // Storage for a replica has failed\\n        StorageDealExpired, // Storage for a replica has expired\\n        StorageSlashed // Storage for a replica has been slashed\\n    }\\n\\n    /// @notice Struct representing a car replica.\\n    struct Replica {\\n        uint64 matchingId; // The matchingId associated with the replica.\\n        uint64 filecoinClaimId; // ID of the Filecoin claim associated with the replica's storage\\n        State state; // Current state of the replica\\n    }\\n\\n    /// @notice Struct representing a car and its associated replicas.\\n    struct Car {\\n        uint64 id; // The id associated with the car.\\n        uint64 datasetId; // Index of approved dataset\\n        uint64 size; //car size\\n        mapping(uint64 => uint16) replicaIndex; // Mapping from matchingId => Replica index\\n        Replica[] replicas; // replicas associated with the car.\\n    }\\n}\\n\",\"keccak256\":\"0xce0e57f8acd81e6dbe4c6d7efddad660792420c0c0cca028d040f82749506aa0\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/DatasetType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {GeolocationType} from \\\"src/v0.8/types/GeolocationType.sol\\\";\\n\\n/// @title DatasetType Library\\n/// @notice This library defines data structures for managing datasets, their metadata, states, and events.\\nlibrary DatasetType {\\n    /// @notice Enum representing the possible states of a dataset.\\n    enum State {\\n        None, // No specific state.\\n        MetadataSubmitted, // Metadata submitted but not approved.\\n        MetadataApproved, // Metadata has been approved.\\n        MetadataRejected, // Metadata submission has been rejected.\\n        CollateralNotEnough, // Not enough collateral when submit proof or challenge proof.\\n        DatasetProofSubmitted, // Proof of dataset submitted.\\n        DatasetApproved // Dataset has been approved.\\n    }\\n\\n    /// @notice Enum representing the events related to dataset management.\\n    enum Event {\\n        SubmitMetadata, // Metadata submission event.\\n        MetadataApproved, // Metadata approval event.\\n        MetadataRejected, // Metadata rejection event.\\n        NotEnoughCollateral, // Dataset not enough collateral event.\\n        EnoughCollateral, // Dataset enough collateral event.\\n        SubmitDatasetProof, // Dataset proof submission event.\\n        DatasetApproved, // Dataset approval event.\\n        DatasetRejected // Dataset rejection event.\\n    }\\n\\n    /// @notice Enum representing the type of data associated with a matching.\\n    enum DataType {\\n        Source, // Matching is associated with a dataset\\n        MappingFiles // Matching is associated with mapping files\\n    }\\n\\n    /// @notice Struct representing metadata associated with a dataset.\\n    struct Metadata {\\n        string title; // Title of the dataset.\\n        string industry; // Industry category of the dataset.\\n        string name; // Name of the dataset.\\n        string description; // Description of the dataset.\\n        string source; // Source of the dataset.\\n        string accessMethod; // Method of accessing the dataset (e.g., URL, API).\\n        address submitter; // Address of the dataset's submitter.\\n        uint64 createdBlockNumber; // Block number at which the dataset was created.\\n        uint64 sizeInBytes; // Size of the dataset in bytes.\\n        bool isPublic; // Boolean indicating if the dataset is public.\\n        uint64 version; // Version number of the dataset.\\n    }\\n\\n    struct Dataset {\\n        Metadata metadata;\\n        State state; // Current state of the dataset.\\n    }\\n\\n    /// @notice Struct representing proofs associated with a dataset challenge submitted by reviewers.\\n    struct Proof {\\n        uint64 datasetSize;\\n        bytes32 rootHash; // Root hash of the data's Merkle tree.\\n        bool allCompleted;\\n        uint64 leafHashesCount;\\n        uint64[] leafHashes; // Proof associated with the dataset.\\n    }\\n\\n    struct DatasetProof {\\n        //proof\\n        string mappingFilesAccessMethod; // Method of accessing data (e.g., URL, API).\\n        Proof sourceProof; // Proof associated with the dataset.\\n        Proof mappingFilesProof; // Note:mappingFiles includes mappingFiles and CarMerkleTree,Proof associated with the dataset.\\n        address proofSubmitter; // Address of the dataset proof's submitter.\\n    }\\n\\n    /// @notice Struct representing proofs associated with a dataset challenge submitted by reviewers.\\n    struct Challenge {\\n        bytes32 leaf;\\n        bytes32[] siblings;\\n        uint32 path;\\n    }\\n\\n    /// @notice Struct representing verification details of a dataset.\\n    struct ChallengeProof {\\n        uint64 randomSeed; // Random seed used for verification. This seed determines which nodes need to be challenged.\\n        Challenge[] challenges; // Merkle proof provided by the auditor to support their challenge.\\n    }\\n\\n    struct DatasetChallengeProof {\\n        // challenges\\n        uint16 challengesCount;\\n        mapping(address => ChallengeProof) challengeProofs; // Address of the auditor who submits challenges.\\n        address[] auditors; // Records of auditors submitting verifications.\\n    }\\n\\n    /// @notice The struct describes the storage requirements specified by the client.\\n    struct ReplicaRequirement {\\n        address[] dataPreparers; // The client can specify DP or choose not to specify\\n        address[] storageProviders; //The client can specify SP or choose not to specify.\\n        GeolocationType.Geolocation geolocations; // Geolocation requested by the client.\\n    }\\n\\n    struct DatasetReplicasRequirement {\\n        ReplicaRequirement[] replicasRequirement; // Replica requirements requested by the client.\\n    }\\n}\\n\",\"keccak256\":\"0x9108caabc6f94898eae01009a91c9f2f728cb99d7cf80358d4c3b1e4058997f4\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/EscrowType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title EscrowType Library\\n/// @notice This library defines escrow type within the system.\\nlibrary EscrowType {\\n    /// @notice Enum escrow object types.\\n    enum Type {\\n        DatacapCollateral, // The storage client collateral.\\n        DatacapChunkCollateral, // The storage provider collateral.\\n        DataAuditCollateral, // The data auditor collateral, for dispute\\n        DataPrepareCollateral, // The data preparer collateral,for dispute\\n        DataAuditFee, // The data auditor calculate fees.\\n        DataPrepareFeeByClient, // The data preparer calculate fees paid by storage client.\\n        DataPrepareFeeByProvider // The data preparer calculate fees paid by storage provider.\\n    }\\n\\n    /// @notice Enum representing the events related to collateral management.\\n    enum CollateralEvent {\\n        SyncBurn, // Escrow synchronize collateral burn event.\\n        SyncCollateral // Escrow synchronize collateral event.\\n    }\\n\\n    /// @notice Enum representing the events related to payment management.\\n    enum PaymentEvent {\\n        SyncPaymentRefund, // Escrow synchronize payment refund event.\\n        SyncPaymentCollateral, // Escrow synchronize payment collateral event.\\n        SyncPaymentBeneficiaries // Escrow synchronize payment beneficiaries list.\\n    }\\n\\n    /// @notice Struct the beneficiary of escrow\\n    struct Fund {\\n        uint256 total; // Total amount in fund account\\n        uint256 lock; // Lock amount in fund account for payment beneficiaries\\n        uint256 collateral; // Collateral amount in fund account for withdraw and punishment\\n        uint256 burned; // burned amount in fund account\\n        uint64 createdBlockNumber; // Fund account created block number\\n    }\\n\\n    /// @notice Struct the escrow\\n    struct Escrow {\\n        Fund owner; // fund owner\\n        address[] beneficiariesList; // Retrieves beneficiaries list\\n        mapping(address beneficiary => Fund) beneficiaries; // Beneficiaries information\\n    }\\n}\\n\",\"keccak256\":\"0xf2a79be6903d2de33f8b87f0ee14a6f5b7abe7d88fb0779f2ebc507933a314b8\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/FilecoinType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nlibrary FilecoinType {\\n    /// @notice Enum representing the possible states of a Filecoin storage deal.\\n    enum DealState {\\n        Stored, // The filecoin deal's verification was successful.\\n        StorageFailed, // The filecoin deal's verification failed.\\n        Slashed, // The filecoin deal has been slashed.\\n        Expired // The filecoin deal has expired.\\n    }\\n\\n    /// @notice filecoin network type\\n    enum Network {\\n        Mainnet,\\n        CalibrationTestnet,\\n        EndIdentifier\\n    }\\n}\\n\",\"keccak256\":\"0xe4a9b3fe32517cb0c7492eb858e573419d0b323e7735e31cf318381340793f0d\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/GeolocationType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n/// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n/// @title GeolocationType Library\\n/// @notice This library defines common data structures used for geolocation information.\\n/// @dev This library provides structs to represent geolocation details.\\nlibrary GeolocationType {\\n    /// @notice Struct representing geolocation information.\\n    struct Geolocation {\\n        uint16 regionCode; // Code representing the region\\n        uint16 countryCode; // Code representing the country\\n        uint32[] cityCodes; // Code representing the city\\n    }\\n}\\n\",\"keccak256\":\"0xe8eb4cc7d0e2a6390faa4c3d0634781b768440ea8cc5ce65aaa842bf17cf347f\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/MatchingType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\n\\n/// @title MatchingType Library\\n/// @notice This library defines data structures and enums related to dataset matching and their states.\\nlibrary MatchingType {\\n    /// @notice Enum representing the possible states of a dataset matching.\\n    enum State {\\n        None,\\n        Published, // Matching is published and open for bids\\n        InProgress, // Matching is currently in progress\\n        Paused, // Matching is paused\\n        Closed, // Matching is closed and no longer accepting bids\\n        Completed, // Matching is completed\\n        Cancelled, // Matching is cancelled\\n        Failed // Matching has failed\\n    }\\n\\n    /// @notice Enum representing the events associated with dataset matching.\\n    enum Event {\\n        Publish, // Matching is published\\n        FilPlusCheckSuccessed, // Fil+ check succeeded\\n        FilPlusCheckFailed, // Fil+ check failed\\n        Pause, // Matching is paused\\n        PauseExpired, // Pause period expired\\n        Resume, // Matching is resumed\\n        Cancel, // Matching is cancelled\\n        Close, // Matching is closed\\n        HasWinner, // Matching has a winner\\n        NoWinner // No winner in the matching\\n    }\\n\\n    /// @notice Enum representing the rules for determining the winning bid.\\n    enum BidSelectionRule {\\n        HighestBid, // Note: Auction, Winner is determined by the highest bid\\n        LowestBid, // Note: Tender, Winner is determined by the lowest bid\\n        ImmediateAtLeast, // Note: Auction Immediate winning condition: Bid amount is at least the threshold\\n        ImmediateAtMost // Note: Render Immediate winning condition: Bid amount is at most the threshold\\n    }\\n\\n    /// @notice Struct representing a dataset matching.\\n    struct Matching {\\n        BidSelectionRule bidSelectionRule;\\n        uint64 biddingDelayBlockCount; // Number of blocks to delay bidding\\n        uint64 biddingPeriodBlockCount; // Number of blocks for bidding period\\n        uint64 storageCompletionPeriodBlocks; // Number of blocks for storage period, representing the duration of the storage completion time period.\\n        uint256 biddingThreshold; // Threshold for bidding\\n        uint64 createdBlockNumber; // Block number at which the matching was created\\n        string additionalInfo; // Additional information about the matching\\n        address initiator; // Address of the initiator of the matching\\n        uint64 pausedBlockCount; // Number of blocks to paused\\n        State state; // Current state of the matching\\n    }\\n\\n    /// @notice Struct representing the target of a matching.\\n    struct MatchingTarget {\\n        uint64 datasetId; // ID of the dataset associated with the matching\\n        uint64[] cars; // Array of car IDs associated with the matching\\n        uint64 size; // Size of the matching target\\uff0cNote:total datacap size that this matching need allocate\\n        DatasetType.DataType dataType; // Type of data associated with the matching\\n        uint64 associatedMappingFilesMatchingID; // ID of the matching associated with mapping files\\n        uint16 replicaIndex; // index of dataset's replica\\n    }\\n\\n    /// @notice Struct representing a bid in a matching.\\n    struct Bid {\\n        address bidder; // Address of the bidder\\n        uint256 bid; // Bid amount\\n        bool complyFilplusRule; //If the bidder comply with filplus rules\\n    }\\n\\n    /// @notice Struct representing a bids of matching.\\n    struct MatchingBids {\\n        Bid[] bids; // Array of bids in the matching\\n        address winner; // Address of the winner in the matching\\n    }\\n}\\n\",\"keccak256\":\"0x3b6918e967adea47fceea5d699a40f86c24c9417379cd387071ee96bb246f7dc\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/RolesType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title RolesType Library\\n/// @notice This library defines constants for different roles within the system.\\nlibrary RolesType {\\n    /// @notice Default admin role\\n    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n    /// @notice Bytes32 constant representing the role of a storage provider.\\n    bytes32 public constant STORAGE_PROVIDER = keccak256(\\\"SP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a retrieve provider.\\n    bytes32 public constant RETRIEVE_PROVIDER = keccak256(\\\"RP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a compute provider.\\n    bytes32 public constant COMPUTE_PROVIDER = keccak256(\\\"CP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a metadata dataset provider.\\n    bytes32 public constant METADATA_DATASET_PROVIDER = keccak256(\\\"MDP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a dataset provider.\\n    bytes32 public constant DATASET_PROVIDER = keccak256(\\\"DP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a metadata dataset auditor.\\n    bytes32 public constant METADATA_DATASET_AUDITOR = keccak256(\\\"MDA\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a dataset auditor.\\n    bytes32 public constant DATASET_AUDITOR = keccak256(\\\"DA\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a reviewer client.\\n    bytes32 public constant REVIEWER_CLIENT = keccak256(\\\"RC\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a compute client.\\n    bytes32 public constant COMPUTE_CLIENT = keccak256(\\\"CC\\\");\\n}\\n\",\"keccak256\":\"0xed26c066df50161142fb4dda28e66d23a7f1d85cb1bdfd7a3b06187d96ad9bd1\",\"license\":\"GPL-3.0-or-later\"}},\"version\":1}",
    "bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161362361004c6000396000818161097e015281816109be01528181610c3501528181610c750152610cf101526136236000f3fe60806040526004361061011b5760003560e01c80631026a71314610120578063153ff28414610156578063192e9653146101835780632714b234146101b05780632a583c11146101dd5780632e70cce8146101ff578063358764761461021f5780633659cfe61461023f57806338835e731461025f578063392f5f64146102725780634a23e9d81461029f5780634f1ef286146102bf57806352d1902d146102d257806365a61a9d146102e75780636cbc773614610307578063795053d31461032757806383f245001461035457806386de143c14610374578063aaf10f4214610394578063c6b157d0146103a9578063d0720403146103c9578063e2fdcc17146103e9578063e94a673414610409578063fac1b91114610429575b600080fd5b34801561012c57600080fd5b5061014061013b3660046121ca565b610449565b60405161014d919061222b565b60405180910390f35b34801561016257600080fd5b50610176610171366004612251565b6104ec565b60405161014d919061228d565b34801561018f57600080fd5b506101a361019e36600461229b565b61052a565b60405161014d9190612362565b3480156101bc57600080fd5b506101d06101cb366004612373565b6105f7565b60405161014d9190612394565b3480156101e957600080fd5b506101fd6101f836600461243b565b610707565b005b34801561020b57600080fd5b506101d061021a366004612373565b61072c565b34801561022b57600080fd5b506101fd61023a366004612524565b610829565b34801561024b57600080fd5b506101fd61025a3660046125c3565b610974565b6101fd61026d366004612373565b610a3c565b34801561027e57600080fd5b50606754610292906001600160a01b031681565b60405161014d919061261c565b3480156102ab57600080fd5b506101406102ba366004612251565b610bdd565b6101fd6102cd3660046126c1565b610c2b565b3480156102de57600080fd5b506101d0610ce4565b3480156102f357600080fd5b5061014061030236600461270e565b610d41565b34801561031357600080fd5b50610176610322366004612251565b610d69565b34801561033357600080fd5b50606654610347906001600160a01b031681565b60405161014d919061274a565b34801561036057600080fd5b506101fd61036f366004612373565b610db7565b34801561038057600080fd5b5061017661038f366004612251565b611192565b3480156103a057600080fd5b506103476111e0565b3480156103b557600080fd5b506101fd6103c43660046127a9565b6111ef565b3480156103d557600080fd5b506101406103e436600461282c565b61151e565b3480156103f557600080fd5b50606854610292906001600160a01b031681565b34801561041557600080fd5b50610347610424366004612373565b6115d8565b34801561043557600080fd5b506101a361044436600461229b565b611606565b600082806001600160401b031660000361047e5760405162461bcd60e51b81526004016104759061288f565b60405180910390fd5b60005b8351816001600160401b031610156104df576104bf8585836001600160401b0316815181106104b2576104b261289f565b602002602001015161151e565b6104cd5760009250506104e5565b806104d7816128cb565b915050610481565b50600191505b5092915050565b600082806001600160401b03166000036105185760405162461bcd60e51b81526004016104759061288f565b6105228484610d69565b949350505050565b606084806001600160401b03166000036105565760405162461bcd60e51b81526004016104759061288f565b6001600160401b0386166000908152606560205260409020606a546001600160a01b0316639a18ccdc61058b83898989611648565b6040518263ffffffff1660e01b81526004016105a7919061293f565b600060405180830381865afa1580156105c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105ec91908101906129d0565b979650505050505050565b6000806106038361072c565b606854606b5460405163293a9a8160e11b81529293506000926001600160a01b03928316926341279ee2928592911690635275350290610647908a9060040161228d565b602060405180830381865afa158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190612a15565b876040518463ffffffff1660e01b81526004016106a793929190612a7a565b602060405180830381865afa1580156106c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e89190612aa2565b9050600081831115610522576106fe8284612ac3565b95945050505050565b61071586868686868661167f565b80156107245761072486610db7565b505050505050565b600081806001600160401b03166000036107585760405162461bcd60e51b81526004016104759061288f565b600160281b600061077182670de0b6b3a7640000612aec565b606c546040516314a41d8560e01b81526001600160401b0392909216925082916001600160a01b03909116906314a41d85906107b190899060040161228d565b602060405180830381865afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190612b2b565b61ffff16610801876000611192565b61080b9190612b4c565b6001600160401b031661081e9190612b81565b935050505b50919050565b600054610100900460ff16158080156108495750600054600160ff909116105b8061086a57506108583061189f565b15801561086a575060005460ff166001145b6108865760405162461bcd60e51b815260040161047590612be7565b6000805460ff1916600117905580156108a9576000805461ff0019166101001790555b606680546001600160a01b03199081166001600160a01b038b8116919091179092556067805482168a8416179055606880548216858416179055606980548216898416179055606a80548216888416179055606b80548216878416179055606c805490911691851691909117905561091f6118ae565b801561096a576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061096190600190612c0b565b60405180910390a15b5050505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109bc5760405162461bcd60e51b815260040161047590612c50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109ee6118d7565b6001600160a01b031614610a145760405162461bcd60e51b815260040161047590612c97565b610a1d816118f3565b60408051600080825260208201909252610a3991839190611987565b50565b346000610a48836105f7565b905080821015610a6a5760405162461bcd60e51b815260040161047590612cdb565b606854606b5460405163293a9a8160e11b81526001600160a01b039283169263ce37bde792869260009290911690635275350290610aac908a9060040161228d565b602060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190612a15565b87866040518663ffffffff1660e01b8152600401610b0e9493929190612ceb565b6000604051808303818588803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b5050606b546040516351ff7c3360e01b81526001600160a01b0390911693506351ff7c339250610b709150869060040161228d565b600060405180830381600087803b158015610b8a57600080fd5b505af1158015610b9e573d6000803e3d6000fd5b50506040513392506001600160401b03861691507f91ab6437c1cfa33bb7fffebb2dd9bd1a5ac7fda244d93c493a8066f5c2e3a95a90600090a3505050565b600082806001600160401b0316600003610c095760405162461bcd60e51b81526004016104759061288f565b6001600160401b03841660009081526065602052604090206106fe8185611a69565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c735760405162461bcd60e51b815260040161047590612c50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ca56118d7565b6001600160a01b031614610ccb5760405162461bcd60e51b815260040161047590612c97565b610cd4826118f3565b610ce082826001611987565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d2e5760405162461bcd60e51b815260040161047590612d75565b506000805160206135a783398151915290565b6001600160401b03821660009081526065602052604081206105228184611a9f565b92915050565b600082806001600160401b0316600003610d955760405162461bcd60e51b81526004016104759061288f565b6001600160401b03841660009081526065602052604090206106fe8185611acb565b6001600160401b0381166000908152606560205260409020600381015460ff168015610de75750600781015460ff165b15610ce0576069546001600160a01b0316639eaa0818610e08836001611b0f565b610e13846000611b0f565b6040518363ffffffff1660e01b8152600401610e30929190612d85565b602060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190612dab565b610e8d5760405162461bcd60e51b815260040161047590612e00565b6000610e988361072c565b606854606b5460405163293a9a8160e11b815292935083926001600160a01b03928316926341279ee292600092911690635275350290610edc908a9060040161228d565b602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190612a15565b876040518463ffffffff1660e01b8152600401610f3c93929190612a7a565b602060405180830381865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190612aa2565b101561102057606b546040516331bd0ce360e11b81526001600160a01b039091169063637a19c690610fb390869060040161228d565b600060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b50506040513392506001600160401b03861691507f20c5250c87b6e83c75d68be97e032e2e4c7529480c693fdc61d14159d9d7188f90600090a3505050565b606854606b5460405163293a9a8160e11b81526001600160a01b03928316926364000be09260009291169063527535029061105f90899060040161228d565b602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190612a15565b8660016040518563ffffffff1660e01b81526004016110c29493929190612e3e565b600060405180830381600087803b1580156110dc57600080fd5b505af11580156110f0573d6000803e3d6000fd5b5050606b54604051632bab6c2560e11b81526001600160a01b039091169250635756d84a915061112490869060040161228d565b600060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b50506040513392506001600160401b03861691507f8ca70633a4a65cb7fe7f937a289856fb4bf153ecaee15b8050ccf12c3684350a90600090a35b505050565b600082806001600160401b03166000036111be5760405162461bcd60e51b81526004016104759061288f565b6001600160401b03841660009081526065602052604090206106fe8185611b0f565b60006111ea6118d7565b905090565b60405163365e3b9b60e11b81523090869033908390636cbc77369061121b908590600090600401612e73565b602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c9190612e99565b6001600160401b03161515806112e9575060405163365e3b9b60e11b81526001600160a01b03841690636cbc77369061129c908590600190600401612e73565b602060405180830381865afa1580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd9190612e99565b6001600160401b031615155b15611383576040516365a61a9d60e01b81526001600160a01b038416906365a61a9d9061131c9085908590600401612eba565b602060405180830381865afa158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d9190612dab565b1515600114611383578181604051638f9ff56b60e01b8152600401610475929190612eba565b606b546040516315b536bd60e11b81526001600160a01b039091169089906002908390632b6a6d7a906113ba90859060040161228d565b602060405180830381865afa1580156113d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fb9190612eed565b600681111561140c5761140c612a36565b81600681111561141e5761141e612a36565b1461143e57816040516311bc7abb60e21b8152600401610475919061228d565b6001600160401b038b16600090815260656020526040902060018b600181111561146a5761146a612a36565b03611493578054819061147c90612f24565b905060000361149357806114918a8c83613007565b505b61149e816000611acb565b6001600160401b03161580156114c557506114ba816001611acb565b6001600160401b0316155b156114df576009810180546001600160a01b031916331790555b6114e98133611a9f565b6115055760405162461bcd60e51b8152600401610475906130f5565b611510818c8a611b4b565b505050505050505050505050565b600082806001600160401b031660000361154a5760405162461bcd60e51b81526004016104759061288f565b606a546040516373abb40d60e11b81526001600160a01b039091169063e757681a9061157a90869060040161228d565b602060405180830381865afa158015611597573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bb9190612e99565b6001600160401b0316846001600160401b03161491505092915050565b6001600160401b038116600090815260656020526040812060098101546001600160a01b03165b9392505050565b606084806001600160401b03166000036116325760405162461bcd60e51b81526004016104759061288f565b61163e8686868661052a565b9695505050505050565b606060008085600181111561165f5761165f612a36565b0361166e575060018501611674565b50600585015b61163e818585611b9d565b606b546040516315b536bd60e11b81526001600160a01b039091169087906002908390632b6a6d7a906116b690859060040161228d565b602060405180830381865afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190612eed565b600681111561170857611708612a36565b81600681111561171a5761171a612a36565b1461173a57816040516311bc7abb60e21b8152600401610475919061228d565b6001600160401b038916600090815260656020526040902061175c8133611a9f565b6117785760405162461bcd60e51b8152600401610475906130f5565b606c546040516314a41d8560e01b81526000916001600160a01b0316906314a41d85906117a9908e9060040161228d565b602060405180830381865afa1580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea9190612b2b565b9050600080606a60009054906101000a90046001600160a01b03166001600160a01b0316630fb3ae6a8c8f8c876040518563ffffffff1660e01b8152600401611836949392919061310f565b6000604051808303816000875af1158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906131c5565b9092509050611890848d848d858d611d15565b50505050505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff166118d55760405162461bcd60e51b815260040161047590613259565b565b6000805160206135a7833981519152546001600160a01b031690565b606754604051632474521560e21b81526001600160a01b039091169060009082906391d148549061192a9084903390600401613269565b602060405180830381865afa158015611947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196b9190612dab565b61118d5760405162461bcd60e51b8152600401610475906132a8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156119ba5761118d83611dc1565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a14575060408051601f3d908101601f19168201909252611a1191810190612aa2565b60015b611a305760405162461bcd60e51b815260040161047590613303565b6000805160206135a78339815191528114611a5d5760405162461bcd60e51b815260040161047590613359565b5061118d838383611e15565b600080826001811115611a7e57611a7e612a36565b03611a915750600382015460ff16610d63565b50600782015460ff16610d63565b60098201546000906001600160a01b0390811690831603611ac257506001610d63565b50600092915050565b60008080836001811115611ae157611ae1612a36565b03611af0575060018301611af6565b50600583015b6002015461010090046001600160401b03169392505050565b60008080836001811115611b2557611b25612a36565b03611b34575060018301611b3a565b50600583015b546001600160401b03169392505050565b600080836001811115611b6057611b60612a36565b03611b6f575060018301611b75565b50600583015b600281015461010090046001600160401b0316600003611b9757600181018290555b50505050565b6003830154606090611baf83856133a3565b6001600160401b03161115611bd65760405162461bcd60e51b815260040161047590613404565b6003840154600285015461010090046001600160401b031614611c0b5760405162461bcd60e51b815260040161047590613393565b6000826001600160401b03166001600160401b03811115611c2e57611c2e6120c4565b604051908082528060200260200182016040528015611c57578160200160208202803683370190505b50905060005b836001600160401b0316816001600160401b03161015611d0c5760038601611c8586836133a3565b6001600160401b031681548110611c9e57611c9e61289f565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b031682826001600160401b031681518110611ce257611ce261289f565b6001600160401b039092166020928302919091019091015280611d04816128cb565b915050611c5d565b50949350505050565b600080866001811115611d2a57611d2a612a36565b03611d39575060018601611d3f565b50600586015b600281015460ff16158015611d5657506001821515145b15611d6c5760028101805460ff19168315151790555b611d77818686611e3a565b805483908290600090611d949084906001600160401b03166133a3565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555050505050505050565b611dca8161189f565b611de65760405162461bcd60e51b81526004016104759061345e565b6000805160206135a783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611e1e83611f5a565b600082511180611e2b5750805b1561118d57611b978383611f9a565b8060005b8351816001600160401b03161015611f535760028501546001600160401b038381166101009092041614611e845760405162461bcd60e51b81526004016104759061349b565b81611e8e816128cb565b6002870180549194506101009091046001600160401b031691506001611eb3836128cb565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508460030184826001600160401b031681518110611ef757611ef761289f565b60209081029190910181015182546001810184556000938452919092206004820401805460039092166008026101000a6001600160401b0381810219909316929093169290920217905580611f4b816128cb565b915050611e3e565b5050505050565b611f6381611dc1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606115ff83836040518060600160405280602781526020016135c7602791396060600080856001600160a01b031685604051611fd791906134f1565b600060405180830381855af49150503d8060008114612012576040519150601f19603f3d011682016040523d82523d6000602084013e612017565b606091505b509150915061163e86838387606083156120605782516000036120595761203d8561189f565b6120595760405162461bcd60e51b815260040161047590613531565b5081610522565b61052283838151156120755781518083602001fd5b8060405162461bcd60e51b81526004016104759190613575565b6001600160401b031690565b6120a48161208f565b8114610a3957600080fd5b8035610d638161209b565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b6120e3826120ba565b81018181106001600160401b0382111715612100576121006120c4565b6040525050565b600061211260405190565b905061211e82826120da565b919050565b60006001600160401b0382111561213c5761213c6120c4565b5060209081020190565b600061215961215484612123565b612107565b8381529050602080820190840283018581111561217857612178600080fd5b835b8181101561219c578061218d88826120af565b8452506020928301920161217a565b5050509392505050565b600082601f8301126121ba576121ba600080fd5b8135610522848260208601612146565b600080604083850312156121e0576121e0600080fd5b60006121ec85856120af565b92505060208301356001600160401b0381111561220b5761220b600080fd5b612217858286016121a6565b9150509250929050565b8015155b82525050565b60208101610d638284612221565b60028110610a3957600080fd5b8035610d6381612239565b6000806040838503121561226757612267600080fd5b600061227385856120af565b925050602061221785828601612246565b6122258161208f565b60208101610d638284612284565b600080600080608085870312156122b4576122b4600080fd5b60006122c087876120af565b94505060206122d187828801612246565b93505060406122e2878288016120af565b92505060606122f3878288016120af565b91505092959194509250565b80612225565b600061231183836122ff565b505060200190565b6000612323825190565b80845260209384019383018060005b838110156123575781516123468882612305565b975060208301925050600101612332565b509495945050505050565b602080825281016115ff8184612319565b60006020828403121561238857612388600080fd5b600061052284846120af565b60208101610d6382846122ff565b806120a4565b8035610d63816123a2565b60006123c161215484612123565b838152905060208082019084028301858111156123e0576123e0600080fd5b835b8181101561219c57806123f588826123a8565b845250602092830192016123e2565b600082601f83011261241857612418600080fd5b81356105228482602086016123b3565b8015156120a4565b8035610d6381612428565b60008060008060008060c0878903121561245757612457600080fd5b600061246389896120af565b965050602061247489828a01612246565b95505060408701356001600160401b0381111561249357612493600080fd5b61249f89828a01612404565b94505060606124b089828a016120af565b93505060808701356001600160401b038111156124cf576124cf600080fd5b6124db89828a016121a6565b92505060a06124ec89828a01612430565b9150509295509295509295565b6001600160a01b031690565b6000610d63826124f9565b6120a481612505565b8035610d6381612510565b600080600080600080600060e0888a03121561254257612542600080fd5b600061254e8a8a612519565b975050602061255f8a828b01612519565b96505060406125708a828b01612519565b95505060606125818a828b01612519565b94505060806125928a828b01612519565b93505060a06125a38a828b01612519565b92505060c06125b48a828b01612519565b91505092959891949750929550565b6000602082840312156125d8576125d8600080fd5b60006105228484612519565b6000610d636125f86125f5846124f9565b90565b6124f9565b6000610d63826125e4565b6000610d63826125fd565b61222581612608565b60208101610d638284612613565b60006001600160401b03821115612643576126436120c4565b61264c826120ba565b60200192915050565b82818337506000910152565b600061266f6121548461262a565b90508281526020810184848401111561268a5761268a600080fd5b612695848285612655565b509392505050565b600082601f8301126126b1576126b1600080fd5b8135610522848260208601612661565b600080604083850312156126d7576126d7600080fd5b60006126e38585612519565b92505060208301356001600160401b0381111561270257612702600080fd5b6122178582860161269d565b6000806040838503121561272457612724600080fd5b600061273085856120af565b925050602061221785828601612519565b61222581612505565b60208101610d638284612741565b60008083601f84011261276d5761276d600080fd5b5081356001600160401b0381111561278757612787600080fd5b6020830191508360018202830111156127a2576127a2600080fd5b9250929050565b6000806000806000608086880312156127c4576127c4600080fd5b60006127d088886120af565b95505060206127e188828901612246565b94505060408601356001600160401b0381111561280057612800600080fd5b61280c88828901612758565b9350935050606061281f888289016123a8565b9150509295509295909350565b6000806040838503121561284257612842600080fd5b600061284e85856120af565b9250506020612217858286016120af565b601681526000602082017556616c7565206d757374206e6f74206265207a65726f60501b815291505b5060200190565b60208082528101610d638161285f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006128d68261208f565b91506001600160401b0382036128ee576128ee6128b5565b5060010190565b60006123118383612284565b600061290b825190565b80845260209384019383018060005b8381101561235757815161292e88826128f5565b97506020830192505060010161291a565b602080825281016115ff8184612901565b8051610d63816123a2565b600061296961215484612123565b8381529050602080820190840283018581111561298857612988600080fd5b835b8181101561219c578061299d8882612950565b8452506020928301920161298a565b600082601f8301126129c0576129c0600080fd5b815161052284826020860161295b565b6000602082840312156129e5576129e5600080fd5b81516001600160401b038111156129fe576129fe600080fd5b610522848285016129ac565b8051610d6381612510565b600060208284031215612a2a57612a2a600080fd5b60006105228484612a0a565b634e487b7160e01b600052602160045260246000fd5b60078110610a3957610a39612a36565b8061211e81612a4c565b6000610d6382612a5c565b61222581612a66565b60608101612a888286612a71565b612a956020830185612741565b6105226040830184612284565b600060208284031215612ab757612ab7600080fd5b60006105228484612950565b81810381811115610d6357610d636128b5565b634e487b7160e01b600052601260045260246000fd5b6000612af78261208f565b9150612b028361208f565b925082612b1157612b11612ad6565b500490565b61ffff81166120a4565b8051610d6381612b16565b600060208284031215612b4057612b40600080fd5b60006105228484612b20565b6000612b578261208f565b9150612b628361208f565b9250828202612b708161208f565b91508082146104e5576104e56128b5565b8181028082158382048514176104e5576104e56128b5565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b60208082528101610d6381612b99565b600060ff8216610d63565b61222581612bf7565b60208101610d638284612c02565b602c815260006020820160008051602061358783398151915281526b19195b1959d85d1958d85b1b60a21b60208201529150612be0565b60208082528101610d6381612c19565b602c815260006020820160008051602061358783398151915281526b6163746976652070726f787960a01b60208201529150612be0565b60208082528101610d6381612c60565b601d81526000602082017f496e73756666696369656e7420636f6c6c61746572616c2066756e647300000081529150612888565b60208082528101610d6381612ca7565b60808101612cf98287612a71565b612d066020830186612741565b612d136040830185612284565b6106fe60608301846122ff565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150612be0565b60208082528101610d6381612d20565b60408101612d938285612284565b6115ff6020830184612284565b8051610d6381612428565b600060208284031215612dc057612dc0600080fd5b60006105228484612da0565b601f81526000602082017f496e76616c6964206d617070696e6746696c65732070657263656e746167650081529150612888565b60208082528101610d6381612dcc565b60028110610a3957610a39612a36565b8061211e81612e10565b6000610d6382612e20565b61222581612e2a565b60808101612e4c8287612a71565b612e596020830186612741565b612e666040830185612284565b6106fe6060830184612e35565b60408101612e818285612284565b6115ff6020830184612e35565b8051610d638161209b565b600060208284031215612eae57612eae600080fd5b60006105228484612e8e565b60408101612ec88285612284565b6115ff6020830184612741565b60078110610a3957600080fd5b8051610d6381612ed5565b600060208284031215612f0257612f02600080fd5b60006105228484612ee2565b634e487b7160e01b600052602260045260246000fd5b600281046001821680612f3857607f821691505b60208210810361082357610823612f0e565b6000610d636125f58381565b612f5f83612f4a565b815460001960089490940293841b1916921b91909117905550565b600061118d818484612f56565b81811015610ce057612f9a600082612f7a565b600101612f87565b601f82111561118d576000818152602090206020601f85010481016020851015612fc95750805b611f536020601f860104830182612f87565b6000196008929092029190911c191690565b6000612ff98383612fdb565b600290930290921792915050565b826001600160401b0381111561301f5761301f6120c4565b6130298254612f24565b613034828285612fa2565b6000601f83116001811461306257600084156130505750858201355b61305a8582612fed565b8655506130bc565b600085815260208120601f198616915b828110156130925788850135825560209485019460019092019101613072565b868310156130af57848901356130ab601f891682612fdb565b8355505b6001600288020188555050505b50505050505050565b601981526000602082017824b73b30b634b2102230ba30b9b2ba1039bab136b4ba3a32b960391b81529150612888565b60208082528101610d63816130c5565b61ffff8116612225565b608080825281016131208187612319565b905061312f6020830186612284565b81810360408301526131418185612901565b90506106fe6060830184613105565b600061315e61215484612123565b8381529050602080820190840283018581111561317d5761317d600080fd5b835b8181101561219c57806131928882612e8e565b8452506020928301920161317f565b600082601f8301126131b5576131b5600080fd5b8151610522848260208601613150565b600080604083850312156131db576131db600080fd5b82516001600160401b038111156131f4576131f4600080fd5b613200858286016131a1565b925050602061221785828601612e8e565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150612be0565b60208082528101610d6381613211565b60408101612ec882856122ff565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b81529150612888565b60208082528101610d6381613277565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150612be0565b60208082528101610d63816132b8565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150612be0565b60208082528101610d6381613313565b60138152600060208201721b195b99dd1a081b5d5cdd081b585d18da1959606a1b81529150612888565b60208082528101610d6381613369565b60006133ae8261208f565b91506133b98361208f565b9250508082016001600160401b03811115610d6357610d636128b5565b6017815260006020820176496e6465782b6c656e206f7574206f6620626f756e647360481b81529150612888565b60208082528101610d63816133d6565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150612be0565b60208082528101610d6381613414565b60168152600060208201751a5b99195e081b5d5cdd081b585d18da0810dbdd5b9d60521b81529150612888565b60208082528101610d638161346e565b60005b838110156134c65781810151838201526020016134ae565b50506000910152565b60006134d9825190565b6134e78185602086016134ab565b9290920192915050565b60006115ff82846134cf565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150612888565b60208082528101610d63816134fd565b600061354b825190565b8084526020840193506135628185602086016134ab565b61356b816120ba565b9093019392505050565b602080825281016115ff818461354156fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122011d694db7d2412efc0caeb906baeb1dfbde93ad7201d254608baf45566c6e0e364736f6c63430008150033",
    "deployedBytecode": "0x60806040526004361061011b5760003560e01c80631026a71314610120578063153ff28414610156578063192e9653146101835780632714b234146101b05780632a583c11146101dd5780632e70cce8146101ff578063358764761461021f5780633659cfe61461023f57806338835e731461025f578063392f5f64146102725780634a23e9d81461029f5780634f1ef286146102bf57806352d1902d146102d257806365a61a9d146102e75780636cbc773614610307578063795053d31461032757806383f245001461035457806386de143c14610374578063aaf10f4214610394578063c6b157d0146103a9578063d0720403146103c9578063e2fdcc17146103e9578063e94a673414610409578063fac1b91114610429575b600080fd5b34801561012c57600080fd5b5061014061013b3660046121ca565b610449565b60405161014d919061222b565b60405180910390f35b34801561016257600080fd5b50610176610171366004612251565b6104ec565b60405161014d919061228d565b34801561018f57600080fd5b506101a361019e36600461229b565b61052a565b60405161014d9190612362565b3480156101bc57600080fd5b506101d06101cb366004612373565b6105f7565b60405161014d9190612394565b3480156101e957600080fd5b506101fd6101f836600461243b565b610707565b005b34801561020b57600080fd5b506101d061021a366004612373565b61072c565b34801561022b57600080fd5b506101fd61023a366004612524565b610829565b34801561024b57600080fd5b506101fd61025a3660046125c3565b610974565b6101fd61026d366004612373565b610a3c565b34801561027e57600080fd5b50606754610292906001600160a01b031681565b60405161014d919061261c565b3480156102ab57600080fd5b506101406102ba366004612251565b610bdd565b6101fd6102cd3660046126c1565b610c2b565b3480156102de57600080fd5b506101d0610ce4565b3480156102f357600080fd5b5061014061030236600461270e565b610d41565b34801561031357600080fd5b50610176610322366004612251565b610d69565b34801561033357600080fd5b50606654610347906001600160a01b031681565b60405161014d919061274a565b34801561036057600080fd5b506101fd61036f366004612373565b610db7565b34801561038057600080fd5b5061017661038f366004612251565b611192565b3480156103a057600080fd5b506103476111e0565b3480156103b557600080fd5b506101fd6103c43660046127a9565b6111ef565b3480156103d557600080fd5b506101406103e436600461282c565b61151e565b3480156103f557600080fd5b50606854610292906001600160a01b031681565b34801561041557600080fd5b50610347610424366004612373565b6115d8565b34801561043557600080fd5b506101a361044436600461229b565b611606565b600082806001600160401b031660000361047e5760405162461bcd60e51b81526004016104759061288f565b60405180910390fd5b60005b8351816001600160401b031610156104df576104bf8585836001600160401b0316815181106104b2576104b261289f565b602002602001015161151e565b6104cd5760009250506104e5565b806104d7816128cb565b915050610481565b50600191505b5092915050565b600082806001600160401b03166000036105185760405162461bcd60e51b81526004016104759061288f565b6105228484610d69565b949350505050565b606084806001600160401b03166000036105565760405162461bcd60e51b81526004016104759061288f565b6001600160401b0386166000908152606560205260409020606a546001600160a01b0316639a18ccdc61058b83898989611648565b6040518263ffffffff1660e01b81526004016105a7919061293f565b600060405180830381865afa1580156105c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105ec91908101906129d0565b979650505050505050565b6000806106038361072c565b606854606b5460405163293a9a8160e11b81529293506000926001600160a01b03928316926341279ee2928592911690635275350290610647908a9060040161228d565b602060405180830381865afa158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190612a15565b876040518463ffffffff1660e01b81526004016106a793929190612a7a565b602060405180830381865afa1580156106c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e89190612aa2565b9050600081831115610522576106fe8284612ac3565b95945050505050565b61071586868686868661167f565b80156107245761072486610db7565b505050505050565b600081806001600160401b03166000036107585760405162461bcd60e51b81526004016104759061288f565b600160281b600061077182670de0b6b3a7640000612aec565b606c546040516314a41d8560e01b81526001600160401b0392909216925082916001600160a01b03909116906314a41d85906107b190899060040161228d565b602060405180830381865afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190612b2b565b61ffff16610801876000611192565b61080b9190612b4c565b6001600160401b031661081e9190612b81565b935050505b50919050565b600054610100900460ff16158080156108495750600054600160ff909116105b8061086a57506108583061189f565b15801561086a575060005460ff166001145b6108865760405162461bcd60e51b815260040161047590612be7565b6000805460ff1916600117905580156108a9576000805461ff0019166101001790555b606680546001600160a01b03199081166001600160a01b038b8116919091179092556067805482168a8416179055606880548216858416179055606980548216898416179055606a80548216888416179055606b80548216878416179055606c805490911691851691909117905561091f6118ae565b801561096a576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061096190600190612c0b565b60405180910390a15b5050505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109bc5760405162461bcd60e51b815260040161047590612c50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109ee6118d7565b6001600160a01b031614610a145760405162461bcd60e51b815260040161047590612c97565b610a1d816118f3565b60408051600080825260208201909252610a3991839190611987565b50565b346000610a48836105f7565b905080821015610a6a5760405162461bcd60e51b815260040161047590612cdb565b606854606b5460405163293a9a8160e11b81526001600160a01b039283169263ce37bde792869260009290911690635275350290610aac908a9060040161228d565b602060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190612a15565b87866040518663ffffffff1660e01b8152600401610b0e9493929190612ceb565b6000604051808303818588803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b5050606b546040516351ff7c3360e01b81526001600160a01b0390911693506351ff7c339250610b709150869060040161228d565b600060405180830381600087803b158015610b8a57600080fd5b505af1158015610b9e573d6000803e3d6000fd5b50506040513392506001600160401b03861691507f91ab6437c1cfa33bb7fffebb2dd9bd1a5ac7fda244d93c493a8066f5c2e3a95a90600090a3505050565b600082806001600160401b0316600003610c095760405162461bcd60e51b81526004016104759061288f565b6001600160401b03841660009081526065602052604090206106fe8185611a69565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c735760405162461bcd60e51b815260040161047590612c50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ca56118d7565b6001600160a01b031614610ccb5760405162461bcd60e51b815260040161047590612c97565b610cd4826118f3565b610ce082826001611987565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d2e5760405162461bcd60e51b815260040161047590612d75565b506000805160206135a783398151915290565b6001600160401b03821660009081526065602052604081206105228184611a9f565b92915050565b600082806001600160401b0316600003610d955760405162461bcd60e51b81526004016104759061288f565b6001600160401b03841660009081526065602052604090206106fe8185611acb565b6001600160401b0381166000908152606560205260409020600381015460ff168015610de75750600781015460ff165b15610ce0576069546001600160a01b0316639eaa0818610e08836001611b0f565b610e13846000611b0f565b6040518363ffffffff1660e01b8152600401610e30929190612d85565b602060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190612dab565b610e8d5760405162461bcd60e51b815260040161047590612e00565b6000610e988361072c565b606854606b5460405163293a9a8160e11b815292935083926001600160a01b03928316926341279ee292600092911690635275350290610edc908a9060040161228d565b602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190612a15565b876040518463ffffffff1660e01b8152600401610f3c93929190612a7a565b602060405180830381865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190612aa2565b101561102057606b546040516331bd0ce360e11b81526001600160a01b039091169063637a19c690610fb390869060040161228d565b600060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b50506040513392506001600160401b03861691507f20c5250c87b6e83c75d68be97e032e2e4c7529480c693fdc61d14159d9d7188f90600090a3505050565b606854606b5460405163293a9a8160e11b81526001600160a01b03928316926364000be09260009291169063527535029061105f90899060040161228d565b602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190612a15565b8660016040518563ffffffff1660e01b81526004016110c29493929190612e3e565b600060405180830381600087803b1580156110dc57600080fd5b505af11580156110f0573d6000803e3d6000fd5b5050606b54604051632bab6c2560e11b81526001600160a01b039091169250635756d84a915061112490869060040161228d565b600060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b50506040513392506001600160401b03861691507f8ca70633a4a65cb7fe7f937a289856fb4bf153ecaee15b8050ccf12c3684350a90600090a35b505050565b600082806001600160401b03166000036111be5760405162461bcd60e51b81526004016104759061288f565b6001600160401b03841660009081526065602052604090206106fe8185611b0f565b60006111ea6118d7565b905090565b60405163365e3b9b60e11b81523090869033908390636cbc77369061121b908590600090600401612e73565b602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c9190612e99565b6001600160401b03161515806112e9575060405163365e3b9b60e11b81526001600160a01b03841690636cbc77369061129c908590600190600401612e73565b602060405180830381865afa1580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd9190612e99565b6001600160401b031615155b15611383576040516365a61a9d60e01b81526001600160a01b038416906365a61a9d9061131c9085908590600401612eba565b602060405180830381865afa158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d9190612dab565b1515600114611383578181604051638f9ff56b60e01b8152600401610475929190612eba565b606b546040516315b536bd60e11b81526001600160a01b039091169089906002908390632b6a6d7a906113ba90859060040161228d565b602060405180830381865afa1580156113d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fb9190612eed565b600681111561140c5761140c612a36565b81600681111561141e5761141e612a36565b1461143e57816040516311bc7abb60e21b8152600401610475919061228d565b6001600160401b038b16600090815260656020526040902060018b600181111561146a5761146a612a36565b03611493578054819061147c90612f24565b905060000361149357806114918a8c83613007565b505b61149e816000611acb565b6001600160401b03161580156114c557506114ba816001611acb565b6001600160401b0316155b156114df576009810180546001600160a01b031916331790555b6114e98133611a9f565b6115055760405162461bcd60e51b8152600401610475906130f5565b611510818c8a611b4b565b505050505050505050505050565b600082806001600160401b031660000361154a5760405162461bcd60e51b81526004016104759061288f565b606a546040516373abb40d60e11b81526001600160a01b039091169063e757681a9061157a90869060040161228d565b602060405180830381865afa158015611597573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bb9190612e99565b6001600160401b0316846001600160401b03161491505092915050565b6001600160401b038116600090815260656020526040812060098101546001600160a01b03165b9392505050565b606084806001600160401b03166000036116325760405162461bcd60e51b81526004016104759061288f565b61163e8686868661052a565b9695505050505050565b606060008085600181111561165f5761165f612a36565b0361166e575060018501611674565b50600585015b61163e818585611b9d565b606b546040516315b536bd60e11b81526001600160a01b039091169087906002908390632b6a6d7a906116b690859060040161228d565b602060405180830381865afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190612eed565b600681111561170857611708612a36565b81600681111561171a5761171a612a36565b1461173a57816040516311bc7abb60e21b8152600401610475919061228d565b6001600160401b038916600090815260656020526040902061175c8133611a9f565b6117785760405162461bcd60e51b8152600401610475906130f5565b606c546040516314a41d8560e01b81526000916001600160a01b0316906314a41d85906117a9908e9060040161228d565b602060405180830381865afa1580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea9190612b2b565b9050600080606a60009054906101000a90046001600160a01b03166001600160a01b0316630fb3ae6a8c8f8c876040518563ffffffff1660e01b8152600401611836949392919061310f565b6000604051808303816000875af1158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906131c5565b9092509050611890848d848d858d611d15565b50505050505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff166118d55760405162461bcd60e51b815260040161047590613259565b565b6000805160206135a7833981519152546001600160a01b031690565b606754604051632474521560e21b81526001600160a01b039091169060009082906391d148549061192a9084903390600401613269565b602060405180830381865afa158015611947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196b9190612dab565b61118d5760405162461bcd60e51b8152600401610475906132a8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156119ba5761118d83611dc1565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a14575060408051601f3d908101601f19168201909252611a1191810190612aa2565b60015b611a305760405162461bcd60e51b815260040161047590613303565b6000805160206135a78339815191528114611a5d5760405162461bcd60e51b815260040161047590613359565b5061118d838383611e15565b600080826001811115611a7e57611a7e612a36565b03611a915750600382015460ff16610d63565b50600782015460ff16610d63565b60098201546000906001600160a01b0390811690831603611ac257506001610d63565b50600092915050565b60008080836001811115611ae157611ae1612a36565b03611af0575060018301611af6565b50600583015b6002015461010090046001600160401b03169392505050565b60008080836001811115611b2557611b25612a36565b03611b34575060018301611b3a565b50600583015b546001600160401b03169392505050565b600080836001811115611b6057611b60612a36565b03611b6f575060018301611b75565b50600583015b600281015461010090046001600160401b0316600003611b9757600181018290555b50505050565b6003830154606090611baf83856133a3565b6001600160401b03161115611bd65760405162461bcd60e51b815260040161047590613404565b6003840154600285015461010090046001600160401b031614611c0b5760405162461bcd60e51b815260040161047590613393565b6000826001600160401b03166001600160401b03811115611c2e57611c2e6120c4565b604051908082528060200260200182016040528015611c57578160200160208202803683370190505b50905060005b836001600160401b0316816001600160401b03161015611d0c5760038601611c8586836133a3565b6001600160401b031681548110611c9e57611c9e61289f565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b031682826001600160401b031681518110611ce257611ce261289f565b6001600160401b039092166020928302919091019091015280611d04816128cb565b915050611c5d565b50949350505050565b600080866001811115611d2a57611d2a612a36565b03611d39575060018601611d3f565b50600586015b600281015460ff16158015611d5657506001821515145b15611d6c5760028101805460ff19168315151790555b611d77818686611e3a565b805483908290600090611d949084906001600160401b03166133a3565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555050505050505050565b611dca8161189f565b611de65760405162461bcd60e51b81526004016104759061345e565b6000805160206135a783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611e1e83611f5a565b600082511180611e2b5750805b1561118d57611b978383611f9a565b8060005b8351816001600160401b03161015611f535760028501546001600160401b038381166101009092041614611e845760405162461bcd60e51b81526004016104759061349b565b81611e8e816128cb565b6002870180549194506101009091046001600160401b031691506001611eb3836128cb565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508460030184826001600160401b031681518110611ef757611ef761289f565b60209081029190910181015182546001810184556000938452919092206004820401805460039092166008026101000a6001600160401b0381810219909316929093169290920217905580611f4b816128cb565b915050611e3e565b5050505050565b611f6381611dc1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606115ff83836040518060600160405280602781526020016135c7602791396060600080856001600160a01b031685604051611fd791906134f1565b600060405180830381855af49150503d8060008114612012576040519150601f19603f3d011682016040523d82523d6000602084013e612017565b606091505b509150915061163e86838387606083156120605782516000036120595761203d8561189f565b6120595760405162461bcd60e51b815260040161047590613531565b5081610522565b61052283838151156120755781518083602001fd5b8060405162461bcd60e51b81526004016104759190613575565b6001600160401b031690565b6120a48161208f565b8114610a3957600080fd5b8035610d638161209b565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b6120e3826120ba565b81018181106001600160401b0382111715612100576121006120c4565b6040525050565b600061211260405190565b905061211e82826120da565b919050565b60006001600160401b0382111561213c5761213c6120c4565b5060209081020190565b600061215961215484612123565b612107565b8381529050602080820190840283018581111561217857612178600080fd5b835b8181101561219c578061218d88826120af565b8452506020928301920161217a565b5050509392505050565b600082601f8301126121ba576121ba600080fd5b8135610522848260208601612146565b600080604083850312156121e0576121e0600080fd5b60006121ec85856120af565b92505060208301356001600160401b0381111561220b5761220b600080fd5b612217858286016121a6565b9150509250929050565b8015155b82525050565b60208101610d638284612221565b60028110610a3957600080fd5b8035610d6381612239565b6000806040838503121561226757612267600080fd5b600061227385856120af565b925050602061221785828601612246565b6122258161208f565b60208101610d638284612284565b600080600080608085870312156122b4576122b4600080fd5b60006122c087876120af565b94505060206122d187828801612246565b93505060406122e2878288016120af565b92505060606122f3878288016120af565b91505092959194509250565b80612225565b600061231183836122ff565b505060200190565b6000612323825190565b80845260209384019383018060005b838110156123575781516123468882612305565b975060208301925050600101612332565b509495945050505050565b602080825281016115ff8184612319565b60006020828403121561238857612388600080fd5b600061052284846120af565b60208101610d6382846122ff565b806120a4565b8035610d63816123a2565b60006123c161215484612123565b838152905060208082019084028301858111156123e0576123e0600080fd5b835b8181101561219c57806123f588826123a8565b845250602092830192016123e2565b600082601f83011261241857612418600080fd5b81356105228482602086016123b3565b8015156120a4565b8035610d6381612428565b60008060008060008060c0878903121561245757612457600080fd5b600061246389896120af565b965050602061247489828a01612246565b95505060408701356001600160401b0381111561249357612493600080fd5b61249f89828a01612404565b94505060606124b089828a016120af565b93505060808701356001600160401b038111156124cf576124cf600080fd5b6124db89828a016121a6565b92505060a06124ec89828a01612430565b9150509295509295509295565b6001600160a01b031690565b6000610d63826124f9565b6120a481612505565b8035610d6381612510565b600080600080600080600060e0888a03121561254257612542600080fd5b600061254e8a8a612519565b975050602061255f8a828b01612519565b96505060406125708a828b01612519565b95505060606125818a828b01612519565b94505060806125928a828b01612519565b93505060a06125a38a828b01612519565b92505060c06125b48a828b01612519565b91505092959891949750929550565b6000602082840312156125d8576125d8600080fd5b60006105228484612519565b6000610d636125f86125f5846124f9565b90565b6124f9565b6000610d63826125e4565b6000610d63826125fd565b61222581612608565b60208101610d638284612613565b60006001600160401b03821115612643576126436120c4565b61264c826120ba565b60200192915050565b82818337506000910152565b600061266f6121548461262a565b90508281526020810184848401111561268a5761268a600080fd5b612695848285612655565b509392505050565b600082601f8301126126b1576126b1600080fd5b8135610522848260208601612661565b600080604083850312156126d7576126d7600080fd5b60006126e38585612519565b92505060208301356001600160401b0381111561270257612702600080fd5b6122178582860161269d565b6000806040838503121561272457612724600080fd5b600061273085856120af565b925050602061221785828601612519565b61222581612505565b60208101610d638284612741565b60008083601f84011261276d5761276d600080fd5b5081356001600160401b0381111561278757612787600080fd5b6020830191508360018202830111156127a2576127a2600080fd5b9250929050565b6000806000806000608086880312156127c4576127c4600080fd5b60006127d088886120af565b95505060206127e188828901612246565b94505060408601356001600160401b0381111561280057612800600080fd5b61280c88828901612758565b9350935050606061281f888289016123a8565b9150509295509295909350565b6000806040838503121561284257612842600080fd5b600061284e85856120af565b9250506020612217858286016120af565b601681526000602082017556616c7565206d757374206e6f74206265207a65726f60501b815291505b5060200190565b60208082528101610d638161285f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006128d68261208f565b91506001600160401b0382036128ee576128ee6128b5565b5060010190565b60006123118383612284565b600061290b825190565b80845260209384019383018060005b8381101561235757815161292e88826128f5565b97506020830192505060010161291a565b602080825281016115ff8184612901565b8051610d63816123a2565b600061296961215484612123565b8381529050602080820190840283018581111561298857612988600080fd5b835b8181101561219c578061299d8882612950565b8452506020928301920161298a565b600082601f8301126129c0576129c0600080fd5b815161052284826020860161295b565b6000602082840312156129e5576129e5600080fd5b81516001600160401b038111156129fe576129fe600080fd5b610522848285016129ac565b8051610d6381612510565b600060208284031215612a2a57612a2a600080fd5b60006105228484612a0a565b634e487b7160e01b600052602160045260246000fd5b60078110610a3957610a39612a36565b8061211e81612a4c565b6000610d6382612a5c565b61222581612a66565b60608101612a888286612a71565b612a956020830185612741565b6105226040830184612284565b600060208284031215612ab757612ab7600080fd5b60006105228484612950565b81810381811115610d6357610d636128b5565b634e487b7160e01b600052601260045260246000fd5b6000612af78261208f565b9150612b028361208f565b925082612b1157612b11612ad6565b500490565b61ffff81166120a4565b8051610d6381612b16565b600060208284031215612b4057612b40600080fd5b60006105228484612b20565b6000612b578261208f565b9150612b628361208f565b9250828202612b708161208f565b91508082146104e5576104e56128b5565b8181028082158382048514176104e5576104e56128b5565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291505b5060400190565b60208082528101610d6381612b99565b600060ff8216610d63565b61222581612bf7565b60208101610d638284612c02565b602c815260006020820160008051602061358783398151915281526b19195b1959d85d1958d85b1b60a21b60208201529150612be0565b60208082528101610d6381612c19565b602c815260006020820160008051602061358783398151915281526b6163746976652070726f787960a01b60208201529150612be0565b60208082528101610d6381612c60565b601d81526000602082017f496e73756666696369656e7420636f6c6c61746572616c2066756e647300000081529150612888565b60208082528101610d6381612ca7565b60808101612cf98287612a71565b612d066020830186612741565b612d136040830185612284565b6106fe60608301846122ff565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150612be0565b60208082528101610d6381612d20565b60408101612d938285612284565b6115ff6020830184612284565b8051610d6381612428565b600060208284031215612dc057612dc0600080fd5b60006105228484612da0565b601f81526000602082017f496e76616c6964206d617070696e6746696c65732070657263656e746167650081529150612888565b60208082528101610d6381612dcc565b60028110610a3957610a39612a36565b8061211e81612e10565b6000610d6382612e20565b61222581612e2a565b60808101612e4c8287612a71565b612e596020830186612741565b612e666040830185612284565b6106fe6060830184612e35565b60408101612e818285612284565b6115ff6020830184612e35565b8051610d638161209b565b600060208284031215612eae57612eae600080fd5b60006105228484612e8e565b60408101612ec88285612284565b6115ff6020830184612741565b60078110610a3957600080fd5b8051610d6381612ed5565b600060208284031215612f0257612f02600080fd5b60006105228484612ee2565b634e487b7160e01b600052602260045260246000fd5b600281046001821680612f3857607f821691505b60208210810361082357610823612f0e565b6000610d636125f58381565b612f5f83612f4a565b815460001960089490940293841b1916921b91909117905550565b600061118d818484612f56565b81811015610ce057612f9a600082612f7a565b600101612f87565b601f82111561118d576000818152602090206020601f85010481016020851015612fc95750805b611f536020601f860104830182612f87565b6000196008929092029190911c191690565b6000612ff98383612fdb565b600290930290921792915050565b826001600160401b0381111561301f5761301f6120c4565b6130298254612f24565b613034828285612fa2565b6000601f83116001811461306257600084156130505750858201355b61305a8582612fed565b8655506130bc565b600085815260208120601f198616915b828110156130925788850135825560209485019460019092019101613072565b868310156130af57848901356130ab601f891682612fdb565b8355505b6001600288020188555050505b50505050505050565b601981526000602082017824b73b30b634b2102230ba30b9b2ba1039bab136b4ba3a32b960391b81529150612888565b60208082528101610d63816130c5565b61ffff8116612225565b608080825281016131208187612319565b905061312f6020830186612284565b81810360408301526131418185612901565b90506106fe6060830184613105565b600061315e61215484612123565b8381529050602080820190840283018581111561317d5761317d600080fd5b835b8181101561219c57806131928882612e8e565b8452506020928301920161317f565b600082601f8301126131b5576131b5600080fd5b8151610522848260208601613150565b600080604083850312156131db576131db600080fd5b82516001600160401b038111156131f4576131f4600080fd5b613200858286016131a1565b925050602061221785828601612e8e565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150612be0565b60208082528101610d6381613211565b60408101612ec882856122ff565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b81529150612888565b60208082528101610d6381613277565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150612be0565b60208082528101610d63816132b8565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150612be0565b60208082528101610d6381613313565b60138152600060208201721b195b99dd1a081b5d5cdd081b585d18da1959606a1b81529150612888565b60208082528101610d6381613369565b60006133ae8261208f565b91506133b98361208f565b9250508082016001600160401b03811115610d6357610d636128b5565b6017815260006020820176496e6465782b6c656e206f7574206f6620626f756e647360481b81529150612888565b60208082528101610d63816133d6565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150612be0565b60208082528101610d6381613414565b60168152600060208201751a5b99195e081b5d5cdd081b585d18da0810dbdd5b9d60521b81529150612888565b60208082528101610d638161346e565b60005b838110156134c65781810151838201526020016134ae565b50506000910152565b60006134d9825190565b6134e78185602086016134ab565b9290920192915050565b60006115ff82846134cf565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150612888565b60208082528101610d63816134fd565b600061354b825190565b8084526020840193506135628185602086016134ab565b61356b816120ba565b9093019392505050565b602080825281016115ff818461354156fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122011d694db7d2412efc0caeb906baeb1dfbde93ad7201d254608baf45566c6e0e364736f6c63430008150033",
    "devdoc": {
      "details": "This contract is intended to be inherited by specific dataset-related contracts.",
      "events": {
        "AdminChanged(address,address)": {
          "details": "Emitted when the admin account has changed."
        },
        "BeaconUpgraded(address)": {
          "details": "Emitted when the beacon is changed."
        },
        "Initialized(uint8)": {
          "details": "Triggered when the contract has been initialized or reinitialized."
        },
        "Upgraded(address)": {
          "details": "Emitted when the implementation is upgraded."
        }
      },
      "kind": "dev",
      "methods": {
        "proxiableUUID()": {
          "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
        },
        "submitDatasetProof(uint64,uint8,bytes32[],uint64,uint64[],bool)": {
          "details": "Submit the proof of the dataset in batches, specifically by submitting the _leafHashes in the order of _leafIndexes."
        },
        "submitDatasetProofRoot(uint64,uint8,string,bytes32)": {
          "details": "Submit the rootHash of the dataset, the mappingFilesAccessMethod, and confirm that the sender is the submitter of the dataset."
        },
        "upgradeTo(address)": {
          "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
          "details": "Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
        },
        "upgradeToAndCall(address,bytes)": {
          "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
          "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
        }
      },
      "stateVariables": {
        "__gap": {
          "details": "This empty reserved space is put in place to allow future versions to add new"
        }
      },
      "title": "DatasetsProof Contract",
      "version": 1
    },
    "userdoc": {
      "events": {
        "CollateralEnough(uint64,address)": {
          "notice": "Event emitted when a dataset has enough collateral."
        },
        "CollateralNotEnough(uint64,address)": {
          "notice": "Event emitted when a dataset has not enough collateral."
        },
        "DatasetProofSubmitted(uint64,address)": {
          "notice": "Event emitted when a proof is submitted for a dataset."
        }
      },
      "kind": "user",
      "methods": {
        "appendDatasetCollateral(uint64)": {
          "notice": "Append dataset collateral funds"
        },
        "getDatasetAppendCollateral(uint64)": {
          "notice": "Get dataset need append collateral funds"
        },
        "getDatasetCars(uint64,uint8,uint64,uint64)": {
          "notice": "Get dataset source CIDs"
        },
        "getDatasetCarsCount(uint64,uint8)": {
          "notice": "Get dataset source CIDs"
        },
        "getDatasetCollateralRequirement(uint64)": {
          "notice": "Get dataset minimum conditional"
        },
        "getDatasetProof(uint64,uint8,uint64,uint64)": {
          "notice": "Get dataset source CIDs"
        },
        "getDatasetProofCount(uint64,uint8)": {
          "notice": "Get the number of leaf nodes (cars) in the dataset proofs."
        },
        "getDatasetProofSubmitter(uint64)": {
          "notice": "Get submitter of dataset's proofs"
        },
        "getDatasetSize(uint64,uint8)": {
          "notice": "Get dataset size"
        },
        "getImplementation()": {
          "notice": "Returns the implementation contract"
        },
        "initialize(address,address,address,address,address,address,address)": {
          "notice": "initialize function to initialize the contract and grant the default admin role to the deployer."
        },
        "isDatasetContainsCar(uint64,uint64)": {
          "notice": "Check if a dataset has a cid"
        },
        "isDatasetContainsCars(uint64,uint64[])": {
          "notice": "Check if a dataset has cids"
        },
        "isDatasetProofSubmitter(uint64,address)": {
          "notice": "Check if a dataset has submitter"
        },
        "isDatasetProofallCompleted(uint64,uint8)": {
          "notice": "Check if a dataset proof all completed"
        },
        "submitDatasetProof(uint64,uint8,bytes32[],uint64,uint64[],bool)": {
          "notice": "Submit proof for a dataset"
        },
        "submitDatasetProofCompleted(uint64)": {
          "notice": "Submit proof completed for a dataset"
        },
        "submitDatasetProofRoot(uint64,uint8,string,bytes32)": {
          "notice": "Submit proof root for a dataset"
        }
      },
      "notice": "This contract serves as the base for managing datasetProof.",
      "version": 1
    },
    "storageLayout": {
      "storage": [
        {
          "astId": 5186,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "_initialized",
          "offset": 0,
          "slot": "0",
          "type": "t_uint8"
        },
        {
          "astId": 5189,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "_initializing",
          "offset": 1,
          "slot": "0",
          "type": "t_bool"
        },
        {
          "astId": 5168,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "__gap",
          "offset": 0,
          "slot": "1",
          "type": "t_array(t_uint256)50_storage"
        },
        {
          "astId": 5483,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "__gap",
          "offset": 0,
          "slot": "51",
          "type": "t_array(t_uint256)50_storage"
        },
        {
          "astId": 23942,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "datasetProofs",
          "offset": 0,
          "slot": "101",
          "type": "t_mapping(t_uint64,t_struct(DatasetProof)35072_storage)"
        },
        {
          "astId": 23944,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "governanceAddress",
          "offset": 0,
          "slot": "102",
          "type": "t_address"
        },
        {
          "astId": 23947,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "roles",
          "offset": 0,
          "slot": "103",
          "type": "t_contract(IRoles)20939"
        },
        {
          "astId": 23950,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "escrow",
          "offset": 0,
          "slot": "104",
          "type": "t_contract(IEscrow)20655"
        },
        {
          "astId": 23953,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "filplus",
          "offset": 0,
          "slot": "105",
          "type": "t_contract(IFilplus)20899"
        },
        {
          "astId": 23956,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "carstore",
          "offset": 0,
          "slot": "106",
          "type": "t_contract(ICarstore)20452"
        },
        {
          "astId": 23959,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "datasets",
          "offset": 0,
          "slot": "107",
          "type": "t_contract(IDatasets)21159"
        },
        {
          "astId": 23962,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "datasetsRequirement",
          "offset": 0,
          "slot": "108",
          "type": "t_contract(IDatasetsRequirement)21495"
        },
        {
          "astId": 23967,
          "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
          "label": "__gap",
          "offset": 0,
          "slot": "109",
          "type": "t_array(t_uint256)32_storage"
        }
      ],
      "types": {
        "t_address": {
          "encoding": "inplace",
          "label": "address",
          "numberOfBytes": "20"
        },
        "t_array(t_uint256)32_storage": {
          "base": "t_uint256",
          "encoding": "inplace",
          "label": "uint256[32]",
          "numberOfBytes": "1024"
        },
        "t_array(t_uint256)50_storage": {
          "base": "t_uint256",
          "encoding": "inplace",
          "label": "uint256[50]",
          "numberOfBytes": "1600"
        },
        "t_array(t_uint64)dyn_storage": {
          "base": "t_uint64",
          "encoding": "dynamic_array",
          "label": "uint64[]",
          "numberOfBytes": "32"
        },
        "t_bool": {
          "encoding": "inplace",
          "label": "bool",
          "numberOfBytes": "1"
        },
        "t_bytes32": {
          "encoding": "inplace",
          "label": "bytes32",
          "numberOfBytes": "32"
        },
        "t_contract(ICarstore)20452": {
          "encoding": "inplace",
          "label": "contract ICarstore",
          "numberOfBytes": "20"
        },
        "t_contract(IDatasets)21159": {
          "encoding": "inplace",
          "label": "contract IDatasets",
          "numberOfBytes": "20"
        },
        "t_contract(IDatasetsRequirement)21495": {
          "encoding": "inplace",
          "label": "contract IDatasetsRequirement",
          "numberOfBytes": "20"
        },
        "t_contract(IEscrow)20655": {
          "encoding": "inplace",
          "label": "contract IEscrow",
          "numberOfBytes": "20"
        },
        "t_contract(IFilplus)20899": {
          "encoding": "inplace",
          "label": "contract IFilplus",
          "numberOfBytes": "20"
        },
        "t_contract(IRoles)20939": {
          "encoding": "inplace",
          "label": "contract IRoles",
          "numberOfBytes": "20"
        },
        "t_mapping(t_uint64,t_struct(DatasetProof)35072_storage)": {
          "encoding": "mapping",
          "key": "t_uint64",
          "label": "mapping(uint64 => struct DatasetType.DatasetProof)",
          "numberOfBytes": "32",
          "value": "t_struct(DatasetProof)35072_storage"
        },
        "t_string_storage": {
          "encoding": "bytes",
          "label": "string",
          "numberOfBytes": "32"
        },
        "t_struct(DatasetProof)35072_storage": {
          "encoding": "inplace",
          "label": "struct DatasetType.DatasetProof",
          "members": [
            {
              "astId": 35063,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "mappingFilesAccessMethod",
              "offset": 0,
              "slot": "0",
              "type": "t_string_storage"
            },
            {
              "astId": 35066,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "sourceProof",
              "offset": 0,
              "slot": "1",
              "type": "t_struct(Proof)35061_storage"
            },
            {
              "astId": 35069,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "mappingFilesProof",
              "offset": 0,
              "slot": "5",
              "type": "t_struct(Proof)35061_storage"
            },
            {
              "astId": 35071,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "proofSubmitter",
              "offset": 0,
              "slot": "9",
              "type": "t_address"
            }
          ],
          "numberOfBytes": "320"
        },
        "t_struct(Proof)35061_storage": {
          "encoding": "inplace",
          "label": "struct DatasetType.Proof",
          "members": [
            {
              "astId": 35051,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "datasetSize",
              "offset": 0,
              "slot": "0",
              "type": "t_uint64"
            },
            {
              "astId": 35053,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "rootHash",
              "offset": 0,
              "slot": "1",
              "type": "t_bytes32"
            },
            {
              "astId": 35055,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "allCompleted",
              "offset": 0,
              "slot": "2",
              "type": "t_bool"
            },
            {
              "astId": 35057,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "leafHashesCount",
              "offset": 1,
              "slot": "2",
              "type": "t_uint64"
            },
            {
              "astId": 35060,
              "contract": "src/v0.8/module/dataset/DatasetsProof.sol:DatasetsProof",
              "label": "leafHashes",
              "offset": 0,
              "slot": "3",
              "type": "t_array(t_uint64)dyn_storage"
            }
          ],
          "numberOfBytes": "128"
        },
        "t_uint256": {
          "encoding": "inplace",
          "label": "uint256",
          "numberOfBytes": "32"
        },
        "t_uint64": {
          "encoding": "inplace",
          "label": "uint64",
          "numberOfBytes": "8"
        },
        "t_uint8": {
          "encoding": "inplace",
          "label": "uint8",
          "numberOfBytes": "1"
        }
      }
    }
  }