{
  "schema_version": "1.2",
  "url": "https://trustbutveri.fyi/explorer/?mechanisms=M-0001&chips=existing",
  "data_generated": "2026-10-08",
  "definitions": {
    "methodology": "https://trustbutveri.fyi/about/methodology/",
    "readiness": "https://trustbutveri.fyi/about/readiness/",
    "filters": [
      {
        "id": "prover",
        "label": "Prover",
        "question": "How far can the party being checked be trusted?",
        "options": [
          {
            "value": "cooperative",
            "label": "Cooperative"
          },
          {
            "value": "semi-trusted",
            "label": "Semi-trusted"
          },
          {
            "value": "adversarial",
            "label": "Adversarial"
          }
        ],
        "rule": "Keeps mechanisms whose threat model holds against at least this prover. Adversarial is the strongest assumption.",
        "about": "The prover is the party being checked. Semi-trusted designs rely on part of its stack: usually the chip vendor's hardware root of trust, its firmware or counters, or its supply-chain records. Adversarial designs aim to hold even if it cheats wherever the checks allow, within their stated assumptions."
      },
      {
        "id": "onsite",
        "label": "Verifier devices on site",
        "question": "May the verifier install its own hardware at the prover's sites?",
        "options": [
          {
            "value": "no",
            "label": "Not allowed"
          }
        ],
        "rule": "\"Not allowed\" removes mechanisms that need a retrofit device, such as a network tap or a sealed sensor.",
        "about": "Some mechanisms need a device the verifier owns or trusts at the prover's facility, such as a network tap, a bandwidth limiter or a sealed sensor. Choose Not allowed when the setting rules that out. Inspectors are not covered."
      },
      {
        "id": "coop",
        "label": "Prover cooperation",
        "question": "How much must the prover take part?",
        "options": [
          {
            "value": "partial",
            "label": "Partial at most"
          },
          {
            "value": "none",
            "label": "Not required"
          }
        ],
        "rule": "\"Partial at most\" removes mechanisms that need the prover's active participation. \"Not required\" keeps only those that work without it.",
        "about": "Required: the prover takes part, for example by logging requests, producing proofs or opening records. Partial: some access, such as installing a device. Not required: works from outside, such as satellite imagery."
      },
      {
        "id": "chips",
        "label": "Chips",
        "question": "May the proposal depend on new chip designs?",
        "options": [
          {
            "value": "existing",
            "label": "Existing chips only"
          }
        ],
        "rule": "\"Existing chips only\" removes mechanisms that need changes to future chip designs.",
        "about": "New chip features take years to reach a deployed fleet and cover only chips made after they ship. Mechanisms that use shipping features, such as trusted execution environments or performance counters, stay."
      },
      {
        "id": "ready",
        "label": "Minimum readiness",
        "question": "How mature must each mechanism be?",
        "options": [
          {
            "value": "R1",
            "label": "R1 Proposed"
          },
          {
            "value": "R2",
            "label": "R2 Demonstrated"
          },
          {
            "value": "R3",
            "label": "R3 In production"
          },
          {
            "value": "R4",
            "label": "R4 Deployment-ready"
          }
        ],
        "rule": "Keeps mechanisms whose readiness level is at least this one.",
        "about": "A level describes the public evidence for a mechanism's stated use, not its cost or feasibility. R3 can still have open critical flaws."
      },
      {
        "id": "tested",
        "label": "Attack testing",
        "question": "How hard has each mechanism been attacked in public?",
        "options": [
          {
            "value": "analysis",
            "label": "Published analysis"
          },
          {
            "value": "red-teamed",
            "label": "Red-teamed"
          },
          {
            "value": "independent-red-team",
            "label": "Independent red-team"
          }
        ],
        "rule": "Keeps mechanisms whose strongest published attack testing is at least this.",
        "about": "The strongest published attempt to break the mechanism for its verification use: a security analysis, red-teaming by its developers or collaborators, or a red team independent of them."
      },
      {
        "id": "hide",
        "label": "Keep hidden from the verifier",
        "question": "What must the verifier never see?",
        "options": [
          {
            "value": "weights",
            "label": "Model weights"
          },
          {
            "value": "io",
            "label": "Inputs and outputs"
          },
          {
            "value": "training",
            "label": "Training data"
          }
        ],
        "rule": "Removes mechanisms that show the asset to the verifier. Conditional or unspecified exposure stays with a note and needs checking against the privacy requirement.",
        "about": "Model weights: the checked model's parameters. Inputs and outputs: the requests a deployed model serves and its responses. Training data: what a model was trained on. Each mechanism's exposure is the editors' reading of its record: shown, depends on the design (kept, with a note), hidden, not involved, or unspecified for a selected implementation. Code and configuration are not covered yet."
      }
    ],
    "exposure": "For model weights, inputs and outputs, and training data. This is the editors' reading of each mechanism's record (its threat model, how it works and its limitations), not a field of the record. Shown: the verifier sees it. Depends: on the design or variant, or the verifier sees only samples. Hidden: the verifier sees only commitments, hashes, proofs or results. Not involved: the record does not handle it. Unspecified: the selected implementation has no asset-specific assessment here.",
    "claim_status": {
      "addressed": "A mechanism in the proposal is aimed at this claim and is not excluded by the filters.",
      "partly-addressed": "Only supporting mechanisms, or mechanisms aimed at it that the filters exclude.",
      "unaddressed": "No mechanism in the proposal addresses this claim."
    },
    "finding_scope": "Evidence scope describes where a finding was demonstrated; it does not establish applicability to every implementation in the mechanism family.",
    "claim_finding_scope": "open_critical_findings names active findings on the assessed records; open_critical_context names conditional family findings whose implementation applicability is unassessed.",
    "legacy_status": "The status field retains covered/partial/none for compatibility. It names claim links, never successful verification. Use claim_status and status_label for presentation."
  },
  "filters": {
    "prover": "",
    "onsite": "",
    "coop": "",
    "chips": "existing",
    "ready": "",
    "tested": "",
    "hide": []
  },
  "mechanisms_passing_filters": 23,
  "claims": [],
  "mechanisms": [
    {
      "id": "M-0001",
      "title": "Sampled inference recomputation",
      "url": "https://trustbutveri.fyi/mechanisms/sampled-inference-recomputation/",
      "assessment_record": {
        "id": "M-0001",
        "title": "Sampled inference recomputation",
        "url": "https://trustbutveri.fyi/mechanisms/sampled-inference-recomputation/"
      },
      "selected_implementation": null,
      "readiness": {
        "level": "R3",
        "scope": "checking untrusted workers' activations against the declared model, prompt and precision",
        "confidence": "low",
        "evidence": [
          "S-0015",
          "S-0016",
          "S-1000",
          "S-1001",
          "S-1003",
          "S-1005",
          "S-1006",
          "S-1008",
          "S-1507",
          "S-3000",
          "S-3001"
        ]
      },
      "assessed_properties": {
        "threat_model": "adversarial",
        "hardware_requirement": "none",
        "prover_cooperation": "required",
        "adversarial_evaluation": "analysis"
      },
      "claims": [],
      "exposure": {
        "weights": "partial",
        "io": "partial",
        "training": "none",
        "note": "Recomputation needs the weights and sampled requests inside the checking environment. For closed models, the record describes a trusted, confidential environment; disclosure to the verifier depends on that boundary.",
        "sources": [
          "S-0016",
          "S-0017",
          "S-0018"
        ]
      },
      "family_finding_context": [],
      "filter_issues": []
    }
  ],
  "strengths": {
    "covered": [],
    "production": [
      "M-0001"
    ],
    "adversarial": [
      "M-0001"
    ],
    "noNewHardware": [
      "M-0001"
    ],
    "mitigated": [],
    "notCounted": []
  },
  "properties": {
    "covered": [],
    "production": [
      "M-0001"
    ],
    "adversarial": [
      "M-0001"
    ],
    "noNewHardware": [
      "M-0001"
    ],
    "mitigated": [],
    "notCounted": []
  },
  "attack_testing": [
    {
      "id": "M-0001",
      "record": "M-0001",
      "evaluation": "analysis",
      "in_setting": true
    }
  ],
  "selected_implementations": {},
  "weaknesses": {
    "gaps": [],
    "excluded": [],
    "unlinked": [],
    "critical": [],
    "significant": [
      {
        "mech": "M-0001",
        "n": 1,
        "title": "Tolerance for numerical noise leaves a covert channel",
        "kind": "demonstrated-attack",
        "severity": "significant",
        "status": "open",
        "evidence_scope": null,
        "scope_note": null,
        "related_finding": null,
        "description": "Schemes that accept approximate matches can put an upper bound on an adversary's covert bandwidth, but they cannot close the channel. The weight-exfiltration detector cut exfiltratable information to under 0.5%, not to zero, on a 30-billion-parameter mixture-of-experts model under benign prompt traffic. Its authors called the channel's size under adversarial prompts an open empirical question. An independent study showed that an adversary who controls the prompts roughly doubles the bits leaked per token. Across six models, that cut the slowdown from 146–254 times under benign prompts to 60–118 times. The attack widens the exfiltration bound. It does not target the check that outputs match the declared model.",
        "response": null,
        "sources": [
          "S-0020",
          "S-0015",
          "S-1507"
        ],
        "helps": [
          {
            "by": "M-0002",
            "how": "Bit-exact inference would remove the numerical tolerance if exact replay can be deployed with the required weights and configuration."
          }
        ]
      },
      {
        "mech": "M-0001",
        "n": 2,
        "title": "Only recorded traffic is checked",
        "kind": "theoretical-argument",
        "severity": "significant",
        "status": "open",
        "evidence_scope": null,
        "scope_note": null,
        "related_finding": null,
        "description": "Recomputation checks that recorded, declared workloads are correct. It cannot show that the record is complete. The published schemes do not cover hidden workloads run on the same compute, or substituted work. Rinberg et al. say their exfiltration-detection scheme cannot stand alone.",
        "response": null,
        "sources": [
          "S-0017",
          "S-0015"
        ],
        "helps": [
          {
            "by": "M-0013",
            "how": "Taps copy and hash all traffic on the monitored links, which bears on whether the traffic record is complete. They do not show what else ran on the same chips."
          }
        ]
      },
      {
        "mech": "M-0001",
        "n": 3,
        "title": "Some inference optimizations are not covered",
        "kind": "theoretical-argument",
        "severity": "significant",
        "status": "open",
        "evidence_scope": null,
        "scope_note": null,
        "related_finding": null,
        "description": "TOPLOC's authors state that it cannot detect speculative decoding in which a cheaper model does the decoding. They did not test whether it distinguishes types of key-value (KV) cache compression. DiFR was evaluated only on sampling from a single model. Its authors sketch an extension to one speculative-decoding algorithm but do not test it.",
        "response": null,
        "sources": [
          "S-1000",
          "S-0016"
        ]
      }
    ],
    "criticalMechanisms": [],
    "significantMechanisms": [
      "M-0001"
    ],
    "familyContext": [],
    "minor": 1,
    "minorFindings": [
      {
        "mech": "M-0001",
        "n": 4,
        "title": "Mixed hardware widens the honest baseline",
        "kind": "open-question",
        "severity": "minor",
        "status": "open",
        "evidence_scope": null,
        "scope_note": null,
        "related_finding": null,
        "description": "When honest reference runs span different GPU types, the spread of benign scores grows. In DiFR's tests on Qwen3-30B-A3B, pooling A100 and H200 runs left Token-DiFR unable to separate the two smallest tested changes, a temperature of 1.1 instead of 1.0 and a simulated top-2 sampling bug, at the target false-positive rate, while cross-entropy separated them. Matched provider and verifier environments, or pooling that weights rare large deviations, restored detection.",
        "response": null,
        "sources": [
          "S-0016"
        ]
      }
    ],
    "minorBy": [
      {
        "id": "M-0001",
        "n": 1
      }
    ],
    "notDemonstrated": [],
    "newChip": []
  },
  "findings": [
    {
      "mech": "M-0001",
      "record": "M-0001",
      "n": 1,
      "title": "Tolerance for numerical noise leaves a covert channel",
      "kind": "demonstrated-attack",
      "severity": "significant",
      "status": "open",
      "evidence_scope": null,
      "scope_note": null,
      "related_finding": null,
      "description": "Schemes that accept approximate matches can put an upper bound on an adversary's covert bandwidth, but they cannot close the channel. The weight-exfiltration detector cut exfiltratable information to under 0.5%, not to zero, on a 30-billion-parameter mixture-of-experts model under benign prompt traffic. Its authors called the channel's size under adversarial prompts an open empirical question. An independent study showed that an adversary who controls the prompts roughly doubles the bits leaked per token. Across six models, that cut the slowdown from 146–254 times under benign prompts to 60–118 times. The attack widens the exfiltration bound. It does not target the check that outputs match the declared model.",
      "response": null,
      "sources": [
        "S-0020",
        "S-0015",
        "S-1507"
      ],
      "helps": [
        {
          "by": "M-0002",
          "how": "Bit-exact inference would remove the numerical tolerance if exact replay can be deployed with the required weights and configuration."
        }
      ]
    },
    {
      "mech": "M-0001",
      "record": "M-0001",
      "n": 2,
      "title": "Only recorded traffic is checked",
      "kind": "theoretical-argument",
      "severity": "significant",
      "status": "open",
      "evidence_scope": null,
      "scope_note": null,
      "related_finding": null,
      "description": "Recomputation checks that recorded, declared workloads are correct. It cannot show that the record is complete. The published schemes do not cover hidden workloads run on the same compute, or substituted work. Rinberg et al. say their exfiltration-detection scheme cannot stand alone.",
      "response": null,
      "sources": [
        "S-0017",
        "S-0015"
      ],
      "helps": [
        {
          "by": "M-0013",
          "how": "Taps copy and hash all traffic on the monitored links, which bears on whether the traffic record is complete. They do not show what else ran on the same chips."
        }
      ]
    },
    {
      "mech": "M-0001",
      "record": "M-0001",
      "n": 3,
      "title": "Some inference optimizations are not covered",
      "kind": "theoretical-argument",
      "severity": "significant",
      "status": "open",
      "evidence_scope": null,
      "scope_note": null,
      "related_finding": null,
      "description": "TOPLOC's authors state that it cannot detect speculative decoding in which a cheaper model does the decoding. They did not test whether it distinguishes types of key-value (KV) cache compression. DiFR was evaluated only on sampling from a single model. Its authors sketch an extension to one speculative-decoding algorithm but do not test it.",
      "response": null,
      "sources": [
        "S-1000",
        "S-0016"
      ]
    },
    {
      "mech": "M-0001",
      "record": "M-0001",
      "n": 4,
      "title": "Mixed hardware widens the honest baseline",
      "kind": "open-question",
      "severity": "minor",
      "status": "open",
      "evidence_scope": null,
      "scope_note": null,
      "related_finding": null,
      "description": "When honest reference runs span different GPU types, the spread of benign scores grows. In DiFR's tests on Qwen3-30B-A3B, pooling A100 and H200 runs left Token-DiFR unable to separate the two smallest tested changes, a temperature of 1.1 instead of 1.0 and a simulated top-2 sampling bug, at the target false-positive rate, while cross-entropy separated them. Matched provider and verifier environments, or pooling that weights rare large deviations, restored detection.",
      "response": null,
      "sources": [
        "S-0016"
      ]
    }
  ],
  "possible_additions": [
    {
      "id": "M-0002",
      "title": "Deterministic and bit-exact inference",
      "url": "https://trustbutveri.fyi/mechanisms/deterministic-inference/",
      "readiness": "R3",
      "fits_filters": true,
      "filter_issues": [],
      "reasons": [
        {
          "kind": "flaw",
          "mech": "M-0001",
          "n": 1,
          "title": "Tolerance for numerical noise leaves a covert channel",
          "severity": "significant",
          "how": "Bit-exact inference would remove the numerical tolerance if exact replay can be deployed with the required weights and configuration."
        }
      ]
    },
    {
      "id": "M-0013",
      "title": "Network taps and certifiers",
      "url": "https://trustbutveri.fyi/mechanisms/network-taps-and-certifiers/",
      "readiness": "R1",
      "fits_filters": true,
      "filter_issues": [],
      "reasons": [
        {
          "kind": "flaw",
          "mech": "M-0001",
          "n": 2,
          "title": "Only recorded traffic is checked",
          "severity": "significant",
          "how": "Taps copy and hash all traffic on the monitored links, which bears on whether the traffic record is complete. They do not show what else ran on the same chips."
        },
        {
          "kind": "blocker",
          "mech": "M-0001",
          "text": "In tap-based retrofit designs, recording all inference traffic needs network taps and recomputation servers that can ingest it, in the worst case one recomputation-server network interface per inference front-end interface."
        }
      ]
    }
  ],
  "goal": null,
  "design": null,
  "dependencies": {
    "prerequisites": [],
    "shared": [],
    "blockers": [
      {
        "mech": "M-0001",
        "n": 1,
        "text": "In tap-based retrofit designs, recording all inference traffic needs network taps and recomputation servers that can ingest it, in the worst case one recomputation-server network interface per inference front-end interface.",
        "theme": "coverage-hidden-compute",
        "blocked_by": "M-0013",
        "sources": [
          "S-1008",
          "S-0067"
        ],
        "inProposal": false
      },
      {
        "mech": "M-0001",
        "n": 2,
        "text": "In retrofit designs, the recomputation server must sit inside the prover's data centre, possibly under the prover's physical control, and still be protected from a compromised provider, which Amodo rates 'not on track'.",
        "theme": "hardware-trust",
        "blocked_by": null,
        "sources": [
          "S-1008",
          "S-0015"
        ],
        "inProposal": null
      },
      {
        "mech": "M-0001",
        "n": 3,
        "text": "No independent red-team of a recomputation consistency check has been published (the one independent attack study targets the weight-exfiltration bound), and Amodo rates recomputation red-teaming 'not started'.",
        "theme": "adversarial-validation",
        "blocked_by": null,
        "sources": [
          "S-1008",
          "S-1507"
        ],
        "inProposal": null
      },
      {
        "mech": "M-0001",
        "n": 4,
        "text": "Tolerance-based checks need calibration on trusted hardware and exact knowledge of the provider's sampling procedure, and in one prototype a sampling-implementation mismatch produced large spurious differences.",
        "theme": "performance-compatibility",
        "blocked_by": null,
        "sources": [
          "S-0016",
          "S-1006"
        ],
        "inProposal": null
      },
      {
        "mech": "M-0001",
        "n": 5,
        "text": "The verifier needs the model weights, so checking a closed-weights model requires a trusted, confidential recomputation environment, which the retrofit designs place inside the prover's facility.",
        "theme": "privacy-leakage",
        "blocked_by": null,
        "sources": [
          "S-0016",
          "S-0017",
          "S-0018"
        ],
        "inProposal": null
      }
    ]
  },
  "exposure": {
    "weights": {
      "shown": [],
      "partial": [
        "M-0001"
      ],
      "hidden": [],
      "none": [],
      "unknown": []
    },
    "io": {
      "shown": [],
      "partial": [
        "M-0001"
      ],
      "hidden": [],
      "none": [],
      "unknown": []
    },
    "training": {
      "shown": [],
      "partial": [],
      "hidden": [],
      "none": [
        "M-0001"
      ],
      "unknown": []
    }
  },
  "implementations": [
    {
      "mechanism": "M-0001",
      "selected": null,
      "implementations": [
        {
          "id": "I-0011",
          "title": "AI 2040 inference-only verification stack",
          "url": "https://trustbutveri.fyi/implementations/ai-2040-inference-only-verification-plan/"
        },
        {
          "id": "I-0002",
          "title": "DiFR (Divergence From Reference)",
          "url": "https://trustbutveri.fyi/implementations/difr/"
        },
        {
          "id": "I-0012",
          "title": "Low-trust AI compute verification system overview",
          "url": "https://trustbutveri.fyi/implementations/low-trust-compute-verification-system-overview/"
        },
        {
          "id": "I-0008",
          "title": "SASH confidential network logger",
          "url": "https://trustbutveri.fyi/implementations/sash-confidential-network-logger/"
        },
        {
          "id": "I-0001",
          "title": "TOPLOC",
          "url": "https://trustbutveri.fyi/implementations/toploc/"
        }
      ]
    }
  ],
  "sources": [
    {
      "id": "S-0015",
      "title": "Verifying LLM Inference to Detect Model Weight Exfiltration",
      "authors": "R. Rinberg et al.",
      "year": 2025,
      "url": "https://arxiv.org/abs/2511.02620",
      "path": "/sources/rinberg-verifying-llm-inference-weight-exfiltration/"
    },
    {
      "id": "S-0016",
      "title": "DiFR: Inference Verification Despite Nondeterminism",
      "authors": "A. Karvonen et al.",
      "year": 2025,
      "url": "https://arxiv.org/abs/2511.20621",
      "path": "/sources/karvonen-difr/"
    },
    {
      "id": "S-1000",
      "title": "TOPLOC: A Locality Sensitive Hashing Scheme for Trustless Verifiable Inference",
      "authors": "J. M. Ong et al.",
      "year": 2025,
      "url": "https://proceedings.mlr.press/v267/ong25a.html",
      "path": "/sources/ong-toploc/"
    },
    {
      "id": "S-1001",
      "title": "PrimeIntellect-ai/toploc (GitHub repository)",
      "authors": "Prime Intellect",
      "year": 2025,
      "url": "https://github.com/PrimeIntellect-ai/toploc",
      "path": "/sources/primeintellect-toploc-code/"
    },
    {
      "id": "S-1003",
      "title": "INTELLECT-2: A Reasoning Model Trained Through Globally Decentralized Reinforcement Learning",
      "authors": "Prime Intellect Team et al.",
      "year": 2025,
      "url": "https://arxiv.org/abs/2505.07291",
      "path": "/sources/primeintellect-intellect-2/"
    },
    {
      "id": "S-1005",
      "title": "adamkarvonen/difr (GitHub repository)",
      "authors": "A. Karvonen",
      "year": 2025,
      "url": "https://github.com/adamkarvonen/difr",
      "path": "/sources/karvonen-difr-code/"
    },
    {
      "id": "S-1006",
      "title": "Scaling Recomputation Inference Verification",
      "authors": "Amodo Design",
      "year": 2026,
      "url": "https://amododesign.com/notes/2026-09-02-scaling-recomputation-inference-verification/",
      "path": "/sources/amodo-scaling-recomputation-inference-verification/"
    },
    {
      "id": "S-1008",
      "title": "AI 2040 Plan A — Verification SITREP",
      "authors": "Amodo Design",
      "year": 2026,
      "url": "https://amododesign.com/ai-verification/plan-a-sitrep/",
      "path": "/sources/amodo-plan-a-verification-sitrep/"
    },
    {
      "id": "S-1507",
      "title": "Adversarial Entropy Inflation Against Gumbel-Based Inference Verification",
      "authors": "N. Kezins",
      "year": 2026,
      "url": "https://arxiv.org/abs/2608.23375",
      "path": "/sources/kezins-adversarial-entropy-inflation/"
    },
    {
      "id": "S-3000",
      "title": "SYNTHETIC-2 Release: Four Million Collaboratively Generated Reasoning Traces",
      "authors": "Prime Intellect",
      "year": 2025,
      "url": "https://www.primeintellect.ai/blog/synthetic-2-release",
      "path": "/sources/primeintellect-synthetic-2-release/"
    },
    {
      "id": "S-3001",
      "title": "An Inference Verification Prototype — Stage 1",
      "authors": "Amodo Design",
      "year": 2026,
      "url": "https://amododesign.com/notes/2026-06-29-inference-verification-prototype/",
      "path": "/sources/amodo-inference-verification-prototype-stage-1/"
    },
    {
      "id": "S-0020",
      "title": "Bit-Exact AI Inference Verification Without Performance Tradeoffs",
      "authors": "N. Cankaya",
      "year": 2026,
      "url": "https://arxiv.org/abs/2606.00279",
      "path": "/sources/cankaya-bit-exact-inference-verification/"
    },
    {
      "id": "S-0017",
      "title": "Example Schemes for Verifying High-Stakes AI Agreements",
      "authors": "Amodo Design",
      "year": 2026,
      "url": "https://amododesign.com/notes/2026-06-23-verification-algorithms/",
      "path": "/sources/amodo-example-schemes-high-stakes-ai-agreements/"
    },
    {
      "id": "S-0018",
      "title": "A System Overview for Near-Term, Low-Trust AI Compute Verification",
      "authors": "N. Cankaya",
      "year": 2026,
      "url": "https://intelligence.org/wp-content/uploads/2026/06/A-system-overview-for-near-term-low-trust-AI-compute-verification.pdf",
      "path": "/sources/cankaya-system-overview-low-trust-compute-verification/"
    },
    {
      "id": "S-0067",
      "title": "Verification Plan",
      "authors": "R. Dean",
      "year": 2026,
      "url": "https://ai-2040.com/supplements/verification-plan",
      "path": "/sources/dean-verification-plan/"
    }
  ]
}