{
  "id": "type-n26",
  "revision": "c6cd726a58f84d71fabf4ffc3383950f47974f31f73bbd832b8953b5ef02da94",
  "regions": [
    {
      "id": "storage",
      "label": "Storage",
      "parent": null
    },
    {
      "id": "common-logic",
      "label": "Common logic",
      "parent": null
    },
    {
      "id": "device-storage",
      "label": "Device storage",
      "parent": null
    },
    {
      "id": "mobile",
      "label": "Mobile",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "store",
      "label": "Attachment object store",
      "kind": "N26",
      "region": "storage",
      "ports": [
        {
          "id": "range",
          "profile": "P02",
          "contract": "DigestBoundByteRangeV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "download",
      "label": "Resumable downloader",
      "kind": "N04",
      "region": "common-logic",
      "ports": [
        {
          "id": "range",
          "profile": "P02",
          "contract": "DigestBoundByteRangeV1",
          "polarity": "Require"
        },
        {
          "id": "save",
          "profile": "P09",
          "contract": "VerifiedChunkWriteV1",
          "polarity": "Require"
        },
        {
          "id": "state",
          "profile": "P08",
          "contract": "AttachmentDownloadStateV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "chunks",
      "label": "Verified local chunks",
      "kind": "N26",
      "region": "device-storage",
      "ports": [
        {
          "id": "write",
          "profile": "P09",
          "contract": "VerifiedChunkWriteV1",
          "polarity": "Offer"
        },
        {
          "id": "view",
          "profile": "P17",
          "contract": "AssembledAttachmentViewV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "digest",
      "label": "Attachment digest check",
      "kind": "N01",
      "region": "common-logic",
      "ports": [
        {
          "id": "bytes",
          "profile": "P17",
          "contract": "AssembledAttachmentViewV1",
          "polarity": "Require"
        },
        {
          "id": "verified",
          "profile": "P01",
          "contract": "VerifiedAttachmentRefV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "ui",
      "label": "Attachment Surface",
      "kind": "N11",
      "region": "mobile",
      "ports": [
        {
          "id": "attachment",
          "profile": "P01",
          "contract": "VerifiedAttachmentRefV1",
          "polarity": "Require"
        },
        {
          "id": "progress",
          "profile": "P08",
          "contract": "AttachmentDownloadStateV1",
          "polarity": "Require"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "range",
      "kind": "H05",
      "incidences": [
        {
          "node": "download",
          "port": "range",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "store",
          "port": "range",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "save",
      "kind": "H05",
      "incidences": [
        {
          "node": "download",
          "port": "save",
          "role": "caller",
          "ordinal": 0
        },
        {
          "node": "chunks",
          "port": "write",
          "role": "callee",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "assemble",
      "kind": "H02",
      "incidences": [
        {
          "node": "chunks",
          "port": "view",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "digest",
          "port": "bytes",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "verified",
      "kind": "H02",
      "incidences": [
        {
          "node": "digest",
          "port": "verified",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "ui",
          "port": "attachment",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "progress",
      "kind": "H02",
      "incidences": [
        {
          "node": "download",
          "port": "state",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "ui",
          "port": "progress",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
