From af325782a83b3984078f360703a88e0055cf8549 Mon Sep 17 00:00:00 2001 From: aaronaxvig Date: Sat, 11 Jul 2026 22:51:01 -0500 Subject: [PATCH] Different URL tree state encoding --- web/data/product-tree-manifest.json | 633 ++++++++++++++++++++++ web/js/script.js | 4 +- web/js/tree.js | 35 +- web/vendor/checkbox-tree/README.md | 128 ++++- web/vendor/checkbox-tree/checkbox-tree.js | 335 +++++++++++- 5 files changed, 1123 insertions(+), 12 deletions(-) create mode 100644 web/data/product-tree-manifest.json diff --git a/web/data/product-tree-manifest.json b/web/data/product-tree-manifest.json new file mode 100644 index 0000000..b3a1030 --- /dev/null +++ b/web/data/product-tree-manifest.json @@ -0,0 +1,633 @@ +{ + "schema": 1, + "nodes": [ + "[\"GlobalProtect\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.1.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.2.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h1.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h11.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h12.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h2.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h3.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h4.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h6.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h7.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h8.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3-h9.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.3\"]>[\"GlobalProtect\",\"6\",\"6.3\",\"6.3.3.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.1.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.2.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.3-c287.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.3.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.4.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.5.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.6-c857.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.6.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.7.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h1.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h11.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h2.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h3.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h4.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h5.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h6.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h7.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8-h9.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.2\"]>[\"GlobalProtect\",\"6\",\"6.2\",\"6.2.8.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.1\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.1\"]>[\"GlobalProtect\",\"6\",\"6.1\",\"6.1.1.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.1\"]>[\"GlobalProtect\",\"6\",\"6.1\",\"6.1.2.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.1\"]>[\"GlobalProtect\",\"6\",\"6.1\",\"6.1.3.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.1\"]>[\"GlobalProtect\",\"6\",\"6.1\",\"6.1.4.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.1\"]>[\"GlobalProtect\",\"6\",\"6.1\",\"6.1.5.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.1\"]>[\"GlobalProtect\",\"6\",\"6.1\",\"6.1.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.1.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.10-814.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.10-c826.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.10.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.11.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.3.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.4-c26.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.4.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.5.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.7.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.8.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"6\"]>[\"GlobalProtect\",\"6\",\"6.0\"]>[\"GlobalProtect\",\"6\",\"6.0\",\"6.0.md\"]", + "[\"GlobalProtect\"]>[\"GlobalProtect\",\"5\"]", + "[\"GlobalProtect-Android\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.0.1.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.0.12.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.0.2.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.0.3.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.0.4.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.0.5.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.0.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.10.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.11.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.12.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.4.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.5.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.6.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.7.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.9.md\"]", + "[\"GlobalProtect-Android\"]>[\"GlobalProtect-Android\",\"6.1.md\"]", + "[\"GlobalProtect-iOS\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.0.12.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.0.2.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.0.4.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.0.5.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.0.6.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.0.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.10.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.11.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.4.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.5.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.6.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.7.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.9.md\"]", + "[\"GlobalProtect-iOS\"]>[\"GlobalProtect-iOS\",\"6.1.md\"]", + "[\"GlobalProtect-Linux\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.3\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.3\"]>[\"GlobalProtect-Linux\",\"6\",\"6.3\",\"6.3.3-h1.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.3\"]>[\"GlobalProtect-Linux\",\"6\",\"6.3\",\"6.3.3.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\",\"6.2.0.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\",\"6.2.1.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\",\"6.2.6.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\",\"6.2.7.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\",\"6.2.8.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\"]>[\"GlobalProtect-Linux\",\"6\",\"6.2\",\"6.2.9.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\",\"6.1.1.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\",\"6.1.3.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\",\"6.1.4.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\",\"6.1.5.md\"]", + "[\"GlobalProtect-Linux\"]>[\"GlobalProtect-Linux\",\"6\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\"]>[\"GlobalProtect-Linux\",\"6\",\"6.1\",\"6.1.md\"]", + "[\"PAN-OS\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.3-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.3-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.4-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.4-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.4-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.4-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.4-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.4-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.7-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.7-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"12\"]>[\"PAN-OS\",\"12\",\"12.1\"]>[\"PAN-OS\",\"12\",\"12.1\",\"12.1.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.0-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.1-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.2-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.2-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.3-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.3-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h20.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.5-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.2\"]>[\"PAN-OS\",\"11\",\"11.2\",\"11.2.9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.0-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.0-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.0-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.0-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.1-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.1-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h21.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h25.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h26.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h27.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h28.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h30.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3-h11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3-h13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h25.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h27.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h32.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h33.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h34.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h35.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.5-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h19.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h20.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h21.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h22.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h23.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h25.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h29.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h32.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h33.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h34.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h35.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.7-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.7-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.7-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.7-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.7-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.7-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.1\"]>[\"PAN-OS\",\"11\",\"11.1\",\"11.1.9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.0-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.0-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.0-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.0-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.1-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.1-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.1-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.1-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.2-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.2-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.2-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.2-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.2-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.3-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.3-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.3-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.3-h13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.3-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.3-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.4-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.4-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.4-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.4-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.5-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.5-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.6-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"11\"]>[\"PAN-OS\",\"11\",\"11.0\"]>[\"PAN-OS\",\"11\",\"11.0\",\"11.0.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.0-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.0-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.0-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.0-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.1-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.1-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.1-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h21.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h30.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h31.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h36.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h37.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h39.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.11-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.11-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.11-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.11-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h21.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h22.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h23.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.14-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.16-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.16-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.16-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.16-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.16-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.16-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.18-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.18-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.18-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.18-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.18-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.2-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.2-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.2-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.2-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.3-h11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.3-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.3-h13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.3-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.3-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.3-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.4-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.4-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.4-h32.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.4-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.5-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.5-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.6-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.6-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h19.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h34.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h35.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7-h36.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.8-h13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.8-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.9-h11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.9-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.9-h16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.9-h18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.9-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.2\"]>[\"PAN-OS\",\"10\",\"10.2\",\"10.2.9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.10-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.10-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.11-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.11-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.12-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.13-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.13-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h19.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h20.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.3-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.4-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.5-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.5-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.6-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.6-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.6-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.6-h9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.7-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.8-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.8-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.8-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.1\"]>[\"PAN-OS\",\"10\",\"10.1\",\"10.1.9-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.11-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.11-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.11-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.12-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.8-h10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.8-h11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.8-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.8-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"10\"]>[\"PAN-OS\",\"10\",\"10.0\"]>[\"PAN-OS\",\"10\",\"10.0\",\"10.0.9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.11-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.11-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.11-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.11-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.12-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.12-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.12-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.12-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.13-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.13-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.13-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.13-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.14-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.14-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.14-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.14-h8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.15-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.16-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.16-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.16-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.17-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.19.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.2-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.3-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.1\"]>[\"PAN-OS\",\"9\",\"9.1\",\"9.1.9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.14-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.14-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.16-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.16-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.16-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.16-h6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.16-h7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.17-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.17-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.17-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.2-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.3-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.3-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.5-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.9-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"9\"]>[\"PAN-OS\",\"9\",\"9.0\"]>[\"PAN-OS\",\"9\",\"9.0\",\"9.0.9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.0.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.10.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.11.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.12.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.13.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.14-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.14.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.15-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.15.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.16.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.17.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.18.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.19.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.20-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.20.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.21-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.21-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.21-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.21.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.22.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.23-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.23.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.24-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.24-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.24.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.25-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.25-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.25-h3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.25.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.26-h1.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.26.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.3.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.4-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.6-h2.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.6.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.7.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.8-h5.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.8.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.9-h4.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.9.md\"]", + "[\"PAN-OS\"]>[\"PAN-OS\",\"8\"]>[\"PAN-OS\",\"8\",\"8.1\"]>[\"PAN-OS\",\"8\",\"8.1\",\"8.1.md\"]", + "[\"Prisma Access Agent\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"26\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"26\"]>[\"Prisma Access Agent\",\"26\",\"26.1-Linux.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"26\"]>[\"Prisma Access Agent\",\"26\",\"26.1.1.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"26\"]>[\"Prisma Access Agent\",\"26\",\"26.1.2.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.1.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.3.0-iOS.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.3.0.11-Android.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.3.1.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.3.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.4.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.6.1.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.6.2.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.6.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.7-Linux.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.7.1.md\"]", + "[\"Prisma Access Agent\"]>[\"Prisma Access Agent\",\"25\"]>[\"Prisma Access Agent\",\"25\",\"25.7.md\"]" + ] +} diff --git a/web/js/script.js b/web/js/script.js index 283f265..63fafab 100644 --- a/web/js/script.js +++ b/web/js/script.js @@ -21,9 +21,9 @@ function refreshIssuesForCurrentSelection() { function loadProductTree() { fetch('data/products.json') .then(response => response.json()) - .then(data => { + .then(async data => { productsData = expandFilePrefixLevel(data); - renderProductTree(productsData); + await renderProductTree(productsData); restoreTreeState(); refreshIssuesForCurrentSelection(); }) diff --git a/web/js/tree.js b/web/js/tree.js index b5a19c7..d40f361 100644 --- a/web/js/tree.js +++ b/web/js/tree.js @@ -1,4 +1,4 @@ -import { CheckboxTree } from '../vendor/checkbox-tree/checkbox-tree.js'; +import { CheckboxTree, loadManifest } from '../vendor/checkbox-tree/checkbox-tree.js'; import { getSortedKeys } from './sort.js'; const STORAGE_KEY = 'tree-state-v2'; @@ -14,11 +14,29 @@ export function initializeTree(containerId, onSelectionChange) { productTree = new CheckboxTree(container, { storageKey: STORAGE_KEY, initiallyCollapsed: true, - onSelectionChange + onSelectionChange: event => { + onSelectionChange(event); + pushTreeState(); + } + }); + + container.addEventListener('click', event => { + if (event.target.closest('.checkbox-tree__toggle')) { + pushTreeState(); + } + }); + window.addEventListener('popstate', () => { + productTree?.restoreStateFromLocation(); + onSelectionChange({ + selectedIds: productTree?.getSelectedIds() ?? [], + selectedNodes: productTree?.getSelectedNodes() ?? [] + }); }); } -export function renderProductTree(productsData) { +export async function renderProductTree(productsData) { + const manifestSource = await fetch('data/product-tree-manifest.json').then(response => response.json()); + requireTree().options.manifest = loadManifest(manifestSource); requireTree().setData(toTreeNodes(productsData)); } @@ -53,6 +71,17 @@ function requireTree() { return productTree; } +function pushTreeState() { + if (!productTree?.options.manifest) { + return; + } + const url = new URL(window.location.href); + url.hash = productTree.serializeStateToFragment(); + if (url.href !== window.location.href) { + history.pushState(null, '', url); + } +} + function toTreeNodes(value, path = []) { return getSortedKeys(value) .filter(key => key !== 'addressed' && key !== 'known') diff --git a/web/vendor/checkbox-tree/README.md b/web/vendor/checkbox-tree/README.md index 1b8b58f..a14d6f3 100644 --- a/web/vendor/checkbox-tree/README.md +++ b/web/vendor/checkbox-tree/README.md @@ -1,5 +1,125 @@ -# Checkbox Tree runtime snapshot +# Checkbox Tree -Vendored from `@aaronaxvig/checkbox-tree` version `0.1.0` while -`git.axvig.com` is unavailable. Do not edit these runtime files directly; update -the canonical `checkbox-tree` repository and refresh this snapshot. +A dependency-free, instance-based checkbox tree for browser ES modules. It +supports cascading selection, indeterminate parent states, expandable branches, +multiple independent instances, optional local-storage persistence, and compact +shareable URL state backed by an append-only node manifest. + +## Install + +```sh +npm install @aaronaxvig/checkbox-tree +``` + +The package is not published yet. During local development, install it by path: + +```sh +npm install ../checkbox-tree +``` + +## Usage + +```js +import { CheckboxTree } from "@aaronaxvig/checkbox-tree"; +import "@aaronaxvig/checkbox-tree/styles.css"; + +const tree = new CheckboxTree(document.querySelector("#example-tree"), { + initiallySelected: true, + storageKey: "example-tree-state", + onSelectionChange({ selectedIds, selectedNodes }) { + console.log(selectedIds, selectedNodes); + }, +}); + +tree.setData([ + { + id: "fruit", + label: "Fruit", + children: [ + { id: "apple", label: "Apple", metadata: { color: "red" } }, + { id: "pear", label: "Pear", metadata: { color: "green" } }, + ], + }, +]); +``` + +For applications without a bundler, serve or copy the two files in `src/` and +use relative URLs: + +```html + + +``` + +Every node requires unique string `id` and `label` properties. Nodes may also +have `children`, application-owned `metadata`, and `selectable` or `disabled` +flags. + +## API + +- `new CheckboxTree(container, options)` creates an independent instance. +- `setData(nodes)` validates and renders nodes, then restores saved state. +- `getSelectedIds()` returns selected node IDs. +- `getSelectedNodes()` returns selected source node objects. +- `setSelectedIds(ids, { notify })` replaces the selection. +- `restoreState()` restores selection and expansion state. +- `destroy()` removes listeners, markup, and the root CSS class. +- `serializeStateToFragment(manifest)` returns `#v=1&c=...&x=...` state. +- `restoreStateFromLocation(manifest, location)` safely applies URL state. +- `validateManifest(manifest)` reports unregistered and missing paths. + +Options: + +- `initiallyCollapsed` defaults to `true`. +- `initiallySelected` defaults to `false`. +- `storageKey` defaults to `null`, which disables persistence. +- `onSelectionChange` receives `{ selectedIds, selectedNodes }`. +- `manifest` optionally supplies a parsed manifest and automatically restores + state from `window.location.hash` after `setData()`. + +## Shareable URL state + +Create a JSON manifest whose array positions are permanent slots. Canonical node +paths join ancestor IDs with `>`: + +```json +{ "schema": 1, "nodes": ["fruit", "fruit>apple", "fruit>pear", null] } +``` + +Import `loadManifest`, pass its result as the `manifest` option, and call +`tree.serializeStateToFragment()` when creating a share link. Existing entries +must never be reordered. Append new paths, replace removed paths with `null`, and +edit a path in place for a logical rename or move. Node IDs therefore cannot +contain `>`. + +The fragment adaptively encodes checked (`c`) and expanded (`x`) state using the +shortest of a dense bitset, sparse enabled slots, or sparse disabled slots. +Sparse slot numbers are delta-encoded variable-length integers. A coverage value +in the disabled-slot form ensures nodes appended later still default to unchecked +and collapsed. Malformed or unsupported state is ignored. +The helpers `encodeTreeState`, `decodeTreeState`, `applyTreeState`, and +`restoreStateFromLocation` are also exported for custom integrations. +Use `validateManifestEvolution(previous, next)` in a build check to reject +removed slots and tombstone reuse; path changes are reported for deliberate +rename/move review. + +Styling is namespaced under `.checkbox-tree`. Override the custom properties +`--checkbox-tree-indent`, `--checkbox-tree-toggle-size`, and +`--checkbox-tree-hover-color` in the consuming application. + +## Development + +```sh +npm install +npm test +npm run pack:check +``` + +## Future demo ideas + +- Add population metadata to the country, state, and county nodes and display the + total population represented by the current selection. Define the aggregation + rule carefully so checked ancestors and their checked descendants are not + counted twice; one option is to total only the most specific checked nodes. diff --git a/web/vendor/checkbox-tree/checkbox-tree.js b/web/vendor/checkbox-tree/checkbox-tree.js index c470d48..4974fc6 100644 --- a/web/vendor/checkbox-tree/checkbox-tree.js +++ b/web/vendor/checkbox-tree/checkbox-tree.js @@ -2,9 +2,310 @@ const DEFAULT_OPTIONS = { initiallyCollapsed: true, initiallySelected: false, storageKey: null, - onSelectionChange: null + onSelectionChange: null, + manifest: null }; +const SERIALIZATION_VERSION = 1; +const PATH_DELIMITER = '>'; + +export function loadManifest(source) { + let records; + let schema = 1; + + if (typeof source === 'string') { + records = source.split(/\r?\n/) + .map(line => line.trim()) + .filter(line => line && !line.startsWith('#')) + .map(line => line === '!deleted' ? null : line); + } else if (source && typeof source === 'object' && Array.isArray(source.nodes)) { + schema = source.schema; + records = source.nodes; + } else if (source && Array.isArray(source.slots)) { + return normalizeManifest(source.schema, source.slots.map(slot => slot?.deleted ? null : slot?.path)); + } else { + throw new TypeError('CheckboxTree manifest must be text or an object with a nodes array.'); + } + + return normalizeManifest(schema, records); +} + +function normalizeManifest(schema, records) { + if (schema !== 1) { + throw new Error(`Unsupported CheckboxTree manifest schema: ${schema}`); + } + + const pathToSlot = new Map(); + const slots = records.map((record, index) => { + if (record === null || record === '!deleted') { + return { path: null, deleted: true }; + } + if (typeof record !== 'string' || !record || record.trim() !== record) { + throw new TypeError(`Invalid CheckboxTree manifest entry at slot ${index}.`); + } + if (pathToSlot.has(record)) { + throw new Error(`Duplicate CheckboxTree manifest path: ${record}`); + } + pathToSlot.set(record, index); + return { path: record, deleted: false }; + }); + + return { schema: 1, slots, pathToSlot }; +} + +export function setBit(bytes, bitIndex, value) { + const byteIndex = Math.floor(bitIndex / 8); + const mask = 1 << (bitIndex % 8); + if (value) bytes[byteIndex] |= mask; + else bytes[byteIndex] &= ~mask; +} + +export function getBit(bytes, bitIndex) { + const byteIndex = Math.floor(bitIndex / 8); + return byteIndex < bytes.length && (bytes[byteIndex] & (1 << (bitIndex % 8))) !== 0; +} + +export function bytesToBase64Url(bytes) { + let binary = ''; + for (const byte of bytes) binary += String.fromCharCode(byte); + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, ''); +} + +export function base64UrlToBytes(value, maximumLength = Infinity) { + if (typeof value !== 'string' || !/^[A-Za-z0-9_-]*$/.test(value) || value.length % 4 === 1) { + throw new Error('Invalid Base64URL value.'); + } + if (Number.isFinite(maximumLength) && value.length > Math.ceil(maximumLength * 4 / 3) + 2) { + throw new Error('Encoded tree state exceeds the manifest size.'); + } + const base64 = value.replace(/-/g, '+').replace(/_/g, '/'); + const binary = atob(base64 + '='.repeat((4 - base64.length % 4) % 4)); + if (binary.length > maximumLength) throw new Error('Encoded tree state exceeds the manifest size.'); + return Uint8Array.from(binary, character => character.charCodeAt(0)); +} + +function trimTrailingZeroBytes(bytes) { + let end = bytes.length; + while (end && bytes[end - 1] === 0) end--; + return bytes.slice(0, end); +} + +function encodeUnsignedVarint(value) { + const bytes = []; + do { + let byte = value & 0x7f; + value = Math.floor(value / 128); + if (value) byte |= 0x80; + bytes.push(byte); + } while (value); + return bytes; +} + +function decodeUnsignedVarint(bytes, offset) { + let value = 0; + let multiplier = 1; + for (let index = offset; index < bytes.length && index < offset + 8; index++) { + const byte = bytes[index]; + value += (byte & 0x7f) * multiplier; + if ((byte & 0x80) === 0) return { value, offset: index + 1 }; + multiplier *= 128; + if (!Number.isSafeInteger(value) || !Number.isSafeInteger(multiplier)) break; + } + throw new Error('Invalid adaptive tree-state integer.'); +} + +function encodeSparseIndexes(indexes) { + const bytes = []; + let previous = -1; + for (const index of indexes) { + bytes.push(...encodeUnsignedVarint(index - previous - 1)); + previous = index; + } + return bytes; +} + +function decodeSparseIndexes(bytes, offset, limit) { + const indexes = new Set(); + let previous = -1; + while (offset < bytes.length) { + const decoded = decodeUnsignedVarint(bytes, offset); + const index = previous + decoded.value + 1; + if (index >= limit) throw new Error('Sparse tree state contains an out-of-range slot.'); + indexes.add(index); + previous = index; + offset = decoded.offset; + } + return indexes; +} + +export function encodeAdaptiveBitset(values, slotCount) { + const enabled = []; + const disabled = []; + const denseBytes = new Uint8Array(Math.ceil(slotCount / 8)); + for (const [slot, value] of values) { + (value ? enabled : disabled).push(slot); + setBit(denseBytes, slot, value); + } + enabled.sort((left, right) => left - right); + disabled.sort((left, right) => left - right); + if (enabled.length === 0) return new Uint8Array(); + + const candidates = [ + Uint8Array.from([0, ...trimTrailingZeroBytes(denseBytes)]), + Uint8Array.from([1, ...encodeSparseIndexes(enabled)]), + Uint8Array.from([2, ...encodeUnsignedVarint(slotCount), ...encodeSparseIndexes(disabled)]) + ]; + return candidates.reduce((shortest, candidate) => + candidate.length < shortest.length ? candidate : shortest + ); +} + +export function decodeAdaptiveBitset(bytes, slotCount) { + if (bytes.length === 0) return () => false; + const mode = bytes[0]; + if (mode === 0) { + const dense = bytes.slice(1); + if (dense.length > Math.ceil(slotCount / 8)) { + throw new Error('Dense tree state exceeds the manifest size.'); + } + return slot => getBit(dense, slot); + } + if (mode === 1) { + const enabled = decodeSparseIndexes(bytes, 1, slotCount); + return slot => enabled.has(slot); + } + if (mode === 2) { + const coverage = decodeUnsignedVarint(bytes, 1); + if (coverage.value > slotCount) throw new Error('Tree-state coverage exceeds the manifest size.'); + const disabled = decodeSparseIndexes(bytes, coverage.offset, coverage.value); + return slot => slot < coverage.value && !disabled.has(slot); + } + throw new Error('Unknown adaptive tree-state mode.'); +} + +function asManifest(manifest) { + return manifest?.pathToSlot instanceof Map ? manifest : loadManifest(manifest); +} + +export function validateManifest(manifest, tree) { + const normalized = asManifest(manifest); + const treePaths = new Set(tree.nodesByPath.keys()); + return { + valid: Array.from(treePaths).every(path => normalized.pathToSlot.has(path)), + unregisteredPaths: Array.from(treePaths).filter(path => !normalized.pathToSlot.has(path)), + missingPaths: normalized.slots + .filter(slot => !slot.deleted && !treePaths.has(slot.path)) + .map(slot => slot.path) + }; +} + +export function validateManifestEvolution(previous, next) { + const oldManifest = asManifest(previous); + const newManifest = asManifest(next); + const errors = []; + + if (newManifest.slots.length < oldManifest.slots.length) { + errors.push('Manifest slots cannot be removed; use tombstones.'); + } + oldManifest.slots.forEach((oldSlot, index) => { + const newSlot = newManifest.slots[index]; + if (!newSlot) return; + if (oldSlot.deleted && !newSlot.deleted) { + errors.push(`Tombstoned slot ${index} cannot be reused.`); + } + if (!oldSlot.deleted && !newSlot.deleted && oldSlot.path !== newSlot.path) { + errors.push(`Slot ${index} changed path; confirm this is a logical rename or move.`); + } + }); + + return { valid: errors.length === 0, errors }; +} + +export function encodeTreeState(tree, manifest) { + const normalized = asManifest(manifest); + const checkedValues = new Map(); + const expandedValues = new Map(); + + for (const [path, node] of tree.nodesByPath) { + const slot = normalized.pathToSlot.get(path); + if (slot === undefined) continue; + const item = tree.itemForNode(node.id); + const checkbox = item && tree.directCheckbox(item); + const toggle = item?.querySelector(':scope > .checkbox-tree__row > .checkbox-tree__toggle'); + checkedValues.set(slot, Boolean(checkbox?.checked)); + expandedValues.set(slot, toggle?.getAttribute('aria-expanded') === 'true'); + } + + const checkedValue = bytesToBase64Url(encodeAdaptiveBitset(checkedValues, normalized.slots.length)); + const expandedValue = bytesToBase64Url(encodeAdaptiveBitset(expandedValues, normalized.slots.length)); + return { version: SERIALIZATION_VERSION, checked: checkedValue || null, expanded: expandedValue || null }; +} + +export function decodeTreeState(fragment, manifest) { + const normalized = asManifest(manifest); + const value = fragment.startsWith('#') ? fragment.slice(1) : fragment; + const params = new URLSearchParams(value); + if (params.get('v') !== String(SERIALIZATION_VERSION)) { + return { applied: false, version: params.get('v'), warnings: ['Missing or unsupported serialization version.'] }; + } + const maximumLength = Math.max( + Math.ceil(normalized.slots.length / 8) + 1, + normalized.slots.length * 2 + 10 + ); + try { + const checked = base64UrlToBytes(params.get('c') ?? '', maximumLength); + const expanded = base64UrlToBytes(params.get('x') ?? '', maximumLength); + decodeAdaptiveBitset(checked, normalized.slots.length); + decodeAdaptiveBitset(expanded, normalized.slots.length); + return { + applied: true, + version: SERIALIZATION_VERSION, + checked, + expanded, + warnings: [] + }; + } catch (error) { + return { applied: false, version: SERIALIZATION_VERSION, warnings: [error.message] }; + } +} + +export function applyTreeState(tree, manifest, state) { + if (!state?.applied) return false; + const normalized = asManifest(manifest); + let isChecked; + let isExpanded; + try { + isChecked = decodeAdaptiveBitset(state.checked, normalized.slots.length); + isExpanded = decodeAdaptiveBitset(state.expanded, normalized.slots.length); + } catch { + return false; + } + for (const [path, node] of tree.nodesByPath) { + const slot = normalized.pathToSlot.get(path); + if (slot === undefined) continue; + const item = tree.itemForNode(node.id); + const checkbox = item && tree.directCheckbox(item); + if (checkbox && !checkbox.disabled) checkbox.checked = isChecked(slot); + tree.setExpanded(item, isExpanded(slot)); + } + tree.updateAllParentCheckboxes(); + return true; +} + +export function serializeStateToFragment(tree, manifest) { + const state = encodeTreeState(tree, manifest); + const params = new URLSearchParams({ v: String(state.version) }); + if (state.checked) params.set('c', state.checked); + if (state.expanded) params.set('x', state.expanded); + return `#${params}`; +} + +export function restoreStateFromLocation(tree, manifest, location = window.location) { + const state = decodeTreeState(location.hash ?? '', manifest); + if (state.applied) applyTreeState(tree, manifest, state); + return state; +} + export class CheckboxTree { constructor(container, options = {}) { if (!(container instanceof Element)) { @@ -14,6 +315,7 @@ export class CheckboxTree { this.container = container; this.options = { ...DEFAULT_OPTIONS, ...options }; this.nodesById = new Map(); + this.nodesByPath = new Map(); this.rootNodes = []; this.handleChange = this.handleChange.bind(this); this.handleClick = this.handleClick.bind(this); @@ -29,11 +331,13 @@ export class CheckboxTree { } this.nodesById.clear(); + this.nodesByPath.clear(); this.rootNodes = nodes; this.indexNodes(nodes); this.render(); this.updateAllParentCheckboxes(); this.restoreState(); + if (this.options.manifest) this.restoreStateFromLocation(); } getSelectedIds() { @@ -66,9 +370,10 @@ export class CheckboxTree { this.container.classList.remove('checkbox-tree'); this.container.replaceChildren(); this.nodesById.clear(); + this.nodesByPath.clear(); } - indexNodes(nodes) { + indexNodes(nodes, parentPath = '') { nodes.forEach(node => { if (!node || typeof node.id !== 'string' || !node.id || typeof node.label !== 'string') { throw new TypeError('Each CheckboxTree node requires non-empty string id and label properties.'); @@ -77,12 +382,18 @@ export class CheckboxTree { throw new Error(`Duplicate CheckboxTree node id: ${node.id}`); } + if (node.id.includes(PATH_DELIMITER)) { + throw new Error(`CheckboxTree node id cannot contain "${PATH_DELIMITER}": ${node.id}`); + } + this.nodesById.set(node.id, node); + const path = parentPath ? `${parentPath}${PATH_DELIMITER}${node.id}` : node.id; + this.nodesByPath.set(path, node); if (node.children !== undefined) { if (!Array.isArray(node.children)) { throw new TypeError(`CheckboxTree node children must be an array: ${node.id}`); } - this.indexNodes(node.children); + this.indexNodes(node.children, path); } }); } @@ -191,6 +502,7 @@ export class CheckboxTree { } setExpanded(item, expanded) { + if (!item) return; const toggle = item.querySelector(':scope > .checkbox-tree__row > .checkbox-tree__toggle'); const children = this.directChildrenContainer(item); if (!toggle || !children) { @@ -211,6 +523,11 @@ export class CheckboxTree { return item.querySelector(':scope > .checkbox-tree__row .checkbox-tree__checkbox'); } + itemForNode(id) { + return Array.from(this.container.querySelectorAll('.checkbox-tree__item')) + .find(item => item.dataset.nodeId === id) ?? null; + } + updateAncestorCheckboxes(item) { let parentItem = item.parentElement?.closest('.checkbox-tree__item'); while (parentItem && this.container.contains(parentItem)) { @@ -286,4 +603,16 @@ export class CheckboxTree { }); } } + + validateManifest(manifest = this.options.manifest) { + return validateManifest(manifest, this); + } + + serializeStateToFragment(manifest = this.options.manifest) { + return serializeStateToFragment(this, manifest); + } + + restoreStateFromLocation(manifest = this.options.manifest, location = window.location) { + return restoreStateFromLocation(this, manifest, location); + } }