diff --git a/doc/.gitignore b/doc/.gitignore index fff39eba..de4566c7 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1 +1,6 @@ fig/graph +diagrams/ +site/node_modules/ +site/dist/ +site/.astro/ +TODO* \ No newline at end of file diff --git a/doc/fig/architecture_overview.excalidraw.json b/doc/fig/architecture_overview.excalidraw.json new file mode 100644 index 00000000..3fbda965 --- /dev/null +++ b/doc/fig/architecture_overview.excalidraw.json @@ -0,0 +1,849 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "idma-diagrams", + "elements": [ + { + "id": "el-1772036701911-0", + "type": "text", + "x": 220, + "y": 20, + "width": 344, + "height": 33, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 73077, + "version": 1, + "versionNonce": 392882, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "iDMA Architecture Overview", + "fontSize": 24, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 20, + "containerId": null, + "originalText": "iDMA Architecture Overview", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-1", + "type": "rectangle", + "x": 60, + "y": 100, + "width": 180, + "height": 80, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 554828, + "version": 1, + "versionNonce": 125925, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701911-2", + "type": "text" + } + ], + "updated": 1772036701911, + "link": null, + "locked": false + }, + { + "id": "el-1772036701911-2", + "type": "text", + "x": 110, + "y": 127.5, + "width": 80, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 614167, + "version": 1, + "versionNonce": 520301, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "Frontend", + "fontSize": 18, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 15, + "containerId": "el-1772036701911-1", + "originalText": "Frontend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-3", + "type": "text", + "x": 60, + "y": 190, + "width": 165, + "height": 33, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 360289, + "version": 1, + "versionNonce": 708396, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "Register IF / Descriptors\nSnitch ISA", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Register IF / Descriptors\nSnitch ISA", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-4", + "type": "rectangle", + "x": 360, + "y": 100, + "width": 180, + "height": 80, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 82575, + "version": 1, + "versionNonce": 105076, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701911-5", + "type": "text" + } + ], + "updated": 1772036701911, + "link": null, + "locked": false + }, + { + "id": "el-1772036701911-5", + "type": "text", + "x": 420, + "y": 127.5, + "width": 60, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 744429, + "version": 1, + "versionNonce": 783623, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "Midend", + "fontSize": 18, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 15, + "containerId": "el-1772036701911-4", + "originalText": "Midend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-6", + "type": "text", + "x": 370, + "y": 190, + "width": 113, + "height": 33, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 790121, + "version": 1, + "versionNonce": 412736, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "N-D decomposition\n(optional)", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "N-D decomposition\n(optional)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-7", + "type": "rectangle", + "x": 660, + "y": 100, + "width": 180, + "height": 80, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 135472, + "version": 1, + "versionNonce": 801774, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701911-8", + "type": "text" + } + ], + "updated": 1772036701911, + "link": null, + "locked": false + }, + { + "id": "el-1772036701911-8", + "type": "text", + "x": 715, + "y": 127.5, + "width": 70, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 792617, + "version": 1, + "versionNonce": 889486, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "Backend", + "fontSize": 18, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 15, + "containerId": "el-1772036701911-7", + "originalText": "Backend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-9", + "type": "text", + "x": 675, + "y": 190, + "width": 100, + "height": 33, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 671001, + "version": 1, + "versionNonce": 533082, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "Legalizer → R/W\nTransport Layer", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Legalizer → R/W\nTransport Layer", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-10", + "type": "arrow", + "x": 240, + "y": 140, + "width": 120, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 423602, + "version": 1, + "versionNonce": 961844, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 120, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701911-11", + "type": "text", + "x": 267, + "y": 121.5, + "width": 66, + "height": 17, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 904001, + "version": 1, + "versionNonce": 142784, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "idma_req_t", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": null, + "originalText": "idma_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-12", + "type": "arrow", + "x": 540, + "y": 140, + "width": 120, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 129560, + "version": 1, + "versionNonce": 868378, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 120, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701911-13", + "type": "text", + "x": 567, + "y": 121.5, + "width": 66, + "height": 17, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 344136, + "version": 1, + "versionNonce": 973177, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "idma_req_t", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": null, + "originalText": "idma_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-14", + "type": "arrow", + "x": 660, + "y": 160, + "width": -120, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 748434, + "version": 1, + "versionNonce": 783689, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -120, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701911-15", + "type": "text", + "x": 567, + "y": 141.5, + "width": 66, + "height": 17, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 258791, + "version": 1, + "versionNonce": 696760, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "idma_rsp_t", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": null, + "originalText": "idma_rsp_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-16", + "type": "arrow", + "x": 360, + "y": 160, + "width": -120, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 510022, + "version": 1, + "versionNonce": 438574, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -120, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701911-17", + "type": "text", + "x": 267, + "y": 141.5, + "width": 66, + "height": 17, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 478559, + "version": 1, + "versionNonce": 936356, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701911, + "link": null, + "locked": false, + "text": "idma_rsp_t", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": null, + "originalText": "idma_rsp_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701911-18", + "type": "arrow", + "x": 0, + "y": 140, + "width": 60, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 288337, + "version": 1, + "versionNonce": 745100, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701912, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 60, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701912-19", + "type": "text", + "x": 0, + "y": 110, + "width": 60, + "height": 33, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 845060, + "version": 1, + "versionNonce": 916753, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701912, + "link": null, + "locked": false, + "text": "Platform\nInterface", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Platform\nInterface", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701912-20", + "type": "arrow", + "x": 840, + "y": 140, + "width": 60, + "height": 0, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 307571, + "version": 1, + "versionNonce": 710668, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701912, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 60, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701912-21", + "type": "text", + "x": 910, + "y": 95, + "width": 66, + "height": 65, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 582165, + "version": 1, + "versionNonce": 989109, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701912, + "link": null, + "locked": false, + "text": "AXI4\nOBI\nAXI Stream\nINIT", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "AXI4\nOBI\nAXI Stream\nINIT", + "lineHeight": 1.35 + } + ], + "appState": { + "viewBackgroundColor": "#ffffff", + "exportBackground": true, + "exportWithDarkMode": false + } +} \ No newline at end of file diff --git a/doc/fig/architecture_overview.svg b/doc/fig/architecture_overview.svg new file mode 100644 index 00000000..be6eb1ba --- /dev/null +++ b/doc/fig/architecture_overview.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + +iDMA Architecture Overview +Frontend +Register IF / DescriptorsSnitch ISA +Midend +N-D decomposition(optional) +Backend +Legalizer → R/WTransport Layer +idma_req_t +idma_req_t +idma_rsp_t +idma_rsp_t +PlatformInterface +AXI4OBIAXI StreamINIT + + \ No newline at end of file diff --git a/doc/fig/backend.excalidraw.json b/doc/fig/backend.excalidraw.json new file mode 100644 index 00000000..a75b7f92 --- /dev/null +++ b/doc/fig/backend.excalidraw.json @@ -0,0 +1,2650 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "idma-diagrams", + "elements": [ + { + "id": "el-1772036701923-0", + "type": "text", + "x": 350, + "y": 5, + "width": 132, + "height": 27, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 455105, + "version": 1, + "versionNonce": 1643, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "iDMA Backend", + "fontSize": 20, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 16, + "containerId": null, + "originalText": "iDMA Backend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-1", + "type": "rectangle", + "x": 105, + "y": 55, + "width": 345, + "height": 360, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 10 + }, + "seed": 931906, + "version": 1, + "versionNonce": 83147, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-2", + "type": "text", + "x": 115, + "y": 61, + "width": 70, + "height": 19, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 484724, + "version": 1, + "versionNonce": 894250, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "Legalizer", + "fontSize": 14, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Legalizer", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-3", + "type": "rectangle", + "x": 530, + "y": 55, + "width": 310, + "height": 360, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f0f4ff", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 10 + }, + "seed": 74065, + "version": 1, + "versionNonce": 958876, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-4", + "type": "text", + "x": 540, + "y": 61, + "width": 116, + "height": 19, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 589244, + "version": 1, + "versionNonce": 237460, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "Transport Layer", + "fontSize": 14, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Transport Layer", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-5", + "type": "rectangle", + "x": 125, + "y": 78, + "width": 145, + "height": 65, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#e9ecef", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 228893, + "version": 1, + "versionNonce": 755693, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701923-6", + "type": "text" + } + ], + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-6", + "type": "text", + "x": 168.5, + "y": 92.5, + "width": 58, + "height": 36, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 420217, + "version": 1, + "versionNonce": 175683, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "Burst\nSplitter", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701923-5", + "originalText": "Burst\nSplitter", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-7", + "type": "rectangle", + "x": 125, + "y": 294, + "width": 145, + "height": 55, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffe3e3", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 926322, + "version": 1, + "versionNonce": 754056, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701923-8", + "type": "text" + } + ], + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-8", + "type": "text", + "x": 165, + "y": 312.5, + "width": 65, + "height": 18, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 834990, + "version": 1, + "versionNonce": 247362, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "Error FSM", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701923-7", + "originalText": "Error FSM", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-9", + "type": "rectangle", + "x": 320, + "y": 91, + "width": 80, + "height": 38, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#dee2e6", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 2 + }, + "seed": 910070, + "version": 1, + "versionNonce": 411427, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-10", + "type": "line", + "x": 336, + "y": 92, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 150327, + "version": 1, + "versionNonce": 7880, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-11", + "type": "line", + "x": 352, + "y": 92, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 665957, + "version": 1, + "versionNonce": 663623, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-12", + "type": "line", + "x": 368, + "y": 92, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 957404, + "version": 1, + "versionNonce": 682587, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-13", + "type": "line", + "x": 384, + "y": 92, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 448828, + "version": 1, + "versionNonce": 470064, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-14", + "type": "text", + "x": 320, + "y": 77, + "width": 11, + "height": 14, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 73281, + "version": 1, + "versionNonce": 258380, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "tx", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "tx", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-15", + "type": "rectangle", + "x": 320, + "y": 303, + "width": 80, + "height": 38, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#dee2e6", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 2 + }, + "seed": 283551, + "version": 1, + "versionNonce": 986955, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-16", + "type": "line", + "x": 336, + "y": 304, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 406702, + "version": 1, + "versionNonce": 271504, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-17", + "type": "line", + "x": 352, + "y": 304, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 790713, + "version": 1, + "versionNonce": 788702, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-18", + "type": "line", + "x": 368, + "y": 304, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 452133, + "version": 1, + "versionNonce": 238086, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-19", + "type": "line", + "x": 384, + "y": 304, + "width": 0, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 254697, + "version": 1, + "versionNonce": 474351, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 36 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-20", + "type": "text", + "x": 320, + "y": 345, + "width": 11, + "height": 14, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 753506, + "version": 1, + "versionNonce": 328752, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "tx", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "tx", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-21", + "type": "rectangle", + "x": 330, + "y": 168, + "width": 60, + "height": 28, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#dee2e6", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 2 + }, + "seed": 411463, + "version": 1, + "versionNonce": 843054, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-22", + "type": "line", + "x": 345, + "y": 169, + "width": 0, + "height": 26, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 361190, + "version": 1, + "versionNonce": 383578, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 26 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-23", + "type": "line", + "x": 360, + "y": 169, + "width": 0, + "height": 26, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 861951, + "version": 1, + "versionNonce": 573319, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 26 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-24", + "type": "line", + "x": 375, + "y": 169, + "width": 0, + "height": 26, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 779690, + "version": 1, + "versionNonce": 8979, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 26 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-25", + "type": "rectangle", + "x": 330, + "y": 230, + "width": 60, + "height": 28, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#dee2e6", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 2 + }, + "seed": 380430, + "version": 1, + "versionNonce": 662924, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-26", + "type": "line", + "x": 345, + "y": 231, + "width": 0, + "height": 26, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 400625, + "version": 1, + "versionNonce": 140256, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 26 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-27", + "type": "line", + "x": 360, + "y": 231, + "width": 0, + "height": 26, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 355269, + "version": 1, + "versionNonce": 220665, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 26 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-28", + "type": "line", + "x": 375, + "y": 231, + "width": 0, + "height": 26, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 397763, + "version": 1, + "versionNonce": 100743, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 26 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-29", + "type": "arrow", + "x": 395, + "y": 182, + "width": -70, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 694503, + "version": 1, + "versionNonce": 425247, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -70, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-30", + "type": "text", + "x": 398, + "y": 173, + "width": 30, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 283262, + "version": 1, + "versionNonce": 186362, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "retire", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "retire", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-31", + "type": "arrow", + "x": 395, + "y": 244, + "width": -70, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 813767, + "version": 1, + "versionNonce": 413149, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -70, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-32", + "type": "text", + "x": 398, + "y": 235, + "width": 30, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 234779, + "version": 1, + "versionNonce": 296460, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "retire", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "retire", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-33", + "type": "rectangle", + "x": 560, + "y": 75, + "width": 155, + "height": 70, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#dbe4ff", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 103936, + "version": 1, + "versionNonce": 786607, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-34", + "type": "text", + "x": 568, + "y": 83, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 110049, + "version": 1, + "versionNonce": 19834, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "Read\nModule", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Read\nModule", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-35", + "type": "rectangle", + "x": 660, + "y": 87, + "width": 42, + "height": 46, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#e8d5f5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 2 + }, + "seed": 929289, + "version": 1, + "versionNonce": 665108, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-36", + "type": "line", + "x": 666, + "y": 93, + "width": 30, + "height": 34, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 479837, + "version": 1, + "versionNonce": 942955, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 30, + 34 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-37", + "type": "line", + "x": 666, + "y": 127, + "width": 30, + "height": -34, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 249975, + "version": 1, + "versionNonce": 161422, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 30, + -34 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-38", + "type": "rectangle", + "x": 595, + "y": 200, + "width": 100, + "height": 50, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#fff3bf", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 2 + }, + "seed": 126263, + "version": 1, + "versionNonce": 192313, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-39", + "type": "line", + "x": 595, + "y": 212.5, + "width": 100, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 754529, + "version": 1, + "versionNonce": 231565, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 100, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-40", + "type": "line", + "x": 595, + "y": 225, + "width": 100, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 70818, + "version": 1, + "versionNonce": 775560, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 100, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-41", + "type": "line", + "x": 595, + "y": 237.5, + "width": 100, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 614281, + "version": 1, + "versionNonce": 368118, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 100, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701923-42", + "type": "text", + "x": 623.4, + "y": 219, + "width": 40, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 510072, + "version": 1, + "versionNonce": 417598, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "Buffer", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Buffer", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-43", + "type": "rectangle", + "x": 560, + "y": 287, + "width": 155, + "height": 70, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#d3f9d8", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 289263, + "version": 1, + "versionNonce": 170810, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false + }, + { + "id": "el-1772036701923-44", + "type": "text", + "x": 568, + "y": 295, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 427322, + "version": 1, + "versionNonce": 756709, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "Write\nModule", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Write\nModule", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-45", + "type": "arrow", + "x": 270, + "y": 110, + "width": 50, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 881874, + "version": 1, + "versionNonce": 64026, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 50, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-46", + "type": "arrow", + "x": 270, + "y": 125, + "width": 50, + "height": 197, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 364150, + "version": 1, + "versionNonce": 998830, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 20, + 0 + ], + [ + 20, + 197 + ], + [ + 50, + 197 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-47", + "type": "arrow", + "x": 400, + "y": 110, + "width": 160, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 755848, + "version": 1, + "versionNonce": 966315, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 160, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-48", + "type": "arrow", + "x": 400, + "y": 322, + "width": 160, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 688823, + "version": 1, + "versionNonce": 314370, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 160, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-49", + "type": "arrow", + "x": 645, + "y": 145, + "width": 0, + "height": 55, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 139341, + "version": 1, + "versionNonce": 518137, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 55 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-50", + "type": "arrow", + "x": 645, + "y": 250, + "width": 0, + "height": 37, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 89052, + "version": 1, + "versionNonce": 160064, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 37 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-51", + "type": "arrow", + "x": 30, + "y": 110.5, + "width": 95, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 593402, + "version": 1, + "versionNonce": 642377, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 95, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-52", + "type": "text", + "x": 30, + "y": 92.5, + "width": 66, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 591262, + "version": 1, + "versionNonce": 418702, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "1D request", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "1D request", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-53", + "type": "arrow", + "x": 105, + "y": 215, + "width": -75, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 630696, + "version": 1, + "versionNonce": 69738, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -75, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-54", + "type": "text", + "x": 35, + "y": 197, + "width": 53, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 439963, + "version": 1, + "versionNonce": 204414, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "response", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "response", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-55", + "type": "arrow", + "x": 30, + "y": 321.5, + "width": 95, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 907660, + "version": 1, + "versionNonce": 587838, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 95, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-56", + "type": "text", + "x": 18, + "y": 303.5, + "width": 93, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 171920, + "version": 1, + "versionNonce": 224537, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "error handling", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "error handling", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-57", + "type": "arrow", + "x": 595, + "y": 75, + "width": 0, + "height": -40, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 141040, + "version": 1, + "versionNonce": 703000, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + -40 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-58", + "type": "text", + "x": 587, + "y": 17, + "width": 15, + "height": 18, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 130591, + "version": 1, + "versionNonce": 667908, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "AR", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "AR", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-59", + "type": "arrow", + "x": 690, + "y": 35, + "width": 0, + "height": 40, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 596396, + "version": 1, + "versionNonce": 218680, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 40 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-60", + "type": "text", + "x": 687, + "y": 17, + "width": 8, + "height": 18, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 440388, + "version": 1, + "versionNonce": 243346, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "R", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "R", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-61", + "type": "arrow", + "x": 585, + "y": 357, + "width": 0, + "height": 83, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 224962, + "version": 1, + "versionNonce": 723096, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 83 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-62", + "type": "text", + "x": 575, + "y": 443, + "width": 15, + "height": 18, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 468873, + "version": 1, + "versionNonce": 924808, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "AW", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "AW", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-63", + "type": "arrow", + "x": 637.5, + "y": 440, + "width": 0, + "height": -83, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 155554, + "version": 1, + "versionNonce": 149268, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + -83 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-64", + "type": "text", + "x": 634.5, + "y": 443, + "width": 8, + "height": 18, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 904448, + "version": 1, + "versionNonce": 907058, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "B", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "B", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701923-65", + "type": "arrow", + "x": 690, + "y": 357, + "width": 0, + "height": 83, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 862521, + "version": 1, + "versionNonce": 868947, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 83 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701923-66", + "type": "text", + "x": 685, + "y": 443, + "width": 8, + "height": 18, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 824839, + "version": 1, + "versionNonce": 787408, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701923, + "link": null, + "locked": false, + "text": "W", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "W", + "lineHeight": 1.35 + } + ], + "appState": { + "viewBackgroundColor": "#ffffff", + "exportBackground": true, + "exportWithDarkMode": false + } +} \ No newline at end of file diff --git a/doc/fig/backend.svg b/doc/fig/backend.svg new file mode 100644 index 00000000..9e08f3b6 --- /dev/null +++ b/doc/fig/backend.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +iDMA Backend +Legalizer +Transport Layer +BurstSplitter +Error FSM +tx +tx +retire +retire +ReadModule +Buffer +WriteModule +1D request +response +error handling +AR +R +AW +B +W + + \ No newline at end of file diff --git a/doc/fig/legalizer.excalidraw.json b/doc/fig/legalizer.excalidraw.json new file mode 100644 index 00000000..78fccee5 --- /dev/null +++ b/doc/fig/legalizer.excalidraw.json @@ -0,0 +1,1580 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "idma-diagrams", + "elements": [ + { + "id": "el-1772036701916-0", + "type": "text", + "x": 300, + "y": 0, + "width": 109, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 596539, + "version": 1, + "versionNonce": 778842, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Legalizer", + "fontSize": 22, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "Legalizer", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-1", + "type": "text", + "x": 195, + "y": 28, + "width": 304, + "height": 17, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 965010, + "version": 1, + "versionNonce": 355146, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Splits 1D transfers into protocol-legal bursts", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Splits 1D transfers into protocol-legal bursts", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-2", + "type": "rectangle", + "x": 210, + "y": 60, + "width": 280, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 276407, + "version": 1, + "versionNonce": 644771, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701917-3", + "type": "text" + } + ], + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-3", + "type": "text", + "x": 308, + "y": 75.5, + "width": 84, + "height": 19, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 353594, + "version": 1, + "versionNonce": 68923, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "idma_req_t", + "fontSize": 14, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701917-2", + "originalText": "idma_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-4", + "type": "text", + "x": 225, + "y": 112, + "width": 282, + "height": 14, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 918308, + "version": 1, + "versionNonce": 974756, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "src_addr dst_addr length protocol options", + "fontSize": 10, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "src_addr dst_addr length protocol options", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-5", + "type": "arrow", + "x": 350, + "y": 110, + "width": 0, + "height": 45, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 349308, + "version": 1, + "versionNonce": 238426, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 45 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701917-6", + "type": "text", + "x": 100, + "y": 123, + "width": 394, + "height": 15, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 219611, + "version": 1, + "versionNonce": 395336, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Example: 6 KB transfer starting at 0x0C00 (3 KB into a 4 KB page)", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "Example: 6 KB transfer starting at 0x0C00 (3 KB into a 4 KB page)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-7", + "type": "rectangle", + "x": 100, + "y": 155, + "width": 100, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 414077, + "version": 1, + "versionNonce": 868283, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701917-8", + "type": "text" + } + ], + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-8", + "type": "text", + "x": 128.5, + "y": 160, + "width": 43, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 517147, + "version": 1, + "versionNonce": 291156, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Burst 1\n1 KB", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701917-7", + "originalText": "Burst 1\n1 KB", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-9", + "type": "rectangle", + "x": 204, + "y": 155, + "width": 260, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#bac8ff", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 454596, + "version": 1, + "versionNonce": 787382, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701917-10", + "type": "text" + } + ], + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-10", + "type": "text", + "x": 312.5, + "y": 160, + "width": 43, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 786085, + "version": 1, + "versionNonce": 110937, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Burst 2\n4 KB", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701917-9", + "originalText": "Burst 2\n4 KB", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-11", + "type": "rectangle", + "x": 468, + "y": 155, + "width": 100, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#c5f6fa", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 376664, + "version": 1, + "versionNonce": 604982, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701917-12", + "type": "text" + } + ], + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-12", + "type": "text", + "x": 496.5, + "y": 160, + "width": 43, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 510541, + "version": 1, + "versionNonce": 745858, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Burst 3\n1 KB", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701917-11", + "originalText": "Burst 3\n1 KB", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-13", + "type": "line", + "x": 202, + "y": 140, + "width": 0, + "height": 70, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 13947, + "version": 1, + "versionNonce": 923169, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 70 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701917-14", + "type": "line", + "x": 466, + "y": 140, + "width": 0, + "height": 70, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 5403, + "version": 1, + "versionNonce": 97903, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 70 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701917-15", + "type": "text", + "x": 184, + "y": 213, + "width": 36, + "height": 14, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 505924, + "version": 1, + "versionNonce": 579058, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "0x1000", + "fontSize": 10, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "0x1000", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-16", + "type": "text", + "x": 448, + "y": 213, + "width": 36, + "height": 14, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 572712, + "version": 1, + "versionNonce": 296927, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "0x2000", + "fontSize": 10, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "0x2000", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-17", + "type": "text", + "x": 95, + "y": 213, + "width": 36, + "height": 14, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 396972, + "version": 1, + "versionNonce": 205546, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "0x0C00", + "fontSize": 10, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "0x0C00", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-18", + "type": "text", + "x": 538, + "y": 213, + "width": 36, + "height": 14, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 881930, + "version": 1, + "versionNonce": 390411, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "0x2400", + "fontSize": 10, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "0x2400", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-19", + "type": "text", + "x": 207, + "y": 137, + "width": 129, + "height": 13, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 183075, + "version": 1, + "versionNonce": 676398, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "4 KB page boundaries (AXI)", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "4 KB page boundaries (AXI)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-20", + "type": "text", + "x": 598, + "y": 150, + "width": 127, + "height": 14, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 957035, + "version": 1, + "versionNonce": 153317, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Page size per protocol:", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "Page size per protocol:", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-21", + "type": "text", + "x": 598, + "y": 165, + "width": 146, + "height": 37, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 311835, + "version": 1, + "versionNonce": 193594, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "AXI 4 KB\nOBI 1 word (no bursts)\nTileLink POW2 aligned", + "fontSize": 9, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "AXI 4 KB\nOBI 1 word (no bursts)\nTileLink POW2 aligned", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-22", + "type": "text", + "x": 100, + "y": 250, + "width": 185, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 169324, + "version": 1, + "versionNonce": 365095, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Read / Write synchronization", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Read / Write synchronization", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-23", + "type": "rectangle", + "x": 100, + "y": 275, + "width": 230, + "height": 70, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#fff9db", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 584685, + "version": 1, + "versionNonce": 299196, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-24", + "type": "text", + "x": 112, + "y": 283, + "width": 103, + "height": 15, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 188656, + "version": 1, + "versionNonce": 626158, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Coupled (default)", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "Coupled (default)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-25", + "type": "text", + "x": 112, + "y": 301, + "width": 154, + "height": 37, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 870434, + "version": 1, + "versionNonce": 379032, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Both paths split at whichever\npage boundary comes first.\nUsed when both protocols burst.", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "Both paths split at whichever\npage boundary comes first.\nUsed when both protocols burst.", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-26", + "type": "rectangle", + "x": 350, + "y": 275, + "width": 230, + "height": 70, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 616557, + "version": 1, + "versionNonce": 599497, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-27", + "type": "text", + "x": 362, + "y": 283, + "width": 55, + "height": 15, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 9684, + "version": 1, + "versionNonce": 714867, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Decoupled", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "Decoupled", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-28", + "type": "text", + "x": 362, + "y": 301, + "width": 159, + "height": 37, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 992490, + "version": 1, + "versionNonce": 463499, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Read and write advance at their\nown pace. Required when one side\nhas no burst support (e.g. OBI).", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "Read and write advance at their\nown pace. Required when one side\nhas no burst support (e.g. OBI).", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-29", + "type": "text", + "x": 100, + "y": 375, + "width": 403, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 466987, + "version": 1, + "versionNonce": 96336, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Per-burst output (emitted each cycle until transfer complete)", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Per-burst output (emitted each cycle until transfer complete)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-30", + "type": "arrow", + "x": 270, + "y": 390, + "width": 0, + "height": 20, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 302018, + "version": 1, + "versionNonce": 449291, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 20 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701917-31", + "type": "arrow", + "x": 430, + "y": 390, + "width": 0, + "height": 20, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 756966, + "version": 1, + "versionNonce": 18771, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 20 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701917-32", + "type": "rectangle", + "x": 120, + "y": 410, + "width": 200, + "height": 105, + "angle": 0, + "strokeColor": "#364fc7", + "backgroundColor": "#edf2ff", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 821895, + "version": 1, + "versionNonce": 545206, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-33", + "type": "text", + "x": 130, + "y": 418, + "width": 80, + "height": 17, + "angle": 0, + "strokeColor": "#364fc7", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 242489, + "version": 1, + "versionNonce": 116140, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Read Request", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Read Request", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-34", + "type": "text", + "x": 130, + "y": 438, + "width": 152, + "height": 61, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 589682, + "version": 1, + "versionNonce": 681869, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Protocol metadata (AR)\n addr, len, size, burst, id\n\nDatapath control\n offset, shift, is_single", + "fontSize": 9, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "Protocol metadata (AR)\n addr, len, size, burst, id\n\nDatapath control\n offset, shift, is_single", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-35", + "type": "rectangle", + "x": 360, + "y": 410, + "width": 200, + "height": 105, + "angle": 0, + "strokeColor": "#2b8a3e", + "backgroundColor": "#ebfbee", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 773486, + "version": 1, + "versionNonce": 540525, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false + }, + { + "id": "el-1772036701917-36", + "type": "text", + "x": 370, + "y": 418, + "width": 86, + "height": 17, + "angle": 0, + "strokeColor": "#2b8a3e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 474817, + "version": 1, + "versionNonce": 345064, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Write Request", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Write Request", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-37", + "type": "text", + "x": 370, + "y": 438, + "width": 152, + "height": 73, + "angle": 0, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 69754, + "version": 1, + "versionNonce": 970556, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Protocol metadata (AW)\n addr, len, size, burst, id\n\nDatapath control\n offset, shift, num_beats\n last, super_last", + "fontSize": 9, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "Protocol metadata (AW)\n addr, len, size, burst, id\n\nDatapath control\n offset, shift, num_beats\n last, super_last", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-38", + "type": "text", + "x": 160, + "y": 521, + "width": 80, + "height": 15, + "angle": 0, + "strokeColor": "#364fc7", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 345889, + "version": 1, + "versionNonce": 617525, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "idma_r_req_t", + "fontSize": 11, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "idma_r_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-39", + "type": "text", + "x": 400, + "y": 521, + "width": 80, + "height": 15, + "angle": 0, + "strokeColor": "#2b8a3e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 951485, + "version": 1, + "versionNonce": 206338, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "idma_w_req_t", + "fontSize": 11, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "idma_w_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-40", + "type": "text", + "x": 575, + "y": 440, + "width": 35, + "height": 49, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 133095, + "version": 1, + "versionNonce": 751152, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Advance\naddr,\nreduce\nlength", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "Advance\naddr,\nreduce\nlength", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701917-41", + "type": "arrow", + "x": 570, + "y": 515, + "width": 0, + "height": -95, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 277663, + "version": 1, + "versionNonce": 387789, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + -95 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701917-42", + "type": "text", + "x": 100, + "y": 545, + "width": 430, + "height": 14, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 611417, + "version": 1, + "versionNonce": 116534, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701917, + "link": null, + "locked": false, + "text": "Iterates one burst per cycle. last flag marks the final burst of the transfer.", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "Iterates one burst per cycle. last flag marks the final burst of the transfer.", + "lineHeight": 1.35 + } + ], + "appState": { + "viewBackgroundColor": "#ffffff", + "exportBackground": true, + "exportWithDarkMode": false + } +} \ No newline at end of file diff --git a/doc/fig/legalizer.svg b/doc/fig/legalizer.svg new file mode 100644 index 00000000..6e2a61f5 --- /dev/null +++ b/doc/fig/legalizer.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + +Legalizer +Splits 1D transfers into protocol-legal bursts +idma_req_t +src_addr dst_addr length protocol options +Example: 6 KB transfer starting at 0x0C00 (3 KB into a 4 KB page) +Burst 11 KB +Burst 24 KB +Burst 31 KB +0x1000 +0x2000 +0x0C00 +0x2400 +4 KB page boundaries (AXI) +Page size per protocol: +AXI 4 KBOBI 1 word (no bursts)TileLink POW2 aligned +Read / Write synchronization +Coupled (default) +Both paths split at whicheverpage boundary comes first.Used when both protocols burst. +Decoupled +Read and write advance at theirown pace. Required when one sidehas no burst support (e.g. OBI). +Per-burst output (emitted each cycle until transfer complete) +Read Request +Protocol metadata (AR) addr, len, size, burst, idDatapath control offset, shift, is_single +Write Request +Protocol metadata (AW) addr, len, size, burst, idDatapath control offset, shift, num_beats last, super_last +idma_r_req_t +idma_w_req_t +Advanceaddr,reducelength +Iterates one burst per cycle. last flag marks the final burst of the transfer. + + \ No newline at end of file diff --git a/doc/fig/system_integration.excalidraw.json b/doc/fig/system_integration.excalidraw.json new file mode 100644 index 00000000..6f8277ac --- /dev/null +++ b/doc/fig/system_integration.excalidraw.json @@ -0,0 +1,1578 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "idma-diagrams", + "elements": [ + { + "id": "el-1772036701933-0", + "type": "text", + "x": 560, + "y": 15, + "width": 279, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 610399, + "version": 1, + "versionNonce": 727444, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "iDMA System Integration", + "fontSize": 22, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "iDMA System Integration", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-1", + "type": "text", + "x": 200, + "y": 45, + "width": 515, + "height": 17, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 463096, + "version": 1, + "versionNonce": 14635, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "Typical configuration: Register Frontend (64-bit 2D) + ND Midend + AXI Backend", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Typical configuration: Register Frontend (64-bit 2D) + ND Midend + AXI Backend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-2", + "type": "rectangle", + "x": 160, + "y": 140, + "width": 140, + "height": 90, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 822176, + "version": 1, + "versionNonce": 130403, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701933-3", + "type": "text" + } + ], + "updated": 1772036701933, + "link": null, + "locked": false + }, + { + "id": "el-1772036701933-3", + "type": "text", + "x": 197, + "y": 164.5, + "width": 66, + "height": 41, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 421321, + "version": 1, + "versionNonce": 326551, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "Register\nFrontend", + "fontSize": 15, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 12, + "containerId": "el-1772036701933-2", + "originalText": "Register\nFrontend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-4", + "type": "text", + "x": 170, + "y": 234, + "width": 85, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 300205, + "version": 1, + "versionNonce": 224664, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "idma_reg64_2d_top", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "idma_reg64_2d_top", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-5", + "type": "rectangle", + "x": 400, + "y": 140, + "width": 140, + "height": 90, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 532973, + "version": 1, + "versionNonce": 363110, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701933-6", + "type": "text" + } + ], + "updated": 1772036701933, + "link": null, + "locked": false + }, + { + "id": "el-1772036701933-6", + "type": "text", + "x": 445, + "y": 164.5, + "width": 50, + "height": 41, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 998278, + "version": 1, + "versionNonce": 929942, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "ND\nMidend", + "fontSize": 15, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 12, + "containerId": "el-1772036701933-5", + "originalText": "ND\nMidend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-7", + "type": "text", + "x": 415, + "y": 234, + "width": 70, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 306547, + "version": 1, + "versionNonce": 137185, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "idma_nd_midend", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "idma_nd_midend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-8", + "type": "rectangle", + "x": 640, + "y": 140, + "width": 140, + "height": 90, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 209037, + "version": 1, + "versionNonce": 416856, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701933-9", + "type": "text" + } + ], + "updated": 1772036701933, + "link": null, + "locked": false + }, + { + "id": "el-1772036701933-9", + "type": "text", + "x": 681, + "y": 174.5, + "width": 58, + "height": 21, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 910546, + "version": 1, + "versionNonce": 971325, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "Backend", + "fontSize": 15, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 12, + "containerId": "el-1772036701933-8", + "originalText": "Backend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-10", + "type": "text", + "x": 645, + "y": 234, + "width": 95, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 312184, + "version": 1, + "versionNonce": 70741, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "idma_backend_rw_axi", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "idma_backend_rw_axi", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-11", + "type": "rectangle", + "x": 170, + "y": 290, + "width": 120, + "height": 50, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#fff3bf", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 824148, + "version": 1, + "versionNonce": 972608, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701933-12", + "type": "text" + } + ], + "updated": 1772036701933, + "link": null, + "locked": false + }, + { + "id": "el-1772036701933-12", + "type": "text", + "x": 184.5, + "y": 307.5, + "width": 91, + "height": 15, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 397811, + "version": 1, + "versionNonce": 296082, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "Transfer ID Gen", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701933-11", + "originalText": "Transfer ID Gen", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-13", + "type": "rectangle", + "x": 20, + "y": 150, + "width": 90, + "height": 70, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 493661, + "version": 1, + "versionNonce": 250717, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701933-14", + "type": "text" + } + ], + "updated": 1772036701933, + "link": null, + "locked": false + }, + { + "id": "el-1772036701933-14", + "type": "text", + "x": 43.5, + "y": 167, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 595894, + "version": 1, + "versionNonce": 130925, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "CPU\nRegBus", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701933-13", + "originalText": "CPU\nRegBus", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-15", + "type": "rectangle", + "x": 870, + "y": 150, + "width": 90, + "height": 70, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 164180, + "version": 1, + "versionNonce": 281411, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701933-16", + "type": "text" + } + ], + "updated": 1772036701933, + "link": null, + "locked": false + }, + { + "id": "el-1772036701933-16", + "type": "text", + "x": 893.5, + "y": 167, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 102476, + "version": 1, + "versionNonce": 996506, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "AXI\nFabric", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701933-15", + "originalText": "AXI\nFabric", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-17", + "type": "arrow", + "x": 110, + "y": 185, + "width": 50, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 279040, + "version": 1, + "versionNonce": 630520, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 50, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-18", + "type": "text", + "x": 113, + "y": 167, + "width": 61, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 277461, + "version": 1, + "versionNonce": 436263, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "reg_req/rsp", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "reg_req/rsp", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-19", + "type": "arrow", + "x": 300, + "y": 175, + "width": 100, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 13013, + "version": 1, + "versionNonce": 153808, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 100, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-20", + "type": "text", + "x": 305, + "y": 159, + "width": 72, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 904298, + "version": 1, + "versionNonce": 150727, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "idma_nd_req_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "idma_nd_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-21", + "type": "arrow", + "x": 400, + "y": 195, + "width": -100, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 106520, + "version": 1, + "versionNonce": 766465, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -100, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-22", + "type": "text", + "x": 305, + "y": 199, + "width": 56, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 123374, + "version": 1, + "versionNonce": 475658, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "idma_rsp_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "idma_rsp_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-23", + "type": "arrow", + "x": 540, + "y": 175, + "width": 100, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 666260, + "version": 1, + "versionNonce": 87286, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 100, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-24", + "type": "text", + "x": 550, + "y": 159, + "width": 56, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 256296, + "version": 1, + "versionNonce": 822651, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "idma_req_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "idma_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-25", + "type": "arrow", + "x": 640, + "y": 195, + "width": -100, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 172800, + "version": 1, + "versionNonce": 901808, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -100, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-26", + "type": "text", + "x": 550, + "y": 199, + "width": 56, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 113094, + "version": 1, + "versionNonce": 334992, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "idma_rsp_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "idma_rsp_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-27", + "type": "arrow", + "x": 780, + "y": 170, + "width": 90, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 692463, + "version": 1, + "versionNonce": 919579, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 90, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-28", + "type": "text", + "x": 785, + "y": 154, + "width": 33, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 254405, + "version": 1, + "versionNonce": 333675, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "AR / R", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "AR / R", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-29", + "type": "arrow", + "x": 780, + "y": 200, + "width": 90, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 793709, + "version": 1, + "versionNonce": 277669, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 90, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-30", + "type": "text", + "x": 785, + "y": 204, + "width": 56, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 787744, + "version": 1, + "versionNonce": 553347, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "AW / W / B", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "AW / W / B", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-31", + "type": "arrow", + "x": 215, + "y": 230, + "width": 0, + "height": 60, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 919763, + "version": 1, + "versionNonce": 745232, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 60 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-32", + "type": "text", + "x": 175, + "y": 238, + "width": 35, + "height": 13, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 666462, + "version": 1, + "versionNonce": 840699, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "next_id", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "next_id", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-33", + "type": "arrow", + "x": 245, + "y": 290, + "width": 0, + "height": -60, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 758681, + "version": 1, + "versionNonce": 815817, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + -60 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-34", + "type": "text", + "x": 248, + "y": 238, + "width": 35, + "height": 13, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 46895, + "version": 1, + "versionNonce": 873776, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "done_id", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "done_id", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-35", + "type": "arrow", + "x": 710, + "y": 230, + "width": -420, + "height": 85, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 625155, + "version": 1, + "versionNonce": 770570, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 85 + ], + [ + -420, + 85 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-36", + "type": "text", + "x": 645, + "y": 299, + "width": 70, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 264496, + "version": 1, + "versionNonce": 655297, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "issue / retire", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "issue / retire", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-37", + "type": "arrow", + "x": 710, + "y": 230, + "width": -480, + "height": 135, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 63874, + "version": 1, + "versionNonce": 824362, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 135 + ], + [ + -480, + 135 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701933-38", + "type": "text", + "x": 410, + "y": 349, + "width": 75, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 974095, + "version": 1, + "versionNonce": 89292, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "busy_o → busy_i", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "busy_o → busy_i", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-39", + "type": "text", + "x": 600, + "y": 385, + "width": 435, + "height": 14, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 666916, + "version": 1, + "versionNonce": 480463, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "Key parameters: DataWidth AddrWidth NumAxInFlight BufferDepth(≥3) ErrorCap", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "Key parameters: DataWidth AddrWidth NumAxInFlight BufferDepth(≥3) ErrorCap", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701933-40", + "type": "text", + "x": 600, + "y": 403, + "width": 408, + "height": 14, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 455138, + "version": 1, + "versionNonce": 210692, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701933, + "link": null, + "locked": false, + "text": "Type macros: `IDMA_TYPEDEF_REQ_T `IDMA_TYPEDEF_RSP_T `AXI_TYPEDEF_REQ_T", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "Type macros: `IDMA_TYPEDEF_REQ_T `IDMA_TYPEDEF_RSP_T `AXI_TYPEDEF_REQ_T", + "lineHeight": 1.35 + } + ], + "appState": { + "viewBackgroundColor": "#ffffff", + "exportBackground": true, + "exportWithDarkMode": false + } +} \ No newline at end of file diff --git a/doc/fig/system_integration.svg b/doc/fig/system_integration.svg new file mode 100644 index 00000000..22e20d0d --- /dev/null +++ b/doc/fig/system_integration.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + +iDMA System Integration +Typical configuration: Register Frontend (64-bit 2D) + ND Midend + AXI Backend +RegisterFrontend +idma_reg64_2d_top +NDMidend +idma_nd_midend +Backend +idma_backend_rw_axi +Transfer ID Gen +CPURegBus +AXIFabric +reg_req/rsp +idma_nd_req_t +idma_rsp_t +idma_req_t +idma_rsp_t +AR / R +AW / W / B +next_id +done_id +issue / retire +busy_o → busy_i +Key parameters: DataWidth AddrWidth NumAxInFlight BufferDepth(≥3) ErrorCap +Type macros: `IDMA_TYPEDEF_REQ_T `IDMA_TYPEDEF_RSP_T `AXI_TYPEDEF_REQ_T + + \ No newline at end of file diff --git a/doc/fig/system_integration_alt.excalidraw.json b/doc/fig/system_integration_alt.excalidraw.json new file mode 100644 index 00000000..6dd7c300 --- /dev/null +++ b/doc/fig/system_integration_alt.excalidraw.json @@ -0,0 +1,1945 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "idma-diagrams", + "elements": [ + { + "id": "el-1772036701938-0", + "type": "text", + "x": 220, + "y": 10, + "width": 412, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 551180, + "version": 1, + "versionNonce": 85025, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "iDMA Frontend Integration Variants", + "fontSize": 22, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "iDMA Frontend Integration Variants", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-1", + "type": "text", + "x": 30, + "y": 70, + "width": 262, + "height": 19, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 612618, + "version": 1, + "versionNonce": 68730, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "Descriptor Frontend (CVA6 / Linux)", + "fontSize": 14, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Descriptor Frontend (CVA6 / Linux)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-2", + "type": "line", + "x": 30, + "y": 90, + "width": 810, + "height": 0, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 756748, + "version": 1, + "versionNonce": 306817, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 810, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701938-3", + "type": "rectangle", + "x": 30, + "y": 120, + "width": 90, + "height": 70, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 294961, + "version": 1, + "versionNonce": 557589, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-4", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-4", + "type": "text", + "x": 53.5, + "y": 137, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 705844, + "version": 1, + "versionNonce": 44097, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "CPU\n(CVA6)", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701938-3", + "originalText": "CPU\n(CVA6)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-5", + "type": "rectangle", + "x": 230, + "y": 110, + "width": 150, + "height": 90, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 536283, + "version": 1, + "versionNonce": 468249, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-6", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-6", + "type": "text", + "x": 263.5, + "y": 134.5, + "width": 83, + "height": 41, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 53732, + "version": 1, + "versionNonce": 337168, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "Descriptor\nFrontend", + "fontSize": 15, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 12, + "containerId": "el-1772036701938-5", + "originalText": "Descriptor\nFrontend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-7", + "type": "text", + "x": 245, + "y": 204, + "width": 75, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 717599, + "version": 1, + "versionNonce": 912537, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "idma_desc64_top", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "idma_desc64_top", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-8", + "type": "rectangle", + "x": 490, + "y": 110, + "width": 150, + "height": 90, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 746759, + "version": 1, + "versionNonce": 556794, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-9", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-9", + "type": "text", + "x": 536, + "y": 144.5, + "width": 58, + "height": 21, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 776145, + "version": 1, + "versionNonce": 8353, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "Backend", + "fontSize": 15, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 12, + "containerId": "el-1772036701938-8", + "originalText": "Backend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-10", + "type": "rectangle", + "x": 750, + "y": 120, + "width": 90, + "height": 70, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 521752, + "version": 1, + "versionNonce": 75525, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-11", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-11", + "type": "text", + "x": 773.5, + "y": 137, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 866764, + "version": 1, + "versionNonce": 405151, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "AXI\nFabric", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701938-10", + "originalText": "AXI\nFabric", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-12", + "type": "rectangle", + "x": 240, + "y": 60, + "width": 130, + "height": 32, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#ffd8a8", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 173943, + "version": 1, + "versionNonce": 662513, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-13", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-13", + "type": "text", + "x": 258, + "y": 69, + "width": 94, + "height": 14, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 931182, + "version": 1, + "versionNonce": 398402, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "Descriptor Memory", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 8, + "containerId": "el-1772036701938-12", + "originalText": "Descriptor Memory", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-14", + "type": "arrow", + "x": 120, + "y": 155, + "width": 110, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 224901, + "version": 1, + "versionNonce": 483614, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-15", + "type": "text", + "x": 128, + "y": 137, + "width": 61, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 717630, + "version": 1, + "versionNonce": 100712, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "reg_req/rsp", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "reg_req/rsp", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-16", + "type": "arrow", + "x": 305, + "y": 110, + "width": 0, + "height": -18, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 186435, + "version": 1, + "versionNonce": 873728, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + -18 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-17", + "type": "text", + "x": 311, + "y": 96, + "width": 50, + "height": 13, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 468447, + "version": 1, + "versionNonce": 154115, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "AXI master", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "AXI master", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-18", + "type": "arrow", + "x": 380, + "y": 143, + "width": 110, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 931763, + "version": 1, + "versionNonce": 117274, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-19", + "type": "text", + "x": 388, + "y": 127, + "width": 56, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 643028, + "version": 1, + "versionNonce": 126102, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "idma_req_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "idma_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-20", + "type": "arrow", + "x": 490, + "y": 167, + "width": -110, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 949631, + "version": 1, + "versionNonce": 701111, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-21", + "type": "text", + "x": 388, + "y": 171, + "width": 56, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 289349, + "version": 1, + "versionNonce": 221187, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "idma_rsp_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "idma_rsp_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-22", + "type": "arrow", + "x": 640, + "y": 141, + "width": 110, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 96857, + "version": 1, + "versionNonce": 626536, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-23", + "type": "text", + "x": 648, + "y": 125, + "width": 33, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 62319, + "version": 1, + "versionNonce": 238762, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "AR / R", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "AR / R", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-24", + "type": "arrow", + "x": 640, + "y": 169, + "width": 110, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 986315, + "version": 1, + "versionNonce": 861777, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-25", + "type": "text", + "x": 648, + "y": 173, + "width": 56, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 598575, + "version": 1, + "versionNonce": 709488, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "AW / W / B", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "AW / W / B", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-26", + "type": "arrow", + "x": 255, + "y": 200, + "width": -145, + "height": 0, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 769366, + "version": 1, + "versionNonce": 229068, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 25 + ], + [ + -145, + 25 + ], + [ + -145, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-27", + "type": "text", + "x": 118, + "y": 211, + "width": 28, + "height": 14, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 672837, + "version": 1, + "versionNonce": 478336, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "irq_o", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "irq_o", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-28", + "type": "text", + "x": 30, + "y": 300, + "width": 285, + "height": 19, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 548121, + "version": 1, + "versionNonce": 295594, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "Snitch ISA Frontend (tightly coupled)", + "fontSize": 14, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Snitch ISA Frontend (tightly coupled)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-29", + "type": "line", + "x": 30, + "y": 320, + "width": 680, + "height": 0, + "angle": 0, + "strokeColor": "#adb5bd", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 683892, + "version": 1, + "versionNonce": 201243, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 680, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "el-1772036701938-30", + "type": "rectangle", + "x": 30, + "y": 350, + "width": 90, + "height": 70, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 770124, + "version": 1, + "versionNonce": 962873, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-31", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-31", + "type": "text", + "x": 53.5, + "y": 367, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 63057, + "version": 1, + "versionNonce": 943173, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "Snitch\nCore", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701938-30", + "originalText": "Snitch\nCore", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-32", + "type": "rectangle", + "x": 230, + "y": 340, + "width": 280, + "height": 90, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 8 + }, + "seed": 386588, + "version": 1, + "versionNonce": 739123, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-33", + "type": "text", + "x": 240, + "y": 345, + "width": 75, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 209338, + "version": 1, + "versionNonce": 974842, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "idma_inst64_top", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "idma_inst64_top", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-34", + "type": "rectangle", + "x": 250, + "y": 365, + "width": 90, + "height": 55, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 412551, + "version": 1, + "versionNonce": 486838, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-35", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-35", + "type": "text", + "x": 270, + "y": 385.5, + "width": 50, + "height": 14, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 902437, + "version": 1, + "versionNonce": 548893, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "ND Midend", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 8, + "containerId": "el-1772036701938-34", + "originalText": "ND Midend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-36", + "type": "rectangle", + "x": 360, + "y": 365, + "width": 90, + "height": 55, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 992440, + "version": 1, + "versionNonce": 216934, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-37", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-37", + "type": "text", + "x": 385.5, + "y": 385.5, + "width": 39, + "height": 14, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 448633, + "version": 1, + "versionNonce": 712389, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "Backend", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 8, + "containerId": "el-1772036701938-36", + "originalText": "Backend", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-38", + "type": "text", + "x": 456, + "y": 384.5, + "width": 14, + "height": 17, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 837334, + "version": 1, + "versionNonce": 929594, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "×N", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "×N", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-39", + "type": "arrow", + "x": 340, + "y": 392.5, + "width": 20, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 841564, + "version": 1, + "versionNonce": 58159, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 20, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-40", + "type": "rectangle", + "x": 620, + "y": 350, + "width": 90, + "height": 70, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f1f3f5", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 6 + }, + "seed": 281997, + "version": 1, + "versionNonce": 666110, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701938-41", + "type": "text" + } + ], + "updated": 1772036701938, + "link": null, + "locked": false + }, + { + "id": "el-1772036701938-41", + "type": "text", + "x": 643.5, + "y": 367, + "width": 43, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 927313, + "version": 1, + "versionNonce": 596512, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "AXI\nFabric", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701938-40", + "originalText": "AXI\nFabric", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-42", + "type": "arrow", + "x": 120, + "y": 375, + "width": 110, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 733158, + "version": 1, + "versionNonce": 347070, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-43", + "type": "text", + "x": 128, + "y": 359, + "width": 50, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 119724, + "version": 1, + "versionNonce": 60277, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "acc_req_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "acc_req_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-44", + "type": "arrow", + "x": 230, + "y": 395, + "width": -110, + "height": 0, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 746315, + "version": 1, + "versionNonce": 446084, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-45", + "type": "text", + "x": 128, + "y": 399, + "width": 50, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 659142, + "version": 1, + "versionNonce": 138087, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "acc_res_t", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "acc_res_t", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-46", + "type": "arrow", + "x": 510, + "y": 385, + "width": 110, + "height": 0, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1.5, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 735645, + "version": 1, + "versionNonce": 547439, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 110, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "el-1772036701938-47", + "type": "text", + "x": 518, + "y": 369, + "width": 83, + "height": 14, + "angle": 0, + "strokeColor": "#5c7cfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 599206, + "version": 1, + "versionNonce": 11364, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "axi_req/rsp [N]", + "fontSize": 10, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 8, + "containerId": null, + "originalText": "axi_req/rsp [N]", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-48", + "type": "text", + "x": 230, + "y": 436, + "width": 179, + "height": 13, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 640487, + "version": 1, + "versionNonce": 611660, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "hart_id_i • events_o • busy_o[N]", + "fontSize": 9, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 7, + "containerId": null, + "originalText": "hart_id_i • events_o • busy_o[N]", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-49", + "type": "text", + "x": 30, + "y": 465, + "width": 557, + "height": 15, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 595622, + "version": 1, + "versionNonce": 230194, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "desc64: Separate backend — descriptors fetched from memory via AXI master, IRQ on completion", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "desc64: Separate backend — descriptors fetched from memory via AXI master, IRQ on completion", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701938-50", + "type": "text", + "x": 30, + "y": 483, + "width": 624, + "height": 15, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 15958, + "version": 1, + "versionNonce": 255811, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701938, + "link": null, + "locked": false, + "text": "inst64: Self-contained — backend + 2D midend instantiated internally, driven by Snitch ISA instructions", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "inst64: Self-contained — backend + 2D midend instantiated internally, driven by Snitch ISA instructions", + "lineHeight": 1.35 + } + ], + "appState": { + "viewBackgroundColor": "#ffffff", + "exportBackground": true, + "exportWithDarkMode": false + } +} \ No newline at end of file diff --git a/doc/fig/system_integration_alt.svg b/doc/fig/system_integration_alt.svg new file mode 100644 index 00000000..04bf2348 --- /dev/null +++ b/doc/fig/system_integration_alt.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +iDMA Frontend Integration Variants +Descriptor Frontend (CVA6 / Linux) +CPU(CVA6) +DescriptorFrontend +idma_desc64_top +Backend +AXIFabric +Descriptor Memory +reg_req/rsp +AXI master +idma_req_t +idma_rsp_t +AR / R +AW / W / B +irq_o +Snitch ISA Frontend (tightly coupled) +SnitchCore +idma_inst64_top +ND Midend +Backend +×N +AXIFabric +acc_req_t +acc_res_t +axi_req/rsp [N] +hart_id_i • events_o • busy_o[N] +desc64: Separate backend — descriptors fetched from memory via AXI master, IRQ on completion +inst64: Self-contained — backend + 2D midend instantiated internally, driven by Snitch ISA instructions + + \ No newline at end of file diff --git a/doc/fig/variant_matrix.excalidraw.json b/doc/fig/variant_matrix.excalidraw.json new file mode 100644 index 00000000..334f8dde --- /dev/null +++ b/doc/fig/variant_matrix.excalidraw.json @@ -0,0 +1,1511 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "idma-diagrams", + "elements": [ + { + "id": "el-1772036701928-0", + "type": "text", + "x": 399, + "y": 15, + "width": 255, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 773780, + "version": 1, + "versionNonce": 184730, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "iDMA Backend Variants", + "fontSize": 22, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "iDMA Backend Variants", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-1", + "type": "text", + "x": 469.95, + "y": 50, + "width": 122, + "height": 18, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 601072, + "version": 1, + "versionNonce": 875595, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "Write Protocol(s)", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Write Protocol(s)", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-2", + "type": "text", + "x": 20, + "y": 162.45, + "width": 58, + "height": 36, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 849758, + "version": 1, + "versionNonce": 181800, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "Read\nProtocol", + "fontSize": 13, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 11, + "containerId": null, + "originalText": "Read\nProtocol", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-3", + "type": "rectangle", + "x": 120, + "y": 75, + "width": 160, + "height": 45, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 183872, + "version": 1, + "versionNonce": 107078, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-4", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-4", + "type": "text", + "x": 186.5, + "y": 89, + "width": 27, + "height": 17, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 414217, + "version": 1, + "versionNonce": 78782, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "AXI4", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": "el-1772036701928-3", + "originalText": "AXI4", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-5", + "type": "rectangle", + "x": 280, + "y": 75, + "width": 160, + "height": 45, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 531743, + "version": 1, + "versionNonce": 821584, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-6", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-6", + "type": "text", + "x": 350, + "y": 89, + "width": 20, + "height": 17, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 946132, + "version": 1, + "versionNonce": 695808, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "OBI", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": "el-1772036701928-5", + "originalText": "OBI", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-7", + "type": "rectangle", + "x": 440, + "y": 75, + "width": 160, + "height": 45, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 89307, + "version": 1, + "versionNonce": 879137, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-8", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-8", + "type": "text", + "x": 487, + "y": 81, + "width": 66, + "height": 33, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 98702, + "version": 1, + "versionNonce": 970989, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "AXI4 +\nAXI Stream", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": "el-1772036701928-7", + "originalText": "AXI4 +\nAXI Stream", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-9", + "type": "rectangle", + "x": 600, + "y": 75, + "width": 160, + "height": 45, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 620406, + "version": 1, + "versionNonce": 332740, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-10", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-10", + "type": "text", + "x": 660, + "y": 81, + "width": 40, + "height": 33, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 615028, + "version": 1, + "versionNonce": 726241, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "AXI4 +\nINIT", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": "el-1772036701928-9", + "originalText": "AXI4 +\nINIT", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-11", + "type": "rectangle", + "x": 760, + "y": 75, + "width": 160, + "height": 45, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 648009, + "version": 1, + "versionNonce": 251733, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-12", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-12", + "type": "text", + "x": 823.5, + "y": 81, + "width": 33, + "height": 33, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 75691, + "version": 1, + "versionNonce": 104417, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "OBI +\nINIT", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 10, + "containerId": "el-1772036701928-11", + "originalText": "OBI +\nINIT", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-13", + "type": "rectangle", + "x": 40, + "y": 120, + "width": 80, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 242490, + "version": 1, + "versionNonce": 934733, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-14", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-14", + "type": "text", + "x": 64.5, + "y": 140.5, + "width": 31, + "height": 19, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 109288, + "version": 1, + "versionNonce": 879666, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "AXI4", + "fontSize": 14, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701928-13", + "originalText": "AXI4", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-15", + "type": "rectangle", + "x": 40, + "y": 180, + "width": 80, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 694334, + "version": 1, + "versionNonce": 760579, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-16", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-16", + "type": "text", + "x": 68, + "y": 200.5, + "width": 24, + "height": 19, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 809954, + "version": 1, + "versionNonce": 212766, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "OBI", + "fontSize": 14, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 11, + "containerId": "el-1772036701928-15", + "originalText": "OBI", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-17", + "type": "rectangle", + "x": 120, + "y": 120, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 705346, + "version": 1, + "versionNonce": 57645, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-18", + "type": "rectangle", + "x": 280, + "y": 120, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 244358, + "version": 1, + "versionNonce": 33267, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-19", + "type": "rectangle", + "x": 440, + "y": 120, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 865902, + "version": 1, + "versionNonce": 460800, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-20", + "type": "rectangle", + "x": 600, + "y": 120, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 378973, + "version": 1, + "versionNonce": 948896, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-21", + "type": "rectangle", + "x": 760, + "y": 120, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 542168, + "version": 1, + "versionNonce": 865475, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-22", + "type": "rectangle", + "x": 120, + "y": 180, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 421927, + "version": 1, + "versionNonce": 366827, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-23", + "type": "rectangle", + "x": 280, + "y": 180, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 800183, + "version": 1, + "versionNonce": 315522, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-24", + "type": "rectangle", + "x": 440, + "y": 180, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 830806, + "version": 1, + "versionNonce": 77267, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-25", + "type": "rectangle", + "x": 600, + "y": 180, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 423528, + "version": 1, + "versionNonce": 946851, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-26", + "type": "rectangle", + "x": 760, + "y": 180, + "width": 160, + "height": 60, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "#f8f9fa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 0 + }, + "seed": 384735, + "version": 1, + "versionNonce": 577010, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-27", + "type": "rectangle", + "x": 128, + "y": 137, + "width": 144, + "height": 26, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "#4dabf7", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 950687, + "version": 1, + "versionNonce": 366192, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-28", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-28", + "type": "text", + "x": 181.5, + "y": 142.5, + "width": 37, + "height": 15, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 823187, + "version": 1, + "versionNonce": 250458, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "rw_axi", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701928-27", + "originalText": "rw_axi", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-29", + "type": "rectangle", + "x": 288, + "y": 137, + "width": 144, + "height": 26, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "#4dabf7", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 541619, + "version": 1, + "versionNonce": 781433, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-30", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-30", + "type": "text", + "x": 326.5, + "y": 142.5, + "width": 67, + "height": 15, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 284163, + "version": 1, + "versionNonce": 787461, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "r_axi_w_obi", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701928-29", + "originalText": "r_axi_w_obi", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-31", + "type": "rectangle", + "x": 448, + "y": 137, + "width": 144, + "height": 26, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "#4dabf7", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 522265, + "version": 1, + "versionNonce": 171125, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-32", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-32", + "type": "text", + "x": 477.5, + "y": 142.5, + "width": 85, + "height": 15, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 151116, + "version": 1, + "versionNonce": 625086, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "rw_axi_rw_axis", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701928-31", + "originalText": "rw_axi_rw_axis", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-33", + "type": "rectangle", + "x": 768, + "y": 137, + "width": 144, + "height": 26, + "angle": 0, + "strokeColor": "#f76707", + "backgroundColor": "#f76707", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 552441, + "version": 1, + "versionNonce": 483305, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-34", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-34", + "type": "text", + "x": 779, + "y": 142.5, + "width": 122, + "height": 15, + "angle": 0, + "strokeColor": "#f76707", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 234569, + "version": 1, + "versionNonce": 793990, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "r_axi_rw_init_rw_obi", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701928-33", + "originalText": "r_axi_rw_init_rw_obi", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-35", + "type": "rectangle", + "x": 128, + "y": 197, + "width": 144, + "height": 26, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "#4dabf7", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 312161, + "version": 1, + "versionNonce": 590587, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-36", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-36", + "type": "text", + "x": 166.5, + "y": 202.5, + "width": 67, + "height": 15, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 137819, + "version": 1, + "versionNonce": 241654, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "r_obi_w_axi", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701928-35", + "originalText": "r_obi_w_axi", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-37", + "type": "rectangle", + "x": 608, + "y": 197, + "width": 144, + "height": 26, + "angle": 0, + "strokeColor": "#f76707", + "backgroundColor": "#f76707", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 4 + }, + "seed": 7114, + "version": 1, + "versionNonce": 864108, + "isDeleted": false, + "boundElements": [ + { + "id": "el-1772036701928-38", + "type": "text" + } + ], + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-38", + "type": "text", + "x": 622.5, + "y": 202.5, + "width": 115, + "height": 15, + "angle": 0, + "strokeColor": "#f76707", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 313044, + "version": 1, + "versionNonce": 344743, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "r_obi_rw_init_w_axi", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 9, + "containerId": "el-1772036701928-37", + "originalText": "r_obi_rw_init_w_axi", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-39", + "type": "rectangle", + "x": 120, + "y": 260, + "width": 16, + "height": 16, + "angle": 0, + "strokeColor": "#4dabf7", + "backgroundColor": "#4dabf7", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 3 + }, + "seed": 315964, + "version": 1, + "versionNonce": 720763, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-40", + "type": "text", + "x": 142, + "y": 260, + "width": 86, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 189821, + "version": 1, + "versionNonce": 198521, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "Base variants", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Base variants", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-41", + "type": "rectangle", + "x": 270, + "y": 260, + "width": 16, + "height": 16, + "angle": 0, + "strokeColor": "#f76707", + "backgroundColor": "#f76707", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3, + "value": 3 + }, + "seed": 443840, + "version": 1, + "versionNonce": 982231, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false + }, + { + "id": "el-1772036701928-42", + "type": "text", + "x": 292, + "y": 260, + "width": 100, + "height": 17, + "angle": 0, + "strokeColor": "#343a40", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 816508, + "version": 1, + "versionNonce": 237764, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "Occamy variants", + "fontSize": 12, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 10, + "containerId": null, + "originalText": "Occamy variants", + "lineHeight": 1.35 + }, + { + "id": "el-1772036701928-43", + "type": "text", + "x": 120, + "y": 288, + "width": 521, + "height": 15, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 925477, + "version": 1, + "versionNonce": 863236, + "isDeleted": false, + "boundElements": null, + "updated": 1772036701928, + "link": null, + "locked": false, + "text": "Naming: r__w_ • rw = same protocol for both • Extend via IDMA_ADD_IDS", + "fontSize": 11, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 9, + "containerId": null, + "originalText": "Naming: r__w_ • rw = same protocol for both • Extend via IDMA_ADD_IDS", + "lineHeight": 1.35 + } + ], + "appState": { + "viewBackgroundColor": "#ffffff", + "exportBackground": true, + "exportWithDarkMode": false + } +} \ No newline at end of file diff --git a/doc/fig/variant_matrix.svg b/doc/fig/variant_matrix.svg new file mode 100644 index 00000000..312cce98 --- /dev/null +++ b/doc/fig/variant_matrix.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +iDMA Backend Variants +Write Protocol(s) +ReadProtocol +AXI4 +OBI +AXI4 +AXI Stream +AXI4 +INIT +OBI +INIT +AXI4 +OBI +rw_axi +r_axi_w_obi +rw_axi_rw_axis +r_axi_rw_init_rw_obi +r_obi_w_axi +r_obi_rw_init_w_axi +Base variants +Occamy variants +Naming: r_<read>_w_<write> • rw = same protocol for both • Extend via IDMA_ADD_IDS + + \ No newline at end of file diff --git a/doc/site/astro.config.mjs b/doc/site/astro.config.mjs new file mode 100644 index 00000000..5066ba4f --- /dev/null +++ b/doc/site/astro.config.mjs @@ -0,0 +1,55 @@ +// Copyright 2025 ETH Zurich and University of Bologna. +// Solderpad Hardware License, Version 0.51, see LICENSE for details. +// SPDX-License-Identifier: SHL-0.51 + +// Authors: +// - Daniel Keller + +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +export default defineConfig({ + integrations: [ + starlight({ + title: 'iDMA Documentation', + social: { + github: 'https://github.com/pulp-platform/iDMA', + }, + sidebar: [ + { + label: 'Overview', + slug: '', + }, + { + label: 'Architecture', + items: [ + { label: 'Programming Model', slug: 'architecture/programming-model' }, + { label: 'Interfaces and Types', slug: 'architecture/interfaces' }, + { + label: 'Frontend', + items: [ + { label: 'Overview', slug: 'architecture/frontend' }, + { label: 'Register Frontend', slug: 'architecture/frontend/register' }, + { label: 'Snitch Frontend', slug: 'architecture/frontend/snitch' }, + { label: 'Descriptor Frontend', slug: 'architecture/frontend/descriptor' }, + ], + }, + { label: 'Midend', slug: 'architecture/midend' }, + { label: 'Backend', slug: 'architecture/backend' }, + ], + }, + { + label: 'Guides', + items: [ + { label: 'Quickstart', slug: 'guides/quickstart' }, + { label: 'System Integration', slug: 'guides/system-integration' }, + { label: 'Error Handling', slug: 'guides/error-handling' }, + { label: 'Verification', slug: 'guides/verification' }, + { label: 'Performance and Limitations', slug: 'guides/performance-limitations' }, + { label: 'Docs Verification Plan', slug: 'guides/docs-verification' }, + ], + }, + ], + }), + ], +}); diff --git a/doc/site/package-lock.json b/doc/site/package-lock.json new file mode 100644 index 00000000..49d22bf9 --- /dev/null +++ b/doc/site/package-lock.json @@ -0,0 +1,7421 @@ +{ + "name": "idma-docs", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "idma-docs", + "version": "0.0.1", + "dependencies": { + "@astrojs/starlight": "^0.32.0", + "astro": "^5.3.0", + "sharp": "^0.33.0" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.19.0", + "smol-toml": "^1.5.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/mdx": { + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.13.tgz", + "integrity": "sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "6.3.10", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.15.0", + "es-module-lexer": "^1.7.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "piccolore": "^0.1.3", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.6", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.0.tgz", + "integrity": "sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA==", + "license": "MIT", + "dependencies": { + "sitemap": "^8.0.2", + "stream-replace-string": "^2.0.0", + "zod": "^3.25.76" + } + }, + "node_modules/@astrojs/starlight": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.32.6.tgz", + "integrity": "sha512-ASWGwNzq+0TmJ+GJFFxFFxx6Yra7BqIIMQbvOy/cweTHjqejB6mcaEWtS3Mag12LM7tXCES7v/fzmdPgjz8Yxw==", + "license": "MIT", + "dependencies": { + "@astrojs/mdx": "^4.0.5", + "@astrojs/sitemap": "^3.2.1", + "@pagefind/default-ui": "^1.3.0", + "@types/hast": "^3.0.4", + "@types/js-yaml": "^4.0.9", + "@types/mdast": "^4.0.4", + "astro-expressive-code": "^0.40.0", + "bcp-47": "^2.1.0", + "hast-util-from-html": "^2.0.1", + "hast-util-select": "^6.0.2", + "hast-util-to-string": "^3.0.0", + "hastscript": "^9.0.0", + "i18next": "^23.11.5", + "js-yaml": "^4.1.0", + "klona": "^2.0.6", + "mdast-util-directive": "^3.0.0", + "mdast-util-to-markdown": "^2.1.0", + "mdast-util-to-string": "^4.0.0", + "pagefind": "^1.3.0", + "rehype": "^13.0.1", + "rehype-format": "^5.0.0", + "remark-directive": "^3.0.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.2" + }, + "peerDependencies": { + "astro": "^5.1.5" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@expressive-code/core": { + "version": "0.40.2", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.40.2.tgz", + "integrity": "sha512-gXY3v7jbgz6nWKvRpoDxK4AHUPkZRuJsM79vHX/5uhV9/qX6Qnctp/U/dMHog/LCVXcuOps+5nRmf1uxQVPb3w==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.0.4", + "hast-util-select": "^6.0.2", + "hast-util-to-html": "^9.0.1", + "hast-util-to-text": "^4.0.1", + "hastscript": "^9.0.0", + "postcss": "^8.4.38", + "postcss-nested": "^6.0.1", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1" + } + }, + "node_modules/@expressive-code/plugin-frames": { + "version": "0.40.2", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.40.2.tgz", + "integrity": "sha512-aLw5IlDlZWb10Jo/TTDCVsmJhKfZ7FJI83Zo9VDrV0OBlmHAg7klZqw68VDz7FlftIBVAmMby53/MNXPnMjTSQ==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.40.2" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.40.2", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.40.2.tgz", + "integrity": "sha512-t2HMR5BO6GdDW1c1ISBTk66xO503e/Z8ecZdNcr6E4NpUfvY+MRje+LtrcvbBqMwWBBO8RpVKcam/Uy+1GxwKQ==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.40.2", + "shiki": "^1.26.1" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/core": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz", + "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==", + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "1.29.2", + "@shikijs/engine-oniguruma": "1.29.2", + "@shikijs/types": "1.29.2", + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/engine-javascript": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz", + "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.29.2", + "@shikijs/vscode-textmate": "^10.0.1", + "oniguruma-to-es": "^2.2.0" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/engine-oniguruma": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", + "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.29.2", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/langs": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.29.2.tgz", + "integrity": "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.29.2" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/themes": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.29.2.tgz", + "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.29.2" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/@shikijs/types": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz", + "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/oniguruma-to-es": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-2.3.0.tgz", + "integrity": "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==", + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^5.1.1", + "regex-recursion": "^5.1.1" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/regex": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz", + "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/regex-recursion": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz", + "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==", + "license": "MIT", + "dependencies": { + "regex": "^5.1.1", + "regex-utilities": "^2.3.0" + } + }, + "node_modules/@expressive-code/plugin-shiki/node_modules/shiki": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.29.2.tgz", + "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "1.29.2", + "@shikijs/engine-javascript": "1.29.2", + "@shikijs/engine-oniguruma": "1.29.2", + "@shikijs/langs": "1.29.2", + "@shikijs/themes": "1.29.2", + "@shikijs/types": "1.29.2", + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.40.2", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.40.2.tgz", + "integrity": "sha512-/XoLjD67K9nfM4TgDlXAExzMJp6ewFKxNpfUw4F7q5Ecy+IU3/9zQQG/O70Zy+RxYTwKGw2MA9kd7yelsxnSmw==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.40.2" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/default-ui": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.4.0.tgz", + "integrity": "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==", + "license": "MIT" + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "25.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.2.tgz", + "integrity": "sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.0.tgz", + "integrity": "sha512-CHiohwJIS4L0G6/IzE1Fx3dgWqXBCXus/od0eGUfxrZJD2um2pE7ehclMmgL/fXqbU7NfE1Ze2pq34h2QaA6iQ==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/markdown-remark": "6.3.10", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.27.3", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-expressive-code": { + "version": "0.40.2", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.40.2.tgz", + "integrity": "sha512-yJMQId0yXSAbW9I6yqvJ3FcjKzJ8zRL7elbJbllkv1ZJPlsI0NI83Pxn1YL1IapEM347EvOOkSW2GL+2+NO61w==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.40.2" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz", + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.3.tgz", + "integrity": "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expressive-code": { + "version": "0.40.2", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.40.2.tgz", + "integrity": "sha512-1zIda2rB0qiDZACawzw2rbdBQiWHBT56uBctS+ezFe5XMAaFaHLnnSYND/Kd+dVzO9HfCXRDpzH3d+3fvOWRcw==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.40.2", + "@expressive-code/plugin-frames": "^0.40.2", + "@expressive-code/plugin-shiki": "^0.40.2", + "@expressive-code/plugin-text-markers": "^0.40.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz", + "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-embedded": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", + "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-format": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz", + "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "html-whitespace-sensitive-tag-names": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-body-ok-link": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", + "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-minify-whitespace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", + "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-is-body-ok-link": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "nth-check": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-whitespace-sensitive-tag-names": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz", + "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/i18next": { + "version": "23.16.8", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz", + "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-expressive-code": { + "version": "0.40.2", + "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.40.2.tgz", + "integrity": "sha512-+kn+AMGCrGzvtH8Q5lC6Y5lnmTV/r33fdmi5QU/IH1KPHKobKr5UnLwJuqHv5jBTSN/0v2wLDS7RTM73FVzqmQ==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.40.2" + } + }, + "node_modules/rehype-format": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.1.tgz", + "integrity": "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-format": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.2.tgz", + "integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/vitefu": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/doc/site/package.json b/doc/site/package.json new file mode 100644 index 00000000..e040e134 --- /dev/null +++ b/doc/site/package.json @@ -0,0 +1,17 @@ +{ + "name": "idma-docs", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/starlight": "^0.32.0", + "astro": "^5.3.0", + "sharp": "^0.33.0" + } +} diff --git a/doc/site/public/fig/architecture_overview.svg b/doc/site/public/fig/architecture_overview.svg new file mode 100644 index 00000000..be6eb1ba --- /dev/null +++ b/doc/site/public/fig/architecture_overview.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + +iDMA Architecture Overview +Frontend +Register IF / DescriptorsSnitch ISA +Midend +N-D decomposition(optional) +Backend +Legalizer → R/WTransport Layer +idma_req_t +idma_req_t +idma_rsp_t +idma_rsp_t +PlatformInterface +AXI4OBIAXI StreamINIT + + \ No newline at end of file diff --git a/doc/site/public/fig/backend.svg b/doc/site/public/fig/backend.svg new file mode 100644 index 00000000..9e08f3b6 --- /dev/null +++ b/doc/site/public/fig/backend.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +iDMA Backend +Legalizer +Transport Layer +BurstSplitter +Error FSM +tx +tx +retire +retire +ReadModule +Buffer +WriteModule +1D request +response +error handling +AR +R +AW +B +W + + \ No newline at end of file diff --git a/doc/site/public/fig/iDMA_overview.svg b/doc/site/public/fig/iDMA_overview.svg new file mode 100644 index 00000000..f8f4f482 --- /dev/null +++ b/doc/site/public/fig/iDMA_overview.svg @@ -0,0 +1,3 @@ + + +
response
response
Backend
Backend
request
request
error
error
response
response
Midend
Midend
request
request
error
error
Frontend
Frontend
interface
interface
AXI
AXI
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/site/public/fig/legalizer.svg b/doc/site/public/fig/legalizer.svg new file mode 100644 index 00000000..6e2a61f5 --- /dev/null +++ b/doc/site/public/fig/legalizer.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + +Legalizer +Splits 1D transfers into protocol-legal bursts +idma_req_t +src_addr dst_addr length protocol options +Example: 6 KB transfer starting at 0x0C00 (3 KB into a 4 KB page) +Burst 11 KB +Burst 24 KB +Burst 31 KB +0x1000 +0x2000 +0x0C00 +0x2400 +4 KB page boundaries (AXI) +Page size per protocol: +AXI 4 KBOBI 1 word (no bursts)TileLink POW2 aligned +Read / Write synchronization +Coupled (default) +Both paths split at whicheverpage boundary comes first.Used when both protocols burst. +Decoupled +Read and write advance at theirown pace. Required when one sidehas no burst support (e.g. OBI). +Per-burst output (emitted each cycle until transfer complete) +Read Request +Protocol metadata (AR) addr, len, size, burst, idDatapath control offset, shift, is_single +Write Request +Protocol metadata (AW) addr, len, size, burst, idDatapath control offset, shift, num_beats last, super_last +idma_r_req_t +idma_w_req_t +Advanceaddr,reducelength +Iterates one burst per cycle. last flag marks the final burst of the transfer. + + \ No newline at end of file diff --git a/doc/site/public/fig/system_integration.svg b/doc/site/public/fig/system_integration.svg new file mode 100644 index 00000000..22e20d0d --- /dev/null +++ b/doc/site/public/fig/system_integration.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + +iDMA System Integration +Typical configuration: Register Frontend (64-bit 2D) + ND Midend + AXI Backend +RegisterFrontend +idma_reg64_2d_top +NDMidend +idma_nd_midend +Backend +idma_backend_rw_axi +Transfer ID Gen +CPURegBus +AXIFabric +reg_req/rsp +idma_nd_req_t +idma_rsp_t +idma_req_t +idma_rsp_t +AR / R +AW / W / B +next_id +done_id +issue / retire +busy_o → busy_i +Key parameters: DataWidth AddrWidth NumAxInFlight BufferDepth(≥3) ErrorCap +Type macros: `IDMA_TYPEDEF_REQ_T `IDMA_TYPEDEF_RSP_T `AXI_TYPEDEF_REQ_T + + \ No newline at end of file diff --git a/doc/site/public/fig/system_integration_alt.svg b/doc/site/public/fig/system_integration_alt.svg new file mode 100644 index 00000000..04bf2348 --- /dev/null +++ b/doc/site/public/fig/system_integration_alt.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +iDMA Frontend Integration Variants +Descriptor Frontend (CVA6 / Linux) +CPU(CVA6) +DescriptorFrontend +idma_desc64_top +Backend +AXIFabric +Descriptor Memory +reg_req/rsp +AXI master +idma_req_t +idma_rsp_t +AR / R +AW / W / B +irq_o +Snitch ISA Frontend (tightly coupled) +SnitchCore +idma_inst64_top +ND Midend +Backend +×N +AXIFabric +acc_req_t +acc_res_t +axi_req/rsp [N] +hart_id_i • events_o • busy_o[N] +desc64: Separate backend — descriptors fetched from memory via AXI master, IRQ on completion +inst64: Self-contained — backend + 2D midend instantiated internally, driven by Snitch ISA instructions + + \ No newline at end of file diff --git a/doc/site/public/fig/variant_matrix.svg b/doc/site/public/fig/variant_matrix.svg new file mode 100644 index 00000000..312cce98 --- /dev/null +++ b/doc/site/public/fig/variant_matrix.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +iDMA Backend Variants +Write Protocol(s) +ReadProtocol +AXI4 +OBI +AXI4 +AXI Stream +AXI4 +INIT +OBI +INIT +AXI4 +OBI +rw_axi +r_axi_w_obi +rw_axi_rw_axis +r_axi_rw_init_rw_obi +r_obi_w_axi +r_obi_rw_init_w_axi +Base variants +Occamy variants +Naming: r_<read>_w_<write> • rw = same protocol for both • Extend via IDMA_ADD_IDS + + \ No newline at end of file diff --git a/doc/site/src/content.config.ts b/doc/site/src/content.config.ts new file mode 100644 index 00000000..90bcd412 --- /dev/null +++ b/doc/site/src/content.config.ts @@ -0,0 +1,13 @@ +// Copyright 2025 ETH Zurich and University of Bologna. +// Solderpad Hardware License, Version 0.51, see LICENSE for details. +// SPDX-License-Identifier: SHL-0.51 + +// Authors: +// - Daniel Keller + +import { defineCollection } from 'astro:content'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ schema: docsSchema() }), +}; diff --git a/doc/site/src/content/docs/architecture/backend.md b/doc/site/src/content/docs/architecture/backend.md new file mode 100644 index 00000000..11516d39 --- /dev/null +++ b/doc/site/src/content/docs/architecture/backend.md @@ -0,0 +1,164 @@ +--- +title: Backend +description: The backend executes 1D transfers over concrete transport protocols. +--- + +## Backend Role + +The backend is the lowest layer of the iDMA pipeline. It takes 1D transfer requests from the midend and drives the actual bus transactions. Each backend variant targets a specific combination of read and write protocols. Generated modules follow the naming pattern `idma_backend_` (e.g., `idma_backend_rw_axi`, `idma_backend_r_obi_w_axi`). + +![Backend Architecture](/fig/backend.svg) + +### Transfer Lifecycle + +When a 1D transfer request arrives at the backend, it flows through three stages. First, the **legalizer** splits the request into protocol-legal bus bursts (bursts that don't cross page boundaries or exceed the protocol's maximum beat count) — respecting page boundaries, maximum burst lengths, and alignment constraints. Each burst produces a set of control signals (offset, tailer, shift) that describe how the data needs to be realigned. Second, the **transport layer** executes each burst: the read channel fetches data from the source, barrel shifters realign byte lanes, the data buffer absorbs timing differences, and the write channel stores data at the destination. Third, the **error handler** (if enabled) monitors bus responses and reports faults to software. The backend signals completion through `idma_rsp_t` once all bursts of a transfer have finished. + +## Parameters + +The most important parameters for a new integration are `DataWidth` (match your bus width), `BufferDepth` (use 3 unless area-constrained), and `HardwareLegalizer` (use 1 unless your software pre-splits bursts). The remaining parameters tune throughput and area — see the [parameter presets](../guides/system-integration/#4-set-parameters) in the System Integration guide for recommended combinations. + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `DataWidth` | 16 | Data bus width in bits. Must be a power of 2 in {16, 32, 64, 128, 256, 512, 1024} | +| `AddrWidth` | 24 | Address width in bits. Must be >= 12 | +| `UserWidth` | 1 | AXI user signal width. Must be > 0 | +| `AxiIdWidth` | 1 | AXI ID width. Must be > 0 | +| `NumAxInFlight` | 2 | Number of concurrent in-flight transactions. Must be > 1 | +| `BufferDepth` | 2 | Depth of the internal reorder buffer. 2 = minimal, **3 = recommended** because depth-2 buffers stall on misaligned transfers where read and write offsets differ, requiring an extra buffer slot for the alignment pipeline | +| `TFLenWidth` | 24 | Transfer length width. Max transfer size is `2^TFLenWidth` bytes. Must be >= 12 and <= AddrWidth | +| `MemSysDepth` | 0 | Depth of the attached memory system (additional pipeline stages) | +| `CombinedShifter` | 0 | Use a single barrel shifter instead of two (saves area, data no longer word-aligned in buffer) | +| `RAWCouplingAvail` | 1 | Enable R-AW coupling hardware. Should be 1 for pure AXI-to-AXI variants (`rw_axi`); set to 0 for mixed-protocol variants where the write protocol has no AW channel | +| `MaskInvalidData` | 1 | Zero out invalid bytes on the manager interface to reduce toggling | +| `HardwareLegalizer` | 1 | Include hardware burst legalization. If 0, software must ensure legal bursts | +| `RejectZeroTransfers` | 1 | Reject zero-length transfers with a `BACKEND` error response | +| `ErrorCap` | `NO_ERROR_HANDLING` | Error handling capability: `NO_ERROR_HANDLING` or `ERROR_HANDLING` | +| `PrintFifoInfo` | 0 | Print FIFO configuration during elaboration | + +The maximum number of transfers in-flight at any point is: + +``` +MetaFifoDepth = BufferDepth + NumAxInFlight + MemSysDepth +``` + +This determines how many 1D bursts can be in-flight simultaneously — `BufferDepth` entries in the data buffer, `NumAxInFlight` transactions on the bus, and `MemSysDepth` stages in the external memory system. + +## Interface + +### Port Groups + +All backends have the Request, Response, Bus Read, Bus Write, and Busy port groups. The Error Handler ports are only present when `ErrorCap = ERROR_HANDLING`. + +| Group | Signals | Direction | Description | +|-------|---------|-----------|-------------| +| **Request** | `idma_req_i`, `req_valid_i`, `req_ready_o` | in/in/out | 1D transfer request (valid/ready handshake) | +| **Response** | `idma_rsp_o`, `rsp_valid_o`, `rsp_ready_i` | out/out/in | Transfer completion response | +| **Error Handler** | `idma_eh_req_i`, `eh_req_valid_i`, `eh_req_ready_o` | in/in/out | Error handling action (CONTINUE/ABORT) | +| **Bus Read** | `_read_req_o`, `_read_rsp_i` | out/in | Read channel to memory system | +| **Bus Write** | `_write_req_o`, `_write_rsp_i` | out/in | Write channel to memory system | +| **Busy** | `busy_o` | out | Per-subunit busy flags (`idma_busy_t`) | + +### Busy Signal (`idma_busy_t`) + +Software can poll the busy signal to check if the backend is idle before clock-gating, resetting, or reconfiguring it. Each flag corresponds to a specific subunit — if a transfer stalls, the stuck flag identifies the bottleneck: + +```verilog +typedef struct packed { + logic buffer_busy; // Data buffer contains valid data + logic r_dp_busy; // Read datapath active + logic w_dp_busy; // Write datapath active + logic r_leg_busy; // Read legalizer processing + logic w_leg_busy; // Write legalizer processing + logic eh_fsm_busy; // Error handler FSM not idle + logic eh_cnt_busy; // Outstanding transfer counter != 0 + logic raw_coupler_busy; // R-AW coupler holds pending AWs +} idma_busy_t; +``` + +## Variant Matrix + +Each backend variant combines a set of read and write protocols: + +| Variant ID | Read Protocol | Write Protocol | +|------------|---------------|----------------| +| `rw_axi` | AXI4 | AXI4 | +| `r_obi_w_axi` | OBI | AXI4 | +| `r_axi_w_obi` | AXI4 | OBI | +| `rw_axi_rw_axis` | AXI4 | AXI4 + AXI Stream | +| `r_obi_rw_init_w_axi` | OBI | INIT + AXI4 | +| `r_axi_rw_init_rw_obi` | AXI4 | INIT + OBI | + +![Variant Matrix](/fig/variant_matrix.svg) + +## Legalizer + +The legalizer decomposes a 1D transfer request into a sequence of protocol-legal bus bursts. It operates as two coupled state machines — one for the read side, one for the write side — that track the remaining bytes and current address of each transfer independently. + +The legalizer is pure control path: it does not touch the data. It computes page/burst boundaries, splits transfers accordingly, and emits `offset`, `tailer`, and `shift` values that the transport layer uses for data realignment. + +![Legalizer](/fig/legalizer.svg) + +### Splitting Rules + +| Protocol | Burst Mode | Page Size | Max Beats | +|----------|-----------|-----------|-----------| +| AXI | `split_at_page_boundary` | 4096 B | 256 | +| TileLink | `only_pow2` | 2048 B | Power-of-2 sized | +| OBI | `not_supported` (single-beat) | StrbWidth | 1 | +| INIT | `not_supported` (single-beat) | StrbWidth | 1 | +| AXI Stream | `not_supported` (single-beat) | StrbWidth | 1 | + +For AXI, the legalizer ensures bursts do not cross 4 KiB page boundaries and respect the 256-beat maximum. TileLink uses power-of-2 aligned bursts with a 2048 B page size (limited by the TLToAXI4 bridge for AXI compliance); in TLToAXI4 compatibility mode, write bursts are further limited to 32 beats and never cross page boundaries. For non-bursting protocols (OBI, INIT, AXI Stream), each transfer is a single bus-width beat. The effective page size is `min(max_beats * StrbWidth, page_size)`. + +If `HardwareLegalizer=1` and software submits a transfer crossing a page boundary, the legalizer splits it automatically. With `HardwareLegalizer=0`, such a transfer would violate the protocol and cause undefined bus behavior. + +**Example**: A 5000-byte AXI transfer starting at address `0xFF8`. The 4 KiB page boundary is at `0x1000`, only 8 bytes away. The legalizer emits: burst 1 (8 bytes at `0xFF8` — reaches page boundary), burst 2 (4096 bytes at `0x1000`), burst 3 (896 bytes at `0x2000`). Each burst stays within a single 4 KiB page and respects the 256-beat limit. + +### Datapath Control Signals + +The legalizer communicates with the transport layer through internal control signals (`offset`, `tailer`, `shift`, `is_single`) that describe how each burst should be realigned. These are not visible to software — they flow through decoupling FIFOs between the two stages. + +### Software Legalization + +When `HardwareLegalizer=0`, the legalizer is bypassed and replaced with a simple `stream_fork` that synchronizes the read and write paths. In this mode, software is responsible for ensuring all transfers are already legal for the target protocol (e.g., no AXI page-boundary crossings). Use this only when software pre-splits all transfers into protocol-legal bursts (e.g., an RTOS DMA driver that already handles AXI page boundaries). This saves ~1–2K gates but moves burst-splitting responsibility to the driver. + +## Transport Layer + +### Architecture + +The transport layer is responsible for moving data from source to destination, handling the byte-lane realignment that arises when source and destination addresses have different bus-word offsets. It contains the read channel, byte-granular data buffer, and write channel. Data flows as: **read port** -> **read barrel shifter** -> **dataflow element (buffer)** -> **write barrel shifter** -> **write port**. + +The buffer (`idma_dataflow_element`) is an array of independent FIFOs, one per byte lane (`StrbWidth` = `DataWidth / 8`, i.e., the number of byte lanes; `StrbWidth` FIFOs of depth `BufferDepth`). This byte-granular design allows data to enter and leave the buffer at arbitrary byte-lane positions, enabling misaligned transfers without additional alignment stages. + +### Data Realignment + +:::note[Figure placeholder] +Diagram: data realignment through read shifter, buffer, and write shifter. +Show an example with misaligned source/destination offsets and byte lane rotation. +::: + +Two barrel shifters handle the address offset difference between source and destination. The **read shifter** aligns incoming data based on the source address offset; the **write shifter** rotates data to match the destination address offset. + +When `CombinedShifter=1`, both shifts are folded into a single operation before the buffer. This halves the shifter area but means data inside the buffer is no longer word-aligned. The tradeoff is area (single shifter) vs. timing (data alignment happens earlier in the pipeline). + +## Channel Coupler + +The R-AW channel coupler (`idma_channel_coupler`) holds back AW requests until the first corresponding R beat arrives. Without coupling, the DMA could issue a write address before the read data arrives, which wastes write-side resources and can increase interconnect pressure — particularly problematic in shared-bus fabrics. With coupling enabled, the write address is only sent once data is available, preventing write-before-read ordering hazards. Controlled by `RAWCouplingAvail` (enables the hardware) and `decouple_aw` (per-transfer opt-in via `backend_options_t`). Only available for AXI-to-AXI variants. + +Despite the name, `decouple_aw` actually *enables* R-AW coupling (holding AW until R data arrives). The name refers to the backend option struct field (`beo.decouple_aw`), where setting it to 1 activates the coupling logic. + +**When coupling helps**: On a shared AXI bus, an uncoupled DMA issues AW immediately, occupying a write-side slot before data is available. With coupling, AW waits for the first R beat, ensuring the write port is only claimed when data is ready to flow. **When to disable**: If the read and write ports go to different memory controllers (no shared resources), coupling adds unnecessary latency. + +## Error Handler + +The error handler monitors R and W datapath responses for non-OKAY AXI responses. When an error is detected, it reports the faulting burst address and error type to software and waits for a CONTINUE or ABORT action. See the [Error Handling guide](../guides/error-handling/) for the full FSM description and software handling patterns. + +## Source Files + +- **Backend template**: `src/backend/tpl/idma_backend.sv.tpl` +- **Legalizer template**: `src/backend/tpl/idma_legalizer.sv.tpl` +- **Transport layer template**: `src/backend/tpl/idma_transport_layer.sv.tpl` +- **Error handler**: `src/backend/idma_error_handler.sv` +- **Channel coupler**: `src/backend/idma_channel_coupler.sv` +- **Dataflow element**: `src/backend/idma_dataflow_element.sv` +- **Generated output**: `target/rtl/idma_backend_*.sv` diff --git a/doc/site/src/content/docs/architecture/frontend/descriptor.md b/doc/site/src/content/docs/architecture/frontend/descriptor.md new file mode 100644 index 00000000..be4721b3 --- /dev/null +++ b/doc/site/src/content/docs/architecture/frontend/descriptor.md @@ -0,0 +1,107 @@ +--- +title: Descriptor Frontend +description: Descriptor-ring frontend for hardware-managed transfer queues. +--- + +## Descriptor Frontend Role + +The descriptor frontend (`idma_desc64_top`) uses a linked list of transfer descriptors in shared memory. Hardware fetches descriptors autonomously over an AXI read port, enabling software to enqueue multiple transfers without polling for completion of each one. + +## Descriptor Format + +The descriptor frontend's reshaper (a module that converts the descriptor's flag bits into the `idma_req_t` option fields, `idma_desc64_reshaper`) maps flag bits to backend options, but also hardcodes some values. Notably, `src_max_llen` and `dst_max_llen` are always set to 0 (full debursting: every transfer is broken into single-beat bus transactions, maximum protocol compliance at the cost of throughput), and `lock`, `prot`, `qos`, `region` are zeroed. These options cannot be controlled per-descriptor. + +Each descriptor is a 256-bit packed struct stored in shared memory. In a SystemVerilog packed struct, the first field (`flags`) occupies the most-significant bits and the last field (`dest_addr`) occupies the least-significant bits. In memory (little-endian), `dest_addr` is at the lowest byte address: + +```verilog +typedef struct packed { + logic [31:0] flags; // Transfer flags (see below) + logic [31:0] length; // Transfer length in bytes + addr_t next; // Address of next descriptor (0xFFFF...F = end of chain) + addr_t src_addr; // Source address + addr_t dest_addr; // Destination address +} descriptor_t; // Total: 256 bits (addr_t = 64 bits) +``` + +Descriptors must be in memory accessible to the DMA's AXI read port. Descriptors are read as 256-bit naturally-aligned bursts. + +:::caution[Cache coherency] +If the CPU uses a data cache, descriptors must be in an uncached or cache-coherent memory region. If you modify a descriptor after writing it and before the DMA reads it, flush the relevant cache lines. The DMA does not snoop CPU caches. +::: + +### Flags Bitfield + +| Bits | Field | Description | +|------|-------|-------------| +| 0 | `irq` | Trigger interrupt on completion | +| 2:1 | `src_burst` | Source burst type: 00=FIXED, 01=INCR, 10=WRAP | +| 4:3 | `dst_burst` | Destination burst type: 00=FIXED, 01=INCR, 10=WRAP | +| 5 | `decouple_rw` | Fully decouple read and write channels — the backend can write without waiting for reads to complete (risk of deadlock if buffer fills) | +| 6 | `decouple_aw` | Safer decoupling: write *addresses* are held back until the first read data arrives, but once data starts flowing, reads and writes proceed independently | +| 7 | `reduce_len` | Reduce burst length on both source and destination (`opt.beo.src_reduce_len` + `opt.beo.dst_reduce_len`) | +| 11:8 | `src_cache` | AXI cache attributes for source (bufferable, modifiable, read-alloc, write-alloc) | +| 15:12 | `dst_cache` | AXI cache attributes for destination | +| 23:16 | `axi_id` | AXI ID for the transfer | +| 31:24 | — | Reserved | + +**Typical flags values**: `0x00000000` — default (INCR burst, no decoupling, no IRQ). `0x00000001` — IRQ on completion. `0x00000061` — decouple_aw + decouple_rw + IRQ. + +## Descriptor Chain Example + +:::note[Figure placeholder] +Diagram: descriptor chain layout in memory. +Show two descriptors, next pointer, and end-of-chain marker. +::: + +A two-descriptor chain that transfers 64 bytes, then 128 bytes, then stops. Assume the descriptors are allocated at addresses `0x4000` and `0x4020` (32 bytes apart, naturally aligned): + +``` +// Descriptor at address 0x4000: +// src_addr = 0x1000 +// dest_addr = 0x2000 +// next = 0x4020 (address of the second descriptor) +// length = 64 +// flags = 0x00000000 (no IRQ, INCR burst, no decoupling) + +// Descriptor at address 0x4020: +// src_addr = 0x1100 +// dest_addr = 0x2100 +// next = 0xFFFFFFFF_FFFFFFFF (end of chain) +// length = 128 +// flags = 0x00000001 (IRQ on completion) +``` + +## Parameters + +The descriptor frontend is configured through module parameters at instantiation time: + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `AddrWidth` | 64 | Address width | +| `DataWidth` | 64 | AXI data width | +| `AxiIdWidth` | 3 | AXI ID width | +| `InputFifoDepth` | 8 | Depth of the descriptor address input FIFO | +| `PendingFifoDepth` | 8 | Depth of the pending request tracking FIFO | +| `BackendDepth` | 0 | Backend pipeline depth (`NumAxInFlight + BufferDepth`) | +| `NSpeculation` | 4 | Number of descriptors to prefetch speculatively | + +## Programming Sequence + +1. **Allocate descriptors** in memory accessible to both CPU and DMA (e.g., uncached or coherent region) +2. **Fill descriptor fields**: Set `src_addr`, `dest_addr`, `length`, `flags` for each transfer +3. **Chain descriptors**: Set each descriptor's `next` field to the address of the following descriptor. Use `0xFFFFFFFF_FFFFFFFF` to mark the end of the chain +4. **Write first descriptor address** to the `desc_addr` register. This register is part of the descriptor frontend's own small register file (separate from the descriptor memory). Writing a non-zero address to it triggers the fetch engine +5. **Hardware fetches autonomously**: The frontend reads descriptors over AXI, submits them to the backend, and follows the `next` pointer chain +6. **Wait for completion**: Poll the status register (bit 0 = busy) or wait for the IRQ (if `flags.irq` is set) + +## Speculative Prefetch + +The `NSpeculation` parameter controls how many descriptors the frontend may fetch ahead of the backend's consumption. This hides the descriptor fetch latency — while the backend processes one transfer, the frontend is already reading the next `NSpeculation` descriptors from memory. Setting `NSpeculation=0` disables prefetching (each descriptor is fetched only after the previous transfer completes). + +Set `NSpeculation` to match your expected descriptor chain length or `NumAxInFlight`, whichever is smaller. Higher values waste memory bandwidth on speculative reads if chains are short. For most systems, `NSpeculation=4` is a good default. + +## Source Files + +- `src/frontend/desc64/idma_desc64_top.sv` — Top-level module +- `src/frontend/desc64/idma_desc64_reg_wrapper.sv` — Register interface wrapper +- `src/frontend/desc64/idma_desc64_reshaper.sv` — Descriptor-to-request conversion diff --git a/doc/site/src/content/docs/architecture/frontend/index.md b/doc/site/src/content/docs/architecture/frontend/index.md new file mode 100644 index 00000000..9efdabd0 --- /dev/null +++ b/doc/site/src/content/docs/architecture/frontend/index.md @@ -0,0 +1,36 @@ +--- +title: Frontend +description: Frontends accept transfer descriptors from the platform and emit iDMA requests. +--- + +## Frontend Role + +The frontend is the topmost layer of the iDMA pipeline. It provides the software-visible interface through which the host or an accelerator core submits transfer descriptors. iDMA ships three frontend families, each targeting a different integration style: + +- **[Register Frontend](./register/)** — memory-mapped register interface (`reg64_2d`) +- **[Snitch Frontend](./snitch/)** — ISA-coupled frontend for Snitch cores (`inst64`) +- **[Descriptor Frontend](./descriptor/)** — descriptor-ring frontend (`desc64`) + +## Choosing a Frontend + +| | Register | Descriptor | Snitch | +|---|---------|-----------|--------| +| **Interface** | Memory-mapped registers (PULP `reg_interface` — a lightweight request/response protocol similar to APB, used for memory-mapped register access in PULP SoCs) | Descriptor ring in shared memory (AXI) | Custom ISA extension (accelerator bus) | +| **Typical SoC** | General-purpose (CVA6, RISC-V) | CVA6 / Linux-capable | Snitch cluster | +| **Data Width** | Any | 64-bit | Any (typically 64–512 bit) | +| **ND Support** | Yes (2D via `reg64_2d`) | No (1D only) | Yes (2D, `NumDim=2`) | +| **Key Advantage** | Simple, portable | Hardware-managed queue, low CPU overhead | Single-cycle launch, zero register overhead | +| **Error Visibility** | Status register (poll `done_id`, check response) | IRQ (if `flags.irq` set) | Poll via `DMSTAT` | + +:::note[Figure placeholder] +Diagram: frontend selection decision flow. +Show Snitch decision first, then descriptor vs register based on queue needs. +::: + +## Common Pattern + +All frontends produce `idma_req_t` (or `idma_nd_req_t` for ND-capable frontends) and consume `idma_rsp_t`. Frontends are interchangeable at the `idma_req_t` / `idma_rsp_t` boundary, but each has a different control plane: register bus, AXI (descriptor fetch), or accelerator interface. Switching frontends requires re-wiring the host-side interface. + +## Generated Variants + +The register frontend is **generated** from Mako templates (`src/frontend/reg/tpl/`) by the MARIO framework, producing variants like `idma_reg64_2d`. The descriptor (`desc64`) and Snitch (`inst64`) frontends are **hand-written** SystemVerilog in `src/frontend/desc64/` and `src/frontend/inst64/` respectively. diff --git a/doc/site/src/content/docs/architecture/frontend/register.md b/doc/site/src/content/docs/architecture/frontend/register.md new file mode 100644 index 00000000..fffc05c5 --- /dev/null +++ b/doc/site/src/content/docs/architecture/frontend/register.md @@ -0,0 +1,138 @@ +--- +title: Register Frontend +description: Memory-mapped register interface for submitting DMA transfers. +--- + +## Register Frontend Role + +The register frontend (`idma_reg64_2d`) exposes a standard memory-mapped register file through which software configures and launches DMA transfers. It connects via the PULP register interface and is the most common frontend for general-purpose SoCs. The module is generated from `src/frontend/reg/tpl/idma_reg.sv.tpl`. + +## Parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `NumRegs` | 1 | Number of configuration register ports (parallel access points) | +| `NumStreams` | 1 | Number of independent DMA streams (max 16). Each stream has its own transfer ID counter | +| `IdCounterWidth` | 32 | Width of the transfer ID counter (max 32-bit) | + +## Programming Sequence + +1. **Write transfer parameters**: Set `src_addr`, `dst_addr`, `num_bytes`, and optionally `reps`/`src_stride`/`dst_stride` for 2D mode +2. **Write configuration**: Set `conf` with the desired decouple flags, protocol selection, and ND mode enable. Stream selection is implicit in which `next_id[stream]` register you read in the next step +3. **Read `next_id[stream]`**: This read atomically launches the transfer on the selected stream and returns the assigned transfer ID. The register port stalls (backpressures the bus) until the backend accepts the request +4. **Poll `done_id[stream]`**: Wait until `done_id >= next_id` to confirm completion + +:::caution[Side-effect read] +Reading the `next_id` register has a side effect — it atomically launches the configured transfer. This atomic read-launch mechanism prevents race conditions in multi-core systems — the bus stall guarantees that the transfer parameters are consumed before another core can overwrite them. This is non-standard register behavior; ensure your driver reads `next_id` exactly once per transfer. +::: + +## Register Map + +The register file provides direct access to all fields of the `idma_req_t` / `idma_nd_req_t` structs. Software writes the transfer parameters, then reads `next_id` to atomically submit the request: + +:::note[32-bit register bus] +The register bus is 32 bits wide. 64-bit values (addresses, lengths, strides) are split across `_low` and `_high` register pairs (e.g., `src_addr_low` at offset 0xDC, `src_addr_high` at offset 0xE0). The simplified names in the table below refer to the logical fields; see the generated register description (`target/rtl/idma_reg64_2d.hjson`) for exact offsets and bit layouts. +::: + +**Transfer Parameters** — set these before launching a transfer: + +| Register | Access | Description | +|----------|--------|-------------| +| `src_addr` | R/W | Source address for the next transfer | +| `dst_addr` | R/W | Destination address for the next transfer | +| `num_bytes` | R/W | Transfer length in bytes | + +**Configuration** — controls decoupling, burst limits, protocol selection, and ND mode: + +| Register | Access | Description | +|----------|--------|-------------| +| `conf` | R/W | Transfer configuration (see below) | + +**Control/Status** — `next_id` launches the transfer; `done_id` signals completion: + +| Register | Access | Description | +|----------|--------|-------------| +| `status` | RO | Per-stream busy flags | +| `next_id` | RO | Per-stream next transfer ID. **Reading launches the transfer** | +| `done_id` | RO | Per-stream last completed transfer ID | + +**ND Mode** — only used when `enable_nd` is set in `conf`: + +| Register | Access | Description | +|----------|--------|-------------| +| `reps` | R/W | Number of 2D repetitions (ND mode) | +| `src_stride` | R/W | Source stride between rows (ND mode) | +| `dst_stride` | R/W | Destination stride between rows (ND mode) | + +### Configuration Register (`conf`) + +| Bits | Field | Description | +|------|-------|-------------| +| 0 | `decouple_aw` | Enable R-AW coupling (hold write addresses until read data arrives) | +| 1 | `decouple_rw` | Fully decouple read and write channels | +| 2 | `src_reduce_len` | Shorten source bursts beyond page-boundary splitting | +| 3 | `dst_reduce_len` | Shorten destination bursts | +| 6:4 | `src_max_llen` | Max source burst length as log2(beats) | +| 9:7 | `dst_max_llen` | Max destination burst length as log2(beats) | +| 10 | `enable_nd` | Enable ND mode (use previously set `reps`/`src_stride`/`dst_stride`) | +| 13:11 | `src_protocol` | Source protocol select (`protocol_e` enum) | +| 16:14 | `dst_protocol` | Destination protocol select (`protocol_e` enum) | + +## Multi-Port Arbitration + +When `NumRegs > 1`, multiple register ports can submit transfers concurrently. An internal round-robin arbiter serializes requests to the single backend interface. Each port stalls independently on its `next_id` read until its request is accepted. This allows multiple cores to share a single DMA without software-level locking. + +:::note[Figure placeholder] +Diagram: register frontend sequence. +Show write parameters, read `next_id` launching the transfer, and polling `done_id` until completion. +::: + +## Worked Example: 1 KiB Transfer + +The following register writes launch a 1 KiB AXI-to-AXI transfer from `0x8000_0000` to `0xC000_0000` with R-AW coupling enabled, on stream 0: + +``` +// 1. Write transfer parameters +write(src_addr_low, 0x80000000); +write(src_addr_high, 0x00000000); +write(dst_addr_low, 0xC0000000); +write(dst_addr_high, 0x00000000); +write(num_bytes_low, 1024); +write(num_bytes_high, 0); + +// 2. Write configuration: decouple_aw=1, everything else default (AXI=0) +write(conf, 0x1); // bit 0 = decouple_aw + +// 3. Read next_id[0] — launches the transfer, returns transfer ID +tid = read(next_id_0); + +// 4. Poll for completion +while (read(done_id_0) < tid); +``` + +## Worked Example: 2D Transfer + +The following register writes launch a 2D transfer copying 4 rows of 64 bytes with different source and destination strides: + +``` +// 2D example: copy 4 rows of 64 bytes, src stride 256, dst stride 64 +write(num_bytes_low, 64); +write(num_bytes_high, 0); +write(src_addr_low, 0x80000000); +write(src_addr_high, 0x00000000); +write(dst_addr_low, 0xC0000000); +write(dst_addr_high, 0x00000000); +write(reps, 4); +write(src_stride_low, 256); +write(src_stride_high, 0); +write(dst_stride_low, 64); +write(dst_stride_high, 0); +write(conf, 0x401); // bit 0 = decouple_aw, bit 10 = enable_nd +tid = read(next_id_0); +while (read(done_id_0) < tid); +``` + +## Source Files + +- **Template**: `src/frontend/reg/tpl/idma_reg.sv.tpl` +- **Generated output**: `target/rtl/idma_reg64_2d.sv`, `target/rtl/idma_reg32_2d.sv` diff --git a/doc/site/src/content/docs/architecture/frontend/snitch.md b/doc/site/src/content/docs/architecture/frontend/snitch.md new file mode 100644 index 00000000..09090194 --- /dev/null +++ b/doc/site/src/content/docs/architecture/frontend/snitch.md @@ -0,0 +1,95 @@ +--- +title: Snitch Frontend +description: ISA-coupled frontend for Snitch cores using Xdma custom instructions. +--- + +## Snitch Frontend Role + +The Snitch frontend (`idma_inst64_top`) is tightly coupled to the Snitch RISC-V core through custom Xdma ISA extensions. DMA transfers are launched directly from the instruction stream via the accelerator bus interface, eliminating register file overhead and enabling single-cycle transfer submission. + +![Snitch Integration](/fig/system_integration_alt.svg) + +## Xdma Instruction Set + +A DMA transfer requires three steps: (1) set the source and destination addresses (`DMSRC`, `DMDST`), (2) launch the transfer with a length and config (`DMCPY`/`DMCPYI`), (3) poll for completion (`DMSTAT`/`DMSTATI`). Optional instructions set 2D parameters (`DMSTR`, `DMREP`) and AXI user fields (`DMUSER`). + +All DMA instructions that return a value write to `rd` (destination register). The assembly syntax is `DMCPYI rd, rs1, imm` — `rd` receives the transfer ID, `rs1` provides the length. + +| Instruction | Operands | Description | +|-------------|----------|-------------| +| `DMSRC` | `rs1` (low 32b), `rs2` (high bits) | Set source address | +| `DMDST` | `rs1` (low 32b), `rs2` (high bits) | Set destination address | +| `DMCPYI` | `rd` = transfer ID, `rs1` = length, imm = {channel, config} | Launch transfer (immediate config). Returns transfer ID in `rd` | +| `DMCPY` | `rd` = transfer ID, `rs1` = length, `rs2` = {channel, config} | Launch transfer (register config). Returns transfer ID in `rd` | +| `DMSTATI` | `rd` = status value, imm = {channel, status_sel} | Query status (immediate). Returns status in `rd` | +| `DMSTAT` | `rd` = status value, `rs2` = {channel, status_sel} | Query status (register). Returns status in `rd` | +| `DMSTR` | `rs1` = src_stride, `rs2` = dst_stride | Set 2D strides | +| `DMREP` | `rs1` = repetitions | Set 2D repetition count | +| `DMUSER` | `rs1`, `rs2` | Set AXI user field. When `AxiUserWidth <= 32`, only `rs1` is used (lower bits). When `AxiUserWidth > 32`, `rs1` provides bits [31:0] and `rs2` provides the remaining upper bits | + +**Status select values** (`DMSTAT`/`DMSTATI`): +- `0`: Completed transfer ID — compare against the ID returned by `DMCPY` to check if a specific transfer has finished +- `1`: Next transfer ID — the ID that will be assigned to the next submitted transfer +- `2`: Busy flag — 1 if any transfer is in-flight on this channel +- `3`: Backend FIFO full flag — 1 if the request FIFO is full; software should wait before submitting more transfers + +**Config field** (`DMCPY`/`DMCPYI`): +- Bit 0: Reserved +- Bit 1: Enable 2D mode (use previously set strides/reps). If 2D mode is enabled but `DMSTR`/`DMREP` were not called since the last transfer, the previously set stride and repetition values are reused. On reset, these default to zero +- Bits 4:2: Channel select — `$clog2(NumChannels)` bits wide, remaining upper bits are zero-extended. For the common single-channel case (`NumChannels=1`), these bits are unused and only bit 1 (2D enable) matters + +## Parameters + +For most Snitch cluster integrations, `NumChannels=1` and `NumAxInFlight=3` are standard. Increase `NumChannels` only if you need independent DMA channels on separate address spaces. + +| Parameter | Description | +|-----------|-------------| +| `AxiDataWidth` | AXI data bus width | +| `AxiAddrWidth` | AXI address width | +| `AxiUserWidth` | AXI user signal width (max 64 bits) | +| `AxiIdWidth` | AXI ID width | +| `NumAxInFlight` | Number of in-flight AXI transactions (default: 3) | +| `DMAReqFifoDepth` | Depth of the request FIFO between frontend and midend (default: 3) | +| `NumChannels` | Number of independent DMA channels, each with its own backend + ND midend (default: 1) | +| `DMATracing` | Enable DMA trace file generation for debugging | + +## Programming Sequence + +The following assembly sequence demonstrates a complete 2D DMA transfer with polling completion: + +```asm +# 1. Set source address +DMSRC a0, a1 # src_addr = {a1, a0} + +# 2. Set destination address +DMDST a2, a3 # dst_addr = {a3, a2} + +# 3. (Optional) Set 2D parameters +DMSTR a4, a5 # src_stride = a4, dst_stride = a5 +DMREP a6 # reps = a6 + +# 4. Launch transfer (2D mode on channel 0) +DMCPYI t0, a7, 0b010 # t0 = transfer_id, config[1]=1 (2D mode) + +# 5. Poll for completion +loop: + DMSTATI t1, 0b000 # t1 = completed_id on channel 0 + blt t1, t0, loop # Wait until completed_id >= transfer_id +``` + +:::note[Figure placeholder] +Diagram: Snitch instruction flow. +Show DMSRC/DMDST setup, DMSTR/DMREP for ND, DMCPY launch, DMSTAT polling. +::: + +## Internal Architecture + +The `idma_inst64_top` module instantiates `NumChannels` independent backends, each paired with an ND midend (`NumDim=2`, `BufferDepth=3`). The frontend instruction decoder fills an `idma_nd_req_t` struct from the instruction stream and routes it to the selected channel's request FIFO. A per-channel transfer ID generator tracks issue and retire events. Each backend produces separate AXI read and write manager ports. The `axi_rw_join` module merges them into a single AXI manager port for connection to the SoC interconnect. + +When `NumChannels > 1`, each channel has its own independent backend and ND midend. The channel is selected via the config field in `DMCPY`/`DMCPYI` (bits 4:2). Channels operate independently — one can be busy while another accepts new transfers. The AXI ports from all channels are merged via `axi_rw_join`, so they share bus bandwidth. + +## Source Files + +- `src/frontend/inst64/idma_inst64_top.sv` — Top-level module +- `src/frontend/inst64/idma_inst64_snitch_pkg.sv` — Instruction encodings +- `src/frontend/inst64/idma_inst64_events.sv` — Performance event counters diff --git a/doc/site/src/content/docs/architecture/interfaces.md b/doc/site/src/content/docs/architecture/interfaces.md new file mode 100644 index 00000000..a729d833 --- /dev/null +++ b/doc/site/src/content/docs/architecture/interfaces.md @@ -0,0 +1,74 @@ +--- +title: Interfaces and Types +description: Request, response, and option structs used across iDMA layers. +--- + +## Interface Reference + +This page is the reference for `idma_req_t`, `options_t`, and `idma_rsp_t`. Use it when writing drivers or connecting custom frontends. For integration, prefer the convenience macros from `typedef.svh`. + +## Transfer Request (`idma_req_t`) + +The request carries addresses, transfer length, and options that control protocol and backend behavior. + +```verilog +`IDMA_TYPEDEF_REQ_T(idma_req_t, tf_len_t, axi_addr_t, options_t) +// Expands to: +typedef struct packed { + tf_len_t length; // Transfer length in bytes + axi_addr_t src_addr; // Source byte address + axi_addr_t dst_addr; // Destination byte address + user_t user; // User-defined sideband data + options_t opt; // Transfer options +} idma_req_t; +``` + +## Transfer Options (`options_t`) + +Transfer options select protocols and carry sideband signals. Each request embeds one `options_t`. + +```verilog +`IDMA_TYPEDEF_OPTIONS_T(options_t, axi_id_t) +// Expands to: +typedef struct packed { + idma_pkg::protocol_e src_protocol; // Source bus protocol + idma_pkg::protocol_e dst_protocol; // Destination bus protocol + axi_id_t axi_id; // AXI transaction ID + idma_pkg::axi_options_t src; // Source AXI options + idma_pkg::axi_options_t dst; // Destination AXI options + idma_pkg::backend_options_t beo; // Backend engine options + logic last; // Last transfer flag (for midend) +} options_t; +``` + +## Transfer Response (`idma_rsp_t`) + +The response indicates completion and error status for a transfer. + +```verilog +`IDMA_TYPEDEF_RSP_T(idma_rsp_t, err_payload_t) +// Expands to: +typedef struct packed { + logic last; // Last response for this ND transfer + logic error; // Error occurred + err_payload_t pld; // Error details (cause, type, address) +} idma_rsp_t; +``` + +## Error Payload (`err_payload_t`) + +The error payload identifies the faulting burst and its origin. + +```verilog +`IDMA_TYPEDEF_ERR_PAYLOAD_T(err_payload_t, axi_addr_t) +// Expands to: +typedef struct packed { + axi_pkg::resp_t cause; // AXI response code + idma_pkg::err_type_t err_type; // Error source (BUS_READ, BUS_WRITE, BACKEND, ND_MIDEND) + axi_addr_t burst_addr; // Address of the faulting burst +} err_payload_t; +``` + +## Handshake Semantics + +All request and response interfaces use ready/valid handshaking. A transfer is accepted when `req_valid_i` and `req_ready_o` are both high in the same cycle. A response is accepted when `rsp_valid_o` and `rsp_ready_i` are both high. diff --git a/doc/site/src/content/docs/architecture/midend.md b/doc/site/src/content/docs/architecture/midend.md new file mode 100644 index 00000000..3e98aa56 --- /dev/null +++ b/doc/site/src/content/docs/architecture/midend.md @@ -0,0 +1,149 @@ +--- +title: Midend +description: The midend decomposes multi-dimensional and round-trip transfers into 1D requests. +--- + +## Midend Role + +The midend sits between the frontend and backend. It accepts N-dimensional or round-trip transfer descriptors and decomposes them into a stream of 1D requests that the backend can execute. The midend is **optional** — for systems that only need 1D transfers, the frontend can drive the backend directly. **Use the ND midend** when your transfers are 2D or higher (e.g., tiling a matrix, copying framebuffer rows with stride). **Skip the midend** (connect frontend directly to backend) when all your transfers are 1D contiguous copies — the midend adds latency and area for no benefit in this case. See the [System Integration](../guides/system-integration/) guide for wiring examples showing how the midend connects to the frontend and backend. + +Four midend variants are available: + +| Variant | Module | Purpose | +|---------|--------|---------| +| **ND** | `idma_nd_midend` | Multi-dimensional transfer decomposition | +| **RT** | `idma_rt_midend` | Event-driven periodic (round-trip) transfers | +| **MP_DIST** | `idma_mp_dist_midend` | Distribute transfers across multiple backends by address | +| **MP_SPLIT** | `idma_mp_split_midend` | Split transfers at region boundaries for a single backend | + +## ND Midend + +The ND midend (`idma_nd_midend`) decomposes an N-dimensional transfer into a sequence of 1D transfers. After each 1D burst completes, the midend checks whether the current dimension has remaining repetitions. If so, it adds the dimension's stride to the address and emits the next burst. When a dimension exhausts its repetitions, the next-higher dimension increments. Internally, this is implemented with cascaded counters (one per dimension) and a popcount-based selector that handles simultaneous dimension overflows. + +### ND Parameters + +| Parameter | Description | +|-----------|-------------| +| `NumDim` | Number of dimensions. Must be >= 2 (dimension 1 is the 1D burst handled by the backend) | +| `RepWidths` | Per-dimension counter widths — an array specifying the counter width for each dimension. For example, with `NumDim=3` and `RepWidths = '{32, 16, 8}`, dimension 1 supports up to 2³² repetitions, dimension 2 up to 2¹⁶, etc. | + +### Request Types + +The ND request wraps a 1D `idma_req_t` with per-dimension stride/repetition descriptors: + +```verilog +`IDMA_TYPEDEF_D_REQ_T(idma_d_req_t, reps_t, strides_t) +// Expands to: +typedef struct packed { + reps_t reps; // Number of repetitions for this dimension + strides_t src_strides; // Source address stride (bytes) + strides_t dst_strides; // Destination address stride (bytes) +} idma_d_req_t; + +`IDMA_TYPEDEF_ND_REQ_T(idma_nd_req_t, idma_req_t, idma_d_req_t) +// Expands to: +typedef struct packed { + idma_req_t burst_req; // Base 1D request + idma_d_req_t [NumDim-2:0] d_req; // Per-dimension descriptors +} idma_nd_req_t; +``` + +### Worked Example: 2D Transfer + +Consider a 2D transfer copying a 64-byte row repeated 4 times with different source and destination pitches. For this transfer, the request parameters are: + +``` +NumDim = 2 +length = 64 (bytes per row) +reps = 4 (number of rows) +src_stride = 128 (source row pitch) +dst_stride = 64 (destination row pitch, tightly packed) +``` + +The ND midend emits 4 sequential 1D transfers: + +| Iteration | src_addr | dst_addr | length | +|-----------|----------|----------|--------| +| 0 | `base_src + 0` | `base_dst + 0` | 64 | +| 1 | `base_src + 128` | `base_dst + 64` | 64 | +| 2 | `base_src + 256` | `base_dst + 128` | 64 | +| 3 | `base_src + 384` | `base_dst + 192` | 64 | + +:::note[Figure placeholder] +Diagram: 2D transfer memory layout. +Show source rows with stride gaps and destination rows packed tightly. +::: + +:::note[Zero repetitions] +If all repetition counts for a dimension are zero, that dimension is treated as a no-op ("zero stage"). The midend signals this as an `ND_MIDEND` error in the response. +::: + +## RT Midend + +The RT midend (`idma_rt_midend`) supports event-driven periodic transfers. It is designed for periodic data movement — sensor sampling at fixed intervals, display buffer refresh, or ring-buffer rotation. Each event channel triggers its pre-configured transfer when its countdown reaches zero, without CPU intervention. + +It contains `NumEvents` countdown counters, each triggering an ND transfer when its counter reaches zero. A round-robin arbiter selects among ready events, and a bypass path allows non-periodic transfers to pass through. + +**Example**: A sensor sampling system needs to copy 256 bytes from sensor MMIO (`0x4000_0000`) to a ring buffer (`0x8000_0000`) every 1000 clock cycles. Configure event channel 0 with: `src_addr = 0x4000_0000`, `dst_addr = 0x8000_0000`, `length = 256`, `countdown = 1000`. The RT midend will autonomously re-trigger this transfer every 1000 cycles. + +### RT Parameters + +| Parameter | Description | +|-----------|-------------| +| `NumEvents` | Number of parallel event channels | +| `EventCntWidth` | Width of the countdown counters (period in clock cycles) | +| `NumOutstanding` | Maximum outstanding transfers (depth of the response routing FIFO) | + +### Operation + +1. Software configures each event channel with: source/destination addresses, transfer length, 2D strides/repetitions, and a countdown threshold. Configuration is submitted through the module's `nd_req_i` port — software sends ND requests with an event channel ID. The countdown threshold and enable signals are separate input ports +2. Each enabled counter decrements every clock cycle +3. On overflow (reaching zero), the counter's pre-configured ND request is submitted to the arbiter +4. A round-robin arbiter (`stream_arbiter`) selects among triggered events +5. The bypass path allows direct ND requests to be interleaved with periodic ones via a second round-robin arbiter +6. A response FIFO routes completions back to the correct requester (periodic or bypass) + +## Multicore Midends + +:::note[Figure placeholder] +Diagram: MP_DIST vs MP_SPLIT. +Show parallel distribution across multiple backends vs serialized region splits to a single backend. +::: + +### MP_DIST + +Use MP_DIST when your SoC has multiple memory banks and you want a single transfer to be distributed across backends, each serving a contiguous address region (e.g., tightly-coupled data memory in a cluster). + +The distributed midend (`idma_mp_dist_midend`) splits a single transfer across `NumBEs` backends based on address regions. Each backend owns a contiguous `RegionWidth`-byte slice within the range `[RegionStart, RegionEnd)`. The following parameters control the address region mapping: + +| Parameter | Description | +|-----------|-------------| +| `NumBEs` | Number of backends to distribute across | +| `RegionWidth` | Size of each backend's address region in bytes | +| `RegionStart` | Base address of the distributed region | +| `RegionEnd` | End address of the distributed region | +| `AddrWidth` | Address width | +| `PrintInfo` | Print debug info on transfers | + +The midend uses a `stream_fork` to fan out the request to all backends simultaneously. Backends whose region does not overlap the transfer receive a suppressed request (valid deasserted, ready tied high). Completion is signaled only when all involved backends have finished. + +### MP_SPLIT + +Use MP_SPLIT when a single transfer may span multiple address regions that require separate handling (e.g., crossing from one memory bank to another), and you want the hardware to serialize the sub-transfers automatically. + +The split midend (`idma_mp_split_midend`) serializes a transfer that spans multiple `RegionWidth` boundaries into a sequence of region-aligned sub-transfers for a single backend. It uses a two-state FSM (`Idle` / `Busy`) to emit the first region-clipped transfer immediately, then iterates through remaining regions. The following parameters define the region layout: + +| Parameter | Description | +|-----------|-------------| +| `RegionWidth` | Size of each region in bytes | +| `RegionStart` | Base address of the managed region | +| `RegionEnd` | End address of the managed region | +| `AddrWidth` | Address width | +| `PrintInfo` | Print debug info on transfers | + +## Source Files + +- `src/midend/idma_nd_midend.sv` — ND midend + counter submodule +- `src/midend/idma_rt_midend.sv` — RT midend +- `src/midend/idma_mp_dist_midend.sv` — Distributed multicore midend +- `src/midend/idma_mp_split_midend.sv` — Split multicore midend diff --git a/doc/site/src/content/docs/architecture/programming-model.md b/doc/site/src/content/docs/architecture/programming-model.md new file mode 100644 index 00000000..f3b6e9b7 --- /dev/null +++ b/doc/site/src/content/docs/architecture/programming-model.md @@ -0,0 +1,32 @@ +--- +title: Programming Model +description: How requests flow through frontend, midend, and backend. +--- + +## Model Overview + +iDMA’s programming model centers on a request/response contract. Frontends emit `idma_req_t` (or `idma_nd_req_t`), the backend executes the transfer, and the response `idma_rsp_t` signals completion or error. + +:::note[Figure placeholder] +Diagram: request lifecycle showing frontend submit, optional ND decomposition, backend legalizer/transport, and response path back to software. +::: + +## 1D Transfers + +A 1D transfer copies a contiguous byte range from `src_addr` to `dst_addr`. It is the native backend format. If you submit 1D requests, you can bypass the midend entirely. + +## ND Transfers + +ND transfers (2D/3D) are decomposed into a series of 1D transfers by the midend. Each dimension defines a repetition count and stride. The midend emits a stream of 1D bursts while preserving ordering and optional error semantics. + +## Request Lifecycle + +1. Frontend validates inputs and forms a request. +2. Midend (optional) expands ND into 1D. +3. Backend legalizer splits into protocol-legal bursts. +4. Transport layer executes bus reads/writes and realigns data. +5. Response is emitted when all bursts complete. + +## Error Handling Choices + +Error handling is a policy decision. The backend can be configured to continue on error, abort a transfer, or replay. Frontends interpret responses and decide how to recover. See [Error Handling](../../guides/error-handling/) for policies and software handling patterns. diff --git a/doc/site/src/content/docs/guides/docs-verification.md b/doc/site/src/content/docs/guides/docs-verification.md new file mode 100644 index 00000000..4edac0b3 --- /dev/null +++ b/doc/site/src/content/docs/guides/docs-verification.md @@ -0,0 +1,40 @@ +--- +title: Docs Verification Plan +description: Quality checks to ensure iDMA docs are accurate, complete, and usable. +--- + +## Docs QA Overview + +This plan defines how we verify documentation quality. It complements the RTL verification guide and focuses on correctness, clarity, and navigability of the docs. + +## Build Checks + +Run the docs build and fail on warnings: + +```bash +cd doc/site +npm run build +``` + +## Consistency Checklist + +- All parameter tables include descriptions. +- All interface fields are defined and explained. +- No unresolved TODOs or “TBD” remain without a clear status. +- All links and image references resolve. + +## Snippet Rule + +Every code block must be preceded by a paragraph explaining the intent, context, and expected outcome. This prevents code dumps without guidance. + +## Diagram Coverage + +Each major section should include a diagram or a visible placeholder box describing the intended figure and its educational purpose. + +## Accuracy Review + +Review key claims against the top-level interface definitions and integration examples. Avoid copying RTL structure into documentation; describe behavior and constraints instead. + +## Final Readability Pass + +Check for terminology consistency and avoid ambiguities in terms like “decouple,” “couple,” and “legalize.” diff --git a/doc/site/src/content/docs/guides/error-handling.md b/doc/site/src/content/docs/guides/error-handling.md new file mode 100644 index 00000000..fbdd8074 --- /dev/null +++ b/doc/site/src/content/docs/guides/error-handling.md @@ -0,0 +1,110 @@ +--- +title: Error Handling +description: How iDMA reports and propagates errors across the frontend, midend, and backend. +--- + +## Error Handling Overview + +iDMA propagates error information from the backend (bus-level faults) back through the midend to the frontend, where software can read error status registers. Error handling is optional — controlled by the `ErrorCap` parameter. When enabled (`ErrorCap = ERROR_HANDLING`), the error handler FSM monitors datapath responses and gives software the choice to continue or abort a faulting transfer. + +## Error Types + +From `err_type_e` in `idma_pkg.sv`: + +| Value | Name | Description | +|-------|------|-------------| +| `2'b00` | `BUS_READ` | AXI read channel returned a non-OKAY response | +| `2'b01` | `BUS_WRITE` | AXI write channel returned a non-OKAY response | +| `2'b10` | `BACKEND` | Internal backend error (currently: transfer length == 0) | +| `2'b11` | `ND_MIDEND` | ND midend error (all repetition counts are zero) | + +## Error Response + +Every transfer produces an `idma_rsp_t` response. If `error == 0`, the transfer succeeded and `pld` is undefined (ignore it). If `error == 1`, the payload contains the error details: + +```verilog +typedef struct packed { + axi_pkg::resp_t cause; // AXI response code (SLVERR, DECERR) + idma_pkg::err_type_t err_type; // BUS_READ, BUS_WRITE, BACKEND, or ND_MIDEND + axi_addr_t burst_addr; // Address of the faulting burst +} err_payload_t; + +typedef struct packed { + logic last; // Last response in this transfer sequence + logic error; // 1 = error occurred + err_payload_t pld; // Error details +} idma_rsp_t; +``` + +The `burst_addr` field reports the base address of the AXI burst that faulted — this is the address from the AR or AW channel, not the individual beat address. + +## Error Handler FSM + +:::note[Figure placeholder] +Diagram: error handler FSM states and transitions. +Show IDLE, WAIT, WAIT_LAST_W, EMIT_EXTRA_RSP, LEG_FLUSH and the CONTINUE/ABORT paths. +::: + +The error handler (`idma_error_handler`) implements a 5-state FSM: + +| State | Description | Transition | +|-------|-------------|------------| +| `IDLE` | Pass-through mode. Monitors R and W datapath responses for non-OKAY | -> `WAIT` on read error; -> `WAIT` or `WAIT_LAST_W` on write error | +| `WAIT` | Error reported to software. Waiting for CONTINUE or ABORT action | -> `IDLE` on CONTINUE; -> `IDLE` if ABORT with multiple outstanding; -> `LEG_FLUSH` if ABORT with single outstanding | +| `WAIT_LAST_W` | Like WAIT, but the error occurred on the last write burst of a 1D transfer. Requires an extra response after handling | -> `EMIT_EXTRA_RSP` on CONTINUE; -> `EMIT_EXTRA_RSP` if ABORT with multiple outstanding; -> `LEG_FLUSH` if ABORT with single outstanding | +| `EMIT_EXTRA_RSP` | Send the completion response that was deferred due to the error | -> `IDLE` when response is accepted | +| `LEG_FLUSH` | Flush the legalizer: drain remaining bursts, poison data (drive all-zero strobes on remaining write bursts so the destination memory is not corrupted by stale buffer contents), then kill the active transfer | -> `EMIT_EXTRA_RSP` when datapath is idle | + +The `WAIT_LAST_W` state exists because write errors on the last burst of a transfer require special handling. Normally, the backend emits a completion response when the last write finishes. But if that last write *also* faults, the error response must be sent *before* the completion response, requiring an extra `EMIT_EXTRA_RSP` state. + +Read errors have higher priority than write errors — if both occur simultaneously, the read error is reported first. + +## Actions + +Software responds to an error via the `idma_eh_req_t` interface: + +| Action | Value | Behavior | +|--------|-------|----------| +| `CONTINUE` | `1'b0` | Complete the remaining bursts of the current 1D transfer normally. Data for the faulting burst is undefined | +| `ABORT` | `1'b1` | Abort the current 1D transfer. The legalizer is flushed (remaining bursts suppressed) and the datapath drains. If multiple 1D transfers are outstanding, abort degrades to continue (see below) | + +**Data integrity on CONTINUE**: When a read error occurs, the data for that burst is undefined (whatever the bus returned). The buffer may contain partial or garbage data. If CONTINUE is selected, subsequent bursts are read normally but the faulting burst's data is corrupted in the destination. + +**ABORT degradation**: When multiple 1D transfers are queued in the legalizer, aborting would require flushing transfers that may have already issued bus requests. Since AXI requires all issued bursts to complete, flushing mid-stream would leave the bus in an inconsistent state. Therefore, ABORT only takes effect when a single transfer is outstanding; otherwise it degrades to CONTINUE. + +### Worked Example + +The DMA reads 256 bytes starting at `0x1000`. At address `0x1040`, the slave returns SLVERR. The error handler reports: `err_type = BUS_READ`, `cause = SLVERR`, `burst_addr = 0x1000` (the burst base, not `0x1040`). Software issues CONTINUE. The remaining bursts complete normally, but the 64-byte burst containing `0x1040` has undefined data at the destination. + +## Software Handling Pattern + +1. **Launch transfer**: Submit `idma_req_t` through the frontend +2. **Wait for response**: Poll or wait for `rsp_valid` +3. **Check `rsp.error`**: If 0, transfer completed successfully +4. **Read error details**: Extract `rsp.pld.err_type`, `rsp.pld.cause`, and `rsp.pld.burst_addr` +5. **Issue action**: Write CONTINUE or ABORT to the error handler request interface (`idma_eh_req_i` + `eh_req_valid_i`), then wait for the final completion response. Note: this is a raw backend port. How it is exposed depends on the frontend: in register-based systems, the SoC typically connects it to a dedicated control register. In Snitch systems, the response is returned through `DMSTAT` polling. The descriptor frontend does not expose an error handler action interface — errors are reported via IRQ only + +## Error Visibility by Frontend + +How errors reach software depends on the frontend: + +- **Register frontend**: Poll `done_id` until it advances. The corresponding `idma_rsp_t` is emitted on the backend's response port. If `rsp.error == 1`, the error payload fields indicate the cause. The SoC wrapper must route the response to a readable status register +- **Descriptor frontend**: Signals errors via IRQ (if `flags.irq` is set in the descriptor) +- **Snitch frontend**: Returns error information through `DMSTAT` polling + +## After Error Recovery + +After issuing CONTINUE or ABORT and receiving the final completion response, the backend returns to normal operation. No reset is required. You can submit new transfers immediately. However, if the error was caused by a hardware fault (e.g., disconnected slave), subsequent transfers to the same address range will also fail. + +## Constraints + +- **AXI-to-AXI only**: The error handler is only instantiated for backend variants with a single AXI read port and a single AXI write port (i.e., the `rw_axi` variant). Mixed-protocol variants (`r_obi_w_axi`, `r_axi_w_obi`) and multi-port variants (`rw_axi_rw_axis`) will produce a fatal elaboration error (`$fatal`) if `ErrorCap = ERROR_HANDLING`. See the [Backend](../architecture/backend/) page for the full variant matrix +- **ErrorCap parameter**: Must be set at elaboration time. When `NO_ERROR_HANDLING`, all error signals are tied to neutral values and the error handler is bypassed +- **AXI compliance**: Once a burst is issued, all beats must complete — the error handler cannot cancel individual beats mid-burst. ABORT takes effect at burst boundaries +- **Outstanding transfer limit**: The error handler tracks outstanding transfers with a credit counter sized to `MetaFifoDepth`. The `cnt_busy` signal indicates transfers are still in-flight + +## Source Files + +- `src/backend/idma_error_handler.sv` — Error handler FSM +- `src/idma_pkg.sv` — Error type definitions (`err_type_e`, `eh_action_e`, `error_cap_e`) +- `src/include/idma/typedef.svh` — `err_payload_t` macro diff --git a/doc/site/src/content/docs/guides/performance-limitations.md b/doc/site/src/content/docs/guides/performance-limitations.md new file mode 100644 index 00000000..9facb925 --- /dev/null +++ b/doc/site/src/content/docs/guides/performance-limitations.md @@ -0,0 +1,31 @@ +--- +title: Performance and Limitations +description: Constraints, tradeoffs, and tuning guidance. +--- + +## Constraints Overview + +This guide summarizes practical constraints and tradeoffs that impact performance, area, and correctness. + +## Alignment and Burst Limits + +- AXI bursts cannot cross 4 KiB boundaries. +- TileLink bursts are power-of-2 and limited by TLToAXI4 behavior. +- OBI and INIT are single-beat protocols. + +## Buffer Depth + +`BufferDepth` impacts throughput and alignment tolerance. Depth 3 is the default recommendation for mixed alignment cases; smaller depths can stall when read and write offsets differ. + +## Decoupling Tradeoffs + +- `decouple_rw=1` maximizes throughput but can deadlock if the buffer is too shallow. +- `decouple_aw=1` enables R-AW coupling, which can reduce bus contention but adds latency. + +## Outstanding Transactions + +`NumAxInFlight` controls how many bursts can be in flight. Increasing it improves throughput on high-latency buses but increases area and verification complexity. + +## Software Legalization + +If `HardwareLegalizer=0`, software must split transfers into protocol-legal bursts. This reduces hardware but shifts correctness burden to software. diff --git a/doc/site/src/content/docs/guides/quickstart.md b/doc/site/src/content/docs/guides/quickstart.md new file mode 100644 index 00000000..53a460a3 --- /dev/null +++ b/doc/site/src/content/docs/guides/quickstart.md @@ -0,0 +1,66 @@ +--- +title: Quickstart +description: Minimal steps to integrate iDMA and run a transfer. +--- + +## Quickstart Overview + +This guide shows the shortest path to an end-to-end iDMA transfer: choose a backend, define types, wire modules, and launch a request. It assumes a single clock domain and a 1D transfer flow. + +## 1. Choose a Backend Variant + +Pick the backend variant that matches your read/write protocols. For AXI-to-AXI systems, start with `rw_axi`. + +## 2. Define Types + +Use the `typedef.svh` macros to define the request/response structs you will wire between layers. + +```verilog +`include "idma/typedef.svh" + +typedef logic [AddrWidth-1:0] addr_t; +typedef logic [DataWidth-1:0] data_t; +typedef logic [IdWidth-1:0] id_t; +typedef logic [TFLenWidth-1:0] tf_len_t; + +`IDMA_TYPEDEF_FULL_REQ_T(idma_req_t, id_t, addr_t, tf_len_t) +`IDMA_TYPEDEF_FULL_RSP_T(idma_rsp_t, addr_t) +``` + +## 3. Instantiate the Backend + +Instantiate the backend and connect the request/response handshake. The exact bus ports depend on the backend variant. + +```verilog +idma_backend_rw_axi #( + .DataWidth ( DataWidth ), + .AddrWidth ( AddrWidth ), + .idma_req_t ( idma_req_t ), + .idma_rsp_t ( idma_rsp_t ), + .axi_req_t ( axi_req_t ), + .axi_rsp_t ( axi_rsp_t ) +) i_backend ( + .clk_i, + .rst_ni, + .idma_req_i ( dma_req ), + .req_valid_i ( req_valid ), + .req_ready_o ( req_ready ), + .idma_rsp_o ( dma_rsp ), + .rsp_valid_o ( rsp_valid ), + .rsp_ready_i ( rsp_ready ) + // ... bus ports ... +); +``` + +## 4. Submit a Transfer + +A frontend produces `idma_req_t`. If you do not use a frontend, you can drive the request directly from a testbench or a custom control block. + +## 5. Observe Completion + +The backend produces one `idma_rsp_t` per completed transfer. Check `error` and `err_payload_t` to determine whether the transfer succeeded. + +## Next Steps + +- For a full integration recipe, see [System Integration](../system-integration/). +- For ND transfers, see [Programming Model](../../architecture/programming-model/). diff --git a/doc/site/src/content/docs/guides/system-integration.md b/doc/site/src/content/docs/guides/system-integration.md new file mode 100644 index 00000000..7c7b8898 --- /dev/null +++ b/doc/site/src/content/docs/guides/system-integration.md @@ -0,0 +1,211 @@ +--- +title: System Integration +description: How to wire iDMA into an SoC, including type macros, parameters, and real-world examples. +--- + +## Integration Overview + +This guide covers the practical steps for integrating iDMA into a system-on-chip: choosing a frontend/midend/backend combination, instantiating the type macros, wiring the bus interfaces, and setting the key parameters. + +![System Integration](/fig/system_integration.svg) + +![System Integration (alternate view)](/fig/system_integration_alt.svg) + +## Integration Steps + +### 1. Choose Your Stack + +Select a frontend, midend, and backend based on your requirements: + +- **Backend**: Pick the variant matching your bus protocols — see the [variant matrix](../architecture/backend/#variant-matrix). If your SoC uses AXI4 throughout, `rw_axi` is the standard choice. Use `r_obi_w_axi` when reading from OBI-attached memory but writing via AXI. The Occamy variants (`r_obi_rw_init_w_axi`, `r_axi_rw_init_rw_obi`) add the INIT protocol for efficient memory zeroing. The backend page also covers [legalizer splitting rules](../architecture/backend/#splitting-rules) and [error handling](../architecture/backend/#error-handler) constraints. +- **Frontend**: Choose based on your SoC's control interface — see the [frontend comparison](../architecture/frontend/#choosing-a-frontend) +- **Midend**: Use the [ND midend](../architecture/midend/#nd-midend) for 2D/3D transfers, [RT midend](../architecture/midend/#rt-midend) for periodic transfers, or skip the midend entirely for 1D-only systems + +### 2. Define Types + +Use the convenience macros from `typedef.svh` to define all required types in one shot: + +```verilog +`include "idma/typedef.svh" + +// Define address, data, and ID types +typedef logic [AddrWidth-1:0] addr_t; +typedef logic [DataWidth-1:0] data_t; +typedef logic [IdWidth-1:0] id_t; +typedef logic [TFLenWidth-1:0] tf_len_t; + +// 1D request/response types (expands options_t and err_payload_t internally) +`IDMA_TYPEDEF_FULL_REQ_T(idma_req_t, id_t, addr_t, tf_len_t) +`IDMA_TYPEDEF_FULL_RSP_T(idma_rsp_t, addr_t) + +// ND request type (if using ND midend) +typedef logic [RepWidth-1:0] reps_t; +typedef logic [StrideWidth-1:0] strides_t; +`IDMA_TYPEDEF_FULL_ND_REQ_T(idma_nd_req_t, idma_req_t, reps_t, strides_t) +``` + +The `IDMA_TYPEDEF_FULL_REQ_T` macro is a convenience wrapper that internally invokes `IDMA_TYPEDEF_OPTIONS_T` and `IDMA_TYPEDEF_REQ_T`. Use the `FULL_` variants for integration — they define all intermediate types automatically. The non-`FULL_` macros (`IDMA_TYPEDEF_REQ_T`, `IDMA_TYPEDEF_OPTIONS_T`) define individual types and require you to provide the intermediate types manually. Use `FULL_` unless you need custom intermediate types. + +### 3. Instantiate + +All iDMA modules use a single clock (`clk_i`) and synchronous active-low reset (`rst_ni`). The clock must be the same for all three layers (frontend, midend, backend) and the attached memory system. + +Wire the three layers together. The key connections are: +- Frontend `dma_req_o` / `req_valid_o` / `req_ready_i` -> Midend ND request input +- Midend `burst_req_o` / `burst_req_valid_o` / `burst_req_ready_i` -> Backend request input +- Backend `idma_rsp_o` / `rsp_valid_o` / `rsp_ready_i` -> back through midend to frontend + +The following skeleton shows how the three layers connect. Signal types come from the macros defined in step 2 above — `fe_req` is `idma_nd_req_t`, `be_req` is `idma_req_t`: + +```verilog +// Frontend -> Midend -> Backend + +idma_reg64_2d #( + .NumRegs ( 1 ), + .NumStreams ( 1 ), + .reg_req_t ( reg_req_t ), + .reg_rsp_t ( reg_rsp_t ), + .dma_req_t ( idma_nd_req_t ) +) i_frontend ( + .clk_i, + .rst_ni, + .reg_req_i ( dma_reg_req ), + .reg_rsp_o ( dma_reg_rsp ), + .dma_req_o ( fe_req ), + .req_valid_o ( fe_valid ), + .req_ready_i ( fe_ready ), + .dma_rsp_i ( fe_rsp ), + .rsp_valid_i ( fe_rsp_valid ), + .rsp_ready_o ( fe_rsp_ready ) +); + +idma_nd_midend #( + .NumDim ( 2 ), + .addr_t ( addr_t ), + .idma_req_t ( idma_req_t ), + .idma_rsp_t ( idma_rsp_t ), + .idma_nd_req_t ( idma_nd_req_t ), + .RepWidths ( 32'd32 ) +) i_midend ( + .clk_i, + .rst_ni, + .nd_req_i ( fe_req ), + .nd_req_valid_i ( fe_valid ), + .nd_req_ready_o ( fe_ready ), + .nd_rsp_o ( fe_rsp ), + .nd_rsp_valid_o ( fe_rsp_valid ), + .nd_rsp_ready_i ( fe_rsp_ready ), + .burst_req_o ( be_req ), + .burst_req_valid_o ( be_valid ), + .burst_req_ready_i ( be_ready ), + .burst_rsp_i ( be_rsp ), + .burst_rsp_valid_i ( be_rsp_valid ), + .burst_rsp_ready_o ( be_rsp_ready ) +); + +idma_backend_rw_axi #( + .DataWidth ( DataWidth ), + .AddrWidth ( AddrWidth ), + .idma_req_t ( idma_req_t ), + .idma_rsp_t ( idma_rsp_t ), + .axi_req_t ( axi_req_t ), + .axi_rsp_t ( axi_rsp_t ) + // Bus ports — variant-specific, see generated module for full port list +) i_backend ( + .clk_i, + .rst_ni, + .idma_req_i ( be_req ), + .req_valid_i ( be_valid ), + .req_ready_o ( be_ready ), + .idma_rsp_o ( be_rsp ), + .rsp_valid_o ( be_rsp_valid ), + .rsp_ready_i ( be_rsp_ready ), + .busy_o ( busy ) + // AXI read/write ports omitted — variant-specific +); +``` + +### 4. Set Parameters + +Recommended parameter presets: + +| | Minimum Area | Balanced | High Throughput | +|---|-------------|----------|-----------------| +| `DataWidth` | 32 | 64 | 256–512 | +| `BufferDepth` | 2 | 3 | 3 | +| `NumAxInFlight` | 2 | 3 | 4–8 | +| `MemSysDepth` | 0 | 0 | 8–16 | +| `CombinedShifter` | 1 | 0 | 0 | +| `RAWCouplingAvail` | 0 | 1 | 1 | +| `HardwareLegalizer` | 0 | 1 | 1 | +| `ErrorCap` | `NO_ERROR_HANDLING` | `ERROR_HANDLING` | `ERROR_HANDLING` | + +**Minimum Area** sacrifices throughput for gate count — single shifter, no coupling, software legalization. **Balanced** adds hardware legalization and coupling for correct-by-default behavior. **High Throughput** uses deep FIFOs and wide buses to saturate memory bandwidth. + +:::caution[Parameter misconfiguration] +Setting `RAWCouplingAvail=1` on a mixed-protocol backend (e.g., `r_obi_w_axi`) where the write protocol has no AW channel will cause synthesis errors. Set `ErrorCap=ERROR_HANDLING` only on single-read/single-write AXI variants (`rw_axi`), or the design will `$fatal` during elaboration. +::: + +## Real-World Examples + +The following SoCs provide canonical integration examples spanning different bus protocols, data widths, and frontend styles. + +### Cheshire + +| | | +|---|---| +| **Repo** | [pulp-platform/cheshire](https://github.com/pulp-platform/cheshire) | +| **Frontend** | `idma_reg64_{1d,2d}` | +| **Midend** | ND (2D, conditional) | +| **Backend** | `rw_axi` | +| **Bus** | AXI4 | +| **Data Width** | 64-bit | +| **Key File** | [`hw/cheshire_idma_wrap.sv`](https://github.com/pulp-platform/cheshire/blob/main/hw/cheshire_idma_wrap.sv) | + +**Start here** if your SoC uses a CVA6 core with AXI4. Cheshire is a CVA6-based Linux-capable SoC built around an AXI4 fabric. Its iDMA instance supports conditional 1D/2D mode, making it a good reference for register-frontend integrations with optional multi-dimensional transfers. + +### Croc + +| | | +|---|---| +| **Repo** | [pulp-platform/croc](https://github.com/pulp-platform/croc) | +| **Frontend** | Custom OBI register interface | +| **Midend** | ND (2D) | +| **Backend** | `rw_obi` | +| **Bus** | OBI | +| **Data Width** | 32-bit | +| **Key File** | [`rtl/idma/croc_idma.sv`](https://github.com/pulp-platform/croc/blob/main/rtl/idma/croc_idma.sv) | + +**Start here** for a minimal OBI-based integration. Croc is a minimal OBI-based SoC with a custom register frontend — the smallest and simplest example. + +### Snitch Cluster + +| | | +|---|---| +| **Repo** | [pulp-platform/snitch_cluster](https://github.com/pulp-platform/snitch_cluster) | +| **Frontend** | inst64 (Xdma ISA) | +| **Midend** | ND | +| **Backend** | `rw_axi` | +| **Bus** | AXI4 | +| **Data Width** | 512-bit | +| **Key File** | [`hw/snitch_cluster/src/`](https://github.com/pulp-platform/snitch_cluster/tree/main/hw/snitch_cluster/src) | + +Reference for ISA-coupled DMA with wide (512-bit) data paths. The Snitch cluster uses a wide 512-bit data path with an ISA-coupled DMA on a dedicated core. Transfers are submitted via Xdma custom instructions, achieving single-cycle launch latency. + +### PULP Cluster + +| | | +|---|---| +| **Repo** | [pulp-platform/pulp_cluster](https://github.com/pulp-platform/pulp_cluster) | +| **Frontend** | `idma_reg32_2d_frontend` | +| **Midend** | ND (2D) | +| **Backend** | `rw_axi` | +| **Bus** | AXI4 | +| **Data Width** | 64-bit | +| **Key File** | [`rtl/idma_wrap.sv`](https://github.com/pulp-platform/pulp_cluster/blob/main/rtl/idma_wrap.sv) | + +Shows multi-core DMA sharing and the mchan/iDMA selection mechanism. The PULP cluster is a multi-core architecture with tightly-coupled data memory (TCDM). It uses a register-based 2D frontend and supports conditional selection between the legacy mchan DMA and iDMA via the `TARGET_MCHAN` parameter. + +## Dependency Management + +iDMA uses [Bender](https://github.com/pulp-platform/bender) for RTL dependency management. Add iDMA to your `Bender.yml` and run `bender update` to pull it and its transitive dependencies (`axi`, `common_cells`, `register_interface`, `obi`). Bender resolves the source file list for your build system — use `bender script vsim` for Questa or `bender script vcs` for VCS. diff --git a/doc/site/src/content/docs/guides/verification.md b/doc/site/src/content/docs/guides/verification.md new file mode 100644 index 00000000..0a274348 --- /dev/null +++ b/doc/site/src/content/docs/guides/verification.md @@ -0,0 +1,218 @@ +--- +title: Verification +description: Testbench architecture, job files, and simulation workflow for iDMA. +--- + +## Verification Overview + +iDMA uses a SystemVerilog testbench driven by **job files** that describe transfer sequences. The testbench compares hardware behavior against a byte-accurate golden model. Tests are run with Questa or VCS, with job files located in `jobs//`. + +For documentation quality checks, see [Docs Verification Plan](../docs-verification/). + +## Testbench Architecture + +### Key Components + +| Component | Location | Description | +|-----------|----------|-------------| +| `idma_test` package | `test/idma_test.sv` | Shared test infrastructure: job class, golden model, drivers | +| `tb_idma_backend_*` | `test/tpl/tb_idma_backend.sv.tpl` (generated) | Per-variant top-level testbench module | +| `tb_tasks.svh` | `test/include/tb_tasks.svh` | Protocol-specific memory access tasks, job file parser | + +### Golden Model + +The testbench uses a **golden model** — a software reference implementation that predicts the expected memory state after each DMA transfer. By comparing the hardware's actual memory writes against the model's predictions, the testbench detects functional bugs without requiring hand-written expected values. + +The `idma_model` class in `idma_test.sv` is a byte-addressed memory model that simulates DMA transfers at the byte granularity. It replicates the legalizer's burst splitting logic (page boundaries, maximum burst lengths) and error handling behavior (continue/abort semantics). After each transfer, the testbench compares the hardware memory state against the model's expected state to detect mismatches. The golden model uses the `max_src_len` and `max_dst_len` fields from the job file to configure burst splitting — these must match the protocol's actual limits for comparisons to pass. If `max_src_len`/`max_dst_len` don't match the protocol's actual burst limits, the golden model will split bursts differently than the hardware legalizer, causing false mismatches. + +## Job File Format + +Each job file contains one or more transfer descriptions, concatenated back-to-back. Each transfer is described by the following fields, one per line. + +The most important fields are `length`, `src_addr`, `dst_addr`, and the two `max_*_len` fields (which must match your protocol's actual burst limits). For a basic AXI test, set both protocols to 0, both max lengths to 256, and both decoupling flags to 0. + +### Fields + +| Line | Format | Field | Description | +|------|--------|-------|-------------| +| 1 | `%d` | `length` | Transfer length in bytes | +| 2 | `0x%x` | `src_addr` | Source address (hex) | +| 3 | `0x%x` | `dst_addr` | Destination address (hex) | +| 4 | `%d` | `src_protocol` | Source protocol enum (0=AXI, 1=OBI, ...) | +| 5 | `%d` | `dst_protocol` | Destination protocol enum | +| 6 | `%d` | `max_src_len` | Max source burst length in beats | +| 7 | `%d` | `max_dst_len` | Max destination burst length in beats | +| 8 | `%b` | `aw_decoupled` | AW decoupling flag (0 or 1) | +| 9 | `%b` | `rw_decoupled` | RW decoupling flag (0 or 1) | +| 10 | `%d` | `num_errors` | Number of injected errors (0 for clean transfers) | +| 11+ | `%c%c0x%h` | error specs | One line per error: `r`/`w` + `c`/`a` + hex address | + +Error spec format: first character is `r` (read) or `w` (write), second is `c` (continue) or `a` (abort), followed by the error address in hex. + +### Example + +Annotated `simple.txt` (a single 2-byte transfer with no errors): + +``` +2 # length: 2 bytes +0x0 # src_addr: 0x000 +0x3ff # dst_addr: 0x3ff +0 # src_protocol: AXI (0) +0 # dst_protocol: AXI (0) +256 # max_src_len: 256 beats +256 # max_dst_len: 256 beats +0 # aw_decoupled: no +0 # rw_decoupled: no +0 # num_errors: 0 +``` + +Annotated error transfer (from `error_simple.txt`): + +``` +32 # length: 32 bytes +0x0 # src_addr +0x10000 # dst_addr +0 # AXI read +0 # AXI write +256 # max 256 beats +256 # max 256 beats +0 # aw_decoupled: no +0 # rw_decoupled: no +3 # 3 injected errors: +rc0x4 # read error at 0x4, action: continue +rc0x8 # read error at 0x8, action: continue +rc0xc # read error at 0xc, action: continue +``` + +### Writing Custom Job Files + +To create a custom test, write a text file following the format above. Each field is on its own line, with transfers concatenated back-to-back (no blank lines between them). The `max_src_len` and `max_dst_len` fields control burst splitting in the golden model — set to 256 for AXI (matching the protocol maximum) or 1 for single-beat protocols (OBI, INIT, AXI Stream). + +Here is an example with two back-to-back transfers in a single job file (64 bytes followed by 128 bytes, no errors): + +``` +64 +0x0 +0x1000 +0 +0 +256 +256 +0 +0 +0 +128 +0x100 +0x2000 +0 +0 +256 +256 +1 +0 +0 +``` + +## Available Test Suites + +Each backend variant has its own set of job files under `jobs//`: + +**Basic** — start here for bring-up and sanity checks: + +| Job File | Description | +|----------|-------------| +| `simple.txt` | Minimal transfer (2 bytes), basic sanity check | +| `small.txt` | A few short transfers | +| `tiny.txt` | Very small (sub-word) transfers | + +**Stress** — increasing transfer sizes for throughput and boundary testing: + +| Job File | Description | +|----------|-------------| +| `medium.txt` | Mixed lengths, some with AW decoupling | +| `large.txt` | Longer transfers approaching page boundaries | +| `huge.txt` | Large transfers spanning multiple pages | + +**Pattern** — specific address and access patterns: + +| Job File | Description | +|----------|-------------| +| `linear.txt` | Sequential address patterns | +| `mixed.txt` | Varied source/destination alignments | +| `same_dst.txt` | Multiple transfers to the same destination | +| `zero_transfer.txt` | Zero-length transfer (tests `RejectZeroTransfers`) | + +**Error** — error injection and handling: + +| Job File | Description | +|----------|-------------| +| `error_simple.txt` | Transfers with injected read/write errors and continue/abort actions | +| `error_mixed.txt` | Complex error scenarios with multiple error types | + +For initial bring-up, start with `simple.txt` on the `rw_axi` variant — it's the smallest test on the most common backend. + +:::note[Figure placeholder] +Diagram: verification testbench architecture. +Show job parser feeding the DUT wrapper, simulated memory, and golden model checker. +::: + +## Running Simulations + +### Prerequisites + +Before running any simulation, generate the RTL and simulation scripts: + +```bash +make idma_hw_all # Generate RTL into target/rtl/ +make idma_sim_all # Generate compile.tcl and start.tcl into target/sim/vsim/ +``` + +### Compile + +Compile the generated design with Questa: + +```bash +cd target/sim/vsim +questa-2023.4 vsim -c -do "source compile.tcl; quit" +``` + +### Run + +Run a simulation against a specific job file: + +```bash +questa-2023.4 vsim -c -t 1ps -voptargs=+acc \ + +job_file=../../../jobs/backend_rw_axi/simple.txt \ + -logfile output.log \ + tb_idma_backend_rw_axi \ + -do "source start.tcl; run -all" +``` + +Replace `backend_rw_axi` and `tb_idma_backend_rw_axi` with the desired variant. The `+job_file` plusarg points to the job file describing the test sequence. + +### Debugging Failures + +If a simulation fails, the testbench prints the first mismatching address and expected vs. actual values. To debug further, open the waveform in the Questa GUI by removing the `-c` flag from the vsim command. + +Check the `busy_o` flags to identify which subunit stalled: + +| Flag | Stuck means | +|------|-------------| +| `r_leg_busy` | Legalizer can't split — check transfer parameters | +| `r_dp_busy` | Read channel not getting responses — check memory slave | +| `buffer_busy` | Write channel not draining — check write backpressure | +| `w_dp_busy` | Write channel blocked — check destination memory | +| `eh_fsm_busy` | Error handler waiting for software action | + +Key signals to trace in waveforms: `idma_req_i`/`req_valid_i`/`req_ready_o` (request handshake), `idma_rsp_o`/`rsp_valid_o` (response), `busy_o` (subunit status), and the AXI AR/AW/R/W/B channels on the bus interface. + +### VCS + +Simulation scripts for VCS are generated alongside Questa scripts via `make idma_sim_all`. The flow is analogous — compile with the generated script, then run with the `+job_file` plusarg. + +## Source Files + +- `test/idma_test.sv` — Test package (job class, golden model, drivers) +- `test/tpl/tb_idma_backend.sv.tpl` — Testbench template (generates per-variant TBs) +- `test/include/tb_tasks.svh` — Memory tasks, job parser (`read_jobs`) +- `jobs/` — Job files organized by backend variant diff --git a/doc/site/src/content/docs/index.md b/doc/site/src/content/docs/index.md new file mode 100644 index 00000000..8d28fabb --- /dev/null +++ b/doc/site/src/content/docs/index.md @@ -0,0 +1,66 @@ +--- +title: iDMA +description: A modular DMA engine for heterogeneous PULP-platform SoCs. +--- + +## What iDMA Is + +iDMA moves data between memories and peripherals across different bus protocols (AXI, OBI, TileLink) and supports multi-dimensional transfers. It splits the problem into three layers so you can mix and match integration styles without changing the core engine. + +- **Frontend**: software-visible interface for requests. +- **Midend**: optional ND/RT decomposition. +- **Backend**: protocol execution on the bus. + +![Architecture Overview](/fig/architecture_overview.svg) + +:::note[Figure placeholder] +Diagram: end-to-end request lifecycle (frontend request, optional midend split, backend legalizer + transport, response). +Show where `idma_req_t` and `idma_rsp_t` are created and consumed. +::: + +## Start Here + +If you are integrating iDMA into an SoC, read these in order: + +- [Quickstart](./guides/quickstart/) +- [Programming Model](./architecture/programming-model/) +- [System Integration](./guides/system-integration/) + +If you are deep-diving the design: + +- [Frontend](./architecture/frontend/) +- [Midend](./architecture/midend/) +- [Backend](./architecture/backend/) +- [Interfaces and Types](./architecture/interfaces/) + +## Supported Protocols + +The backend supports these protocols via `protocol_e` in `idma_pkg.sv`: + +| Enum Value | Protocol | Description | Typical Use | +|------------|----------|-------------|-------------| +| 0 | `AXI` | Full AXI4 | Main memory, high bandwidth | +| 1 | `OBI` | OBI | Simple peripherals, low area | +| 2 | `AXILITE` | AXI4-Lite | Register access | +| 3 | `TILELINK` | TileLink-UH | TL-based SoCs (via TLToAXI4) | +| 4 | `INIT` | Init protocol | Efficient zeroing (Occamy) | +| 5 | `AXI_STREAM` | AXI Stream | Streaming endpoints | + +## Code Generation (High Level) + +iDMA uses the MARIO generator to produce protocol-specific RTL from templates and YAML capability databases. This is how a single codebase produces many backend variants. + +Key locations: + +- `src/db/*.yml` — protocol capability databases +- `src/backend/tpl/` — backend templates +- `src/frontend/tpl/` — register frontend templates +- `util/gen_idma.py` — generator entry point +- `util/mario/` — generator modules + +## Where to Find Details + +- Full data type definitions: [Interfaces and Types](./architecture/interfaces/) +- Performance constraints and tradeoffs: [Performance and Limitations](./guides/performance-limitations/) +- Testbench and job files: [Verification](./guides/verification/) +- Documentation QA checklist: [Docs Verification Plan](./guides/docs-verification/) diff --git a/doc/site/tsconfig.json b/doc/site/tsconfig.json new file mode 100644 index 00000000..bcbf8b50 --- /dev/null +++ b/doc/site/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "astro/tsconfigs/strict" +}