{
  "compiler": {
    "version": "0.8.27+commit.40a35a09"
  },
  "language": "Solidity",
  "output": {
    "abi": [
      {
        "inputs": [
          {
            "internalType": "contract ISchemaRegistry",
            "name": "registry",
            "type": "address"
          }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "AccessDenied"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "AlreadyRevoked"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "AlreadyRevokedOffchain"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "AlreadyTimestamped"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "DeadlineExpired"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "FailedCall"
      },
      {
        "inputs": [
          {
            "internalType": "uint256",
            "name": "balance",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "needed",
            "type": "uint256"
          }
        ],
        "type": "error",
        "name": "InsufficientBalance"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InsufficientValue"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidAttestation"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidAttestations"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidExpirationTime"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidLength"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidNonce"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidOffset"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidRegistry"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidRevocation"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidRevocations"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidSchema"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidShortString"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidSignature"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "InvalidVerifier"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "Irrevocable"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "NotFound"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "NotPayable"
      },
      {
        "inputs": [
          {
            "internalType": "string",
            "name": "str",
            "type": "string"
          }
        ],
        "type": "error",
        "name": "StringTooLong"
      },
      {
        "inputs": [],
        "type": "error",
        "name": "WrongSchema"
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "recipient",
            "type": "address",
            "indexed": true
          },
          {
            "internalType": "address",
            "name": "attester",
            "type": "address",
            "indexed": true
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32",
            "indexed": false
          },
          {
            "internalType": "bytes32",
            "name": "schemaUID",
            "type": "bytes32",
            "indexed": true
          }
        ],
        "type": "event",
        "name": "Attested",
        "anonymous": false
      },
      {
        "inputs": [],
        "type": "event",
        "name": "EIP712DomainChanged",
        "anonymous": false
      },
      {
        "inputs": [
          {
            "internalType": "uint256",
            "name": "oldNonce",
            "type": "uint256",
            "indexed": false
          },
          {
            "internalType": "uint256",
            "name": "newNonce",
            "type": "uint256",
            "indexed": false
          }
        ],
        "type": "event",
        "name": "NonceIncreased",
        "anonymous": false
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "recipient",
            "type": "address",
            "indexed": true
          },
          {
            "internalType": "address",
            "name": "attester",
            "type": "address",
            "indexed": true
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32",
            "indexed": false
          },
          {
            "internalType": "bytes32",
            "name": "schemaUID",
            "type": "bytes32",
            "indexed": true
          }
        ],
        "type": "event",
        "name": "Revoked",
        "anonymous": false
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "revoker",
            "type": "address",
            "indexed": true
          },
          {
            "internalType": "bytes32",
            "name": "data",
            "type": "bytes32",
            "indexed": true
          },
          {
            "internalType": "uint64",
            "name": "timestamp",
            "type": "uint64",
            "indexed": true
          }
        ],
        "type": "event",
        "name": "RevokedOffchain",
        "anonymous": false
      },
      {
        "inputs": [
          {
            "internalType": "bytes32",
            "name": "data",
            "type": "bytes32",
            "indexed": true
          },
          {
            "internalType": "uint64",
            "name": "timestamp",
            "type": "uint64",
            "indexed": true
          }
        ],
        "type": "event",
        "name": "Timestamped",
        "anonymous": false
      },
      {
        "inputs": [
          {
            "internalType": "struct AttestationRequest",
            "name": "request",
            "type": "tuple",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct AttestationRequestData",
                "name": "data",
                "type": "tuple",
                "components": [
                  {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                  },
                  {
                    "internalType": "uint64",
                    "name": "expirationTime",
                    "type": "uint64"
                  },
                  {
                    "internalType": "bool",
                    "name": "revocable",
                    "type": "bool"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "refUID",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "attest",
        "outputs": [
          {
            "internalType": "bytes32",
            "name": "",
            "type": "bytes32"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "struct DelegatedAttestationRequest",
            "name": "delegatedRequest",
            "type": "tuple",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct AttestationRequestData",
                "name": "data",
                "type": "tuple",
                "components": [
                  {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                  },
                  {
                    "internalType": "uint64",
                    "name": "expirationTime",
                    "type": "uint64"
                  },
                  {
                    "internalType": "bool",
                    "name": "revocable",
                    "type": "bool"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "refUID",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              },
              {
                "internalType": "struct Signature",
                "name": "signature",
                "type": "tuple",
                "components": [
                  {
                    "internalType": "uint8",
                    "name": "v",
                    "type": "uint8"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "r",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "s",
                    "type": "bytes32"
                  }
                ]
              },
              {
                "internalType": "address",
                "name": "attester",
                "type": "address"
              },
              {
                "internalType": "uint64",
                "name": "deadline",
                "type": "uint64"
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "attestByDelegation",
        "outputs": [
          {
            "internalType": "bytes32",
            "name": "",
            "type": "bytes32"
          }
        ]
      },
      {
        "inputs": [],
        "stateMutability": "view",
        "type": "function",
        "name": "eip712Domain",
        "outputs": [
          {
            "internalType": "bytes1",
            "name": "fields",
            "type": "bytes1"
          },
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "version",
            "type": "string"
          },
          {
            "internalType": "uint256",
            "name": "chainId",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "verifyingContract",
            "type": "address"
          },
          {
            "internalType": "bytes32",
            "name": "salt",
            "type": "bytes32"
          },
          {
            "internalType": "uint256[]",
            "name": "extensions",
            "type": "uint256[]"
          }
        ]
      },
      {
        "inputs": [],
        "stateMutability": "pure",
        "type": "function",
        "name": "getAttestTypeHash",
        "outputs": [
          {
            "internalType": "bytes32",
            "name": "",
            "type": "bytes32"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "stateMutability": "view",
        "type": "function",
        "name": "getAttestation",
        "outputs": [
          {
            "internalType": "struct Attestation",
            "name": "",
            "type": "tuple",
            "components": [
              {
                "internalType": "bytes32",
                "name": "uid",
                "type": "bytes32"
              },
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "uint64",
                "name": "time",
                "type": "uint64"
              },
              {
                "internalType": "uint64",
                "name": "expirationTime",
                "type": "uint64"
              },
              {
                "internalType": "uint64",
                "name": "revocationTime",
                "type": "uint64"
              },
              {
                "internalType": "bytes32",
                "name": "refUID",
                "type": "bytes32"
              },
              {
                "internalType": "address",
                "name": "recipient",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "attester",
                "type": "address"
              },
              {
                "internalType": "bool",
                "name": "revocable",
                "type": "bool"
              },
              {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
              }
            ]
          }
        ]
      },
      {
        "inputs": [],
        "stateMutability": "view",
        "type": "function",
        "name": "getDomainSeparator",
        "outputs": [
          {
            "internalType": "bytes32",
            "name": "",
            "type": "bytes32"
          }
        ]
      },
      {
        "inputs": [],
        "stateMutability": "view",
        "type": "function",
        "name": "getName",
        "outputs": [
          {
            "internalType": "string",
            "name": "",
            "type": "string"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "account",
            "type": "address"
          }
        ],
        "stateMutability": "view",
        "type": "function",
        "name": "getNonce",
        "outputs": [
          {
            "internalType": "uint256",
            "name": "",
            "type": "uint256"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "address",
            "name": "revoker",
            "type": "address"
          },
          {
            "internalType": "bytes32",
            "name": "data",
            "type": "bytes32"
          }
        ],
        "stateMutability": "view",
        "type": "function",
        "name": "getRevokeOffchain",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ]
      },
      {
        "inputs": [],
        "stateMutability": "pure",
        "type": "function",
        "name": "getRevokeTypeHash",
        "outputs": [
          {
            "internalType": "bytes32",
            "name": "",
            "type": "bytes32"
          }
        ]
      },
      {
        "inputs": [],
        "stateMutability": "view",
        "type": "function",
        "name": "getSchemaRegistry",
        "outputs": [
          {
            "internalType": "contract ISchemaRegistry",
            "name": "",
            "type": "address"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "bytes32",
            "name": "data",
            "type": "bytes32"
          }
        ],
        "stateMutability": "view",
        "type": "function",
        "name": "getTimestamp",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "uint256",
            "name": "newNonce",
            "type": "uint256"
          }
        ],
        "stateMutability": "nonpayable",
        "type": "function",
        "name": "increaseNonce"
      },
      {
        "inputs": [
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "stateMutability": "view",
        "type": "function",
        "name": "isAttestationValid",
        "outputs": [
          {
            "internalType": "bool",
            "name": "",
            "type": "bool"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "struct MultiAttestationRequest[]",
            "name": "multiRequests",
            "type": "tuple[]",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct AttestationRequestData[]",
                "name": "data",
                "type": "tuple[]",
                "components": [
                  {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                  },
                  {
                    "internalType": "uint64",
                    "name": "expirationTime",
                    "type": "uint64"
                  },
                  {
                    "internalType": "bool",
                    "name": "revocable",
                    "type": "bool"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "refUID",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "multiAttest",
        "outputs": [
          {
            "internalType": "bytes32[]",
            "name": "",
            "type": "bytes32[]"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "struct MultiDelegatedAttestationRequest[]",
            "name": "multiDelegatedRequests",
            "type": "tuple[]",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct AttestationRequestData[]",
                "name": "data",
                "type": "tuple[]",
                "components": [
                  {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                  },
                  {
                    "internalType": "uint64",
                    "name": "expirationTime",
                    "type": "uint64"
                  },
                  {
                    "internalType": "bool",
                    "name": "revocable",
                    "type": "bool"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "refUID",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              },
              {
                "internalType": "struct Signature[]",
                "name": "signatures",
                "type": "tuple[]",
                "components": [
                  {
                    "internalType": "uint8",
                    "name": "v",
                    "type": "uint8"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "r",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "s",
                    "type": "bytes32"
                  }
                ]
              },
              {
                "internalType": "address",
                "name": "attester",
                "type": "address"
              },
              {
                "internalType": "uint64",
                "name": "deadline",
                "type": "uint64"
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "multiAttestByDelegation",
        "outputs": [
          {
            "internalType": "bytes32[]",
            "name": "",
            "type": "bytes32[]"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "struct MultiRevocationRequest[]",
            "name": "multiRequests",
            "type": "tuple[]",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct RevocationRequestData[]",
                "name": "data",
                "type": "tuple[]",
                "components": [
                  {
                    "internalType": "bytes32",
                    "name": "uid",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "multiRevoke"
      },
      {
        "inputs": [
          {
            "internalType": "struct MultiDelegatedRevocationRequest[]",
            "name": "multiDelegatedRequests",
            "type": "tuple[]",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct RevocationRequestData[]",
                "name": "data",
                "type": "tuple[]",
                "components": [
                  {
                    "internalType": "bytes32",
                    "name": "uid",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              },
              {
                "internalType": "struct Signature[]",
                "name": "signatures",
                "type": "tuple[]",
                "components": [
                  {
                    "internalType": "uint8",
                    "name": "v",
                    "type": "uint8"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "r",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "s",
                    "type": "bytes32"
                  }
                ]
              },
              {
                "internalType": "address",
                "name": "revoker",
                "type": "address"
              },
              {
                "internalType": "uint64",
                "name": "deadline",
                "type": "uint64"
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "multiRevokeByDelegation"
      },
      {
        "inputs": [
          {
            "internalType": "bytes32[]",
            "name": "data",
            "type": "bytes32[]"
          }
        ],
        "stateMutability": "nonpayable",
        "type": "function",
        "name": "multiRevokeOffchain",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "bytes32[]",
            "name": "data",
            "type": "bytes32[]"
          }
        ],
        "stateMutability": "nonpayable",
        "type": "function",
        "name": "multiTimestamp",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "struct RevocationRequest",
            "name": "request",
            "type": "tuple",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct RevocationRequestData",
                "name": "data",
                "type": "tuple",
                "components": [
                  {
                    "internalType": "bytes32",
                    "name": "uid",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "revoke"
      },
      {
        "inputs": [
          {
            "internalType": "struct DelegatedRevocationRequest",
            "name": "delegatedRequest",
            "type": "tuple",
            "components": [
              {
                "internalType": "bytes32",
                "name": "schema",
                "type": "bytes32"
              },
              {
                "internalType": "struct RevocationRequestData",
                "name": "data",
                "type": "tuple",
                "components": [
                  {
                    "internalType": "bytes32",
                    "name": "uid",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                  }
                ]
              },
              {
                "internalType": "struct Signature",
                "name": "signature",
                "type": "tuple",
                "components": [
                  {
                    "internalType": "uint8",
                    "name": "v",
                    "type": "uint8"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "r",
                    "type": "bytes32"
                  },
                  {
                    "internalType": "bytes32",
                    "name": "s",
                    "type": "bytes32"
                  }
                ]
              },
              {
                "internalType": "address",
                "name": "revoker",
                "type": "address"
              },
              {
                "internalType": "uint64",
                "name": "deadline",
                "type": "uint64"
              }
            ]
          }
        ],
        "stateMutability": "payable",
        "type": "function",
        "name": "revokeByDelegation"
      },
      {
        "inputs": [
          {
            "internalType": "bytes32",
            "name": "data",
            "type": "bytes32"
          }
        ],
        "stateMutability": "nonpayable",
        "type": "function",
        "name": "revokeOffchain",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ]
      },
      {
        "inputs": [
          {
            "internalType": "bytes32",
            "name": "data",
            "type": "bytes32"
          }
        ],
        "stateMutability": "nonpayable",
        "type": "function",
        "name": "timestamp",
        "outputs": [
          {
            "internalType": "uint64",
            "name": "",
            "type": "uint64"
          }
        ]
      },
      {
        "inputs": [],
        "stateMutability": "view",
        "type": "function",
        "name": "version",
        "outputs": [
          {
            "internalType": "string",
            "name": "",
            "type": "string"
          }
        ]
      }
    ],
    "devdoc": {
      "kind": "dev",
      "methods": {
        "attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))": {
          "params": {
            "request": "The arguments of the attestation request."
          },
          "returns": {
            "_0": "The UID of the new attestation. Example:     attest({         schema: \"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\",         data: {             recipient: \"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\",             expirationTime: 0,             revocable: true,             refUID: \"0x0000000000000000000000000000000000000000000000000000000000000000\",             data: \"0xF00D\",             value: 0         }     })"
          }
        },
        "attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))": {
          "params": {
            "delegatedRequest": "The arguments of the delegated attestation request."
          },
          "returns": {
            "_0": "The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })"
          }
        },
        "eip712Domain()": {
          "details": "returns the fields and values that describe the domain separator used by this contract for EIP-712 signature."
        },
        "getAttestTypeHash()": {
          "returns": {
            "_0": "The EIP712 type hash for the attest function."
          }
        },
        "getAttestation(bytes32)": {
          "params": {
            "uid": "The UID of the attestation to retrieve."
          },
          "returns": {
            "_0": "The attestation data members."
          }
        },
        "getDomainSeparator()": {
          "returns": {
            "_0": "The domain separator used in the encoding of the signatures for attest, and revoke."
          }
        },
        "getName()": {
          "returns": {
            "_0": "The EIP712 name."
          }
        },
        "getNonce(address)": {
          "params": {
            "account": "The requested account."
          },
          "returns": {
            "_0": "The current nonce."
          }
        },
        "getRevokeOffchain(address,bytes32)": {
          "params": {
            "data": "The data to query."
          },
          "returns": {
            "_0": "The timestamp the data was timestamped with."
          }
        },
        "getRevokeTypeHash()": {
          "returns": {
            "_0": "The EIP712 type hash for the revoke function."
          }
        },
        "getSchemaRegistry()": {
          "returns": {
            "_0": "The address of the global schema registry."
          }
        },
        "getTimestamp(bytes32)": {
          "params": {
            "data": "The data to query."
          },
          "returns": {
            "_0": "The timestamp the data was timestamped with."
          }
        },
        "increaseNonce(uint256)": {
          "params": {
            "newNonce": "The (higher) new value."
          }
        },
        "isAttestationValid(bytes32)": {
          "params": {
            "uid": "The UID of the attestation to retrieve."
          },
          "returns": {
            "_0": "Whether an attestation exists."
          }
        },
        "multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])": {
          "params": {
            "multiRequests": "The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization."
          },
          "returns": {
            "_0": "The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])"
          }
        },
        "multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": {
          "params": {
            "multiDelegatedRequests": "The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization."
          },
          "returns": {
            "_0": "The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])"
          }
        },
        "multiRevoke((bytes32,(bytes32,uint256)[])[])": {
          "params": {
            "multiRequests": "The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])"
          }
        },
        "multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": {
          "params": {
            "multiDelegatedRequests": "The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])"
          }
        },
        "multiRevokeOffchain(bytes32[])": {
          "params": {
            "data": "The data to timestamp."
          },
          "returns": {
            "_0": "The timestamp the data was revoked with."
          }
        },
        "multiTimestamp(bytes32[])": {
          "params": {
            "data": "The data to timestamp."
          },
          "returns": {
            "_0": "The timestamp the data was timestamped with."
          }
        },
        "revoke((bytes32,(bytes32,uint256)))": {
          "params": {
            "request": "The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })"
          }
        },
        "revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))": {
          "params": {
            "delegatedRequest": "The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })"
          }
        },
        "revokeOffchain(bytes32)": {
          "params": {
            "data": "The data to timestamp."
          },
          "returns": {
            "_0": "The timestamp the data was revoked with."
          }
        },
        "timestamp(bytes32)": {
          "params": {
            "data": "The data to timestamp."
          },
          "returns": {
            "_0": "The timestamp the data was timestamped with."
          }
        },
        "version()": {
          "returns": {
            "_0": "Semver contract version as a string."
          }
        }
      },
      "version": 1
    },
    "userdoc": {
      "kind": "user",
      "methods": {
        "attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))": {
          "notice": "Attests to a specific schema."
        },
        "attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))": {
          "notice": "Attests to a specific schema via the provided ECDSA signature."
        },
        "getAttestTypeHash()": {
          "notice": "Returns the EIP712 type hash for the attest function."
        },
        "getAttestation(bytes32)": {
          "notice": "Returns an existing attestation by UID."
        },
        "getDomainSeparator()": {
          "notice": "Returns the domain separator used in the encoding of the signatures for attest, and revoke."
        },
        "getName()": {
          "notice": "Returns the EIP712 name."
        },
        "getNonce(address)": {
          "notice": "Returns the current nonce per-account."
        },
        "getRevokeOffchain(address,bytes32)": {
          "notice": "Returns the timestamp that the specified data was timestamped with."
        },
        "getRevokeTypeHash()": {
          "notice": "Returns the EIP712 type hash for the revoke function."
        },
        "getSchemaRegistry()": {
          "notice": "Returns the address of the global schema registry."
        },
        "getTimestamp(bytes32)": {
          "notice": "Returns the timestamp that the specified data was timestamped with."
        },
        "increaseNonce(uint256)": {
          "notice": "Provides users an option to invalidate nonces by increasing their nonces to (higher) new values."
        },
        "isAttestationValid(bytes32)": {
          "notice": "Checks whether an attestation exists."
        },
        "multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])": {
          "notice": "Attests to multiple schemas."
        },
        "multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": {
          "notice": "Attests to multiple schemas using via provided ECDSA signatures."
        },
        "multiRevoke((bytes32,(bytes32,uint256)[])[])": {
          "notice": "Revokes existing attestations to multiple schemas."
        },
        "multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": {
          "notice": "Revokes existing attestations to multiple schemas via provided ECDSA signatures."
        },
        "multiRevokeOffchain(bytes32[])": {
          "notice": "Revokes the specified multiple bytes32 data."
        },
        "multiTimestamp(bytes32[])": {
          "notice": "Timestamps the specified multiple bytes32 data."
        },
        "revoke((bytes32,(bytes32,uint256)))": {
          "notice": "Revokes an existing attestation to a specific schema."
        },
        "revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))": {
          "notice": "Revokes an existing attestation to a specific schema via the provided ECDSA signature."
        },
        "revokeOffchain(bytes32)": {
          "notice": "Revokes the specified bytes32 data."
        },
        "timestamp(bytes32)": {
          "notice": "Timestamps the specified bytes32 data."
        },
        "version()": {
          "notice": "Returns the full semver contract version."
        }
      },
      "version": 1
    }
  },
  "settings": {
    "remappings": [
      "@ethereum-attestation-service/=node_modules/@ethereum-attestation-service/",
      "@openzeppelin/=node_modules/@openzeppelin/",
      "eth-gas-reporter/=node_modules/eth-gas-reporter/",
      "forge-std/=lib/forge-std/src/",
      "hardhat/=node_modules/hardhat/"
    ],
    "optimizer": {
      "enabled": true,
      "runs": 10000
    },
    "metadata": {
      "bytecodeHash": "ipfs"
    },
    "compilationTarget": {
      "contracts/CustomEAS.sol": "CustomEAS"
    },
    "evmVersion": "cancun",
    "libraries": {},
    "viaIR": true
  },
  "sources": {
    "contracts/CustomEAS.sol": {
      "keccak256": "0xf4ade198ec0e78b9b9db3f9d9e7d0695a244cd29b8fa5ebe6a72e2c24f006e74",
      "urls": [
        "bzz-raw://223853f1d30fc85de32548d47e9ed977851200afc3daa6cf9a88d419b42db806",
        "dweb:/ipfs/QmTJEDpWT4LnXw8LQwSuZGHsSY8tSHpEk7x29Nqkn3tMvX"
      ],
      "license": "FSL-1.1-MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/Common.sol": {
      "keccak256": "0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685",
      "urls": [
        "bzz-raw://da1dc9aedbb1d4d39c46c2235918d3adfbc5741dd34a46010cf425d134e7936d",
        "dweb:/ipfs/QmWUk6bXnLaghS2riF3GTFEeURCzgYFMA5woa6AsgPwEgc"
      ],
      "license": "MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/EAS.sol": {
      "keccak256": "0x60d59e039e6ec40887e8a946f516b55997d689212c44a89f434119535dd9a3c4",
      "urls": [
        "bzz-raw://b5234ba00beaf7a43005c0759e883c6878eecc4d0efeb42c10be8c9e8b17ba21",
        "dweb:/ipfs/QmPdUaubX2Yr9kMSyyYxkY3ueHiGzPfqTq5ubzbmQiQA6B"
      ],
      "license": "MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol": {
      "keccak256": "0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12",
      "urls": [
        "bzz-raw://49e448c26c08952df034692d2ab3519dd40a1ebbeae4ce68b294567441933880",
        "dweb:/ipfs/QmWHcudjskUSCjgqsNWE65LVfWvcYB2vBn8RB1SmzvRLNR"
      ],
      "license": "MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol": {
      "keccak256": "0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754",
      "urls": [
        "bzz-raw://d453a929ef64a69cd31195ec2ee5ed1193bfa29f633e13c960e92154c37ad158",
        "dweb:/ipfs/QmXs1Z3njbHs2EMgHonrZDfcwdog4kozHY5tYNrhZK5yqz"
      ],
      "license": "MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol": {
      "keccak256": "0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18",
      "urls": [
        "bzz-raw://3dd543fa0e33cef1ea757627f9c2a10a66ee1ce17aa9087f437c5b53a903c7f0",
        "dweb:/ipfs/QmXsy6UsGBzF9zPCCjmiwPpCcX3tHqU13TmR67B69tKnR6"
      ],
      "license": "MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/Semver.sol": {
      "keccak256": "0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9",
      "urls": [
        "bzz-raw://30c36e580cd93d9acb13e1a11e833946a8bd0bd2a8d1b2be049f0d96e0989808",
        "dweb:/ipfs/QmXmQTxKjSrUWutafQsqkbGufXqtzxuDAiMMJjXCHXiEqh"
      ],
      "license": "MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/eip1271/EIP1271Verifier.sol": {
      "keccak256": "0x590977110db1256cc00416bdf74eb8264a0eda358ccded303610369a2930b614",
      "urls": [
        "bzz-raw://ef015b3bee8859e6658c0eac6471d05f2991a5f4b6b5c2aa5571bbdab622d6e9",
        "dweb:/ipfs/QmUHriGkixE62c5qWjyM9DWZFykDcjQ7T6Tbfi3DPD38ym"
      ],
      "license": "MIT"
    },
    "node_modules/@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol": {
      "keccak256": "0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb",
      "urls": [
        "bzz-raw://cf1cabacfb15c9bace8280b540b52e5aa440e1b4eba675f9782c34ce0f03902f",
        "dweb:/ipfs/QmakYcK4xbrijzvoaBCmBJK6HeaBqbXxWKtDQ1z62aXwCR"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/interfaces/IERC1271.sol": {
      "keccak256": "0x3d4cd07258d675b6dfa3d9dfd623a77b38fb9935f4a5381ff4bc969948720976",
      "urls": [
        "bzz-raw://30abb60a4d98ad9a33de4fa5e9072342e12df3a79e9c71b5f59ce049ae8cd535",
        "dweb:/ipfs/QmT6NXJDjsf8H14nPYQsFELDB8q5ZTmG9cjdX2bEQJW7ST"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol": {
      "keccak256": "0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92",
      "urls": [
        "bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a",
        "dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/Address.sol": {
      "keccak256": "0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c",
      "urls": [
        "bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e",
        "dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/Errors.sol": {
      "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
      "urls": [
        "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
        "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/Panic.sol": {
      "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
      "urls": [
        "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
        "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/ShortStrings.sol": {
      "keccak256": "0x1fcf8cceb1a67e6c8512267e780933c4a3f63ef44756e6c818fda79be51c8402",
      "urls": [
        "bzz-raw://617d7d57f6f9cd449068b4d23daf485676d083aae648e038d05eb3a13291de35",
        "dweb:/ipfs/QmPADWPiGaSzZDFNpFEUx4ZPqhzPkYncBpHyTfAGcfsqzy"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": {
      "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
      "urls": [
        "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
        "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/Strings.sol": {
      "keccak256": "0x81c274a60a7ae232ae3dc9ff3a4011b4849a853c13b0832cd3351bb1bb2f0dae",
      "urls": [
        "bzz-raw://9da0c20dc74358a2a76330818f3bac9d1e2ce3371aec847b9cbf5d147fbae4f6",
        "dweb:/ipfs/QmeczhmnFv1hbXKGLwbYXY6Rrytc9a5A2YaRi5QMMgjPnb"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
      "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84",
      "urls": [
        "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9",
        "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol": {
      "keccak256": "0x0c60057e7351874f086db8dc9291b7ada9ad62cb7725befd2991430d04a74572",
      "urls": [
        "bzz-raw://33cdfd1fc36410d45046f88ff9864350146b194736c32834baa38d99b843ffbe",
        "dweb:/ipfs/QmdVmqgFKjgEBURy4KUwWDA6J1LEg1BKcHcXsx4nkeHAD2"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": {
      "keccak256": "0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631",
      "urls": [
        "bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59",
        "dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol": {
      "keccak256": "0xbdc3bb48ccedb818cd75a6d74a16df55a822e9f6d3cc54c59f576f10aab67b5f",
      "urls": [
        "bzz-raw://2284f25f2478f419d7781573b17a89d0e7c5589a865d55e2d6ed5163aee23aa8",
        "dweb:/ipfs/QmNsr2625APBQiNKpYnX5VcSnYgfUHR9Uzzp9pRXjoDqK7"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
      "keccak256": "0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6",
      "urls": [
        "bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3",
        "dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
      "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
      "urls": [
        "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
        "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
      ],
      "license": "MIT"
    },
    "node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": {
      "keccak256": "0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3",
      "urls": [
        "bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03",
        "dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"
      ],
      "license": "MIT"
    }
  },
  "version": 1
}