diff --git a/backend/core/fileupload/viewsets.py b/backend/core/fileupload/viewsets.py
index bd992d2f..0b6c32ab 100644
--- a/backend/core/fileupload/viewsets.py
+++ b/backend/core/fileupload/viewsets.py
@@ -386,6 +386,9 @@ def list(self, request, **kwargs):
familyId = self.request.query_params.get("family")
if familyId is not None:
queryset = queryset.filter(family__id=familyId).order_by("version")
+ owner = self.request.query_params.get("owner")
+ if owner is not None:
+ queryset = queryset.filter(owner=owner)
files = FilesSerializer(queryset, many=True).data
anonymized_files = []
for file in files:
diff --git a/backend/core/routers.py b/backend/core/routers.py
index 3f865840..617ce2fc 100644
--- a/backend/core/routers.py
+++ b/backend/core/routers.py
@@ -35,6 +35,9 @@
# FEATURE MODEL RELATED
# details file upload https://djangotricks.blogspot.com/2020/03/how-to-upload-a-file-using-django-rest-framework.html
router.register(r"files", FileUploadViewSet, basename="file-upload")
+""" router.register(
+ r"files/uploaded/confirmed", ConfirmedFileViewSet, basename="confirmed-files"
+) """
router.register(
r"files/uploaded/confirmed", ConfirmedFileViewSet, basename="confirmed-files"
)
diff --git a/backend/requirements.txt b/backend/requirements.txt
index b413b82c..282396d3 100644
--- a/backend/requirements.txt
+++ b/backend/requirements.txt
@@ -19,7 +19,6 @@ djangorestframework-simplejwt==5.0.0
docker==6.0.0
Faker==14.2.0
idna==3.3
-psycopg2-binary==2.9.2
pycparser==2.21
PyGithub==1.55
PyJWT==2.3.0
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 085118c8..c78afdfc 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -3001,25 +3001,65 @@
"strip-ansi": "^6.0.0"
}
},
- "node_modules/@vue/compiler-sfc": {
- "version": "2.7.14",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
- "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+ "node_modules/@vue/compiler-core": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
+ "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
- "@babel/parser": "^7.18.4",
- "postcss": "^8.4.14",
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
+ "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
+ "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/compiler-ssr": "3.2.47",
+ "@vue/reactivity-transform": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/compiler-sfc/node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"node_modules/@vue/compiler-sfc/node_modules/postcss": {
"version": "8.4.19",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
"integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -3030,6 +3070,8 @@
"url": "https://tidelift.com/funding/github/npm/postcss"
}
],
+ "optional": true,
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
@@ -3039,6 +3081,18 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
+ "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
"node_modules/@vue/component-compiler-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
@@ -3093,6 +3147,29 @@
"webpack": ">=4.0.0"
}
},
+ "node_modules/@vue/reactivity-transform": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
+ "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz",
+ "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"node_modules/@vue/web-component-wrapper": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@@ -8230,6 +8307,14 @@
"node": ">=4.0"
}
},
+ "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==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -11694,6 +11779,17 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -16817,6 +16913,15 @@
"deprecated": "See https://github.com/lydell/source-map-url#deprecated",
"dev": true
},
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "deprecated": "Please use @jridgewell/sourcemap-codec instead",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"node_modules/spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@@ -18889,6 +18994,44 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
+ "node_modules/vue/node_modules/@vue/compiler-sfc": {
+ "version": "2.7.14",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
+ "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+ "dependencies": {
+ "@babel/parser": "^7.18.4",
+ "postcss": "^8.4.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/vue/node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/vue/node_modules/postcss": {
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
"node_modules/vuetify": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.6.12.tgz",
@@ -22720,25 +22863,67 @@
"strip-ansi": "^6.0.0"
}
},
- "@vue/compiler-sfc": {
- "version": "2.7.14",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
- "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+ "@vue/compiler-core": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
+ "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
- "@babel/parser": "^7.18.4",
- "postcss": "^8.4.14",
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
+ "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
+ "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/compiler-ssr": "3.2.47",
+ "@vue/reactivity-transform": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
"source-map": "^0.6.1"
},
"dependencies": {
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"postcss": {
"version": "8.4.19",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
"integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
@@ -22747,6 +22932,18 @@
}
}
},
+ "@vue/compiler-ssr": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
+ "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
"@vue/component-compiler-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
@@ -22795,6 +22992,29 @@
"dev": true,
"requires": {}
},
+ "@vue/reactivity-transform": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
+ "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz",
+ "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"@vue/web-component-wrapper": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@@ -26815,6 +27035,14 @@
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
+ "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==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -29490,6 +29718,17 @@
"yallist": "^3.0.2"
}
},
+ "magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -33572,6 +33811,14 @@
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"dev": true
},
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@@ -34990,6 +35237,33 @@
"requires": {
"@vue/compiler-sfc": "2.7.14",
"csstype": "^3.1.0"
+ },
+ "dependencies": {
+ "@vue/compiler-sfc": {
+ "version": "2.7.14",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
+ "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+ "requires": {
+ "@babel/parser": "^7.18.4",
+ "postcss": "^8.4.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "postcss": {
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ }
}
},
"vue-chartjs": {
diff --git a/frontend/src/views/FileDetail.vue b/frontend/src/views/FileDetail.vue
index 22ad613b..0b9a1eb5 100644
--- a/frontend/src/views/FileDetail.vue
+++ b/frontend/src/views/FileDetail.vue
@@ -19,7 +19,7 @@
- mdi-information
+ mdi-information
@@ -44,8 +44,8 @@
{{ loading ? '...' : file.description }}
Description
+ >Description
+
@@ -59,7 +59,7 @@
- mdi-license
+ mdi-license
@@ -70,17 +70,17 @@
+
+ mdi-pencil
+
+ -->
- mdi-tag
+ mdi-tag
@@ -105,7 +105,7 @@
- mdi-calendar
+ mdi-calendar
@@ -117,15 +117,15 @@
}}
Uploaded on
+ >Uploaded on
+
+
+ mdi-pencil
+
+-->
@@ -142,15 +142,15 @@
}})
Family and version
+ >Family and version
+
+
+ mdi-pencil
+
+-->
Artifacts (tbd)
-
+
+ REPORTS
+
+
+ mdi-file-document-outline
+
+
+
+ {{ item.title }}
+
+
+ {{ item.subtitle }}
+
+
+
+
+ mdi-download
+
+
+ mdi-eye
+
+
+
+
@@ -291,8 +318,8 @@
Analyses
+ >Analyses
+
+
+
+ mdi-file-compare
+ View and compare Feature Model artifacts:
+ {{
+ selectedArtifact.title
+ }}
+
+
+
+ mdi-close
+
+
+
+
+
+
+
+
+ Feature Model: {{ file.label }}
+
+
+
+
+
+
+
+ mdi-download
+ Download Artifact
+
+
+
+
+
+ Click to compare with another feature model
+
+
+
+
+ mdi-arrow-left
+
+ My Feature Models
+
+
+
+
+
+
+ mdi-family-tree
+
+
+
+
+ {{ item.label }}
+
+
+ {{
+ new Date(
+ item.uploaded_at
+ ).toLocaleString(
+ 'en-US'
+ )
+ }}
+
+
+
+
+
+
+
+
+
+
+ mdi-arrow-left
+
+ {{ getMyFM[selectedRightFM].label }}
+
+
+
+
+
+
+
+
+
+
- mdi-school
+ mdi-school
@@ -395,6 +595,12 @@ export default Vue.extend({
file: {},
loading: true,
dialogDelete: false,
+ dialogArtifact: false,
+ shouldCompare: false,
+ loadingComparableFM: false,
+ selectedRightFM: -1,
+ selectedArtifact: {},
+ rightFmIsSelected: false,
removeLoading: false,
searchAnalysis: '',
headersAnalysis: [
@@ -461,6 +667,2423 @@ export default Vue.extend({
elementCssSelector: '#feature-model-artifacts',
},
],
+ artifacts: [
+ {
+ title: 'CSV',
+ subtitle: 'Displaying CSV of feature model',
+ },
+ {
+ title: 'XML',
+ subtitle: 'Displaying XML of feature model',
+ },
+ {
+ title: 'Complex Document',
+ subtitle: 'Generated from analysis: complex analysis',
+ },
+ ],
+ headerCsvArtifact: [
+ { text: 'Input File', value: 'input_file' },
+ { text: 'Input Hash', value: 'input_hash' },
+ { text: 'SVO', value: 'svo' },
+ { text: 'DVO', value: 'dvo' },
+ { text: 'DVO Time', value: 'dvo_time' },
+ { text: 'BDD Compiler', value: 'bdd_compiler' },
+ { text: 'BDD Bootstrap', value: 'bdd_bootstrap' },
+ { text: 'BDD Compile', value: 'bdd_compile' },
+ { text: 'BDD Timeout', value: 'bdd_timeout' },
+ { text: 'BDD Size', value: 'bdd_size' },
+ ],
+ itemsCsvArtifact: [
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.006,
+ bdd_compile: 44.813,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.008,
+ bdd_compile: 45.037,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.01,
+ bdd_compile: 32.266,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.006,
+ bdd_compile: 31.951,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.006,
+ bdd_compile: 37.242,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.006,
+ bdd_compile: 36.179,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.01,
+ bdd_compile: 34.675,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.009,
+ bdd_compile: 46.592,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.007,
+ bdd_compile: 40.298,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.005,
+ bdd_compile: 44.059,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.006,
+ bdd_compile: 36.9,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.006,
+ bdd_compile: 41.094,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.008,
+ bdd_compile: 35.726,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-best',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.01,
+ bdd_compile: 27.533,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.01,
+ bdd_compile: 32.349,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.01,
+ bdd_compile: 41.088,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.005,
+ bdd_compile: 34.342,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.01,
+ bdd_compile: 30.061,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.009,
+ bdd_compile: 35.78,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.011,
+ bdd_compile: 36.598,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.009,
+ bdd_compile: 36.843,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: 'SIFTC',
+ dvo_time: '',
+ bdd_compiler: 'cudd',
+ bdd_bootstrap: 0.01,
+ bdd_compile: 31.673,
+ bdd_timeout: false,
+ bdd_size: '',
+ },
+ {
+ input_file: 'busybox.dimacs',
+ input_hash: '287b501faf4c816afd0fe517c85ab7ed',
+ svo: 'force-avg',
+ dvo: '',
+ dvo_time: '',
+ bdd_compiler: '',
+ bdd_bootstrap: null,
+ bdd_compile: null,
+ bdd_timeout: null,
+ bdd_size: '',
+ },
+ ],
+ xmlFile: `
+
+
+
+:r __Root__(__Root__)
+\t:o FEATURE_INSMOD_VERSION_CHECKING(FEATURE_INSMOD_VERSION_CHECKING)
+\t:o NC_EXTRA(NC_EXTRA)
+\t:o FEATURE_SH_STANDALONE(FEATURE_SH_STANDALONE)
+\t:o STATIC(STATIC)
+\t:o FEATURE_LESS_LINENUMS(FEATURE_LESS_LINENUMS)
+\t:o RAIDAUTORUN(RAIDAUTORUN)
+\t:o GETENFORCE(GETENFORCE)
+\t:o FEATURE_CHAT_TTY_HIFI(FEATURE_CHAT_TTY_HIFI)
+\t:o HEXDUMP(HEXDUMP)
+\t:o FEATURE_MOUNT_VERBOSE(FEATURE_MOUNT_VERBOSE)
+\t:o FEATURE_FIND_INUM(FEATURE_FIND_INUM)
+\t:o EXPAND(EXPAND)
+\t:o RUNLEVEL(RUNLEVEL)
+\t:o HDPARM(HDPARM)
+\t:o INIT_TERMINAL_TYPE(INIT_TERMINAL_TYPE)
+\t:o AR(AR)
+\t:o FEATURE_EJECT_SCSI(FEATURE_EJECT_SCSI)
+\t:o SED(SED)
+\t:o SENDMAIL(SENDMAIL)
+\t:o SETFILES(SETFILES)
+\t:o FEATURE_VI_SEARCH(FEATURE_VI_SEARCH)
+\t:o SEQ(SEQ)
+\t:o FEATURE_FBSET_FANCY(FEATURE_FBSET_FANCY)
+\t:o WATCH(WATCH)
+\t:o TFTP(TFTP)
+\t:o FEATURE_TOP_SMP_PROCESS(FEATURE_TOP_SMP_PROCESS)
+\t:o HUSH_FUNCTIONS(HUSH_FUNCTIONS)
+\t:o FEATURE_CROND_DIR(FEATURE_CROND_DIR)
+\t:o FEATURE_FBSET_READMODE(FEATURE_FBSET_READMODE)
+\t:o HALT(HALT)
+\t:o INSTALL_APPLET_SCRIPT_WRAPPERS(INSTALL_APPLET_SCRIPT_WRAPPERS)
+\t:o FLASHCP(FLASHCP)
+\t:o FEATURE_WGET_TIMEOUT(FEATURE_WGET_TIMEOUT)
+\t:o BRCTL(BRCTL)
+\t:o FEATURE_DF_FANCY(FEATURE_DF_FANCY)
+\t:o CP(CP)
+\t:o FEATURE_LS_FILETYPES(FEATURE_LS_FILETYPES)
+\t:o NBDCLIENT(NBDCLIENT)
+\t:o FEATURE_ADDUSER_LONG_OPTIONS(FEATURE_ADDUSER_LONG_OPTIONS)
+\t:o FEATURE_UDHCP_PORT(FEATURE_UDHCP_PORT)
+\t:o DNSD(DNSD)
+\t:o HUSH_LOCAL(HUSH_LOCAL)
+\t:o DC(DC)
+\t:o DD(DD)
+\t:o STTY(STTY)
+\t:o DF(DF)
+\t:o UNICODE_BIDI_SUPPORT(UNICODE_BIDI_SUPPORT)
+\t:o FEATURE_TAR_TO_COMMAND(FEATURE_TAR_TO_COMMAND)
+\t:o LOAD_POLICY(LOAD_POLICY)
+\t:o TUNE2FS(TUNE2FS)
+\t:o FEATURE_FANCY_TAIL(FEATURE_FANCY_TAIL)
+\t:o IPADDR(IPADDR)
+\t:o DU(DU)
+\t:o FEATURE_SHOW_THREADS(FEATURE_SHOW_THREADS)
+\t:o FEATURE_READLINK_FOLLOW(FEATURE_READLINK_FOLLOW)
+\t:o LOGNAME(LOGNAME)
+\t:o FEATURE_FIND_PRUNE(FEATURE_FIND_PRUNE)
+\t:o INSTALL_SH_APPLET_SCRIPT_WRAPPER(INSTALL_SH_APPLET_SCRIPT_WRAPPER)
+\t:o ED(ED)
+\t:o FEATURE_TFTP_GET(FEATURE_TFTP_GET)
+\t:o MDEV(MDEV)
+\t:o HUSH_SAVEHISTORY(HUSH_SAVEHISTORY)
+\t:o NC_110_COMPAT(NC_110_COMPAT)
+\t:o FEATURE_STAT_FORMAT(FEATURE_STAT_FORMAT)
+\t:o FEATURE_XARGS_SUPPORT_TERMOPT(FEATURE_XARGS_SUPPORT_TERMOPT)
+\t:o PASSWORD_MINLEN(PASSWORD_MINLEN)
+\t:o CHROOT(CHROOT)
+\t:o SETSID(SETSID)
+\t:o FEATURE_LAST_SMALL_alt(FEATURE_LAST_SMALL_alt)
+\t:o UBIATTACH(UBIATTACH)
+\t:o FEATURE_COMPRESS_USAGE(FEATURE_COMPRESS_USAGE)
+\t:o UNLZMA(UNLZMA)
+\t:o FEATURE_HDPARM_GET_IDENTITY(FEATURE_HDPARM_GET_IDENTITY)
+\t:o FEATURE_FIND_NEWER(FEATURE_FIND_NEWER)
+\t:o TUNCTL(TUNCTL)
+\t:o FEATURE_KILL_REMOVED(FEATURE_KILL_REMOVED)
+\t:o BASENAME(BASENAME)
+\t:o MKFIFO(MKFIFO)
+\t:o UNCOMPRESS(UNCOMPRESS)
+\t:o MD5SUM(MD5SUM)
+\t:o FEATURE_LS_COLOR_IS_DEFAULT(FEATURE_LS_COLOR_IS_DEFAULT)
+\t:o UNEXPAND(UNEXPAND)
+\t:o REMOVE_SHELL(REMOVE_SHELL)
+\t:o root(root)
+\t:o FEATURE_AUTOWIDTH(FEATURE_AUTOWIDTH)
+\t:o FEATURE_MOUNT_NFS(FEATURE_MOUNT_NFS)
+\t:o HUSH_IF(HUSH_IF)
+\t:o BB_SYSCTL(BB_SYSCTL)
+\t:o FEATURE_FIND_TYPE(FEATURE_FIND_TYPE)
+\t:o FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV(FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV)
+\t:o FEATURE_MINIX2(FEATURE_MINIX2)
+\t:o FEATURE_BOOTCHARTD_BLOATED_HEADER(FEATURE_BOOTCHARTD_BLOATED_HEADER)
+\t:o TELNET(TELNET)
+\t:o FEATURE_SEAMLESS_LZMA(FEATURE_SEAMLESS_LZMA)
+\t:o FEATURE_IP_RULE(FEATURE_IP_RULE)
+\t:o HOSTNAME(HOSTNAME)
+\t:o FEATURE_HTTPD_RANGES(FEATURE_HTTPD_RANGES)
+\t:o FGCONSOLE(FGCONSOLE)
+\t:o FEATURE_FIND_GROUP(FEATURE_FIND_GROUP)
+\t:o HD(HD)
+\t:o TRACEROUTE(TRACEROUTE)
+\t:o HUSH_MODE_X(HUSH_MODE_X)
+\t:o DMALLOC_alt(DMALLOC_alt)
+\t:o FEATURE_XARGS_SUPPORT_ZERO_TERM(FEATURE_XARGS_SUPPORT_ZERO_TERM)
+\t:o FEATURE_FIND_REGEX(FEATURE_FIND_REGEX)
+\t:o UDHCPC_DEFAULT_SCRIPT(UDHCPC_DEFAULT_SCRIPT)
+\t:o MODPROBE_SMALL(MODPROBE_SMALL)
+\t:o DELUSER(DELUSER)
+\t:o FEATURE_FLOAT_SLEEP(FEATURE_FLOAT_SLEEP)
+\t:o ASH_MAIL(ASH_MAIL)
+\t:o CTTYHACK(CTTYHACK)
+\t:o SETCONSOLE(SETCONSOLE)
+\t:o FEATURE_VI_DOT_CMD(FEATURE_VI_DOT_CMD)
+\t:o BASE64(BASE64)
+\t:o FDISK(FDISK)
+\t:o UNZIP(UNZIP)
+\t:o ID(ID)
+\t:o FEATURE_DEVFS(FEATURE_DEVFS)
+\t:o NOMMU(NOMMU)
+\t:o FEATURE_VOLUMEID_FAT(FEATURE_VOLUMEID_FAT)
+\t:o FEATURE_SH_IS_HUSH_alt(FEATURE_SH_IS_HUSH_alt)
+\t:o IP(IP)
+\t:o USE_BB_PWD_GRP(USE_BB_PWD_GRP)
+\t:o FEATURE_SUID(FEATURE_SUID)
+\t:o DUMPKMAP(DUMPKMAP)
+\t:o MAN(MAN)
+\t:o FEATURE_TRACEROUTE_VERBOSE(FEATURE_TRACEROUTE_VERBOSE)
+\t:o PIVOT_ROOT(PIVOT_ROOT)
+\t:o FEATURE_NAMEIF_EXTENDED(FEATURE_NAMEIF_EXTENDED)
+\t:o FEATURE_VOLUMEID_HFS(FEATURE_VOLUMEID_HFS)
+\t:o RPM2CPIO(RPM2CPIO)
+\t:o FEATURE_VI_8BIT(FEATURE_VI_8BIT)
+\t:o MONOTONIC_SYSCALL(MONOTONIC_SYSCALL)
+\t:o FEATURE_MDEV_RENAME(FEATURE_MDEV_RENAME)
+\t:o TFTPD(TFTPD)
+\t:o FEATURE_LS_USERNAME(FEATURE_LS_USERNAME)
+\t:o PING(PING)
+\t:o INOTIFYD(INOTIFYD)
+\t:o FEATURE_IP_TUNNEL(FEATURE_IP_TUNNEL)
+\t:o START_STOP_DAEMON(START_STOP_DAEMON)
+\t:o INCLUDE_SUSv2(INCLUDE_SUSv2)
+\t:o FEATURE_LESS_MARKS(FEATURE_LESS_MARKS)
+\t:o FEATURE_MDEV_LOAD_FIRMWARE(FEATURE_MDEV_LOAD_FIRMWARE)
+\t:o FEATURE_SPLIT_FANCY(FEATURE_SPLIT_FANCY)
+\t:o SELINUX(SELINUX)
+\t:o FEATURE_TOP_DECIMALS(FEATURE_TOP_DECIMALS)
+\t:o FEATURE_VI_YANKMARK(FEATURE_VI_YANKMARK)
+\t:o GZIP(GZIP)
+\t:o FEATURE_FTP_WRITE(FEATURE_FTP_WRITE)
+\t:o LN(LN)
+\t:o MPSTAT(MPSTAT)
+\t:o LS(LS)
+\t:o RESET(RESET)
+\t:o LOGREAD(LOGREAD)
+\t:o PING6(PING6)
+\t:o UNICODE_WIDE_WCHARS(UNICODE_WIDE_WCHARS)
+\t:o FLOCK(FLOCK)
+\t:o LSATTR(LSATTR)
+\t:o FEATURE_CALL_TELINIT(FEATURE_CALL_TELINIT)
+\t:o FEATURE_INDIVIDUAL(FEATURE_INDIVIDUAL)
+\t:o LAST_SYSTEM_ID(LAST_SYSTEM_ID)
+\t:o FEATURE_TFTP_PROGRESS_BAR(FEATURE_TFTP_PROGRESS_BAR)
+\t:o FEATURE_DPKG_DEB_EXTRACT_ONLY(FEATURE_DPKG_DEB_EXTRACT_ONLY)
+\t:o READPROFILE(READPROFILE)
+\t:o UNIQ(UNIQ)
+\t:o MT(MT)
+\t:o ADDUSER(ADDUSER)
+\t:o MV(MV)
+\t:o FEATURE_NOLOGIN(FEATURE_NOLOGIN)
+\t:o WHOAMI(WHOAMI)
+\t:o FEATURE_LESS_REGEXP(FEATURE_LESS_REGEXP)
+\t:o NC(NC)
+\t:o ACPID(ACPID)
+\t:o LESS(LESS)
+\t:o CHATTR(CHATTR)
+\t:o TFTP_DEBUG(TFTP_DEBUG)
+\t:o XARGS(XARGS)
+\t:o FEATURE_WC_LARGE(FEATURE_WC_LARGE)
+\t:o FEATURE_VOLUMEID_LUKS(FEATURE_VOLUMEID_LUKS)
+\t:o BOOTCHARTD(BOOTCHARTD)
+\t:o FEATURE_LOGREAD_REDUCED_LOCKING(FEATURE_LOGREAD_REDUCED_LOCKING)
+\t:o FEATURE_VOLUMEID_UDF(FEATURE_VOLUMEID_UDF)
+\t:o TCPSVD(TCPSVD)
+\t:o FEATURE_TAB_COMPLETION(FEATURE_TAB_COMPLETION)
+\t:o FEATURE_MDEV_RENAME_REGEXP(FEATURE_MDEV_RENAME_REGEXP)
+\t:o FSCK(FSCK)
+\t:o SHA512SUM(SHA512SUM)
+\t:o EXPR(EXPR)
+\t:o OD(OD)
+\t:o DPKG_DEB(DPKG_DEB)
+\t:o FEATURE_HWIB(FEATURE_HWIB)
+\t:o MKTEMP(MKTEMP)
+\t:o WALL(WALL)
+\t:o FEATURE_FIND_PAREN(FEATURE_FIND_PAREN)
+\t:o FEATURE_TAR_AUTODETECT(FEATURE_TAR_AUTODETECT)
+\t:o ADD_SHELL(ADD_SHELL)
+\t:o FEATURE_DATE_ISOFMT(FEATURE_DATE_ISOFMT)
+\t:o FEATURE_IP_LINK(FEATURE_IP_LINK)
+\t:o PRINTENV(PRINTENV)
+\t:o SLEEP(SLEEP)
+\t:o PS(PS)
+\t:o ECHO(ECHO)
+\t:o FEATURE_VOLUMEID_REISERFS(FEATURE_VOLUMEID_REISERFS)
+\t:o SMEMCAP(SMEMCAP)
+\t:o FEATURE_SU_SYSLOG(FEATURE_SU_SYSLOG)
+\t:o FEATURE_SH_EXTRA_QUIET(FEATURE_SH_EXTRA_QUIET)
+\t:o DIRNAME(DIRNAME)
+\t:o INETD(INETD)
+\t:o READAHEAD(READAHEAD)
+\t:o NTPD(NTPD)
+\t:o FEATURE_MD5_SHA1_SUM_CHECK(FEATURE_MD5_SHA1_SUM_CHECK)
+\t:o LSUSB(LSUSB)
+\t:o FEATURE_LAST_FANCY(FEATURE_LAST_FANCY)
+\t:o FEATURE_EDITING_VI(FEATURE_EDITING_VI)
+\t:o SUM(SUM)
+\t:o FLASH_ERASEALL(FLASH_ERASEALL)
+\t:o FEATURE_BUFFERS_USE_MALLOC(FEATURE_BUFFERS_USE_MALLOC)
+\t:o IOCTL_HEX2STR_ERROR(IOCTL_HEX2STR_ERROR)
+\t:o DEFAULT_SETFONT_DIR(DEFAULT_SETFONT_DIR)
+\t:o FEATURE_INETD_SUPPORT_BUILTIN_TIME(FEATURE_INETD_SUPPORT_BUILTIN_TIME)
+\t:o MAKEMIME(MAKEMIME)
+\t:o RM(RM)
+\t:o FEATURE_TOP_CPU_USAGE_PERCENTAGE(FEATURE_TOP_CPU_USAGE_PERCENTAGE)
+\t:o FEATURE_VOLUMEID_LINUXSWAP(FEATURE_VOLUMEID_LINUXSWAP)
+\t:o FEATURE_MODUTILS_SYMBOLS(FEATURE_MODUTILS_SYMBOLS)
+\t:o HUSH_BASH_COMPAT(HUSH_BASH_COMPAT)
+\t:o FEATURE_MIME_CHARSET(FEATURE_MIME_CHARSET)
+\t:o PSCAN(PSCAN)
+\t:o RX(RX)
+\t:o SETKEYCODES(SETKEYCODES)
+\t:o FEATURE_BASH_IS_ASH(FEATURE_BASH_IS_ASH)
+\t:o CPIO(CPIO)
+\t:o FEATURE_ALLOW_EXEC(FEATURE_ALLOW_EXEC)
+\t:o FEATURE_CP_LONG_OPTIONS(FEATURE_CP_LONG_OPTIONS)
+\t:o FEATURE_IFUPDOWN_IFCONFIG_BUILTIN(FEATURE_IFUPDOWN_IFCONFIG_BUILTIN)
+\t:o SH_MATH_SUPPORT_64(SH_MATH_SUPPORT_64)
+\t:o FEATURE_VOLUMEID_CRAMFS(FEATURE_VOLUMEID_CRAMFS)
+\t:o FTPPUT(FTPPUT)
+\t:o FEATURE_VI_READONLY(FEATURE_VI_READONLY)
+\t:o FEATURE_TUNCTL_UG(FEATURE_TUNCTL_UG)
+\t:o MKFS_EXT2(MKFS_EXT2)
+\t:o ASH_OPTIMIZE_FOR_SIZE(ASH_OPTIMIZE_FOR_SIZE)
+\t:o SU(SU)
+\t:o SV(SV)
+\t:o IFCONFIG(IFCONFIG)
+\t:o FEATURE_GZIP_LONG_OPTIONS(FEATURE_GZIP_LONG_OPTIONS)
+\t:o FEATURE_ADDUSER_TO_GROUP(FEATURE_ADDUSER_TO_GROUP)
+\t:o PRINTF(PRINTF)
+\t:o SWAPONOFF(SWAPONOFF)
+\t:o UPTIME(UPTIME)
+\t:o FEATURE_INSMOD_LOADINKMEM(FEATURE_INSMOD_LOADINKMEM)
+\t:o FEATURE_RUNCON_LONG_OPTIONS(FEATURE_RUNCON_LONG_OPTIONS)
+\t:o FEATURE_DC_LIBM(FEATURE_DC_LIBM)
+\t:o TR(TR)
+\t:o FEATURE_LOADFONT_RAW(FEATURE_LOADFONT_RAW)
+\t:o FEATURE_SORT_BIG(FEATURE_SORT_BIG)
+\t:o FEATURE_EDITING_MAX_LEN(FEATURE_EDITING_MAX_LEN)
+\t:o FEATURE_TRACEROUTE_USE_ICMP(FEATURE_TRACEROUTE_USE_ICMP)
+\t:o FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(FEATURE_HDPARM_HDIO_UNREGISTER_HWIF)
+\t:o FEATURE_BUFFERS_GO_IN_BSS_alt(FEATURE_BUFFERS_GO_IN_BSS_alt)
+\t:o VOLUMEID(VOLUMEID)
+\t:o SETLOGCONS(SETLOGCONS)
+\t:o FEATURE_LS_FOLLOWLINKS(FEATURE_LS_FOLLOWLINKS)
+\t:o FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR(FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR)
+\t:o DEFAULT_MODULES_DIR(DEFAULT_MODULES_DIR)
+\t:o NANDWRITE(NANDWRITE)
+\t:o FEATURE_BOOTCHARTD_CONFIG_FILE(FEATURE_BOOTCHARTD_CONFIG_FILE)
+\t:o FEATURE_HTTPD_AUTH_MD5(FEATURE_HTTPD_AUTH_MD5)
+\t:o FEATURE_IPCALC_FANCY(FEATURE_IPCALC_FANCY)
+\t:o LOADFONT(LOADFONT)
+\t:o FEATURE_TELNETD_STANDALONE(FEATURE_TELNETD_STANDALONE)
+\t:o FEATURE_DATE_COMPAT(FEATURE_DATE_COMPAT)
+\t:o FEATURE_CHAT_SEND_ESCAPES(FEATURE_CHAT_SEND_ESCAPES)
+\t:o PASSWD(PASSWD)
+\t:o FEATURE_SU_CHECKS_SHELLS(FEATURE_SU_CHECKS_SHELLS)
+\t:o IFUPDOWN(IFUPDOWN)
+\t:o NMETER(NMETER)
+\t:o MATCHPATHCON(MATCHPATHCON)
+\t:o VI(VI)
+\t:o SESTATUS(SESTATUS)
+\t:o SETFONT(SETFONT)
+\t:o LAST(LAST)
+\t:o ARPING(ARPING)
+\t:o SYNC(SYNC)
+\t:o FEATURE_TELNET_TTYPE(FEATURE_TELNET_TTYPE)
+\t:o FEATURE_TFTP_BLOCKSIZE(FEATURE_TFTP_BLOCKSIZE)
+\t:o RESTORECON(RESTORECON)
+\t:o INSTALL_APPLET_DONT(INSTALL_APPLET_DONT)
+\t:o WC(WC)
+\t:o FEATURE_MOUNT_FLAGS(FEATURE_MOUNT_FLAGS)
+\t:o SHA256SUM(SHA256SUM)
+\t:o FEATURE_TELNETD_INETD_WAIT(FEATURE_TELNETD_INETD_WAIT)
+\t:o FEATURE_ADDGROUP_LONG_OPTIONS(FEATURE_ADDGROUP_LONG_OPTIONS)
+\t:o FEATURE_DIFF_LONG_OPTIONS(FEATURE_DIFF_LONG_OPTIONS)
+\t:o FEATURE_PS_WIDE(FEATURE_PS_WIDE)
+\t:o FEATURE_START_STOP_DAEMON_FANCY(FEATURE_START_STOP_DAEMON_FANCY)
+\t:o FEATURE_LS_RECURSIVE(FEATURE_LS_RECURSIVE)
+\t:o FEATURE_GREP_FGREP_ALIAS(FEATURE_GREP_FGREP_ALIAS)
+\t:o TIME(TIME)
+\t:o FEATURE_IP_SHORT_FORMS(FEATURE_IP_SHORT_FORMS)
+\t:o CRYPTPW(CRYPTPW)
+\t:o FEATURE_MOUNT_HELPERS(FEATURE_MOUNT_HELPERS)
+\t:o BUNZIP2(BUNZIP2)
+\t:o HUSH_CASE(HUSH_CASE)
+\t:o SYSLOGD(SYSLOGD)
+\t:o FEATURE_INETD_SUPPORT_BUILTIN_ECHO(FEATURE_INETD_SUPPORT_BUILTIN_ECHO)
+\t:o GREP(GREP)
+\t:o SOFTLIMIT(SOFTLIMIT)
+\t:o FEATURE_2_4_MODULES(FEATURE_2_4_MODULES)
+\t:o FALSE(FALSE)
+\t:o FEATURE_VI_ASK_TERMINAL(FEATURE_VI_ASK_TERMINAL)
+\t:o FEATURE_IFUPDOWN_EXTERNAL_DHCP(FEATURE_IFUPDOWN_EXTERNAL_DHCP)
+\t:o FEATURE_SUID_CONFIG(FEATURE_SUID_CONFIG)
+\t:o FEATURE_WTMP(FEATURE_WTMP)
+\t:o XZ(XZ)
+\t:o CKSUM(CKSUM)
+\t:o FEATURE_SH_NOFORK(FEATURE_SH_NOFORK)
+\t:o FEATURE_TAR_OLDSUN_COMPATIBILITY(FEATURE_TAR_OLDSUN_COMPATIBILITY)
+\t:o FEATURE_CHCON_LONG_OPTIONS(FEATURE_CHCON_LONG_OPTIONS)
+\t:o LOGIN(LOGIN)
+\t:o IPCRM(IPCRM)
+\t:o FLASH_UNLOCK(FLASH_UNLOCK)
+\t:o FEATURE_SGI_LABEL(FEATURE_SGI_LABEL)
+\t:o FEATURE_FANCY_HEAD(FEATURE_FANCY_HEAD)
+\t:o FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED(FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED)
+\t:o SV_DEFAULT_SERVICE_DIR(SV_DEFAULT_SERVICE_DIR)
+\t:o FEATURE_EDITING_SAVEHISTORY(FEATURE_EDITING_SAVEHISTORY)
+\t:o VCONFIG(VCONFIG)
+\t:o SCRIPTREPLAY(SCRIPTREPLAY)
+\t:o FEATURE_CLEAN_UP(FEATURE_CLEAN_UP)
+\t:o FEATURE_INSMOD_TRY_MMAP(FEATURE_INSMOD_TRY_MMAP)
+\t:o FEATURE_BASH_IS_HUSH(FEATURE_BASH_IS_HUSH)
+\t:o FEATURE_INITRD(FEATURE_INITRD)
+\t:o FEATURE_ENV_LONG_OPTIONS(FEATURE_ENV_LONG_OPTIONS)
+\t:o FEATURE_HEXDUMP_REVERSE(FEATURE_HEXDUMP_REVERSE)
+\t:o FEATURE_FIND_LINKS(FEATURE_FIND_LINKS)
+\t:o CHAT(CHAT)
+\t:o LENGTH(LENGTH)
+\t:o FEATURE_MKSWAP_UUID(FEATURE_MKSWAP_UUID)
+\t:o FEATURE_IFCONFIG_BROADCAST_PLUS(FEATURE_IFCONFIG_BROADCAST_PLUS)
+\t:o EFENCE(EFENCE)
+\t:o FEATURE_HWCLOCK_LONG_OPTIONS(FEATURE_HWCLOCK_LONG_OPTIONS)
+\t:o FEATURE_MODPROBE_BLACKLIST(FEATURE_MODPROBE_BLACKLIST)
+\t:o FEATURE_CHAT_SWALLOW_OPTS(FEATURE_CHAT_SWALLOW_OPTS)
+\t:o FEATURE_SH_IS_HUSH(FEATURE_SH_IS_HUSH)
+\t:o MSH(MSH)
+\t:o FEATURE_FIND_USER(FEATURE_FIND_USER)
+\t:o FEATURE_UDHCPD_WRITE_LEASES_EARLY(FEATURE_UDHCPD_WRITE_LEASES_EARLY)
+\t:o FEATURE_CROND_CALL_SENDMAIL(FEATURE_CROND_CALL_SENDMAIL)
+\t:o FEATURE_BRCTL_SHOW(FEATURE_BRCTL_SHOW)
+\t:o FEATURE_AIX_LABEL(FEATURE_AIX_LABEL)
+\t:o KBD_MODE(KBD_MODE)
+\t:o FEATURE_VOLUMEID_SYSV(FEATURE_VOLUMEID_SYSV)
+\t:o MORE(MORE)
+\t:o TAC(TAC)
+\t:o UNXZ(UNXZ)
+\t:o KILL(KILL)
+\t:o CATV(CATV)
+\t:o FEATURE_CHAT_IMPLICIT_CR(FEATURE_CHAT_IMPLICIT_CR)
+\t:o INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt(INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt)
+\t:o FEATURE_INETD_SUPPORT_BUILTIN_DISCARD(FEATURE_INETD_SUPPORT_BUILTIN_DISCARD)
+\t:o FEATURE_CPIO_P(FEATURE_CPIO_P)
+\t:o TAR(TAR)
+\t:o FEATURE_CPIO_O(FEATURE_CPIO_O)
+\t:o ASH_CMDCMD(ASH_CMDCMD)
+\t:o DEBUG_PESSIMIZE(DEBUG_PESSIMIZE)
+\t:o HUSH_JOB(HUSH_JOB)
+\t:o RTCWAKE(RTCWAKE)
+\t:o UNICODE_NEUTRAL_TABLE(UNICODE_NEUTRAL_TABLE)
+\t:o FEATURE_LOADFONT_PSF2(FEATURE_LOADFONT_PSF2)
+\t:o FEATURE_FIND_MAXDEPTH(FEATURE_FIND_MAXDEPTH)
+\t:o FREERAMDISK(FREERAMDISK)
+\t:o FEATURE_TEE_USE_BLOCK_IO(FEATURE_TEE_USE_BLOCK_IO)
+\t:o MKSWAP(MKSWAP)
+\t:o FEATURE_PS_ADDITIONAL_COLUMNS(FEATURE_PS_ADDITIONAL_COLUMNS)
+\t:o HOSTID(HOSTID)
+\t:o FEATURE_TAR_OLDGNU_COMPATIBILITY(FEATURE_TAR_OLDGNU_COMPATIBILITY)
+\t:o RDATE(RDATE)
+\t:o RUNCON(RUNCON)
+\t:o CHPASSWD(CHPASSWD)
+\t:o LSMOD(LSMOD)
+\t:o CAL(CAL)
+\t:o MODPROBE(MODPROBE)
+\t:o IPROUTE(IPROUTE)
+\t:o LAST_SUPPORTED_WCHAR(LAST_SUPPORTED_WCHAR)
+\t:o FEATURE_EXTRA_QUIET(FEATURE_EXTRA_QUIET)
+\t:o LZOP_COMPR_HIGH(LZOP_COMPR_HIGH)
+\t:o PREFIX(PREFIX)
+\t:o UNICODE_USING_LOCALE(UNICODE_USING_LOCALE)
+\t:o CAT(CAT)
+\t:o INSTALL_SH_APPLET_HARDLINK(INSTALL_SH_APPLET_HARDLINK)
+\t:o FEATURE_IFCONFIG_HW(FEATURE_IFCONFIG_HW)
+\t:o FEATURE_UTMP(FEATURE_UTMP)
+\t:o HAVE_DOT_CONFIG(HAVE_DOT_CONFIG)
+\t:o FEATURE_ROTATE_LOGFILE(FEATURE_ROTATE_LOGFILE)
+\t:o FEATURE_FIND_PATH(FEATURE_FIND_PATH)
+\t:o FEATURE_RUNSVDIR_LOG(FEATURE_RUNSVDIR_LOG)
+\t:o FEATURE_DIFF_DIR(FEATURE_DIFF_DIR)
+\t:o FEATURE_SHADOWPASSWDS(FEATURE_SHADOWPASSWDS)
+\t:o LOGIN_SCRIPTS(LOGIN_SCRIPTS)
+\t:o SLATTACH(SLATTACH)
+\t:o FEATURE_AR_CREATE(FEATURE_AR_CREATE)
+\t:o FEATURE_DD_SIGNAL_HANDLING(FEATURE_DD_SIGNAL_HANDLING)
+\t:o FEATURE_SYSLOG(FEATURE_SYSLOG)
+\t:o TOUCH(TOUCH)
+\t:o FSYNC(FSYNC)
+\t:o FEATURE_MOUNT_LABEL(FEATURE_MOUNT_LABEL)
+\t:o FEATURE_SUID_CONFIG_QUIET(FEATURE_SUID_CONFIG_QUIET)
+\t:o ENVUIDGID(ENVUIDGID)
+\t:o FEATURE_VI_WIN_RESIZE(FEATURE_VI_WIN_RESIZE)
+\t:o ASH_RANDOM_SUPPORT(ASH_RANDOM_SUPPORT)
+\t:o DOS2UNIX(DOS2UNIX)
+\t:o IPCS(IPCS)
+\t:o TEE(TEE)
+\t:o FEATURE_HTTPD_USE_SENDFILE(FEATURE_HTTPD_USE_SENDFILE)
+\t:o RUNSVDIR(RUNSVDIR)
+\t:o FEATURE_USE_TERMIOS(FEATURE_USE_TERMIOS)
+\t:o FEATURE_LESS_WINCH(FEATURE_LESS_WINCH)
+\t:o CHPST(CHPST)
+\t:o CROSS_COMPILER_PREFIX(CROSS_COMPILER_PREFIX)
+\t:o FEATURE_EDITING(FEATURE_EDITING)
+\t:o HUSH(HUSH)
+\t:o SVLOGD(SVLOGD)
+\t:o IFENSLAVE(IFENSLAVE)
+\t:o ASH_BUILTIN_ECHO(ASH_BUILTIN_ECHO)
+\t:o SETSEBOOL(SETSEBOOL)
+\t:o FEATURE_MAKEDEVS_TABLE(FEATURE_MAKEDEVS_TABLE)
+\t:o FEATURE_HTTPD_ERROR_PAGES(FEATURE_HTTPD_ERROR_PAGES)
+\t:o FEATURE_VOLUMEID_LINUXRAID(FEATURE_VOLUMEID_LINUXRAID)
+\t:o PIDOF(PIDOF)
+\t:o FEATURE_KILL_DELAY(FEATURE_KILL_DELAY)
+\t:o NSLOOKUP(NSLOOKUP)
+\t:o FEATURE_XARGS_SUPPORT_QUOTES(FEATURE_XARGS_SUPPORT_QUOTES)
+\t:o FEATURE_IPCALC_LONG_OPTIONS(FEATURE_IPCALC_LONG_OPTIONS)
+\t:o FEATURE_PIDOF_OMIT(FEATURE_PIDOF_OMIT)
+\t:o GUNZIP(GUNZIP)
+\t:o FEATURE_TR_CLASSES(FEATURE_TR_CLASSES)
+\t:o FOLD(FOLD)
+\t:o UNICODE_PRESERVE_BROKEN(UNICODE_PRESERVE_BROKEN)
+\t:o ASH_BASH_COMPAT(ASH_BASH_COMPAT)
+\t:o DIFF(DIFF)
+\t:o FEATURE_FDISK_WRITABLE(FEATURE_FDISK_WRITABLE)
+\t:o MKNOD(MKNOD)
+\t:o SHOWKEY(SHOWKEY)
+\t:o LOCALE_SUPPORT(LOCALE_SUPPORT)
+\t:o FEATURE_SEAMLESS_BZ2(FEATURE_SEAMLESS_BZ2)
+\t:o KLOGD(KLOGD)
+\t:o BEEP(BEEP)
+\t:o GETTY(GETTY)
+\t:o FSCK_MINIX(FSCK_MINIX)
+\t:o FEATURE_GREP_CONTEXT(FEATURE_GREP_CONTEXT)
+\t:o NAMEIF(NAMEIF)
+\t:o FEATURE_HTTPD_SETUID(FEATURE_HTTPD_SETUID)
+\t:o FEATURE_LZMA_FAST(FEATURE_LZMA_FAST)
+\t:o FEATURE_MAKEDEVS_TABLE_alt(FEATURE_MAKEDEVS_TABLE_alt)
+\t:o EXTRA_CFLAGS(EXTRA_CFLAGS)
+\t:o FIRST_SYSTEM_ID(FIRST_SYSTEM_ID)
+\t:o FEATURE_VOLUMEID_OCFS2(FEATURE_VOLUMEID_OCFS2)
+\t:o FEATURE_BASH_IS_HUSH_alt(FEATURE_BASH_IS_HUSH_alt)
+\t:o PLATFORM_LINUX(PLATFORM_LINUX)
+\t:o UNIX2DOS(UNIX2DOS)
+\t:o FEATURE_XARGS_SUPPORT_CONFIRMATION(FEATURE_XARGS_SUPPORT_CONFIRMATION)
+\t:o FEATURE_REFORMIME_COMPAT(FEATURE_REFORMIME_COMPAT)
+\t:o FEATURE_INIT_SYSLOG(FEATURE_INIT_SYSLOG)
+\t:o FEATURE_AR_LONG_FILENAMES(FEATURE_AR_LONG_FILENAMES)
+\t:o EXPR_MATH_SUPPORT_64(EXPR_MATH_SUPPORT_64)
+\t:o FEATURE_INSTALLER(FEATURE_INSTALLER)
+\t:o FEATURE_FIND_MMIN(FEATURE_FIND_MMIN)
+\t:o FEATURE_FIND_PRINT0(FEATURE_FIND_PRINT0)
+\t:o DESKTOP(DESKTOP)
+\t:o DMALLOC(DMALLOC)
+\t:o READLINK(READLINK)
+\t:o TAIL(TAIL)
+\t:o RFKILL(RFKILL)
+\t:o HUSH_TICK(HUSH_TICK)
+\t:o PAM(PAM)
+\t:o ASH_BUILTIN_PRINTF(ASH_BUILTIN_PRINTF)
+\t:o REV(REV)
+\t:o FEATURE_FIND_PERM(FEATURE_FIND_PERM)
+\t:o FEATURE_USERNAME_COMPLETION(FEATURE_USERNAME_COMPLETION)
+\t:o IONICE(IONICE)
+\t:o UNICODE_COMBINING_WCHARS(UNICODE_COMBINING_WCHARS)
+\t:o FEATURE_GREP_EGREP_ALIAS(FEATURE_GREP_EGREP_ALIAS)
+\t:o FEATURE_DD_IBS_OBS(FEATURE_DD_IBS_OBS)
+\t:o FEATURE_IP_ADDRESS(FEATURE_IP_ADDRESS)
+\t:o SELINUXENABLED(SELINUXENABLED)
+\t:o FEATURE_LAST_SMALL(FEATURE_LAST_SMALL)
+\t:o FEATURE_FIND_DELETE(FEATURE_FIND_DELETE)
+\t:o CROND(CROND)
+\t:o HTTPD(HTTPD)
+\t:o PATCH(PATCH)
+\t:o FEATURE_FIND_CONTEXT(FEATURE_FIND_CONTEXT)
+\t:o FEATURE_FTPGETPUT_LONG_OPTIONS(FEATURE_FTPGETPUT_LONG_OPTIONS)
+\t:o UNAME(UNAME)
+\t:o FEATURE_PREFER_IPV4_ADDRESS(FEATURE_PREFER_IPV4_ADDRESS)
+\t:o TEST(TEST)
+\t:o FEATURE_BASH_IS_NONE(FEATURE_BASH_IS_NONE)
+\t:o IPLINK(IPLINK)
+\t:o STRINGS(STRINGS)
+\t:o FEATURE_UNIX_LOCAL(FEATURE_UNIX_LOCAL)
+\t:o ENV(ENV)
+\t:o FEATURE_FIND_DEPTH(FEATURE_FIND_DEPTH)
+\t:o FEATURE_ACPID_COMPAT(FEATURE_ACPID_COMPAT)
+\t:o FEATURE_BEEP_LENGTH_MS(FEATURE_BEEP_LENGTH_MS)
+\t:o IFPLUGD(IFPLUGD)
+\t:o HUSH_EXPORT_N(HUSH_EXPORT_N)
+\t:o FEATURE_VERBOSE_USAGE(FEATURE_VERBOSE_USAGE)
+\t:o FEATURE_VERBOSE_CP_MESSAGE(FEATURE_VERBOSE_CP_MESSAGE)
+\t:o UUENCODE(UUENCODE)
+\t:o FEATURE_HTTPD_BASIC_AUTH(FEATURE_HTTPD_BASIC_AUTH)
+\t:o FEATURE_INSMOD_KSYMOOPS_SYMBOLS(FEATURE_INSMOD_KSYMOOPS_SYMBOLS)
+\t:o FEATURE_DATE_NANO(FEATURE_DATE_NANO)
+\t:o FEATURE_IP_ROUTE(FEATURE_IP_ROUTE)
+\t:o RMDIR(RMDIR)
+\t:o FEATURE_NTPD_SERVER(FEATURE_NTPD_SERVER)
+\t:o FEATURE_IP_RARE_PROTOCOLS(FEATURE_IP_RARE_PROTOCOLS)
+\t:o MAKEDEVS(MAKEDEVS)
+\t:o FEATURE_MODUTILS_ALIAS(FEATURE_MODUTILS_ALIAS)
+\t:o FEATURE_SETFILES_CHECK_OPTION(FEATURE_SETFILES_CHECK_OPTION)
+\t:o USE_BB_SHADOW(USE_BB_SHADOW)
+\t:o FEATURE_IFCONFIG_SLIP(FEATURE_IFCONFIG_SLIP)
+\t:o FEATURE_INSMOD_LOAD_MAP_FULL(FEATURE_INSMOD_LOAD_MAP_FULL)
+\t:o FEATURE_PASSWD_WEAK_CHECK(FEATURE_PASSWD_WEAK_CHECK)
+\t:o IFUPDOWN_UDHCPC_CMD_OPTIONS(IFUPDOWN_UDHCPC_CMD_OPTIONS)
+\t:o CHCON(CHCON)
+\t:o FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE)
+\t:o FUSER(FUSER)
+\t:o FEATURE_SH_IS_ASH(FEATURE_SH_IS_ASH)
+\t:o NO_DEBUG_LIB(NO_DEBUG_LIB)
+\t:o FEATURE_HUMAN_READABLE(FEATURE_HUMAN_READABLE)
+\t:o WHICH(WHICH)
+\t:o FEATURE_FAST_TOP(FEATURE_FAST_TOP)
+\t:o FEATURE_SEAMLESS_XZ(FEATURE_SEAMLESS_XZ)
+\t:o CMP(CMP)
+\t:o FEATURE_UDHCP_RFC3397(FEATURE_UDHCP_RFC3397)
+\t:o WATCHDOG(WATCHDOG)
+\t:o FEATURE_VOLUMEID_NTFS(FEATURE_VOLUMEID_NTFS)
+\t:o INIT(INIT)
+\t:o INSTALL_APPLET_DONT_alt(INSTALL_APPLET_DONT_alt)
+\t:o KILLALL(KILLALL)
+\t:o TOP(TOP)
+\t:o FEATURE_IFUPDOWN_IPV6(FEATURE_IFUPDOWN_IPV6)
+\t:o HWCLOCK(HWCLOCK)
+\t:o GETSEBOOL(GETSEBOOL)
+\t:o FEATURE_IFUPDOWN_IPV4(FEATURE_IFUPDOWN_IPV4)
+\t:o TIMEOUT(TIMEOUT)
+\t:o FEATURE_DMESG_PRETTY(FEATURE_DMESG_PRETTY)
+\t:o FEATURE_POPMAILDIR_DELIVERY(FEATURE_POPMAILDIR_DELIVERY)
+\t:o FEATURE_CHAT_CLR_ABORT(FEATURE_CHAT_CLR_ABORT)
+\t:o EXTRA_COMPAT(EXTRA_COMPAT)
+\t:o FEATURE_HWCLOCK_ADJTIME_FHS(FEATURE_HWCLOCK_ADJTIME_FHS)
+\t:o FEATURE_UMOUNT_ALL(FEATURE_UMOUNT_ALL)
+\t:o INSMOD(INSMOD)
+\t:o FEATURE_MV_LONG_OPTIONS(FEATURE_MV_LONG_OPTIONS)
+\t:o FEATURE_DD_THIRD_STATUS_LINE(FEATURE_DD_THIRD_STATUS_LINE)
+\t:o LOSETUP(LOSETUP)
+\t:o FEATURE_TFTP_PUT(FEATURE_TFTP_PUT)
+\t:o IOSTAT(IOSTAT)
+\t:o FEATURE_TOP_CPU_GLOBAL_PERCENTS(FEATURE_TOP_CPU_GLOBAL_PERCENTS)
+\t:o FEATURE_START_STOP_DAEMON_LONG_OPTIONS(FEATURE_START_STOP_DAEMON_LONG_OPTIONS)
+\t:o PIE(PIE)
+\t:o DHCPD_LEASES_FILE(DHCPD_LEASES_FILE)
+\t:o FEATURE_KLOGD_KLOGCTL(FEATURE_KLOGD_KLOGCTL)
+\t:o CHRT(CHRT)
+\t:o FEATURE_VOLUMEID_XFS(FEATURE_VOLUMEID_XFS)
+\t:o FEATURE_HDPARM_HDIO_TRISTATE_HWIF(FEATURE_HDPARM_HDIO_TRISTATE_HWIF)
+\t:o TELNETD(TELNETD)
+\t:o MODINFO(MODINFO)
+\t:o FEATURE_MAKEDEVS_LEAF(FEATURE_MAKEDEVS_LEAF)
+\t:o FEATURE_IPC_SYSLOG_BUFFER_SIZE(FEATURE_IPC_SYSLOG_BUFFER_SIZE)
+\t:o UBIDETACH(UBIDETACH)
+\t:o FEATURE_SECURETTY(FEATURE_SECURETTY)
+\t:o CHGRP(CHGRP)
+\t:o DEVFSD_VERBOSE(DEVFSD_VERBOSE)
+\t:o FEATURE_NETSTAT_PRG(FEATURE_NETSTAT_PRG)
+\t:o FIND(FIND)
+\t:o LSPCI(LSPCI)
+\t:o FEATURE_HDPARM_HDIO_GETSET_DMA(FEATURE_HDPARM_HDIO_GETSET_DMA)
+\t:o TRUE(TRUE)
+\t:o FEATURE_LESS_MAXLINES(FEATURE_LESS_MAXLINES)
+\t:o UMOUNT(UMOUNT)
+\t:o REALPATH(REALPATH)
+\t:o KILLALL5(KILLALL5)
+\t:o SCRIPT(SCRIPT)
+\t:o SORT(SORT)
+\t:o BBCONFIG(BBCONFIG)
+\t:o IPRULE(IPRULE)
+\t:o VERBOSE_RESOLUTION_ERRORS(VERBOSE_RESOLUTION_ERRORS)
+\t:o HEAD(HEAD)
+\t:o VOLNAME(VOLNAME)
+\t:o MESG(MESG)
+\t:o MD5_SIZE_VS_SPEED(MD5_SIZE_VS_SPEED)
+\t:o FEATURE_INIT_SCTTY(FEATURE_INIT_SCTTY)
+\t:o RPM(RPM)
+\t:o TTY(TTY)
+\t:o BLKID(BLKID)
+\t:o FEATURE_VI_OPTIMIZE_CURSOR(FEATURE_VI_OPTIMIZE_CURSOR)
+\t:o FEATURE_BUFFERS_GO_IN_BSS(FEATURE_BUFFERS_GO_IN_BSS)
+\t:o OPENVT(OPENVT)
+\t:o FEATURE_EDITING_HISTORY(FEATURE_EDITING_HISTORY)
+\t:o HUSH_INTERACTIVE(HUSH_INTERACTIVE)
+\t:o FEATURE_SHARED_BUSYBOX(FEATURE_SHARED_BUSYBOX)
+\t:o DEBUG(DEBUG)
+\t:o FEATURE_TEST_64(FEATURE_TEST_64)
+\t:o FEATURE_INIT_COREDUMPS(FEATURE_INIT_COREDUMPS)
+\t:o FEATURE_TAR_SELINUX(FEATURE_TAR_SELINUX)
+\t:o FEATURE_INETD_RPC(FEATURE_INETD_RPC)
+\t:o NETSTAT(NETSTAT)
+\t:o DEVFSD_FG_NP(DEVFSD_FG_NP)
+\t:o FEATURE_VI_COLON(FEATURE_VI_COLON)
+\t:o CHVT(CHVT)
+\t:o CLEAR(CLEAR)
+\t:o FBSET(FBSET)
+\t:o FEATURE_RUN_PARTS_FANCY(FEATURE_RUN_PARTS_FANCY)
+\t:o INSTALL(INSTALL)
+\t:o FEATURE_SWAPON_PRI(FEATURE_SWAPON_PRI)
+\t:o FEATURE_IFUPDOWN_IP_BUILTIN(FEATURE_IFUPDOWN_IP_BUILTIN)
+\t:o FEATURE_TAR_UNAME_GNAME(FEATURE_TAR_UNAME_GNAME)
+\t:o FEATURE_VI_MAX_LEN(FEATURE_VI_MAX_LEN)
+\t:o SETENFORCE(SETENFORCE)
+\t:o FEATURE_CHAT_VAR_ABORT_LEN(FEATURE_CHAT_VAR_ABORT_LEN)
+\t:o SWITCH_ROOT(SWITCH_ROOT)
+\t:o FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ(FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ)
+\t:o FEATURE_USE_INITTAB(FEATURE_USE_INITTAB)
+\t:o FEATURE_VOLUMEID_ISO9660(FEATURE_VOLUMEID_ISO9660)
+\t:o NANDDUMP(NANDDUMP)
+\t:o MOUNTPOINT(MOUNTPOINT)
+\t:o INSTALL_SH_APPLET_SYMLINK(INSTALL_SH_APPLET_SYMLINK)
+\t:o LFS(LFS)
+\t:o FDFLUSH(FDFLUSH)
+\t:o FEATURE_SH_IS_NONE(FEATURE_SH_IS_NONE)
+\t:o SULOGIN(SULOGIN)
+\t:o ASH_EXPAND_PRMT(ASH_EXPAND_PRMT)
+\t:o CUT(CUT)
+\t:o FEATURE_RMDIR_LONG_OPTIONS(FEATURE_RMDIR_LONG_OPTIONS)
+\t:o FEATURE_TAR_NOPRESERVE_TIME(FEATURE_TAR_NOPRESERVE_TIME)
+\t:o CONSPY(CONSPY)
+\t:o FEATURE_FIND_EXEC(FEATURE_FIND_EXEC)
+\t:o FEATURE_CROND_D(FEATURE_CROND_D)
+\t:o IFUPDOWN_IFSTATE_PATH(IFUPDOWN_IFSTATE_PATH)
+\t:o FEATURE_TR_EQUIV(FEATURE_TR_EQUIV)
+\t:o FEATURE_SETFONT_TEXTUAL_MAP(FEATURE_SETFONT_TEXTUAL_MAP)
+\t:o SUBST_WCHAR(SUBST_WCHAR)
+\t:o MKFS_VFAT(MKFS_VFAT)
+\t:o FEATURE_FIND_XDEV(FEATURE_FIND_XDEV)
+\t:o FEATURE_MOUNT_LOOP_CREATE(FEATURE_MOUNT_LOOP_CREATE)
+\t:o FEATURE_RUN_PARTS_LONG_OPTIONS(FEATURE_RUN_PARTS_LONG_OPTIONS)
+\t:o ZCIP(ZCIP)
+\t:o FEATURE_HTTPD_PROXY(FEATURE_HTTPD_PROXY)
+\t:o FEATURE_BUFFERS_GO_ON_STACK(FEATURE_BUFFERS_GO_ON_STACK)
+\t:o FEATURE_IPV6(FEATURE_IPV6)
+\t:o ARP(ARP)
+\t:o FEATURE_TOP_SMP_CPU(FEATURE_TOP_SMP_CPU)
+\t:o USLEEP(USLEEP)
+\t:o LOADKMAP(LOADKMAP)
+\t:o RDEV(RDEV)
+\t:o FEATURE_MDEV_CONF(FEATURE_MDEV_CONF)
+\t:o FREE(FREE)
+\t:o SPLIT(SPLIT)
+\t:o FEATURE_PIDOF_SINGLE(FEATURE_PIDOF_SINGLE)
+\t:o ASH(ASH)
+\t:o USE_PORTABLE_CODE(USE_PORTABLE_CODE)
+\t:o FEATURE_SYSLOGD_DUP(FEATURE_SYSLOGD_DUP)
+\t:o FEATURE_LESS_FLAGS(FEATURE_LESS_FLAGS)
+\t:o MKFS_MINIX(MKFS_MINIX)
+\t:o FEATURE_VOLUMEID_EXT(FEATURE_VOLUMEID_EXT)
+\t:o VLOCK(VLOCK)
+\t:o DEVMEM(DEVMEM)
+\t:o TELINIT_PATH(TELINIT_PATH)
+\t:o RMMOD(RMMOD)
+\t:o DEVFSD_MODLOAD(DEVFSD_MODLOAD)
+\t:o FEATURE_COMPRESS_BBCONFIG(FEATURE_COMPRESS_BBCONFIG)
+\t:o FEATURE_LS_TIMESTAMPS(FEATURE_LS_TIMESTAMPS)
+\t:o FEATURE_EXPAND_LONG_OPTIONS(FEATURE_EXPAND_LONG_OPTIONS)
+\t:o FEATURE_HTTPD_GZIP(FEATURE_HTTPD_GZIP)
+\t:o MKDIR(MKDIR)
+\t:o FEATURE_IFUPDOWN_MAPPING(FEATURE_IFUPDOWN_MAPPING)
+\t:o FEATURE_FIND_MTIME(FEATURE_FIND_MTIME)
+\t:o FEATURE_IPC_SYSLOG(FEATURE_IPC_SYSLOG)
+\t:o STAT(STAT)
+\t:o FEATURE_AWK_LIBM(FEATURE_AWK_LIBM)
+\t:o ROUTE(ROUTE)
+\t:o GETOPT(GETOPT)
+\t:o CRONTAB(CRONTAB)
+\t:o FTPGET(FTPGET)
+\t:o FEATURE_SETCONSOLE_LONG_OPTIONS(FEATURE_SETCONSOLE_LONG_OPTIONS)
+\t:o FEATURE_HTTPD_CGI(FEATURE_HTTPD_CGI)
+\t:o FDFORMAT(FDFORMAT)
+\t:o FEATURE_FANCY_ECHO(FEATURE_FANCY_ECHO)
+\t:o FEATURE_EDITING_ASK_TERMINAL(FEATURE_EDITING_ASK_TERMINAL)
+\t:o FEATURE_MOUNT_CIFS(FEATURE_MOUNT_CIFS)
+\t:o FEATURE_LESS_DASHCMD(FEATURE_LESS_DASHCMD)
+\t:o RUNSV(RUNSV)
+\t:o DEALLOCVT(DEALLOCVT)
+\t:o UUDECODE(UUDECODE)
+\t:o ASH_BUILTIN_TEST(ASH_BUILTIN_TEST)
+\t:o SETUIDGID(SETUIDGID)
+\t:o BUSYBOX_EXEC_PATH(BUSYBOX_EXEC_PATH)
+\t:o ETHER_WAKE(ETHER_WAKE)
+\t:o ENVDIR(ENVDIR)
+\t:o TTYSIZE(TTYSIZE)
+\t:o BUILD_LIBBUSYBOX(BUILD_LIBBUSYBOX)
+\t:o FEATURE_TELNET_AUTOLOGIN(FEATURE_TELNET_AUTOLOGIN)
+\t:o SETARCH(SETARCH)
+\t:o FEATURE_DEL_USER_FROM_GROUP(FEATURE_DEL_USER_FROM_GROUP)
+\t:o NC_SERVER(NC_SERVER)
+\t:o FEATURE_CHOWN_LONG_OPTIONS(FEATURE_CHOWN_LONG_OPTIONS)
+\t:o YES(YES)
+\t:o POPMAILDIR(POPMAILDIR)
+\t:o FEATURE_SUN_LABEL(FEATURE_SUN_LABEL)
+\t:o DPKG(DPKG)
+\t:o PMAP(PMAP)
+\t:o DELGROUP(DELGROUP)
+\t:o USE_BB_CRYPT(USE_BB_CRYPT)
+\t:o FEATURE_DEVPTS(FEATURE_DEVPTS)
+\t:o FEATURE_VOLUMEID_JFS(FEATURE_VOLUMEID_JFS)
+\t:o REFORMIME(REFORMIME)
+\t:o TRACEROUTE6(TRACEROUTE6)
+\t:o DUMPLEASES(DUMPLEASES)
+\t:o USE_BB_CRYPT_SHA(USE_BB_CRYPT_SHA)
+\t:o AWK(AWK)
+\t:o FEATURE_SEAMLESS_Z(FEATURE_SEAMLESS_Z)
+\t:o FEATURE_RESIZE_PRINT(FEATURE_RESIZE_PRINT)
+\t:o HUSH_HELP(HUSH_HELP)
+\t:o FEATURE_VI_USE_SIGNALS(FEATURE_VI_USE_SIGNALS)
+\t:o HUSH_BRACE_EXPANSION(HUSH_BRACE_EXPANSION)
+\t:o FAKEIDENTD(FAKEIDENTD)
+\t:o FEATURE_MTAB_SUPPORT(FEATURE_MTAB_SUPPORT)
+\t:o FEATURE_PS_TIME(FEATURE_PS_TIME)
+\t:o IPCALC(IPCALC)
+\t:o SH_MATH_SUPPORT(SH_MATH_SUPPORT)
+\t:o ASH_ALIAS(ASH_ALIAS)
+\t:o FEATURE_HAVE_RPC(FEATURE_HAVE_RPC)
+\t:o FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME(FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME)
+\t:o UDHCP_DEBUG(UDHCP_DEBUG)
+\t:o DEVFSD(DEVFSD)
+\t:o FEATURE_OSF_LABEL(FEATURE_OSF_LABEL)
+\t:o SHOW_USAGE(SHOW_USAGE)
+\t:o FEATURE_MOUNT_FAKE(FEATURE_MOUNT_FAKE)
+\t:o FEATURE_UDHCPC_ARPING(FEATURE_UDHCPC_ARPING)
+\t:o FEATURE_FTPD_ACCEPT_BROKEN_LIST(FEATURE_FTPD_ACCEPT_BROKEN_LIST)
+\t:o FEATURE_TAR_FROM(FEATURE_TAR_FROM)
+\t:o FEATURE_BEEP_FREQ(FEATURE_BEEP_FREQ)
+\t:o ADDGROUP(ADDGROUP)
+\t:o COMM(COMM)
+\t:o FEATURE_LSMOD_PRETTY_2_6_OUTPUT(FEATURE_LSMOD_PRETTY_2_6_OUTPUT)
+\t:o FEATURE_PS_UNUSUAL_SYSTEMS(FEATURE_PS_UNUSUAL_SYSTEMS)
+\t:o FEATURE_TAR_LONG_OPTIONS(FEATURE_TAR_LONG_OPTIONS)
+\t:o PWD(PWD)
+\t:o IPTUNNEL(IPTUNNEL)
+\t:o FEATURE_NON_POSIX_CP(FEATURE_NON_POSIX_CP)
+\t:o PKILL(PKILL)
+\t:o FEATURE_VI_SETOPTS(FEATURE_VI_SETOPTS)
+\t:o FEATURE_GPT_LABEL(FEATURE_GPT_LABEL)
+\t:o FEATURE_GETOPT_LONG(FEATURE_GETOPT_LONG)
+\t:o CHOWN(CHOWN)
+\t:o FEATURE_EDITING_FANCY_PROMPT(FEATURE_EDITING_FANCY_PROMPT)
+\t:o FBSPLASH(FBSPLASH)
+\t:o FEATURE_INSTALL_LONG_OPTIONS(FEATURE_INSTALL_LONG_OPTIONS)
+\t:o HUSH_LOOPS(HUSH_LOOPS)
+\t:o LPD(LPD)
+\t:o FEATURE_VI_SET(FEATURE_VI_SET)
+\t:o FEATURE_VOLUMEID_BTRFS(FEATURE_VOLUMEID_BTRFS)
+\t:o FLASH_LOCK(FLASH_LOCK)
+\t:o DEFAULT_DEPMOD_FILE(DEFAULT_DEPMOD_FILE)
+\t:o LPQ(LPQ)
+\t:o FEATURE_PREFER_APPLETS(FEATURE_PREFER_APPLETS)
+\t:o LPR(LPR)
+\t:o RESIZE(RESIZE)
+\t:o FEATURE_VOLUMEID_ROMFS(FEATURE_VOLUMEID_ROMFS)
+\t:o WGET(WGET)
+\t:o FEATURE_SEAMLESS_GZ(FEATURE_SEAMLESS_GZ)
+\t:o ADJTIMEX(ADJTIMEX)
+\t:o FEATURE_WGET_LONG_OPTIONS(FEATURE_WGET_LONG_OPTIONS)
+\t:o EJECT(EJECT)
+\t:o BZIP2(BZIP2)
+\t:o ASH_GETOPTS(ASH_GETOPTS)
+\t:o BLOCKDEV(BLOCKDEV)
+\t:o MICROCOM(MICROCOM)
+\t:o FTPD(FTPD)
+\t:o FEATURE_FANCY_SLEEP(FEATURE_FANCY_SLEEP)
+\t:o DEPMOD(DEPMOD)
+\t:o FEATURE_HTTPD_ENCODE_URL_STR(FEATURE_HTTPD_ENCODE_URL_STR)
+\t:o FEATURE_TAR_GNU_EXTENSIONS(FEATURE_TAR_GNU_EXTENSIONS)
+\t:o FEATURE_WGET_STATUSBAR(FEATURE_WGET_STATUSBAR)
+\t:o FEATURE_CHECK_TAINTED_MODULE(FEATURE_CHECK_TAINTED_MODULE)
+\t:o FEATURE_FIND_NOT(FEATURE_FIND_NOT)
+\t:o FEATURE_TRACEROUTE_SOURCE_ROUTE(FEATURE_TRACEROUTE_SOURCE_ROUTE)
+\t:o LONG_OPTS(LONG_OPTS)
+\t:o FEATURE_WGET_AUTHENTICATION(FEATURE_WGET_AUTHENTICATION)
+\t:o NICE(NICE)
+\t:o FEATURE_MKDIR_LONG_OPTIONS(FEATURE_MKDIR_LONG_OPTIONS)
+\t:o FEATURE_LS_SORTFILES(FEATURE_LS_SORTFILES)
+\t:o FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN(FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN)
+\t:o LZMA(LZMA)
+\t:o FEATURE_INSMOD_LOAD_MAP(FEATURE_INSMOD_LOAD_MAP)
+\t:o FEATURE_UNEXPAND_LONG_OPTIONS(FEATURE_UNEXPAND_LONG_OPTIONS)
+\t:o FEATURE_IFCONFIG_STATUS(FEATURE_IFCONFIG_STATUS)
+\t:o FEATURE_TOPMEM(FEATURE_TOPMEM)
+\t:o INSTALL_APPLET_HARDLINKS(INSTALL_APPLET_HARDLINKS)
+\t:o MKFS_REISER(MKFS_REISER)
+\t:o CHMOD(CHMOD)
+\t:o RUN_PARTS(RUN_PARTS)
+\t:o FEATURE_FIND_SIZE(FEATURE_FIND_SIZE)
+\t:o INSTALL_NO_USR(INSTALL_NO_USR)
+\t:o WERROR(WERROR)
+\t:o MOUNT(MOUNT)
+\t:o INSTALL_APPLET_SYMLINKS(INSTALL_APPLET_SYMLINKS)
+\t:o WHO(WHO)
+\t:o FEATURE_MDEV_EXEC(FEATURE_MDEV_EXEC)
+\t:o FEATURE_MOUNT_FSTAB(FEATURE_MOUNT_FSTAB)
+\t:o PIPE_PROGRESS(PIPE_PROGRESS)
+\t:o FEATURE_REMOTE_LOG(FEATURE_REMOTE_LOG)
+\t:o PGREP(PGREP)
+\t:o UNICODE_SUPPORT(UNICODE_SUPPORT)
+\t:o DATE(DATE)
+\t:o FEATURE_ETC_NETWORKS(FEATURE_ETC_NETWORKS)
+\t:o FEATURE_SYSLOGD_READ_BUFFER_SIZE(FEATURE_SYSLOGD_READ_BUFFER_SIZE)
+\t:o FDISK_SUPPORT_LARGE_DISKS(FDISK_SUPPORT_LARGE_DISKS)
+\t:o TASKSET(TASKSET)
+\t:o FEATURE_TASKSET_FANCY(FEATURE_TASKSET_FANCY)
+\t:o LOGGER(LOGGER)
+\t:o FEATURE_HDPARM_HDIO_DRIVE_RESET(FEATURE_HDPARM_HDIO_DRIVE_RESET)
+\t:o FEATURE_COPYBUF_KB(FEATURE_COPYBUF_KB)
+\t:o FEATURE_PRESERVE_HARDLINKS(FEATURE_PRESERVE_HARDLINKS)
+\t:o SHA1SUM(SHA1SUM)
+\t:o DHCPRELAY(DHCPRELAY)
+\t:o LZOP(LZOP)
+\t:o FEATURE_CHECK_NAMES(FEATURE_CHECK_NAMES)
+\t:o RENICE(RENICE)
+\t:o FEATURE_HDPARM_HDIO_SCAN_HWIF(FEATURE_HDPARM_HDIO_SCAN_HWIF)
+\t:o FEATURE_PIDFILE(FEATURE_PIDFILE)
+\t:o FEATURE_IFUPDOWN_IP(FEATURE_IFUPDOWN_IP)
+\t:o DMESG(DMESG)
+\t:o ASH_JOB_CONTROL(ASH_JOB_CONTROL)
+\t:o UDHCPD(UDHCPD)
+\t:o FEATURE_MOUNT_LOOP(FEATURE_MOUNT_LOOP)
+\t:o UDHCPC(UDHCPC)
+\t:o FEATURE_LESS_BRACKETS(FEATURE_LESS_BRACKETS)
+\t:o FINDFS(FINDFS)
+\t:o FEATURE_FDISK_ADVANCED(FEATURE_FDISK_ADVANCED)
+\t:o POWERTOP(POWERTOP)
+\t:o FEATURE_LS_COLOR(FEATURE_LS_COLOR)
+\t:o FEATURE_TAR_CREATE(FEATURE_TAR_CREATE)
+\t:o FEATURE_BRCTL_FANCY(FEATURE_BRCTL_FANCY)
+\t:o HUSH_RANDOM_SUPPORT(HUSH_RANDOM_SUPPORT)
+\t:o UDHCPC_SLACK_FOR_BUGGY_SERVERS(UDHCPC_SLACK_FOR_BUGGY_SERVERS)
+\t:o FEATURE_CHAT_NOFAIL(FEATURE_CHAT_NOFAIL)
+\t:o UDPSVD(UDPSVD)
+\t:o NOHUP(NOHUP)
+\t:o FEATURE_FANCY_PING(FEATURE_FANCY_PING)
+\t:o FEATURE_DU_DEFAULT_BLOCKSIZE_1K(FEATURE_DU_DEFAULT_BLOCKSIZE_1K)
+\t:o FEATURE_NETSTAT_WIDE(FEATURE_NETSTAT_WIDE)
+\t:o FEATURE_CHECK_UNICODE_IN_ENV(FEATURE_CHECK_UNICODE_IN_ENV)
+
+
+C1:root
+C2:STATIC or ~PIE
+C3:HEXDUMP or ~FEATURE_HEXDUMP_REVERSE
+C4:HEXDUMP or ~HD
+C5:EXPAND or ~FEATURE_EXPAND_LONG_OPTIONS
+C6:HDPARM or ~FEATURE_HDPARM_HDIO_TRISTATE_HWIF
+C7:HDPARM or ~FEATURE_HDPARM_GET_IDENTITY
+C8:HDPARM or ~FEATURE_HDPARM_HDIO_SCAN_HWIF
+C9:HDPARM or ~FEATURE_HDPARM_HDIO_GETSET_DMA
+C10:HDPARM or ~FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
+C11:HDPARM or ~FEATURE_HDPARM_HDIO_DRIVE_RESET
+C12:AR or ~FEATURE_AR_LONG_FILENAMES
+C13:AR or ~FEATURE_AR_CREATE
+C14:SETFILES or ~FEATURE_SETFILES_CHECK_OPTION
+C15:HUSH_FUNCTIONS or ~HUSH_LOCAL
+C16:HALT or ~FEATURE_CALL_TELINIT
+C17:BRCTL or ~FEATURE_BRCTL_FANCY
+C18:CP or ~FEATURE_CP_LONG_OPTIONS
+C19:DC or ~FEATURE_DC_LIBM
+C20:DD or ~FEATURE_DD_IBS_OBS
+C21:DD or ~FEATURE_DD_SIGNAL_HANDLING
+C22:DF or ~FEATURE_DF_FANCY
+C23:UNICODE_BIDI_SUPPORT or ~UNICODE_NEUTRAL_TABLE
+C24:DU or ~FEATURE_DU_DEFAULT_BLOCKSIZE_1K
+C25:MDEV or ~FEATURE_MDEV_LOAD_FIRMWARE
+C26:MDEV or ~FEATURE_MDEV_CONF
+C27:FEATURE_LAST_SMALL_alt or ~FEATURE_LAST_SMALL
+C28:FEATURE_LAST_SMALL_alt or ~FEATURE_LAST_FANCY
+C29:FEATURE_LAST_SMALL or FEATURE_LAST_FANCY or ~FEATURE_LAST_SMALL_alt
+C30:~FEATURE_LAST_SMALL or ~FEATURE_LAST_FANCY
+C31:UNLZMA or ~FEATURE_LZMA_FAST
+C32:UNLZMA or ~LZMA
+C33:TUNCTL or ~FEATURE_TUNCTL_UG
+C34:FEATURE_KILL_REMOVED or ~FEATURE_KILL_DELAY
+C35:FEATURE_KILL_DELAY or ~FEATURE_KILL_REMOVED
+C36:UNEXPAND or ~FEATURE_UNEXPAND_LONG_OPTIONS
+C37:root or ~FEATURE_MOUNT_LOOP
+C38:root or ~RX
+C39:root or ~CMP
+C40:root or ~VOLNAME
+C41:root or ~SMEMCAP
+C42:root or ~SWAPONOFF
+C43:root or ~LOGNAME
+C44:root or ~UNICODE_SUPPORT
+C45:root or ~TFTP
+C46:root or ~FEATURE_UNIX_LOCAL
+C47:root or ~FEATURE_PS_UNUSUAL_SYSTEMS
+C48:root or ~UNZIP
+C49:root or ~FBSPLASH
+C50:root or ~DMESG
+C51:root or ~UDHCP_DEBUG
+C52:root or ~ID
+C53:root or ~VCONFIG
+C54:root or ~FTPPUT
+C55:root or ~SED
+C56:root or ~FEATURE_VOLUMEID_ROMFS
+C57:root or ~DELUSER
+C58:root or ~CHAT
+C59:root or ~GUNZIP
+C60:root or ~FEATURE_VOLUMEID_LINUXRAID
+C61:root or ~CPIO
+C62:root or ~BUSYBOX_EXEC_PATH
+C63:root or ~PATCH
+C64:root or ~SV
+C65:root or ~BASENAME
+C66:root or ~CATV
+C67:root or ~MKTEMP
+C68:root or ~LOADKMAP
+C69:root or ~SETCONSOLE
+C70:root or ~PASSWD
+C71:root or ~FEATURE_VOLUMEID_LINUXSWAP
+C72:root or ~ETHER_WAKE
+C73:root or ~BBCONFIG
+C74:root or ~MKFS_REISER
+C75:root or ~TR
+C76:root or ~INCLUDE_SUSv2
+C77:root or ~GETSEBOOL
+C78:root or ~WALL
+C79:root or ~LN
+C80:root or ~BOOTCHARTD
+C81:root or ~UNEXPAND
+C82:root or ~WHOAMI
+C83:root or ~DEFAULT_MODULES_DIR
+C84:root or ~FEATURE_FAST_TOP
+C85:root or ~LPR
+C86:root or ~GZIP
+C87:root or ~FEATURE_SH_IS_HUSH_alt
+C88:root or ~VLOCK
+C89:root or ~MKFS_EXT2
+C90:root or ~SHOW_USAGE
+C91:root or ~SYSLOGD
+C92:root or ~IPCALC
+C93:root or ~DIFF
+C94:root or ~CHGRP
+C95:root or ~READAHEAD
+C96:root or ~SELINUX
+C97:root or ~FEATURE_SHADOWPASSWDS
+C98:root or ~LZOP
+C99:root or ~UNLZMA
+C100:root or ~CONSPY
+C101:root or ~LONG_OPTS
+C102:root or ~MSH
+C103:root or ~FDFORMAT
+C104:root or ~DUMPKMAP
+C105:root or ~FEATURE_IPV6
+C106:root or ~NTPD
+C107:root or ~SORT
+C108:root or ~DEFAULT_DEPMOD_FILE
+C109:root or ~RDATE
+C110:root or ~EXTRA_CFLAGS
+C111:root or ~ADDUSER
+C112:root or ~FAKEIDENTD
+C113:root or ~FEATURE_VOLUMEID_ISO9660
+C114:root or ~TRUE
+C115:root or ~MOUNT
+C116:root or ~DEVFSD
+C117:root or ~FEATURE_CLEAN_UP
+C118:root or ~CTTYHACK
+C119:root or ~SUM
+C120:root or ~ZCIP
+C121:root or ~FEATURE_MODUTILS_ALIAS
+C122:root or ~UNCOMPRESS
+C123:root or ~PIDOF
+C124:root or ~SULOGIN
+C125:root or ~MDEV
+C126:root or ~LOAD_POLICY
+C127:root or ~TAIL
+C128:root or ~CROND
+C129:root or ~IPCS
+C130:root or ~NOMMU
+C131:root or ~FEATURE_PRESERVE_HARDLINKS
+C132:root or ~UBIATTACH
+C133:root or ~DF
+C134:root or ~UMOUNT
+C135:root or ~IPROUTE
+C136:root or ~READLINK
+C137:root or ~SVLOGD
+C138:root or ~PASSWORD_MINLEN
+C139:root or ~CHPST
+C140:root or ~FREE
+C141:root or ~SETFILES
+C142:root or ~FLASH_LOCK
+C143:root or ~MOUNTPOINT
+C144:root or ~FEATURE_2_4_MODULES
+C145:root or ~LSPCI
+C146:root or ~FEATURE_SEAMLESS_Z
+C147:root or ~IOCTL_HEX2STR_ERROR
+C148:root or ~HALT
+C149:root or ~TASKSET
+C150:root or ~KILL
+C151:root or ~IOSTAT
+C152:root or ~EJECT
+C153:root or ~HTTPD
+C154:root or ~ADJTIMEX
+C155:root or ~USLEEP
+C156:root or ~MKDIR
+C157:root or ~LOADFONT
+C158:root or ~PRINTENV
+C159:root or ~FSCK_MINIX
+C160:root or ~FEATURE_INSTALLER
+C161:root or ~MV
+C162:root or ~POPMAILDIR
+C163:root or ~SETENFORCE
+C164:root or ~RUNSV
+C165:root or ~NMETER
+C166:root or ~DNSD
+C167:root or ~HOSTNAME
+C168:root or ~CHRT
+C169:root or ~FEATURE_EDITING
+C170:root or ~TAR
+C171:root or ~TCPSVD
+C172:root or ~GETTY
+C173:root or ~SESTATUS
+C174:root or ~PRINTF
+C175:root or ~FEATURE_VOLUMEID_SYSV
+C176:root or ~FEATURE_VOLUMEID_JFS
+C177:root or ~RENICE
+C178:root or ~GREP
+C179:root or ~MAKEDEVS
+C180:root or ~IFUPDOWN_UDHCPC_CMD_OPTIONS
+C181:root or ~TEST
+C182:root or ~INIT
+C183:root or ~FEATURE_AUTOWIDTH
+C184:root or ~DEBUG
+C185:root or ~COMM
+C186:root or ~BEEP
+C187:root or ~ACPID
+C188:root or ~FEATURE_VOLUMEID_XFS
+C189:root or ~SETARCH
+C190:root or ~FLASHCP
+C191:root or ~LPQ
+C192:root or ~TELNETD
+C193:root or ~FDFLUSH
+C194:root or ~FEATURE_SH_NOFORK
+C195:root or ~DIRNAME
+C196:root or ~FEATURE_VOLUMEID_OCFS2
+C197:root or ~WGET
+C198:root or ~SETLOGCONS
+C199:root or ~CP
+C200:root or ~INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt
+C201:root or ~HAVE_DOT_CONFIG
+C202:root or ~PIVOT_ROOT
+C203:root or ~UNXZ
+C204:root or ~NSLOOKUP
+C205:root or ~FTPGET
+C206:root or ~MATCHPATHCON
+C207:root or ~HUSH
+C208:root or ~NANDWRITE
+C209:root or ~SCRIPT
+C210:root or ~STTY
+C211:root or ~PMAP
+C212:root or ~TFTPD
+C213:root or ~OPENVT
+C214:root or ~BUILD_LIBBUSYBOX
+C215:root or ~FOLD
+C216:root or ~UUENCODE
+C217:root or ~HEAD
+C218:root or ~BB_SYSCTL
+C219:root or ~UDHCPC_SLACK_FOR_BUGGY_SERVERS
+C220:root or ~ADD_SHELL
+C221:root or ~SLATTACH
+C222:root or ~FEATURE_DEVFS
+C223:root or ~SHOWKEY
+C224:root or ~LOCALE_SUPPORT
+C225:root or ~SH_MATH_SUPPORT
+C226:root or ~UNAME
+C227:root or ~CHOWN
+C228:root or ~SETUIDGID
+C229:root or ~START_STOP_DAEMON
+C230:root or ~FINDFS
+C231:root or ~HDPARM
+C232:root or ~MAN
+C233:root or ~FEATURE_NON_POSIX_CP
+C234:root or ~REFORMIME
+C235:root or ~PIPE_PROGRESS
+C236:root or ~RAIDAUTORUN
+C237:root or ~STRINGS
+C238:root or ~RDEV
+C239:root or ~DPKG_DEB
+C240:root or ~REALPATH
+C241:root or ~MKFS_VFAT
+C242:root or ~CAL
+C243:root or ~SENDMAIL
+C244:root or ~IFPLUGD
+C245:root or ~MD5SUM
+C246:root or ~FUSER
+C247:root or ~UBIDETACH
+C248:root or ~GETOPT
+C249:root or ~INSTALL
+C250:root or ~UDHCPC
+C251:root or ~FEATURE_BUFFERS_GO_IN_BSS_alt
+C252:root or ~TAC
+C253:root or ~FEATURE_LOADFONT_PSF2
+C254:root or ~DD
+C255:root or ~FEATURE_HUMAN_READABLE
+C256:root or ~RUN_PARTS
+C257:root or ~FEATURE_VERBOSE_CP_MESSAGE
+C258:root or ~WERROR
+C259:root or ~BUNZIP2
+C260:root or ~FTPD
+C261:root or ~TRACEROUTE
+C262:root or ~RFKILL
+C263:root or ~FALSE
+C264:root or ~CHATTR
+C265:root or ~LFS
+C266:root or ~FSYNC
+C267:root or ~REV
+C268:root or ~FEATURE_BASH_IS_HUSH_alt
+C269:root or ~CHPASSWD
+C270:root or ~RESTORECON
+C271:root or ~DU
+C272:root or ~FEATURE_INSMOD_LOADINKMEM
+C273:root or ~EXTRA_COMPAT
+C274:root or ~USE_PORTABLE_CODE
+C275:root or ~PSCAN
+C276:root or ~SHA512SUM
+C277:root or ~DATE
+C278:root or ~SETFONT
+C279:root or ~RUNLEVEL
+C280:root or ~IONICE
+C281:root or ~RESIZE
+C282:root or ~FLASH_UNLOCK
+C283:root or ~FEATURE_LOADFONT_RAW
+C284:root or ~IFUPDOWN
+C285:root or ~FEATURE_SUID
+C286:root or ~ARP
+C287:root or ~CHCON
+C288:root or ~AR
+C289:root or ~READPROFILE
+C290:root or ~ENVUIDGID
+C291:root or ~LENGTH
+C292:root or ~ADDGROUP
+C293:root or ~BASE64
+C294:root or ~RUNCON
+C295:root or ~DMALLOC_alt
+C296:root or ~IP
+C297:root or ~SEQ
+C298:root or ~FEATURE_SYSLOG
+C299:root or ~FEATURE_PREFER_APPLETS
+C300:root or ~DEALLOCVT
+C301:root or ~MKSWAP
+C302:root or ~MICROCOM
+C303:root or ~GETENFORCE
+C304:root or ~LS
+C305:root or ~ROUTE
+C306:root or ~UUDECODE
+C307:root or ~TTYSIZE
+C308:root or ~EXPR
+C309:root or ~IPRULE
+C310:root or ~WATCH
+C311:root or ~FGCONSOLE
+C312:root or ~FSCK
+C313:root or ~CRYPTPW
+C314:root or ~ED
+C315:root or ~WHO
+C316:root or ~FEATURE_SEAMLESS_GZ
+C317:root or ~MAKEMIME
+C318:root or ~FLOCK
+C319:root or ~BRCTL
+C320:root or ~DESKTOP
+C321:root or ~PLATFORM_LINUX
+C322:root or ~LOGGER
+C323:root or ~TIMEOUT
+C324:root or ~LSUSB
+C325:root or ~FEATURE_SEAMLESS_LZMA
+C326:root or ~MT
+C327:root or ~DEVMEM
+C328:root or ~POWERTOP
+C329:root or ~TEE
+C330:root or ~FEATURE_SH_STANDALONE
+C331:root or ~FEATURE_DEVPTS
+C332:root or ~HEXDUMP
+C333:root or ~SWITCH_ROOT
+C334:root or ~TUNCTL
+C335:root or ~FEATURE_INSMOD_KSYMOOPS_SYMBOLS
+C336:root or ~LAST
+C337:root or ~MODPROBE_SMALL
+C338:root or ~LOGIN
+C339:root or ~BLOCKDEV
+C340:root or ~FDISK
+C341:root or ~MORE
+C342:root or ~KLOGD
+C343:root or ~CROSS_COMPILER_PREFIX
+C344:root or ~RUNSVDIR
+C345:root or ~RTCWAKE
+C346:root or ~FIND
+C347:root or ~FEATURE_MD5_SHA1_SUM_CHECK
+C348:root or ~DC
+C349:root or ~RPM2CPIO
+C350:root or ~SLEEP
+C351:root or ~MESG
+C352:root or ~IPTUNNEL
+C353:root or ~INSTALL_APPLET_DONT_alt
+C354:root or ~PWD
+C355:root or ~AWK
+C356:root or ~ENV
+C357:root or ~SPLIT
+C358:root or ~ASH
+C359:root or ~WHICH
+C360:root or ~FEATURE_WTMP
+C361:root or ~CHMOD
+C362:root or ~ENVDIR
+C363:root or ~DELGROUP
+C364:root or ~CUT
+C365:root or ~SETSID
+C366:root or ~SHA1SUM
+C367:root or ~USE_BB_PWD_GRP
+C368:root or ~NOHUP
+C369:root or ~TOP
+C370:root or ~RPM
+C371:root or ~BZIP2
+C372:root or ~FLASH_ERASEALL
+C373:root or ~LPD
+C374:root or ~FEATURE_HWIB
+C375:root or ~FEATURE_PREFER_IPV4_ADDRESS
+C376:root or ~FEATURE_INSMOD_TRY_MMAP
+C377:root or ~STAT
+C378:root or ~FEATURE_VOLUMEID_CRAMFS
+C379:root or ~FEATURE_VOLUMEID_BTRFS
+C380:root or ~FEATURE_SH_EXTRA_QUIET
+C381:root or ~SHA256SUM
+C382:root or ~IPLINK
+C383:root or ~FEATURE_VOLUMEID_HFS
+C384:root or ~IPCRM
+C385:root or ~SU
+C386:root or ~FEATURE_INSMOD_VERSION_CHECKING
+C387:root or ~FEATURE_UDHCP_PORT
+C388:root or ~UPTIME
+C389:root or ~TELNET
+C390:root or ~SETKEYCODES
+C391:root or ~CLEAR
+C392:root or ~FBSET
+C393:root or ~CAT
+C394:root or ~FEATURE_COPYBUF_KB
+C395:root or ~FEATURE_SEAMLESS_XZ
+C396:root or ~SELINUXENABLED
+C397:root or ~ECHO
+C398:root or ~IFENSLAVE
+C399:root or ~USE_BB_CRYPT
+C400:root or ~WC
+C401:root or ~FEATURE_VOLUMEID_EXT
+C402:root or ~FREERAMDISK
+C403:root or ~INOTIFYD
+C404:root or ~TUNE2FS
+C405:root or ~SYNC
+C406:root or ~UNIQ
+C407:root or ~FEATURE_INSMOD_LOAD_MAP
+C408:root or ~REMOVE_SHELL
+C409:root or ~SETSEBOOL
+C410:root or ~BLKID
+C411:root or ~NANDDUMP
+C412:root or ~INETD
+C413:root or ~HOSTID
+C414:root or ~HWCLOCK
+C415:root or ~FEATURE_MINIX2
+C416:root or ~FEATURE_VOLUMEID_UDF
+C417:root or ~IPADDR
+C418:root or ~VI
+C419:root or ~LESS
+C420:root or ~FEATURE_SEAMLESS_BZ2
+C421:root or ~FEATURE_USE_TERMIOS
+C422:root or ~NICE
+C423:root or ~PING
+C424:root or ~MKFS_MINIX
+C425:root or ~OD
+C426:root or ~EXPAND
+C427:root or ~UDHCPD
+C428:root or ~SOFTLIMIT
+C429:root or ~DPKG
+C430:root or ~YES
+C431:root or ~UDHCPC_DEFAULT_SCRIPT
+C432:root or ~FEATURE_PIDFILE
+C433:root or ~NBDCLIENT
+C434:root or ~LSATTR
+C435:root or ~CHROOT
+C436:root or ~FEATURE_CHECK_TAINTED_MODULE
+C437:root or ~TIME
+C438:root or ~MD5_SIZE_VS_SPEED
+C439:root or ~FEATURE_UDHCP_RFC3397
+C440:root or ~CHVT
+C441:root or ~PGREP
+C442:root or ~VERBOSE_RESOLUTION_ERRORS
+C443:root or ~RMDIR
+C444:root or ~RM
+C445:root or ~CKSUM
+C446:root or ~FEATURE_MTAB_SUPPORT
+C447:root or ~LOSETUP
+C448:root or ~FEATURE_UTMP
+C449:root or ~CRONTAB
+C450:root or ~NC
+C451:root or ~FEATURE_VOLUMEID_REISERFS
+C452:root or ~NAMEIF
+C453:root or ~PREFIX
+C454:root or ~ARPING
+C455:root or ~MONOTONIC_SYSCALL
+C456:root or ~IFCONFIG
+C457:root or ~UDPSVD
+C458:root or ~FEATURE_HAVE_RPC
+C459:root or ~MKFIFO
+C460:root or ~DOS2UNIX
+C461:root or ~XARGS
+C462:root or ~VOLUMEID
+C463:root or ~FEATURE_VOLUMEID_FAT
+C464:root or ~KBD_MODE
+C465:root or ~FEATURE_MODUTILS_SYMBOLS
+C466:root or ~PS
+C467:root or ~RESET
+C468:root or ~SCRIPTREPLAY
+C469:root or ~NETSTAT
+C470:root or ~STATIC
+C471:root or ~FEATURE_ETC_NETWORKS
+C472:root or ~TTY
+C473:root or ~TOUCH
+C474:root or ~PKILL
+C475:root or ~MKNOD
+C476:root or ~FEATURE_VOLUMEID_LUKS
+C477:root or ~MODINFO
+C478:root or ~FEATURE_VOLUMEID_NTFS
+C479:root or ~MPSTAT
+C480:root or ~WATCHDOG
+C481:UDHCP_DEBUG or ~root
+C482:BUSYBOX_EXEC_PATH or ~root
+C483:DEFAULT_MODULES_DIR or ~root
+C484:FEATURE_SH_IS_HUSH_alt or ~root
+C485:DEFAULT_DEPMOD_FILE or ~root
+C486:EXTRA_CFLAGS or ~root
+C487:PASSWORD_MINLEN or ~root
+C488:IFUPDOWN_UDHCPC_CMD_OPTIONS or ~root
+C489:INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt or ~root
+C490:UDHCPC_SLACK_FOR_BUGGY_SERVERS or ~root
+C491:FEATURE_BUFFERS_GO_IN_BSS_alt or ~root
+C492:FEATURE_BASH_IS_HUSH_alt or ~root
+C493:DMALLOC_alt or ~root
+C494:CROSS_COMPILER_PREFIX or ~root
+C495:INSTALL_APPLET_DONT_alt or ~root
+C496:FEATURE_COPYBUF_KB or ~root
+C497:UDHCPC_DEFAULT_SCRIPT or ~root
+C498:MD5_SIZE_VS_SPEED or ~root
+C499:PREFIX or ~root
+C500:TELNET or ~FEATURE_TELNET_TTYPE
+C501:TELNET or ~FEATURE_TELNET_AUTOLOGIN
+C502:TRACEROUTE or ~FEATURE_TRACEROUTE_USE_ICMP
+C503:TRACEROUTE or ~FEATURE_TRACEROUTE_VERBOSE
+C504:TRACEROUTE or ~FEATURE_TRACEROUTE_SOURCE_ROUTE
+C505:TRACEROUTE or ~TRACEROUTE6
+C506:DMALLOC_alt or ~NO_DEBUG_LIB
+C507:DMALLOC_alt or ~DMALLOC
+C508:DMALLOC_alt or ~EFENCE
+C509:NO_DEBUG_LIB or DMALLOC or EFENCE or ~DMALLOC_alt
+C510:~NO_DEBUG_LIB or ~DMALLOC
+C511:~NO_DEBUG_LIB or ~EFENCE
+C512:~DMALLOC or ~EFENCE
+C513:MODPROBE_SMALL or ~DEPMOD
+C514:MODPROBE_SMALL or ~FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
+C515:MODPROBE_SMALL or ~LSMOD
+C516:MODPROBE_SMALL or ~RMMOD
+C517:MODPROBE_SMALL or ~MODPROBE
+C518:MODPROBE_SMALL or ~INSMOD
+C519:MODPROBE_SMALL or ~FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED
+C520:SETCONSOLE or ~FEATURE_SETCONSOLE_LONG_OPTIONS
+C521:FDISK or ~FDISK_SUPPORT_LARGE_DISKS
+C522:FDISK or ~FEATURE_FDISK_WRITABLE
+C523:FEATURE_SH_IS_HUSH_alt or ~FEATURE_SH_IS_ASH
+C524:FEATURE_SH_IS_HUSH_alt or ~FEATURE_SH_IS_HUSH
+C525:FEATURE_SH_IS_HUSH_alt or ~FEATURE_SH_IS_NONE
+C526:FEATURE_SH_IS_ASH or FEATURE_SH_IS_HUSH or FEATURE_SH_IS_NONE or ~FEATURE_SH_IS_HUSH_alt
+C527:~FEATURE_SH_IS_ASH or ~FEATURE_SH_IS_HUSH
+C528:~FEATURE_SH_IS_ASH or ~FEATURE_SH_IS_NONE
+C529:~FEATURE_SH_IS_HUSH or ~FEATURE_SH_IS_NONE
+C530:IP or ~FEATURE_IP_RULE
+C531:IP or ~FEATURE_IP_LINK
+C532:IP or ~FEATURE_IP_TUNNEL
+C533:IP or ~FEATURE_IP_ROUTE
+C534:IP or ~FEATURE_IP_ADDRESS
+C535:IP or ~FEATURE_IP_SHORT_FORMS
+C536:IP or ~FEATURE_IP_RARE_PROTOCOLS
+C537:USE_BB_PWD_GRP or ~USE_BB_SHADOW
+C538:FEATURE_SUID or ~FEATURE_SUID_CONFIG
+C539:FEATURE_MDEV_RENAME or ~FEATURE_MDEV_RENAME_REGEXP
+C540:TFTPD or ~FEATURE_TFTP_PUT
+C541:TFTPD or ~FEATURE_TFTP_BLOCKSIZE
+C542:TFTPD or ~TFTP_DEBUG
+C543:TFTPD or ~FEATURE_TFTP_GET
+C544:PING or ~PING6
+C545:PING or ~FEATURE_FANCY_PING
+C546:START_STOP_DAEMON or ~FEATURE_START_STOP_DAEMON_LONG_OPTIONS
+C547:START_STOP_DAEMON or ~FEATURE_START_STOP_DAEMON_FANCY
+C548:GZIP or ~FEATURE_GZIP_LONG_OPTIONS
+C549:LS or ~FEATURE_LS_TIMESTAMPS
+C550:LS or ~FEATURE_LS_FILETYPES
+C551:LS or ~FEATURE_LS_RECURSIVE
+C552:LS or ~FEATURE_LS_COLOR
+C553:LS or ~FEATURE_LS_FOLLOWLINKS
+C554:LS or ~FEATURE_LS_USERNAME
+C555:LS or ~FEATURE_LS_SORTFILES
+C556:LOGREAD or ~FEATURE_LOGREAD_REDUCED_LOCKING
+C557:FEATURE_CALL_TELINIT or ~TELINIT_PATH
+C558:TELINIT_PATH or ~FEATURE_CALL_TELINIT
+C559:ADDUSER or ~LAST_SYSTEM_ID
+C560:ADDUSER or ~FEATURE_ADDUSER_LONG_OPTIONS
+C561:ADDUSER or ~FEATURE_CHECK_NAMES
+C562:ADDUSER or ~FIRST_SYSTEM_ID
+C563:LAST_SYSTEM_ID or ~ADDUSER
+C564:FIRST_SYSTEM_ID or ~ADDUSER
+C565:MV or ~FEATURE_MV_LONG_OPTIONS
+C566:NC or ~NC_SERVER
+C567:NC or ~NC_110_COMPAT
+C568:NC or ~NC_EXTRA
+C569:ACPID or ~FEATURE_ACPID_COMPAT
+C570:LESS or ~FEATURE_LESS_FLAGS
+C571:LESS or ~FEATURE_LESS_MAXLINES
+C572:LESS or ~FEATURE_LESS_REGEXP
+C573:LESS or ~FEATURE_LESS_WINCH
+C574:LESS or ~FEATURE_LESS_BRACKETS
+C575:LESS or ~FEATURE_LESS_MARKS
+C576:LESS or ~FEATURE_LESS_DASHCMD
+C577:FEATURE_LESS_MAXLINES or ~LESS
+C578:XARGS or ~FEATURE_XARGS_SUPPORT_CONFIRMATION
+C579:XARGS or ~FEATURE_XARGS_SUPPORT_QUOTES
+C580:XARGS or ~FEATURE_XARGS_SUPPORT_ZERO_TERM
+C581:XARGS or ~FEATURE_XARGS_SUPPORT_TERMOPT
+C582:BOOTCHARTD or ~FEATURE_BOOTCHARTD_CONFIG_FILE
+C583:BOOTCHARTD or ~FEATURE_BOOTCHARTD_BLOATED_HEADER
+C584:FEATURE_TAB_COMPLETION or ~FEATURE_USERNAME_COMPLETION
+C585:EXPR or ~EXPR_MATH_SUPPORT_64
+C586:DPKG_DEB or ~FEATURE_DPKG_DEB_EXTRACT_ONLY
+C587:SLEEP or ~FEATURE_FANCY_SLEEP
+C588:PS or ~FEATURE_PS_TIME
+C589:PS or ~FEATURE_PS_ADDITIONAL_COLUMNS
+C590:PS or ~FEATURE_PS_WIDE
+C591:ECHO or ~FEATURE_FANCY_ECHO
+C592:INETD or ~FEATURE_INETD_RPC
+C593:INETD or ~FEATURE_INETD_SUPPORT_BUILTIN_ECHO
+C594:INETD or ~FEATURE_INETD_SUPPORT_BUILTIN_DISCARD
+C595:INETD or ~FEATURE_INETD_SUPPORT_BUILTIN_TIME
+C596:INETD or ~FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN
+C597:INETD or ~FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME
+C598:NTPD or ~FEATURE_NTPD_SERVER
+C599:MAKEMIME or ~FEATURE_MIME_CHARSET
+C600:FEATURE_MIME_CHARSET or ~MAKEMIME
+C601:FEATURE_TOP_CPU_USAGE_PERCENTAGE or ~FEATURE_TOP_DECIMALS
+C602:FEATURE_TOP_CPU_USAGE_PERCENTAGE or ~FEATURE_TOP_CPU_GLOBAL_PERCENTS
+C603:HUSH_BASH_COMPAT or ~HUSH_BRACE_EXPANSION
+C604:CPIO or ~FEATURE_CPIO_O
+C605:FTPPUT or ~FEATURE_FTPGETPUT_LONG_OPTIONS
+C606:SU or ~FEATURE_SU_CHECKS_SHELLS
+C607:SU or ~FEATURE_SU_SYSLOG
+C608:SV or ~SV_DEFAULT_SERVICE_DIR
+C609:SV_DEFAULT_SERVICE_DIR or ~SV
+C610:IFCONFIG or ~FEATURE_IFCONFIG_STATUS
+C611:IFCONFIG or ~FEATURE_IFCONFIG_HW
+C612:IFCONFIG or ~FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
+C613:IFCONFIG or ~FEATURE_IFCONFIG_SLIP
+C614:IFCONFIG or ~FEATURE_IFCONFIG_BROADCAST_PLUS
+C615:SWAPONOFF or ~FEATURE_SWAPON_PRI
+C616:TR or ~FEATURE_TR_CLASSES
+C617:TR or ~FEATURE_TR_EQUIV
+C618:FEATURE_BUFFERS_GO_IN_BSS_alt or ~FEATURE_BUFFERS_USE_MALLOC
+C619:FEATURE_BUFFERS_GO_IN_BSS_alt or ~FEATURE_BUFFERS_GO_ON_STACK
+C620:FEATURE_BUFFERS_GO_IN_BSS_alt or ~FEATURE_BUFFERS_GO_IN_BSS
+C621:FEATURE_BUFFERS_USE_MALLOC or FEATURE_BUFFERS_GO_ON_STACK or FEATURE_BUFFERS_GO_IN_BSS or ~FEATURE_BUFFERS_GO_IN_BSS_alt
+C622:~FEATURE_BUFFERS_USE_MALLOC or ~FEATURE_BUFFERS_GO_ON_STACK
+C623:~FEATURE_BUFFERS_USE_MALLOC or ~FEATURE_BUFFERS_GO_IN_BSS
+C624:~FEATURE_BUFFERS_GO_ON_STACK or ~FEATURE_BUFFERS_GO_IN_BSS
+C625:FEATURE_TELNETD_STANDALONE or ~FEATURE_TELNETD_INETD_WAIT
+C626:PASSWD or ~FEATURE_PASSWD_WEAK_CHECK
+C627:IFUPDOWN or ~FEATURE_IFUPDOWN_IPV4
+C628:IFUPDOWN or ~FEATURE_IFUPDOWN_IP
+C629:IFUPDOWN or ~IFUPDOWN_IFSTATE_PATH
+C630:IFUPDOWN or ~FEATURE_IFUPDOWN_MAPPING
+C631:IFUPDOWN or ~FEATURE_IFUPDOWN_IPV6
+C632:IFUPDOWN or ~FEATURE_IFUPDOWN_EXTERNAL_DHCP
+C633:IFUPDOWN_IFSTATE_PATH or ~IFUPDOWN
+C634:VI or ~FEATURE_VI_DOT_CMD
+C635:VI or ~FEATURE_VI_ASK_TERMINAL
+C636:VI or ~FEATURE_VI_WIN_RESIZE
+C637:VI or ~FEATURE_VI_8BIT
+C638:VI or ~FEATURE_VI_SET
+C639:VI or ~FEATURE_ALLOW_EXEC
+C640:VI or ~FEATURE_VI_MAX_LEN
+C641:VI or ~FEATURE_VI_READONLY
+C642:VI or ~FEATURE_VI_USE_SIGNALS
+C643:VI or ~FEATURE_VI_OPTIMIZE_CURSOR
+C644:VI or ~FEATURE_VI_SETOPTS
+C645:VI or ~FEATURE_VI_SEARCH
+C646:VI or ~FEATURE_VI_YANKMARK
+C647:VI or ~FEATURE_VI_COLON
+C648:FEATURE_VI_MAX_LEN or ~VI
+C649:SETFONT or ~DEFAULT_SETFONT_DIR
+C650:SETFONT or ~FEATURE_SETFONT_TEXTUAL_MAP
+C651:DEFAULT_SETFONT_DIR or ~SETFONT
+C652:LAST or ~FEATURE_LAST_SMALL_alt
+C653:FEATURE_LAST_SMALL_alt or ~LAST
+C654:FEATURE_TFTP_BLOCKSIZE or ~FEATURE_TFTP_PROGRESS_BAR
+C655:WC or ~FEATURE_WC_LARGE
+C656:SYSLOGD or ~FEATURE_ROTATE_LOGFILE
+C657:SYSLOGD or ~FEATURE_SYSLOGD_DUP
+C658:SYSLOGD or ~FEATURE_REMOTE_LOG
+C659:SYSLOGD or ~FEATURE_IPC_SYSLOG
+C660:SYSLOGD or ~FEATURE_SYSLOGD_READ_BUFFER_SIZE
+C661:FEATURE_SYSLOGD_READ_BUFFER_SIZE or ~SYSLOGD
+C662:GREP or ~FEATURE_GREP_FGREP_ALIAS
+C663:GREP or ~FEATURE_GREP_CONTEXT
+C664:GREP or ~FEATURE_GREP_EGREP_ALIAS
+C665:FEATURE_SUID_CONFIG or ~FEATURE_SUID_CONFIG_QUIET
+C666:LOGIN or ~LOGIN_SCRIPTS
+C667:LOGIN or ~PAM
+C668:LOGIN or ~FEATURE_SECURETTY
+C669:LOGIN or ~FEATURE_NOLOGIN
+C670:CHAT or ~FEATURE_CHAT_CLR_ABORT
+C671:CHAT or ~FEATURE_CHAT_SEND_ESCAPES
+C672:CHAT or ~FEATURE_CHAT_NOFAIL
+C673:CHAT or ~FEATURE_CHAT_IMPLICIT_CR
+C674:CHAT or ~FEATURE_CHAT_SWALLOW_OPTS
+C675:CHAT or ~FEATURE_CHAT_VAR_ABORT_LEN
+C676:CHAT or ~FEATURE_CHAT_TTY_HIFI
+C677:UNXZ or ~XZ
+C678:KILL or ~KILLALL5
+C679:KILL or ~KILLALL
+C680:INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt or ~INSTALL_SH_APPLET_SYMLINK
+C681:INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt or ~INSTALL_SH_APPLET_HARDLINK
+C682:INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt or ~INSTALL_SH_APPLET_SCRIPT_WRAPPER
+C683:INSTALL_SH_APPLET_SYMLINK or INSTALL_SH_APPLET_HARDLINK or INSTALL_SH_APPLET_SCRIPT_WRAPPER or ~INSTALL_SH_APPLET_SCRIPT_WRAPPER_alt
+C684:~INSTALL_SH_APPLET_SYMLINK or ~INSTALL_SH_APPLET_HARDLINK
+C685:~INSTALL_SH_APPLET_SYMLINK or ~INSTALL_SH_APPLET_SCRIPT_WRAPPER
+C686:~INSTALL_SH_APPLET_HARDLINK or ~INSTALL_SH_APPLET_SCRIPT_WRAPPER
+C687:TAR or ~FEATURE_TAR_LONG_OPTIONS
+C688:TAR or ~FEATURE_TAR_SELINUX
+C689:TAR or ~FEATURE_TAR_NOPRESERVE_TIME
+C690:TAR or ~FEATURE_TAR_CREATE
+C691:TAR or ~FEATURE_TAR_OLDGNU_COMPATIBILITY
+C692:TAR or ~FEATURE_TAR_FROM
+C693:TAR or ~FEATURE_TAR_UNAME_GNAME
+C694:TAR or ~FEATURE_TAR_GNU_EXTENSIONS
+C695:TAR or ~FEATURE_TAR_AUTODETECT
+C696:TAR or ~FEATURE_TAR_OLDSUN_COMPATIBILITY
+C697:FEATURE_CPIO_O or ~FEATURE_CPIO_P
+C698:MKSWAP or ~FEATURE_MKSWAP_UUID
+C699:RUNCON or ~FEATURE_RUNCON_LONG_OPTIONS
+C700:LSMOD or ~FEATURE_LSMOD_PRETTY_2_6_OUTPUT
+C701:MODPROBE or ~FEATURE_MODPROBE_BLACKLIST
+C702:FEATURE_DD_SIGNAL_HANDLING or ~FEATURE_DD_THIRD_STATUS_LINE
+C703:DOS2UNIX or ~UNIX2DOS
+C704:TEE or ~FEATURE_TEE_USE_BLOCK_IO
+C705:RUNSVDIR or ~FEATURE_RUNSVDIR_LOG
+C706:FEATURE_EDITING or ~FEATURE_EDITING_ASK_TERMINAL
+C707:FEATURE_EDITING or ~FEATURE_EDITING_FANCY_PROMPT
+C708:FEATURE_EDITING or ~FEATURE_TAB_COMPLETION
+C709:FEATURE_EDITING or ~FEATURE_EDITING_HISTORY
+C710:FEATURE_EDITING or ~FEATURE_EDITING_MAX_LEN
+C711:FEATURE_EDITING or ~FEATURE_EDITING_VI
+C712:FEATURE_EDITING or ~FEATURE_EDITING_SAVEHISTORY
+C713:FEATURE_EDITING_HISTORY or ~FEATURE_EDITING
+C714:FEATURE_EDITING_MAX_LEN or ~FEATURE_EDITING
+C715:HUSH or ~HUSH_CASE
+C716:HUSH or ~HUSH_RANDOM_SUPPORT
+C717:HUSH or ~HUSH_EXPORT_N
+C718:HUSH or ~HUSH_INTERACTIVE
+C719:HUSH or ~HUSH_FUNCTIONS
+C720:HUSH or ~HUSH_BASH_COMPAT
+C721:HUSH or ~HUSH_IF
+C722:HUSH or ~HUSH_HELP
+C723:HUSH or ~HUSH_TICK
+C724:HUSH or ~HUSH_LOOPS
+C725:HUSH or ~HUSH_MODE_X
+C726:PIDOF or ~FEATURE_PIDOF_SINGLE
+C727:PIDOF or ~FEATURE_PIDOF_OMIT
+C728:DIFF or ~FEATURE_DIFF_LONG_OPTIONS
+C729:DIFF or ~FEATURE_DIFF_DIR
+C730:FEATURE_FDISK_WRITABLE or ~FEATURE_AIX_LABEL
+C731:FEATURE_FDISK_WRITABLE or ~FEATURE_SGI_LABEL
+C732:FEATURE_FDISK_WRITABLE or ~FEATURE_GPT_LABEL
+C733:FEATURE_FDISK_WRITABLE or ~FEATURE_OSF_LABEL
+C734:FEATURE_FDISK_WRITABLE or ~FEATURE_FDISK_ADVANCED
+C735:FEATURE_FDISK_WRITABLE or ~FEATURE_SUN_LABEL
+C736:KLOGD or ~FEATURE_KLOGD_KLOGCTL
+C737:BEEP or ~FEATURE_BEEP_LENGTH_MS
+C738:BEEP or ~FEATURE_BEEP_FREQ
+C739:FEATURE_BEEP_LENGTH_MS or ~BEEP
+C740:FEATURE_BEEP_FREQ or ~BEEP
+C741:NAMEIF or ~FEATURE_NAMEIF_EXTENDED
+C742:FEATURE_MAKEDEVS_TABLE_alt or ~FEATURE_MAKEDEVS_LEAF
+C743:FEATURE_MAKEDEVS_TABLE_alt or ~FEATURE_MAKEDEVS_TABLE
+C744:FEATURE_MAKEDEVS_LEAF or FEATURE_MAKEDEVS_TABLE or ~FEATURE_MAKEDEVS_TABLE_alt
+C745:~FEATURE_MAKEDEVS_LEAF or ~FEATURE_MAKEDEVS_TABLE
+C746:FEATURE_BASH_IS_HUSH_alt or ~FEATURE_BASH_IS_ASH
+C747:FEATURE_BASH_IS_HUSH_alt or ~FEATURE_BASH_IS_HUSH
+C748:FEATURE_BASH_IS_HUSH_alt or ~FEATURE_BASH_IS_NONE
+C749:FEATURE_BASH_IS_ASH or FEATURE_BASH_IS_HUSH or FEATURE_BASH_IS_NONE or ~FEATURE_BASH_IS_HUSH_alt
+C750:~FEATURE_BASH_IS_ASH or ~FEATURE_BASH_IS_HUSH
+C751:~FEATURE_BASH_IS_ASH or ~FEATURE_BASH_IS_NONE
+C752:~FEATURE_BASH_IS_HUSH or ~FEATURE_BASH_IS_NONE
+C753:FEATURE_INSTALLER or ~INSTALL_NO_USR
+C754:READLINK or ~FEATURE_READLINK_FOLLOW
+C755:TAIL or ~FEATURE_FANCY_TAIL
+C756:CROND or ~FEATURE_CROND_CALL_SENDMAIL
+C757:CROND or ~FEATURE_CROND_D
+C758:CROND or ~FEATURE_CROND_DIR
+C759:FEATURE_CROND_DIR or ~CROND
+C760:HTTPD or ~FEATURE_HTTPD_USE_SENDFILE
+C761:HTTPD or ~FEATURE_HTTPD_GZIP
+C762:HTTPD or ~FEATURE_HTTPD_SETUID
+C763:HTTPD or ~FEATURE_HTTPD_CGI
+C764:HTTPD or ~FEATURE_HTTPD_BASIC_AUTH
+C765:HTTPD or ~FEATURE_HTTPD_PROXY
+C766:HTTPD or ~FEATURE_HTTPD_RANGES
+C767:HTTPD or ~FEATURE_HTTPD_ENCODE_URL_STR
+C768:HTTPD or ~FEATURE_HTTPD_ERROR_PAGES
+C769:TEST or ~FEATURE_TEST_64
+C770:ENV or ~FEATURE_ENV_LONG_OPTIONS
+C771:FEATURE_HTTPD_BASIC_AUTH or ~FEATURE_HTTPD_AUTH_MD5
+C772:RMDIR or ~FEATURE_RMDIR_LONG_OPTIONS
+C773:MAKEDEVS or ~FEATURE_MAKEDEVS_TABLE_alt
+C774:FEATURE_MAKEDEVS_TABLE_alt or ~MAKEDEVS
+C775:CHCON or ~FEATURE_CHCON_LONG_OPTIONS
+C776:INIT or ~FEATURE_INIT_COREDUMPS
+C777:INIT or ~FEATURE_USE_INITTAB
+C778:INIT or ~FEATURE_INIT_SCTTY
+C779:INIT or ~FEATURE_INIT_SYSLOG
+C780:INIT or ~FEATURE_INITRD
+C781:INIT or ~INIT_TERMINAL_TYPE
+C782:INIT or ~FEATURE_EXTRA_QUIET
+C783:INIT_TERMINAL_TYPE or ~INIT
+C784:INSTALL_APPLET_DONT_alt or ~INSTALL_APPLET_SYMLINKS
+C785:INSTALL_APPLET_DONT_alt or ~INSTALL_APPLET_HARDLINKS
+C786:INSTALL_APPLET_DONT_alt or ~INSTALL_APPLET_SCRIPT_WRAPPERS
+C787:INSTALL_APPLET_DONT_alt or ~INSTALL_APPLET_DONT
+C788:INSTALL_APPLET_SYMLINKS or INSTALL_APPLET_HARDLINKS or INSTALL_APPLET_SCRIPT_WRAPPERS or INSTALL_APPLET_DONT or ~INSTALL_APPLET_DONT_alt
+C789:~INSTALL_APPLET_SYMLINKS or ~INSTALL_APPLET_HARDLINKS
+C790:~INSTALL_APPLET_SYMLINKS or ~INSTALL_APPLET_SCRIPT_WRAPPERS
+C791:~INSTALL_APPLET_SYMLINKS or ~INSTALL_APPLET_DONT
+C792:~INSTALL_APPLET_HARDLINKS or ~INSTALL_APPLET_SCRIPT_WRAPPERS
+C793:~INSTALL_APPLET_HARDLINKS or ~INSTALL_APPLET_DONT
+C794:~INSTALL_APPLET_SCRIPT_WRAPPERS or ~INSTALL_APPLET_DONT
+C795:TOP or ~FEATURE_TOP_CPU_USAGE_PERCENTAGE
+C796:TOP or ~FEATURE_SHOW_THREADS
+C797:TOP or ~FEATURE_TOP_SMP_PROCESS
+C798:TOP or ~FEATURE_TOPMEM
+C799:HWCLOCK or ~FEATURE_HWCLOCK_LONG_OPTIONS
+C800:HWCLOCK or ~FEATURE_HWCLOCK_ADJTIME_FHS
+C801:FEATURE_TOP_CPU_GLOBAL_PERCENTS or ~FEATURE_TOP_SMP_CPU
+C802:TELNETD or ~FEATURE_TELNETD_STANDALONE
+C803:FIND or ~FEATURE_FIND_REGEX
+C804:FIND or ~FEATURE_FIND_DELETE
+C805:FIND or ~FEATURE_FIND_MAXDEPTH
+C806:FIND or ~FEATURE_FIND_NOT
+C807:FIND or ~FEATURE_FIND_PRINT0
+C808:FIND or ~FEATURE_FIND_NEWER
+C809:FIND or ~FEATURE_FIND_CONTEXT
+C810:FIND or ~FEATURE_FIND_PERM
+C811:FIND or ~FEATURE_FIND_USER
+C812:FIND or ~FEATURE_FIND_MMIN
+C813:FIND or ~FEATURE_FIND_PRUNE
+C814:FIND or ~FEATURE_FIND_INUM
+C815:FIND or ~FEATURE_FIND_GROUP
+C816:FIND or ~FEATURE_FIND_TYPE
+C817:FIND or ~FEATURE_FIND_LINKS
+C818:FIND or ~FEATURE_FIND_PAREN
+C819:FIND or ~FEATURE_FIND_XDEV
+C820:FIND or ~FEATURE_FIND_SIZE
+C821:FIND or ~FEATURE_FIND_MTIME
+C822:FIND or ~FEATURE_FIND_EXEC
+C823:FIND or ~FEATURE_FIND_DEPTH
+C824:FIND or ~FEATURE_FIND_PATH
+C825:UMOUNT or ~FEATURE_UMOUNT_ALL
+C826:SORT or ~FEATURE_SORT_BIG
+C827:BBCONFIG or ~FEATURE_COMPRESS_BBCONFIG
+C828:HEAD or ~FEATURE_FANCY_HEAD
+C829:HUSH_INTERACTIVE or ~HUSH_SAVEHISTORY
+C830:HUSH_INTERACTIVE or ~HUSH_JOB
+C831:DEBUG or ~DEBUG_PESSIMIZE
+C832:NETSTAT or ~FEATURE_NETSTAT_WIDE
+C833:NETSTAT or ~FEATURE_NETSTAT_PRG
+C834:FBSET or ~FEATURE_FBSET_FANCY
+C835:FBSET or ~FEATURE_FBSET_READMODE
+C836:INSTALL or ~FEATURE_INSTALL_LONG_OPTIONS
+C837:FEATURE_USE_INITTAB or ~FEATURE_KILL_REMOVED
+C838:FEATURE_MDEV_CONF or ~FEATURE_MDEV_EXEC
+C839:FEATURE_MDEV_CONF or ~FEATURE_MDEV_RENAME
+C840:SPLIT or ~FEATURE_SPLIT_FANCY
+C841:ASH or ~ASH_BUILTIN_PRINTF
+C842:ASH or ~ASH_ALIAS
+C843:ASH or ~ASH_CMDCMD
+C844:ASH or ~ASH_BASH_COMPAT
+C845:ASH or ~ASH_MAIL
+C846:ASH or ~ASH_BUILTIN_ECHO
+C847:ASH or ~ASH_JOB_CONTROL
+C848:ASH or ~ASH_GETOPTS
+C849:ASH or ~ASH_OPTIMIZE_FOR_SIZE
+C850:ASH or ~ASH_BUILTIN_TEST
+C851:ASH or ~ASH_RANDOM_SUPPORT
+C852:ASH or ~ASH_EXPAND_PRMT
+C853:MKDIR or ~FEATURE_MKDIR_LONG_OPTIONS
+C854:FEATURE_IPC_SYSLOG or ~FEATURE_IPC_SYSLOG_BUFFER_SIZE
+C855:FEATURE_IPC_SYSLOG or ~LOGREAD
+C856:FEATURE_IPC_SYSLOG_BUFFER_SIZE or ~FEATURE_IPC_SYSLOG
+C857:STAT or ~FEATURE_STAT_FORMAT
+C858:GETOPT or ~FEATURE_GETOPT_LONG
+C859:FEATURE_HTTPD_CGI or ~FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
+C860:FEATURE_HTTPD_CGI or ~FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
+C861:FEATURE_LESS_DASHCMD or ~FEATURE_LESS_LINENUMS
+C862:BUILD_LIBBUSYBOX or ~FEATURE_SHARED_BUSYBOX
+C863:BUILD_LIBBUSYBOX or ~FEATURE_INDIVIDUAL
+C864:POPMAILDIR or ~FEATURE_POPMAILDIR_DELIVERY
+C865:DELGROUP or ~FEATURE_DEL_USER_FROM_GROUP
+C866:USE_BB_CRYPT or ~USE_BB_CRYPT_SHA
+C867:REFORMIME or ~FEATURE_REFORMIME_COMPAT
+C868:AWK or ~FEATURE_AWK_LIBM
+C869:IPCALC or ~FEATURE_IPCALC_LONG_OPTIONS
+C870:IPCALC or ~FEATURE_IPCALC_FANCY
+C871:SH_MATH_SUPPORT or ~SH_MATH_SUPPORT_64
+C872:DEVFSD or ~DEVFSD_MODLOAD
+C873:DEVFSD or ~DEVFSD_VERBOSE
+C874:DEVFSD or ~DEVFSD_FG_NP
+C875:SHOW_USAGE or ~FEATURE_COMPRESS_USAGE
+C876:SHOW_USAGE or ~FEATURE_VERBOSE_USAGE
+C877:ADDGROUP or ~FEATURE_ADDUSER_TO_GROUP
+C878:ADDGROUP or ~FEATURE_ADDGROUP_LONG_OPTIONS
+C879:FEATURE_TAR_LONG_OPTIONS or ~FEATURE_TAR_TO_COMMAND
+C880:CHOWN or ~FEATURE_CHOWN_LONG_OPTIONS
+C881:RESIZE or ~FEATURE_RESIZE_PRINT
+C882:WGET or ~FEATURE_WGET_TIMEOUT
+C883:WGET or ~FEATURE_WGET_STATUSBAR
+C884:WGET or ~FEATURE_WGET_AUTHENTICATION
+C885:WGET or ~FEATURE_WGET_LONG_OPTIONS
+C886:EJECT or ~FEATURE_EJECT_SCSI
+C887:FTPD or ~FEATURE_FTP_WRITE
+C888:FTPD or ~FEATURE_FTPD_ACCEPT_BROKEN_LIST
+C889:FEATURE_FANCY_SLEEP or ~FEATURE_FLOAT_SLEEP
+C890:FEATURE_INSMOD_LOAD_MAP or ~FEATURE_INSMOD_LOAD_MAP_FULL
+C891:RUN_PARTS or ~FEATURE_RUN_PARTS_LONG_OPTIONS
+C892:RUN_PARTS or ~FEATURE_RUN_PARTS_FANCY
+C893:MOUNT or ~FEATURE_MOUNT_FSTAB
+C894:MOUNT or ~FEATURE_MOUNT_FAKE
+C895:MOUNT or ~FEATURE_MOUNT_FLAGS
+C896:MOUNT or ~FEATURE_MOUNT_LABEL
+C897:MOUNT or ~FEATURE_MOUNT_VERBOSE
+C898:MOUNT or ~FEATURE_MOUNT_NFS
+C899:MOUNT or ~FEATURE_MOUNT_CIFS
+C900:MOUNT or ~FEATURE_MOUNT_HELPERS
+C901:UNICODE_SUPPORT or ~SUBST_WCHAR
+C902:UNICODE_SUPPORT or ~UNICODE_WIDE_WCHARS
+C903:UNICODE_SUPPORT or ~UNICODE_COMBINING_WCHARS
+C904:UNICODE_SUPPORT or ~UNICODE_USING_LOCALE
+C905:UNICODE_SUPPORT or ~UNICODE_BIDI_SUPPORT
+C906:UNICODE_SUPPORT or ~UNICODE_PRESERVE_BROKEN
+C907:UNICODE_SUPPORT or ~LAST_SUPPORTED_WCHAR
+C908:UNICODE_SUPPORT or ~FEATURE_CHECK_UNICODE_IN_ENV
+C909:SUBST_WCHAR or ~UNICODE_SUPPORT
+C910:LAST_SUPPORTED_WCHAR or ~UNICODE_SUPPORT
+C911:DATE or ~FEATURE_DATE_ISOFMT
+C912:DATE or ~FEATURE_DATE_NANO
+C913:DATE or ~FEATURE_DATE_COMPAT
+C914:TASKSET or ~FEATURE_TASKSET_FANCY
+C915:LZOP or ~LZOP_COMPR_HIGH
+C916:FEATURE_IFUPDOWN_IP or ~FEATURE_IFUPDOWN_IFCONFIG_BUILTIN
+C917:FEATURE_IFUPDOWN_IP or ~FEATURE_IFUPDOWN_IP_BUILTIN
+C918:DMESG or ~FEATURE_DMESG_PRETTY
+C919:UDHCPD or ~DHCPD_LEASES_FILE
+C920:UDHCPD or ~FEATURE_UDHCPD_WRITE_LEASES_EARLY
+C921:UDHCPD or ~DHCPRELAY
+C922:UDHCPD or ~DUMPLEASES
+C923:DHCPD_LEASES_FILE or ~UDHCPD
+C924:FEATURE_MOUNT_LOOP or ~FEATURE_MOUNT_LOOP_CREATE
+C925:UDHCPC or ~FEATURE_UDHCPC_ARPING
+C926:FEATURE_LS_COLOR or ~FEATURE_LS_COLOR_IS_DEFAULT
+C927:FEATURE_BRCTL_FANCY or ~FEATURE_BRCTL_SHOW
+C928:~UNICODE_USING_LOCALE or UNICODE_SUPPORT
+C929:~UNICODE_USING_LOCALE or LOCALE_SUPPORT
+C930:~FEATURE_CHECK_UNICODE_IN_ENV or UNICODE_SUPPORT
+C931:~FEATURE_CHECK_UNICODE_IN_ENV or ~UNICODE_USING_LOCALE
+C932:~UNICODE_BIDI_SUPPORT or UNICODE_SUPPORT
+C933:~UNICODE_BIDI_SUPPORT or ~UNICODE_USING_LOCALE
+C934:FEATURE_SYSLOG or ~NAMEIF or ~PLATFORM_LINUX
+C935:FEATURE_SYSLOG or ~ZCIP or ~PLATFORM_LINUX
+C936:FEATURE_SYSLOG or ~FEATURE_MOUNT_NFS or ~MOUNT
+C937:FEATURE_SYSLOG or ~DEVFSD or ~PLATFORM_LINUX
+C938:FEATURE_SYSLOG or ~SULOGIN
+C939:FEATURE_SYSLOG or ~PASSWD
+C940:FEATURE_SYSLOG or ~CROND
+C941:FEATURE_SYSLOG or ~FAKEIDENTD
+C942:FEATURE_SYSLOG or ~LOGIN
+C943:FEATURE_SYSLOG or ~INIT
+C944:FEATURE_SYSLOG or ~INETD
+C945:FEATURE_SYSLOG or ~LOGGER
+C946:FEATURE_SYSLOG or ~GETTY
+C947:FEATURE_SYSLOG or ~SU
+C948:FEATURE_SYSLOG or ~TELNETD
+C949:~FEATURE_SYSLOG or SULOGIN or PASSWD or CROND or FAKEIDENTD or LOGIN or INIT or INETD or LOGGER or GETTY or SU or TELNETD or NAMEIF or ZCIP or FEATURE_MOUNT_NFS or DEVFSD
+C950:~FEATURE_SYSLOG or SULOGIN or PASSWD or CROND or FAKEIDENTD or LOGIN or INIT or INETD or LOGGER or GETTY or SU or TELNETD or NAMEIF or ZCIP or MOUNT or DEVFSD
+C951:~FEATURE_SYSLOG or SULOGIN or PASSWD or CROND or FAKEIDENTD or LOGIN or INIT or INETD or LOGGER or GETTY or SU or TELNETD or PLATFORM_LINUX or FEATURE_MOUNT_NFS
+C952:~FEATURE_SYSLOG or SULOGIN or PASSWD or CROND or FAKEIDENTD or LOGIN or INIT or INETD or LOGGER or GETTY or SU or TELNETD or PLATFORM_LINUX or MOUNT
+C953:FEATURE_HAVE_RPC or ~FEATURE_MOUNT_NFS or ~MOUNT
+C954:FEATURE_HAVE_RPC or ~FEATURE_INETD_RPC or ~INETD
+C955:~FEATURE_HAVE_RPC or FEATURE_MOUNT_NFS or FEATURE_INETD_RPC
+C956:~FEATURE_HAVE_RPC or FEATURE_MOUNT_NFS or INETD
+C957:~FEATURE_HAVE_RPC or MOUNT or FEATURE_INETD_RPC
+C958:~FEATURE_HAVE_RPC or MOUNT or INETD
+C959:~STATIC or ~PIE
+C960:~BUILD_LIBBUSYBOX or ~FEATURE_PREFER_APPLETS
+C961:~BUILD_LIBBUSYBOX or ~PIE
+C962:~BUILD_LIBBUSYBOX or ~STATIC
+C963:FEATURE_INSTALLER or FEATURE_SH_STANDALONE or FEATURE_PREFER_APPLETS or ~INSTALL_APPLET_DONT
+C964:MORE or TOP or POWERTOP or ~FEATURE_USE_TERMIOS
+C965:GZIP or ~FEATURE_GZIP_LONG_OPTIONS
+C966:LONG_OPTS or ~FEATURE_GZIP_LONG_OPTIONS
+C967:FEATURE_SEAMLESS_Z or FEATURE_SEAMLESS_GZ or FEATURE_SEAMLESS_BZ2 or FEATURE_SEAMLESS_LZMA or FEATURE_SEAMLESS_XZ or ~FEATURE_TAR_AUTODETECT
+C968:TAR or ~FEATURE_TAR_AUTODETECT
+C969:TAR or ~FEATURE_TAR_LONG_OPTIONS
+C970:LONG_OPTS or ~FEATURE_TAR_LONG_OPTIONS
+C971:~FEATURE_TAR_SELINUX or TAR
+C972:~FEATURE_TAR_SELINUX or SELINUX
+C973:CHOWN or ~FEATURE_CHOWN_LONG_OPTIONS
+C974:LONG_OPTS or ~FEATURE_CHOWN_LONG_OPTIONS
+C975:CP or ~FEATURE_CP_LONG_OPTIONS
+C976:LONG_OPTS or ~FEATURE_CP_LONG_OPTIONS
+C977:~DOS2UNIX or UNIX2DOS
+C978:~UNIX2DOS or DOS2UNIX
+C979:ENV or ~FEATURE_ENV_LONG_OPTIONS
+C980:LONG_OPTS or ~FEATURE_ENV_LONG_OPTIONS
+C981:EXPAND or ~FEATURE_EXPAND_LONG_OPTIONS
+C982:LONG_OPTS or ~FEATURE_EXPAND_LONG_OPTIONS
+C983:INSTALL or ~FEATURE_INSTALL_LONG_OPTIONS
+C984:LONG_OPTS or ~FEATURE_INSTALL_LONG_OPTIONS
+C985:LS or ~FEATURE_LS_COLOR
+C986:LONG_OPTS or ~FEATURE_LS_COLOR
+C987:MKDIR or ~FEATURE_MKDIR_LONG_OPTIONS
+C988:LONG_OPTS or ~FEATURE_MKDIR_LONG_OPTIONS
+C989:MV or ~FEATURE_MV_LONG_OPTIONS
+C990:LONG_OPTS or ~FEATURE_MV_LONG_OPTIONS
+C991:RMDIR or ~FEATURE_RMDIR_LONG_OPTIONS
+C992:LONG_OPTS or ~FEATURE_RMDIR_LONG_OPTIONS
+C993:UNEXPAND or ~FEATURE_UNEXPAND_LONG_OPTIONS
+C994:LONG_OPTS or ~FEATURE_UNEXPAND_LONG_OPTIONS
+C995:FEATURE_UTMP or ~WHO
+C996:CP or MV or ~FEATURE_PRESERVE_HARDLINKS
+C997:LS or MORE or TELNET or ~FEATURE_AUTOWIDTH
+C998:DF or DU or LS or ~FEATURE_HUMAN_READABLE
+C999:MD5SUM or SHA1SUM or SHA256SUM or SHA512SUM or ~FEATURE_MD5_SHA1_SUM_CHECK
+C1000:SETCONSOLE or ~FEATURE_SETCONSOLE_LONG_OPTIONS
+C1001:LONG_OPTS or ~FEATURE_SETCONSOLE_LONG_OPTIONS
+C1002:LOADFONT or SETFONT or ~FEATURE_LOADFONT_PSF2
+C1003:LOADFONT or SETFONT or ~FEATURE_LOADFONT_RAW
+C1004:RUN_PARTS or ~FEATURE_RUN_PARTS_LONG_OPTIONS
+C1005:LONG_OPTS or ~FEATURE_RUN_PARTS_LONG_OPTIONS
+C1006:START_STOP_DAEMON or ~FEATURE_START_STOP_DAEMON_LONG_OPTIONS
+C1007:LONG_OPTS or ~FEATURE_START_STOP_DAEMON_LONG_OPTIONS
+C1008:DIFF or ~FEATURE_DIFF_LONG_OPTIONS
+C1009:LONG_OPTS or ~FEATURE_DIFF_LONG_OPTIONS
+C1010:FIND or ~FEATURE_FIND_DELETE
+C1011:FEATURE_FIND_DEPTH or ~FEATURE_FIND_DELETE
+C1012:~FEATURE_FIND_CONTEXT or FIND
+C1013:~FEATURE_FIND_CONTEXT or SELINUX
+C1014:HALT or ~FEATURE_CALL_TELINIT
+C1015:~INIT or ~FEATURE_CALL_TELINIT
+C1016:USE_BB_PWD_GRP or ~USE_BB_SHADOW
+C1017:FEATURE_SHADOWPASSWDS or ~USE_BB_SHADOW
+C1018:ADDUSER or ~FEATURE_ADDUSER_LONG_OPTIONS
+C1019:LONG_OPTS or ~FEATURE_ADDUSER_LONG_OPTIONS
+C1020:ADDGROUP or ~FEATURE_ADDGROUP_LONG_OPTIONS
+C1021:LONG_OPTS or ~FEATURE_ADDGROUP_LONG_OPTIONS
+C1022:~INSMOD or PLATFORM_LINUX
+C1023:~INSMOD or ~MODPROBE_SMALL
+C1024:~RMMOD or PLATFORM_LINUX
+C1025:~RMMOD or ~MODPROBE_SMALL
+C1026:~LSMOD or PLATFORM_LINUX
+C1027:~LSMOD or ~MODPROBE_SMALL
+C1028:~MODPROBE or PLATFORM_LINUX
+C1029:~MODPROBE or ~MODPROBE_SMALL
+C1030:~DEPMOD or PLATFORM_LINUX
+C1031:~DEPMOD or ~MODPROBE_SMALL
+C1032:~FEATURE_2_4_MODULES or INSMOD or RMMOD or LSMOD
+C1033:~FEATURE_2_4_MODULES or PLATFORM_LINUX
+C1034:~FEATURE_INSMOD_TRY_MMAP or INSMOD or MODPROBE_SMALL
+C1035:~FEATURE_INSMOD_TRY_MMAP or PLATFORM_LINUX
+C1036:~FEATURE_INSMOD_VERSION_CHECKING or INSMOD or MODPROBE
+C1037:~FEATURE_INSMOD_VERSION_CHECKING or PLATFORM_LINUX
+C1038:~FEATURE_INSMOD_VERSION_CHECKING or FEATURE_2_4_MODULES
+C1039:~FEATURE_INSMOD_KSYMOOPS_SYMBOLS or INSMOD or MODPROBE
+C1040:~FEATURE_INSMOD_KSYMOOPS_SYMBOLS or PLATFORM_LINUX
+C1041:~FEATURE_INSMOD_KSYMOOPS_SYMBOLS or FEATURE_2_4_MODULES
+C1042:~FEATURE_INSMOD_LOADINKMEM or INSMOD or MODPROBE
+C1043:~FEATURE_INSMOD_LOADINKMEM or PLATFORM_LINUX
+C1044:~FEATURE_INSMOD_LOADINKMEM or FEATURE_2_4_MODULES
+C1045:~FEATURE_INSMOD_LOAD_MAP or PLATFORM_LINUX
+C1046:~FEATURE_INSMOD_LOAD_MAP or FEATURE_2_4_MODULES
+C1047:~FEATURE_INSMOD_LOAD_MAP or INSMOD
+C1048:LSMOD or FEATURE_2_4_MODULES or ~FEATURE_CHECK_TAINTED_MODULE
+C1049:PLATFORM_LINUX or ~FEATURE_CHECK_TAINTED_MODULE
+C1050:~MODPROBE_SMALL or ~FEATURE_CHECK_TAINTED_MODULE
+C1051:DEPMOD or MODPROBE or ~FEATURE_MODUTILS_ALIAS
+C1052:PLATFORM_LINUX or ~FEATURE_MODUTILS_ALIAS
+C1053:DEPMOD or MODPROBE or ~FEATURE_MODUTILS_SYMBOLS
+C1054:PLATFORM_LINUX or ~FEATURE_MODUTILS_SYMBOLS
+C1055:FDISK or ~FDISK_SUPPORT_LARGE_DISKS or LFS
+C1056:FDISK or FDISK_SUPPORT_LARGE_DISKS or ~LFS
+C1057:FSCK_MINIX or MKFS_MINIX or ~FEATURE_MINIX2
+C1058:HWCLOCK or ~FEATURE_HWCLOCK_LONG_OPTIONS
+C1059:LONG_OPTS or ~FEATURE_HWCLOCK_LONG_OPTIONS
+C1060:MOUNT or FEATURE_MOUNT_FAKE or ~FEATURE_MTAB_SUPPORT or ~UMOUNT
+C1061:MOUNT or ~FEATURE_MOUNT_FAKE or UMOUNT
+C1062:MOUNT or ~FEATURE_MOUNT_FAKE or FEATURE_MTAB_SUPPORT
+C1063:MOUNT or UMOUNT or ~FEATURE_MOUNT_LOOP
+C1064:MOUNT or UMOUNT or ~FEATURE_MTAB_SUPPORT
+C1065:VOLUMEID or ~FEATURE_MOUNT_LABEL or ~MOUNT
+C1066:VOLUMEID or ~FINDFS or ~PLATFORM_LINUX
+C1067:VOLUMEID or ~BLKID or ~PLATFORM_LINUX
+C1068:~VOLUMEID or FEATURE_MOUNT_LABEL or FINDFS or BLKID
+C1069:~VOLUMEID or FEATURE_MOUNT_LABEL or PLATFORM_LINUX
+C1070:~VOLUMEID or MOUNT or FINDFS or BLKID
+C1071:~VOLUMEID or MOUNT or PLATFORM_LINUX
+C1072:VOLUMEID or ~FEATURE_VOLUMEID_EXT
+C1073:VOLUMEID or ~FEATURE_VOLUMEID_BTRFS
+C1074:VOLUMEID or ~FEATURE_VOLUMEID_REISERFS
+C1075:VOLUMEID or ~FEATURE_VOLUMEID_FAT
+C1076:VOLUMEID or ~FEATURE_VOLUMEID_HFS
+C1077:VOLUMEID or ~FEATURE_VOLUMEID_JFS
+C1078:VOLUMEID or ~FEATURE_VOLUMEID_XFS
+C1079:VOLUMEID or ~FEATURE_VOLUMEID_NTFS
+C1080:VOLUMEID or ~FEATURE_VOLUMEID_ISO9660
+C1081:VOLUMEID or ~FEATURE_VOLUMEID_UDF
+C1082:VOLUMEID or ~FEATURE_VOLUMEID_LUKS
+C1083:VOLUMEID or ~FEATURE_VOLUMEID_LINUXSWAP
+C1084:VOLUMEID or ~FEATURE_VOLUMEID_CRAMFS
+C1085:VOLUMEID or ~FEATURE_VOLUMEID_ROMFS
+C1086:VOLUMEID or ~FEATURE_VOLUMEID_SYSV
+C1087:VOLUMEID or ~FEATURE_VOLUMEID_OCFS2
+C1088:VOLUMEID or ~FEATURE_VOLUMEID_LINUXRAID
+C1089:FEATURE_WTMP or ~LAST
+C1090:LFS or ~READAHEAD
+C1091:PLATFORM_LINUX or ~READAHEAD
+C1092:FEATURE_IPV6 or ~FEATURE_PREFER_IPV4_ADDRESS
+C1093:FTPGET or FTPPUT or ~FEATURE_FTPGETPUT_LONG_OPTIONS
+C1094:LONG_OPTS or ~FEATURE_FTPGETPUT_LONG_OPTIONS
+C1095:~FEATURE_IFUPDOWN_IFCONFIG_BUILTIN or IFUPDOWN
+C1096:~FEATURE_IFUPDOWN_IFCONFIG_BUILTIN or ~FEATURE_IFUPDOWN_IP
+C1097:IFUPDOWN or ~FEATURE_IFUPDOWN_IPV6
+C1098:FEATURE_IPV6 or ~FEATURE_IFUPDOWN_IPV6
+C1099:~FEATURE_IP_SHORT_FORMS or ~FEATURE_IP_ADDRESS or IPADDR
+C1100:~IPADDR or FEATURE_IP_SHORT_FORMS
+C1101:~IPADDR or FEATURE_IP_ADDRESS
+C1102:~FEATURE_IP_SHORT_FORMS or ~FEATURE_IP_LINK or IPLINK
+C1103:~IPLINK or FEATURE_IP_SHORT_FORMS
+C1104:~IPLINK or FEATURE_IP_LINK
+C1105:~FEATURE_IP_SHORT_FORMS or ~FEATURE_IP_ROUTE or IPROUTE
+C1106:~IPROUTE or FEATURE_IP_SHORT_FORMS
+C1107:~IPROUTE or FEATURE_IP_ROUTE
+C1108:~FEATURE_IP_SHORT_FORMS or ~FEATURE_IP_TUNNEL or IPTUNNEL
+C1109:~IPTUNNEL or FEATURE_IP_SHORT_FORMS
+C1110:~IPTUNNEL or FEATURE_IP_TUNNEL
+C1111:~FEATURE_IP_SHORT_FORMS or ~FEATURE_IP_RULE or IPRULE
+C1112:~IPRULE or FEATURE_IP_SHORT_FORMS
+C1113:~IPRULE or FEATURE_IP_RULE
+C1114:IPCALC or ~FEATURE_IPCALC_LONG_OPTIONS
+C1115:LONG_OPTS or ~FEATURE_IPCALC_LONG_OPTIONS
+C1116:FEATURE_IPV6 or ~PING6
+C1117:PING or ~PING6
+C1118:TFTP or ~FEATURE_TFTP_PROGRESS_BAR
+C1119:FEATURE_TFTP_BLOCKSIZE or ~FEATURE_TFTP_PROGRESS_BAR
+C1120:FEATURE_IPV6 or ~TRACEROUTE6
+C1121:TRACEROUTE or ~TRACEROUTE6
+C1122:IFUPDOWN or ~IFUPDOWN_UDHCPC_CMD_OPTIONS
+C1123:UDHCPC or ~IFUPDOWN_UDHCPC_CMD_OPTIONS
+C1124:WGET or ~FEATURE_WGET_LONG_OPTIONS
+C1125:LONG_OPTS or ~FEATURE_WGET_LONG_OPTIONS
+C1126:PS or ~FEATURE_PS_TIME
+C1127:DESKTOP or ~FEATURE_PS_TIME
+C1128:PLATFORM_LINUX or ~FEATURE_PS_TIME
+C1129:PS or ~FEATURE_PS_ADDITIONAL_COLUMNS
+C1130:DESKTOP or ~FEATURE_PS_ADDITIONAL_COLUMNS
+C1131:FEATURE_PS_TIME or ~FEATURE_PS_UNUSUAL_SYSTEMS
+C1132:SELINUX or ~CHCON
+C1133:SELINUX or ~FEATURE_CHCON_LONG_OPTIONS
+C1134:CHCON or ~FEATURE_CHCON_LONG_OPTIONS
+C1135:LONG_OPTS or ~FEATURE_CHCON_LONG_OPTIONS
+C1136:SELINUX or ~GETENFORCE
+C1137:SELINUX or ~GETSEBOOL
+C1138:SELINUX or ~LOAD_POLICY
+C1139:SELINUX or ~MATCHPATHCON
+C1140:SELINUX or ~RESTORECON
+C1141:SELINUX or ~RUNCON
+C1142:SELINUX or ~FEATURE_RUNCON_LONG_OPTIONS
+C1143:RUNCON or ~FEATURE_RUNCON_LONG_OPTIONS
+C1144:LONG_OPTS or ~FEATURE_RUNCON_LONG_OPTIONS
+C1145:SELINUX or ~SELINUXENABLED
+C1146:SELINUX or ~SETENFORCE
+C1147:SELINUX or ~SETFILES
+C1148:SELINUX or ~SETSEBOOL
+C1149:SELINUX or ~SESTATUS
+C1150:~NOMMU or ~ASH
+C1151:HUSH_INTERACTIVE or ~HUSH_SAVEHISTORY
+C1152:FEATURE_EDITING_SAVEHISTORY or ~HUSH_SAVEHISTORY
+C1153:~FEATURE_SH_IS_ASH or ASH
+C1154:~FEATURE_SH_IS_ASH or ~NOMMU
+C1155:HUSH or ~FEATURE_SH_IS_HUSH
+C1156:~FEATURE_BASH_IS_ASH or ASH
+C1157:~FEATURE_BASH_IS_ASH or ~NOMMU
+C1158:HUSH or ~FEATURE_BASH_IS_HUSH
+C1159:ASH or HUSH or ~SH_MATH_SUPPORT
+C1160:HUSH or ASH or ~FEATURE_SH_EXTRA_QUIET
+C1161:~FEATURE_SH_STANDALONE or HUSH or ASH
+C1162:~FEATURE_SH_STANDALONE or FEATURE_PREFER_APPLETS
+C1163:~FEATURE_SH_NOFORK or HUSH or ASH
+C1164:~FEATURE_SH_NOFORK or FEATURE_PREFER_APPLETS
+
+
+
+ `,
}),
async mounted() {
@@ -470,20 +3093,32 @@ export default Vue.extend({
//await this.fetchFeatureModelOfFamily(this.family.id)
},
+ watch: {
+ selectedRightFM: function (newValue) {
+ console.log(newValue);
+ },
+ },
+
created() {
this.showTutorial = !localStorage.fileDetailTutorialCompleted;
},
computed: {
+ isRightFmSelected() {
+ return this.selectedRightFM !== -1;
+ },
+ getMyFM() {
+ return this.$store.state.featureModels.filter((item) => item.owner);
+ },
getStati() {
/*function compute(amount) {
- return (
- (this.itemsAnalysis.filter((obj) => obj.status === amount)
- .length /
- this.itemsAnalysis.length) *
- 100
- );
- }*/
+ return (
+ (this.itemsAnalysis.filter((obj) => obj.status === amount)
+ .length /
+ this.itemsAnalysis.length) *
+ 100
+ );
+ }*/
return {
success: {
percentage:
@@ -545,14 +3180,30 @@ export default Vue.extend({
this.removeLoading = false;
await this.$router.push('/');
},
+ showArtifactDialog(item) {
+ this.selectedArtifact = item;
+ this.dialogArtifact = true;
+ },
+ async compare() {
+ this.shouldCompare = true;
+ this.loadingComparableFM = true;
+ await this.$store.dispatch('fetchFeatureModels');
+ this.loadingComparableFM = false;
+ },
/*async fetchFeatureModelOfFamily(value) {
- await api
- .get(`${API_URL}files/uploaded/confirmed/?family=${value}`)
- .then((response) => {
- this.files = response.data
- this.loadingTable = false
- })
- },*/
+ await api
+ .get(`${API_URL}files/uploaded/confirmed/?family=${value}`)
+ .then((response) => {
+ this.files = response.data
+ this.loadingTable = false
+ })
+},*/
},
});
+
+
diff --git a/frontendVue3/.browserslistrc b/frontendVue3/.browserslistrc
new file mode 100644
index 00000000..dc3bc09a
--- /dev/null
+++ b/frontendVue3/.browserslistrc
@@ -0,0 +1,4 @@
+> 1%
+last 2 versions
+not dead
+not ie 11
diff --git a/frontendVue3/.editorconfig b/frontendVue3/.editorconfig
new file mode 100644
index 00000000..7053c49a
--- /dev/null
+++ b/frontendVue3/.editorconfig
@@ -0,0 +1,5 @@
+[*.{js,jsx,ts,tsx,vue}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/frontendVue3/.env.development b/frontendVue3/.env.development
new file mode 100644
index 00000000..99a38bbf
--- /dev/null
+++ b/frontendVue3/.env.development
@@ -0,0 +1,4 @@
+VITE_APP_DOMAIN="http://localhost:8000/"
+VITE_APP_DOMAIN_FRONTEND="http://localhost:3000/"
+VITE_APP_DOMAIN_WEBSOCKET="localhost"
+VITE_APP_DOMAIN_WEBSOCKET_PORT=9000
diff --git a/frontendVue3/.env.production b/frontendVue3/.env.production
new file mode 100644
index 00000000..35fb2632
--- /dev/null
+++ b/frontendVue3/.env.production
@@ -0,0 +1,5 @@
+VITE_APP_DOMAIN="https://doener.tobiasbetz.de/"
+VITE_APP_DOMAIN_FRONTEND="https://ddueruem.tobiasbetz.de/"
+VITE_APP_DOMAIN_WEBSOCKET="boerek.tobiasbetz.de"
+VITE_APP_DOMAIN_WEBSOCKET_PORT=443
+NODE_ENV="production"
\ No newline at end of file
diff --git a/frontendVue3/.env.testing b/frontendVue3/.env.testing
new file mode 100644
index 00000000..99a38bbf
--- /dev/null
+++ b/frontendVue3/.env.testing
@@ -0,0 +1,4 @@
+VITE_APP_DOMAIN="http://localhost:8000/"
+VITE_APP_DOMAIN_FRONTEND="http://localhost:3000/"
+VITE_APP_DOMAIN_WEBSOCKET="localhost"
+VITE_APP_DOMAIN_WEBSOCKET_PORT=9000
diff --git a/frontendVue3/.eslintrc.js b/frontendVue3/.eslintrc.js
new file mode 100644
index 00000000..6e7e1b14
--- /dev/null
+++ b/frontendVue3/.eslintrc.js
@@ -0,0 +1,10 @@
+module.exports = {
+ root: true,
+ env: {
+ node: true,
+ },
+ extends: [
+ 'plugin:vue/vue3-essential',
+ 'eslint:recommended',
+ ],
+}
diff --git a/frontendVue3/.gitignore b/frontendVue3/.gitignore
new file mode 100644
index 00000000..11f5d714
--- /dev/null
+++ b/frontendVue3/.gitignore
@@ -0,0 +1,22 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/frontendVue3/.prettierrc b/frontendVue3/.prettierrc
new file mode 100644
index 00000000..5a13dda7
--- /dev/null
+++ b/frontendVue3/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "tabWidth": 4,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": true,
+ "bracketSpacing": true,
+ "jsxBracketSameLine": false
+}
\ No newline at end of file
diff --git a/frontendVue3/README.md b/frontendVue3/README.md
new file mode 100644
index 00000000..f080963f
--- /dev/null
+++ b/frontendVue3/README.md
@@ -0,0 +1,57 @@
+# essentials
+
+## Project setup
+
+```
+# yarn
+yarn
+
+# npm
+npm install
+
+# pnpm
+pnpm install
+```
+
+### Compiles and hot-reloads for development
+
+```
+# yarn
+yarn dev
+
+# npm
+npm run dev
+
+# pnpm
+pnpm dev
+```
+
+### Compiles and minifies for production
+
+```
+# yarn
+yarn build
+
+# npm
+npm run build
+
+# pnpm
+pnpm build
+```
+
+### Lints and fixes files
+
+```
+# yarn
+yarn lint
+
+# npm
+npm run lint
+
+# pnpm
+pnpm lint
+```
+
+### Customize configuration
+
+See [Configuration Reference](https://vitejs.dev/config/).
diff --git a/frontendVue3/index.html b/frontendVue3/index.html
new file mode 100644
index 00000000..ae8e49c2
--- /dev/null
+++ b/frontendVue3/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+ variability.dev
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/jsconfig.json b/frontendVue3/jsconfig.json
new file mode 100644
index 00000000..4aafc5f6
--- /dev/null
+++ b/frontendVue3/jsconfig.json
@@ -0,0 +1,19 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "module": "esnext",
+ "baseUrl": "./",
+ "moduleResolution": "node",
+ "paths": {
+ "@/*": [
+ "src/*"
+ ]
+ },
+ "lib": [
+ "esnext",
+ "dom",
+ "dom.iterable",
+ "scripthost"
+ ]
+ }
+}
diff --git a/frontendVue3/package-lock.json b/frontendVue3/package-lock.json
new file mode 100644
index 00000000..4bb0ec94
--- /dev/null
+++ b/frontendVue3/package-lock.json
@@ -0,0 +1,5233 @@
+{
+ "name": "frontend",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "frontend",
+ "version": "0.0.0",
+ "dependencies": {
+ "@mdi/font": "7.0.96",
+ "axios": "^1.3.4",
+ "core-js": "^3.8.3",
+ "d3": "^7.4.4",
+ "d3-flextree": "^2.1.2",
+ "d3-hierarchy": "^3.1.2",
+ "js-levenshtein": "^1.1.6",
+ "peerjs": "^1.4.7",
+ "pinia": "^2.0.23",
+ "qrcode.vue": "^3.4.0",
+ "roboto-fontface": "*",
+ "unique-names-generator": "^4.7.1",
+ "vue": "^3.2.13",
+ "vue-router": "^4.0.0",
+ "vuetify": "^3.0.0",
+ "webfontloader": "^1.0.0",
+ "xml-beautifier": "^0.5.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^3.0.3",
+ "eslint": "^8.22.0",
+ "eslint-plugin-vue": "^9.3.0",
+ "sass": "^1.55.0",
+ "vite": "^3.1.9",
+ "vite-plugin-vuetify": "^1.0.0-alpha.12"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.21.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz",
+ "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+ "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+ "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
+ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@mdi/font": {
+ "version": "7.0.96",
+ "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.0.96.tgz",
+ "integrity": "sha512-rzlxTfR64hqY8yiBzDjmANfcd8rv+T5C0Yedv/TWk2QyAQYdc66e0kaN1ipmnYU3RukHRTRcBARHzzm+tIhL7w=="
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.3.17",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/@swc/helpers/-/helpers-0.3.17.tgz",
+ "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz",
+ "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==",
+ "dev": true,
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^3.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
+ "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
+ "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
+ "dependencies": {
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
+ "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/compiler-ssr": "3.2.47",
+ "@vue/reactivity-transform": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
+ "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz",
+ "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+ "dependencies": {
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "node_modules/@vue/reactivity-transform": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
+ "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+ "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+ "dependencies": {
+ "@vue/reactivity": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+ "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+ "dependencies": {
+ "@vue/runtime-core": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "csstype": "^2.6.8"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+ "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.2.47",
+ "@vue/shared": "3.2.47"
+ },
+ "peerDependencies": {
+ "vue": "3.2.47"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz",
+ "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
+ },
+ "node_modules/@vuetify/loader-shared": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-1.7.1.tgz",
+ "integrity": "sha512-kLUvuAed6RCvkeeTNJzuy14pqnkur8lTuner7v7pNE/kVhPR97TuyXwBSBMR1cJeiLiOfu6SF5XlCYbXByEx1g==",
+ "devOptional": true,
+ "dependencies": {
+ "find-cache-dir": "^3.3.2",
+ "upath": "^2.0.1"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0",
+ "vuetify": "^3.0.0-beta.4"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/axios": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
+ "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "devOptional": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "devOptional": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "devOptional": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/core-js": {
+ "version": "3.28.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.28.0.tgz",
+ "integrity": "sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==",
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
+ },
+ "node_modules/d3": {
+ "version": "7.8.4",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3/-/d3-7.8.4.tgz",
+ "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "3",
+ "d3-axis": "3",
+ "d3-brush": "3",
+ "d3-chord": "3",
+ "d3-color": "3",
+ "d3-contour": "4",
+ "d3-delaunay": "6",
+ "d3-dispatch": "3",
+ "d3-drag": "3",
+ "d3-dsv": "3",
+ "d3-ease": "3",
+ "d3-fetch": "3",
+ "d3-force": "3",
+ "d3-format": "3",
+ "d3-geo": "3",
+ "d3-hierarchy": "3",
+ "d3-interpolate": "3",
+ "d3-path": "3",
+ "d3-polygon": "3",
+ "d3-quadtree": "3",
+ "d3-random": "3",
+ "d3-scale": "4",
+ "d3-scale-chromatic": "3",
+ "d3-selection": "3",
+ "d3-shape": "3",
+ "d3-time": "3",
+ "d3-time-format": "4",
+ "d3-timer": "3",
+ "d3-transition": "3",
+ "d3-zoom": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-array/-/d3-array-3.2.3.tgz",
+ "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-axis": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-brush": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-brush/-/d3-brush-3.0.0.tgz",
+ "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "3",
+ "d3-transition": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-chord": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-chord/-/d3-chord-3.0.1.tgz",
+ "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-contour": {
+ "version": "4.0.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-contour/-/d3-contour-4.0.2.tgz",
+ "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-delaunay": {
+ "version": "6.0.4",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+ "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+ "license": "ISC",
+ "dependencies": {
+ "delaunator": "5"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dispatch": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-drag": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-drag/-/d3-drag-3.0.0.tgz",
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-selection": "3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-dsv": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+ "license": "ISC",
+ "dependencies": {
+ "commander": "7",
+ "iconv-lite": "0.6",
+ "rw": "1"
+ },
+ "bin": {
+ "csv2json": "bin/dsv2json.js",
+ "csv2tsv": "bin/dsv2dsv.js",
+ "dsv2dsv": "bin/dsv2dsv.js",
+ "dsv2json": "bin/dsv2json.js",
+ "json2csv": "bin/json2dsv.js",
+ "json2dsv": "bin/json2dsv.js",
+ "json2tsv": "bin/json2dsv.js",
+ "tsv2csv": "bin/dsv2dsv.js",
+ "tsv2json": "bin/dsv2json.js"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-fetch": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-fetch/-/d3-fetch-3.0.1.tgz",
+ "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dsv": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-flextree": {
+ "version": "2.1.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-flextree/-/d3-flextree-2.1.2.tgz",
+ "integrity": "sha512-gJiHrx5uTTHq44bjyIb3xpbmmdZcWLYPKeO9EPVOq8EylMFOiH2+9sWqKAiQ4DcFuOZTAxPOQyv0Rnmji/g15A==",
+ "license": "WTFPL",
+ "dependencies": {
+ "d3-hierarchy": "^1.1.5"
+ }
+ },
+ "node_modules/d3-flextree/node_modules/d3-hierarchy": {
+ "version": "1.1.9",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
+ "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-geo": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-geo/-/d3-geo-3.1.0.tgz",
+ "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-polygon": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-polygon/-/d3-polygon-3.0.1.tgz",
+ "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-random": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-random/-/d3-random-3.0.1.tgz",
+ "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale-chromatic": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+ "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-selection": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-transition": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-transition/-/d3-transition-3.0.1.tgz",
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3",
+ "d3-dispatch": "1 - 3",
+ "d3-ease": "1 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-timer": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "d3-selection": "2 - 3"
+ }
+ },
+ "node_modules/d3-zoom": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-zoom/-/d3-zoom-3.0.0.tgz",
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "2 - 3",
+ "d3-transition": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "devOptional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/delaunator": {
+ "version": "5.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/delaunator/-/delaunator-5.0.0.tgz",
+ "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+ "license": "ISC",
+ "dependencies": {
+ "robust-predicates": "^3.0.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+ "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+ "devOptional": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.15.18",
+ "@esbuild/linux-loong64": "0.15.18",
+ "esbuild-android-64": "0.15.18",
+ "esbuild-android-arm64": "0.15.18",
+ "esbuild-darwin-64": "0.15.18",
+ "esbuild-darwin-arm64": "0.15.18",
+ "esbuild-freebsd-64": "0.15.18",
+ "esbuild-freebsd-arm64": "0.15.18",
+ "esbuild-linux-32": "0.15.18",
+ "esbuild-linux-64": "0.15.18",
+ "esbuild-linux-arm": "0.15.18",
+ "esbuild-linux-arm64": "0.15.18",
+ "esbuild-linux-mips64le": "0.15.18",
+ "esbuild-linux-ppc64le": "0.15.18",
+ "esbuild-linux-riscv64": "0.15.18",
+ "esbuild-linux-s390x": "0.15.18",
+ "esbuild-netbsd-64": "0.15.18",
+ "esbuild-openbsd-64": "0.15.18",
+ "esbuild-sunos-64": "0.15.18",
+ "esbuild-windows-32": "0.15.18",
+ "esbuild-windows-64": "0.15.18",
+ "esbuild-windows-arm64": "0.15.18"
+ }
+ },
+ "node_modules/esbuild-android-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+ "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+ "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+ "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+ "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+ "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+ "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+ "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+ "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+ "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+ "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+ "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+ "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+ "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+ "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+ "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+ "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+ "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+ "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+ "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+ "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz",
+ "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.4.1",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-vue": {
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.9.0.tgz",
+ "integrity": "sha512-YbubS7eK0J7DCf0U2LxvVP7LMfs6rC6UltihIgval3azO3gyDwEGVgsCMe1TmDiEkl6GdMKfRpaME6QxIYtzDQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^3.0.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.0.1",
+ "postcss-selector-parser": "^6.0.9",
+ "semver": "^7.3.5",
+ "vue-eslint-parser": "^9.0.1",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz",
+ "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "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=="
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "devOptional": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "devOptional": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "devOptional": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "devOptional": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz",
+ "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==",
+ "devOptional": true
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "devOptional": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "devOptional": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "devOptional": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/js-sdsl": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
+ "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "devOptional": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "devOptional": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "devOptional": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "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==",
+ "devOptional": true,
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "devOptional": true
+ },
+ "node_modules/peerjs": {
+ "version": "1.4.7",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/peerjs/-/peerjs-1.4.7.tgz",
+ "integrity": "sha512-dWE2HIGvJO0Hm8lYHJiO/5OWl8xYtGcAuU08To1HMIfhh76ULzkCS3NIQO/PZm4noO1RhaGTkQaQ6sbAss6/Tg==",
+ "license": "MIT",
+ "dependencies": {
+ "@swc/helpers": "^0.3.13",
+ "eventemitter3": "^4.0.7",
+ "peerjs-js-binarypack": "1.0.1",
+ "webrtc-adapter": "^7.7.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/peer"
+ }
+ },
+ "node_modules/peerjs-js-binarypack": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/peerjs-js-binarypack/-/peerjs-js-binarypack-1.0.1.tgz",
+ "integrity": "sha512-N6aeia3NhdpV7kiGxJV5xQiZZCVEEVjRz2T2C6UZQiBkHWHzUv/oWA4myQLcwBwO8LUoR1KWW5oStvwVesmfCg==",
+ "license": "BSD"
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pinia": {
+ "version": "2.0.32",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.32.tgz",
+ "integrity": "sha512-8Tw4OrpCSJ028UUyp0gYPP/wyjigLoEceuO/x1G+FlHVf73337e5vLm4uDmrRIoBG1hvaed/eSHnrCFjOc4nkA==",
+ "dependencies": {
+ "@vue/devtools-api": "^6.5.0",
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.4.0",
+ "typescript": ">=4.4.4",
+ "vue": "^2.6.14 || ^3.2.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia/node_modules/vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "devOptional": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "devOptional": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "devOptional": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "devOptional": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "devOptional": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qrcode.vue": {
+ "version": "3.4.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/qrcode.vue/-/qrcode.vue-3.4.0.tgz",
+ "integrity": "sha512-4XeImbv10Fin16Fl2DArCMhGyAdvIg2jb7vDT+hZiIAMg/6H6mz9nUZr/dR8jBcun5VzNzkiwKhiqOGbloinwA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "devOptional": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "devOptional": true,
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/roboto-fontface": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz",
+ "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g=="
+ },
+ "node_modules/robust-predicates": {
+ "version": "3.0.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/robust-predicates/-/robust-predicates-3.0.2.tgz",
+ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==",
+ "license": "Unlicense"
+ },
+ "node_modules/rollup": {
+ "version": "2.79.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
+ "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+ "devOptional": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rtcpeerconnection-shim": {
+ "version": "1.2.15",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz",
+ "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "sdp": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=6.0.0",
+ "npm": ">=3.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rw": {
+ "version": "1.3.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "node_modules/sass": {
+ "version": "1.58.3",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.3.tgz",
+ "integrity": "sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==",
+ "devOptional": true,
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/sdp": {
+ "version": "2.12.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/sdp/-/sdp-2.12.0.tgz",
+ "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "deprecated": "Please use @jridgewell/sourcemap-codec instead"
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "devOptional": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "devOptional": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.5.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/tslib/-/tslib-2.5.2.tgz",
+ "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==",
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unique-names-generator": {
+ "version": "4.7.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/unique-names-generator/-/unique-names-generator-4.7.1.tgz",
+ "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/upath": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
+ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/vite": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz",
+ "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==",
+ "devOptional": true,
+ "dependencies": {
+ "esbuild": "^0.15.9",
+ "postcss": "^8.4.18",
+ "resolve": "^1.22.1",
+ "rollup": "^2.79.1"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-vuetify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-1.0.2.tgz",
+ "integrity": "sha512-MubIcKD33O8wtgQXlbEXE7ccTEpHZ8nPpe77y9Wy3my2MWw/PgehP9VqTp92BLqr0R1dSL970Lynvisx3UxBFw==",
+ "devOptional": true,
+ "dependencies": {
+ "@vuetify/loader-shared": "^1.7.1",
+ "debug": "^4.3.3",
+ "upath": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "vite": "^2.7.0 || ^3.0.0 || ^4.0.0",
+ "vuetify": "^3.0.0-beta.4"
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz",
+ "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/compiler-sfc": "3.2.47",
+ "@vue/runtime-dom": "3.2.47",
+ "@vue/server-renderer": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "node_modules/vue-eslint-parser": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz",
+ "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.6"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
+ "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==",
+ "dependencies": {
+ "@vue/devtools-api": "^6.4.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
+ "node_modules/vuetify": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.1.6.tgz",
+ "integrity": "sha512-4We27L5ksy8esNKfUPWPucEU+M7XJDO2o66zXL5qiBVbALwshcK2CAobLQMx+ALtkLENXAYNH3RzvfAYjTi3Aw==",
+ "engines": {
+ "node": "^12.20 || >=14.13"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/johnleider"
+ },
+ "peerDependencies": {
+ "vite-plugin-vuetify": "^1.0.0-alpha.12",
+ "vue": "^3.2.0",
+ "vue-i18n": "^9.0.0",
+ "webpack-plugin-vuetify": "^2.0.0-alpha.11"
+ },
+ "peerDependenciesMeta": {
+ "vite-plugin-vuetify": {
+ "optional": true
+ },
+ "vue-i18n": {
+ "optional": true
+ },
+ "webpack-plugin-vuetify": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webfontloader": {
+ "version": "1.6.28",
+ "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz",
+ "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ=="
+ },
+ "node_modules/webrtc-adapter": {
+ "version": "7.7.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz",
+ "integrity": "sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "rtcpeerconnection-shim": "^1.2.15",
+ "sdp": "^2.12.0"
+ },
+ "engines": {
+ "node": ">=6.0.0",
+ "npm": ">=3.10.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/xml-beautifier": {
+ "version": "0.5.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/xml-beautifier/-/xml-beautifier-0.5.0.tgz",
+ "integrity": "sha512-QG/qiHeolHUd1tAtM+5zHxTzDprb8qvhmIYUYV1E9QK/jTFlrAa1Mz7QQqJPeqc3uuFAGzTOhjvbdx2hOP6bHw==",
+ "license": "MIT",
+ "dependencies": {
+ "repeat-string": "1.6.1"
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.21.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz",
+ "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ=="
+ },
+ "@esbuild/android-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+ "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+ "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+ "optional": true
+ },
+ "@eslint/eslintrc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
+ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@mdi/font": {
+ "version": "7.0.96",
+ "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.0.96.tgz",
+ "integrity": "sha512-rzlxTfR64hqY8yiBzDjmANfcd8rv+T5C0Yedv/TWk2QyAQYdc66e0kaN1ipmnYU3RukHRTRcBARHzzm+tIhL7w=="
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@swc/helpers": {
+ "version": "0.3.17",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/@swc/helpers/-/helpers-0.3.17.tgz",
+ "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@vitejs/plugin-vue": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz",
+ "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==",
+ "dev": true,
+ "requires": {}
+ },
+ "@vue/compiler-core": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
+ "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
+ "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
+ "requires": {
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
+ "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/compiler-ssr": "3.2.47",
+ "@vue/reactivity-transform": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
+ "source-map": "^0.6.1"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
+ "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
+ "requires": {
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "@vue/devtools-api": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+ },
+ "@vue/reactivity": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz",
+ "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+ "requires": {
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "@vue/reactivity-transform": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
+ "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+ "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+ "requires": {
+ "@vue/reactivity": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+ "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+ "requires": {
+ "@vue/runtime-core": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "csstype": "^2.6.8"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+ "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+ "requires": {
+ "@vue/compiler-ssr": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz",
+ "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
+ },
+ "@vuetify/loader-shared": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-1.7.1.tgz",
+ "integrity": "sha512-kLUvuAed6RCvkeeTNJzuy14pqnkur8lTuner7v7pNE/kVhPR97TuyXwBSBMR1cJeiLiOfu6SF5XlCYbXByEx1g==",
+ "devOptional": true,
+ "requires": {
+ "find-cache-dir": "^3.3.2",
+ "upath": "^2.0.1"
+ }
+ },
+ "acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "devOptional": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "axios": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
+ "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
+ "requires": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "devOptional": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "devOptional": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "devOptional": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "devOptional": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "devOptional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "3.28.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.28.0.tgz",
+ "integrity": "sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
+ },
+ "d3": {
+ "version": "7.8.4",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3/-/d3-7.8.4.tgz",
+ "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==",
+ "requires": {
+ "d3-array": "3",
+ "d3-axis": "3",
+ "d3-brush": "3",
+ "d3-chord": "3",
+ "d3-color": "3",
+ "d3-contour": "4",
+ "d3-delaunay": "6",
+ "d3-dispatch": "3",
+ "d3-drag": "3",
+ "d3-dsv": "3",
+ "d3-ease": "3",
+ "d3-fetch": "3",
+ "d3-force": "3",
+ "d3-format": "3",
+ "d3-geo": "3",
+ "d3-hierarchy": "3",
+ "d3-interpolate": "3",
+ "d3-path": "3",
+ "d3-polygon": "3",
+ "d3-quadtree": "3",
+ "d3-random": "3",
+ "d3-scale": "4",
+ "d3-scale-chromatic": "3",
+ "d3-selection": "3",
+ "d3-shape": "3",
+ "d3-time": "3",
+ "d3-time-format": "4",
+ "d3-timer": "3",
+ "d3-transition": "3",
+ "d3-zoom": "3"
+ }
+ },
+ "d3-array": {
+ "version": "3.2.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-array/-/d3-array-3.2.3.tgz",
+ "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==",
+ "requires": {
+ "internmap": "1 - 2"
+ }
+ },
+ "d3-axis": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="
+ },
+ "d3-brush": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-brush/-/d3-brush-3.0.0.tgz",
+ "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "3",
+ "d3-transition": "3"
+ }
+ },
+ "d3-chord": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-chord/-/d3-chord-3.0.1.tgz",
+ "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+ "requires": {
+ "d3-path": "1 - 3"
+ }
+ },
+ "d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
+ },
+ "d3-contour": {
+ "version": "4.0.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-contour/-/d3-contour-4.0.2.tgz",
+ "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+ "requires": {
+ "d3-array": "^3.2.0"
+ }
+ },
+ "d3-delaunay": {
+ "version": "6.0.4",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+ "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+ "requires": {
+ "delaunator": "5"
+ }
+ },
+ "d3-dispatch": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="
+ },
+ "d3-drag": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-drag/-/d3-drag-3.0.0.tgz",
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-selection": "3"
+ }
+ },
+ "d3-dsv": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+ "requires": {
+ "commander": "7",
+ "iconv-lite": "0.6",
+ "rw": "1"
+ }
+ },
+ "d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="
+ },
+ "d3-fetch": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-fetch/-/d3-fetch-3.0.1.tgz",
+ "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+ "requires": {
+ "d3-dsv": "1 - 3"
+ }
+ },
+ "d3-flextree": {
+ "version": "2.1.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-flextree/-/d3-flextree-2.1.2.tgz",
+ "integrity": "sha512-gJiHrx5uTTHq44bjyIb3xpbmmdZcWLYPKeO9EPVOq8EylMFOiH2+9sWqKAiQ4DcFuOZTAxPOQyv0Rnmji/g15A==",
+ "requires": {
+ "d3-hierarchy": "^1.1.5"
+ },
+ "dependencies": {
+ "d3-hierarchy": {
+ "version": "1.1.9",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
+ "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
+ }
+ }
+ },
+ "d3-force": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-quadtree": "1 - 3",
+ "d3-timer": "1 - 3"
+ }
+ },
+ "d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA=="
+ },
+ "d3-geo": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-geo/-/d3-geo-3.1.0.tgz",
+ "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
+ "requires": {
+ "d3-array": "2.5.0 - 3"
+ }
+ },
+ "d3-hierarchy": {
+ "version": "3.1.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="
+ },
+ "d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "requires": {
+ "d3-color": "1 - 3"
+ }
+ },
+ "d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="
+ },
+ "d3-polygon": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-polygon/-/d3-polygon-3.0.1.tgz",
+ "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="
+ },
+ "d3-quadtree": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="
+ },
+ "d3-random": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-random/-/d3-random-3.0.1.tgz",
+ "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="
+ },
+ "d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "requires": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ }
+ },
+ "d3-scale-chromatic": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+ "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+ "requires": {
+ "d3-color": "1 - 3",
+ "d3-interpolate": "1 - 3"
+ }
+ },
+ "d3-selection": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="
+ },
+ "d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "requires": {
+ "d3-path": "^3.1.0"
+ }
+ },
+ "d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "requires": {
+ "d3-array": "2 - 3"
+ }
+ },
+ "d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "requires": {
+ "d3-time": "1 - 3"
+ }
+ },
+ "d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="
+ },
+ "d3-transition": {
+ "version": "3.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-transition/-/d3-transition-3.0.1.tgz",
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+ "requires": {
+ "d3-color": "1 - 3",
+ "d3-dispatch": "1 - 3",
+ "d3-ease": "1 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-timer": "1 - 3"
+ }
+ },
+ "d3-zoom": {
+ "version": "3.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/d3-zoom/-/d3-zoom-3.0.0.tgz",
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+ "requires": {
+ "d3-dispatch": "1 - 3",
+ "d3-drag": "2 - 3",
+ "d3-interpolate": "1 - 3",
+ "d3-selection": "2 - 3",
+ "d3-transition": "2 - 3"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "devOptional": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "delaunator": {
+ "version": "5.0.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/delaunator/-/delaunator-5.0.0.tgz",
+ "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+ "requires": {
+ "robust-predicates": "^3.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "esbuild": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+ "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+ "devOptional": true,
+ "requires": {
+ "@esbuild/android-arm": "0.15.18",
+ "@esbuild/linux-loong64": "0.15.18",
+ "esbuild-android-64": "0.15.18",
+ "esbuild-android-arm64": "0.15.18",
+ "esbuild-darwin-64": "0.15.18",
+ "esbuild-darwin-arm64": "0.15.18",
+ "esbuild-freebsd-64": "0.15.18",
+ "esbuild-freebsd-arm64": "0.15.18",
+ "esbuild-linux-32": "0.15.18",
+ "esbuild-linux-64": "0.15.18",
+ "esbuild-linux-arm": "0.15.18",
+ "esbuild-linux-arm64": "0.15.18",
+ "esbuild-linux-mips64le": "0.15.18",
+ "esbuild-linux-ppc64le": "0.15.18",
+ "esbuild-linux-riscv64": "0.15.18",
+ "esbuild-linux-s390x": "0.15.18",
+ "esbuild-netbsd-64": "0.15.18",
+ "esbuild-openbsd-64": "0.15.18",
+ "esbuild-sunos-64": "0.15.18",
+ "esbuild-windows-32": "0.15.18",
+ "esbuild-windows-64": "0.15.18",
+ "esbuild-windows-arm64": "0.15.18"
+ }
+ },
+ "esbuild-android-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+ "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+ "optional": true
+ },
+ "esbuild-android-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+ "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+ "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+ "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+ "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+ "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+ "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+ "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+ "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+ "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+ "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+ "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+ "optional": true
+ },
+ "esbuild-linux-riscv64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+ "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+ "optional": true
+ },
+ "esbuild-linux-s390x": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+ "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+ "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+ "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+ "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+ "optional": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+ "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+ "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+ "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+ "optional": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "8.34.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz",
+ "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.4.1",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ }
+ },
+ "eslint-plugin-vue": {
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.9.0.tgz",
+ "integrity": "sha512-YbubS7eK0J7DCf0U2LxvVP7LMfs6rC6UltihIgval3azO3gyDwEGVgsCMe1TmDiEkl6GdMKfRpaME6QxIYtzDQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^3.0.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.0.1",
+ "postcss-selector-parser": "^6.0.9",
+ "semver": "^7.3.5",
+ "vue-eslint-parser": "^9.0.1",
+ "xml-name-validator": "^4.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esquery": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz",
+ "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "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=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "devOptional": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "devOptional": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "devOptional": true
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "devOptional": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true
+ },
+ "immutable": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz",
+ "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==",
+ "devOptional": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "internmap": {
+ "version": "2.0.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "devOptional": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "devOptional": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "devOptional": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "devOptional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "devOptional": true
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="
+ },
+ "js-sdsl": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
+ "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "devOptional": true,
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "devOptional": true
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "devOptional": true
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "devOptional": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "devOptional": true
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "devOptional": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "devOptional": true
+ },
+ "peerjs": {
+ "version": "1.4.7",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/peerjs/-/peerjs-1.4.7.tgz",
+ "integrity": "sha512-dWE2HIGvJO0Hm8lYHJiO/5OWl8xYtGcAuU08To1HMIfhh76ULzkCS3NIQO/PZm4noO1RhaGTkQaQ6sbAss6/Tg==",
+ "requires": {
+ "@swc/helpers": "^0.3.13",
+ "eventemitter3": "^4.0.7",
+ "peerjs-js-binarypack": "1.0.1",
+ "webrtc-adapter": "^7.7.1"
+ }
+ },
+ "peerjs-js-binarypack": {
+ "version": "1.0.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/peerjs-js-binarypack/-/peerjs-js-binarypack-1.0.1.tgz",
+ "integrity": "sha512-N6aeia3NhdpV7kiGxJV5xQiZZCVEEVjRz2T2C6UZQiBkHWHzUv/oWA4myQLcwBwO8LUoR1KWW5oStvwVesmfCg=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "devOptional": true
+ },
+ "pinia": {
+ "version": "2.0.32",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.32.tgz",
+ "integrity": "sha512-8Tw4OrpCSJ028UUyp0gYPP/wyjigLoEceuO/x1G+FlHVf73337e5vLm4uDmrRIoBG1hvaed/eSHnrCFjOc4nkA==",
+ "requires": {
+ "@vue/devtools-api": "^6.5.0",
+ "vue-demi": "*"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "requires": {}
+ }
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "devOptional": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "devOptional": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "devOptional": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "devOptional": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "devOptional": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ }
+ }
+ },
+ "postcss": {
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true
+ },
+ "qrcode.vue": {
+ "version": "3.4.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/qrcode.vue/-/qrcode.vue-3.4.0.tgz",
+ "integrity": "sha512-4XeImbv10Fin16Fl2DArCMhGyAdvIg2jb7vDT+hZiIAMg/6H6mz9nUZr/dR8jBcun5VzNzkiwKhiqOGbloinwA==",
+ "requires": {}
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "devOptional": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "devOptional": true,
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "roboto-fontface": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz",
+ "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g=="
+ },
+ "robust-predicates": {
+ "version": "3.0.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/robust-predicates/-/robust-predicates-3.0.2.tgz",
+ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+ },
+ "rollup": {
+ "version": "2.79.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
+ "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+ "devOptional": true,
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "rtcpeerconnection-shim": {
+ "version": "1.2.15",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz",
+ "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==",
+ "requires": {
+ "sdp": "^2.6.0"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rw": {
+ "version": "1.3.3",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sass": {
+ "version": "1.58.3",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.3.tgz",
+ "integrity": "sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==",
+ "devOptional": true,
+ "requires": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ }
+ },
+ "sdp": {
+ "version": "2.12.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/sdp/-/sdp-2.12.0.tgz",
+ "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw=="
+ },
+ "semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "devOptional": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "devOptional": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tslib": {
+ "version": "2.5.2",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/tslib/-/tslib-2.5.2.tgz",
+ "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA=="
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "unique-names-generator": {
+ "version": "4.7.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/unique-names-generator/-/unique-names-generator-4.7.1.tgz",
+ "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow=="
+ },
+ "upath": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
+ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
+ "devOptional": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "vite": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz",
+ "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==",
+ "devOptional": true,
+ "requires": {
+ "esbuild": "^0.15.9",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.18",
+ "resolve": "^1.22.1",
+ "rollup": "^2.79.1"
+ }
+ },
+ "vite-plugin-vuetify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-1.0.2.tgz",
+ "integrity": "sha512-MubIcKD33O8wtgQXlbEXE7ccTEpHZ8nPpe77y9Wy3my2MWw/PgehP9VqTp92BLqr0R1dSL970Lynvisx3UxBFw==",
+ "devOptional": true,
+ "requires": {
+ "@vuetify/loader-shared": "^1.7.1",
+ "debug": "^4.3.3",
+ "upath": "^2.0.1"
+ }
+ },
+ "vue": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz",
+ "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+ "requires": {
+ "@vue/compiler-dom": "3.2.47",
+ "@vue/compiler-sfc": "3.2.47",
+ "@vue/runtime-dom": "3.2.47",
+ "@vue/server-renderer": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "vue-eslint-parser": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz",
+ "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.4",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.6"
+ }
+ },
+ "vue-router": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
+ "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==",
+ "requires": {
+ "@vue/devtools-api": "^6.4.5"
+ }
+ },
+ "vuetify": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.1.6.tgz",
+ "integrity": "sha512-4We27L5ksy8esNKfUPWPucEU+M7XJDO2o66zXL5qiBVbALwshcK2CAobLQMx+ALtkLENXAYNH3RzvfAYjTi3Aw==",
+ "requires": {}
+ },
+ "webfontloader": {
+ "version": "1.6.28",
+ "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz",
+ "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ=="
+ },
+ "webrtc-adapter": {
+ "version": "7.7.1",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz",
+ "integrity": "sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==",
+ "requires": {
+ "rtcpeerconnection-shim": "^1.2.15",
+ "sdp": "^2.12.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "xml-beautifier": {
+ "version": "0.5.0",
+ "resolved": "https://nexus.euc1.cicd.oneweb.mercedes-benz.com/repository/npm-general/xml-beautifier/-/xml-beautifier-0.5.0.tgz",
+ "integrity": "sha512-QG/qiHeolHUd1tAtM+5zHxTzDprb8qvhmIYUYV1E9QK/jTFlrAa1Mz7QQqJPeqc3uuFAGzTOhjvbdx2hOP6bHw==",
+ "requires": {
+ "repeat-string": "1.6.1"
+ }
+ },
+ "xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/frontendVue3/package.json b/frontendVue3/package.json
new file mode 100644
index 00000000..30e50274
--- /dev/null
+++ b/frontendVue3/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "frontend",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "lint": "eslint --fix --ignore-path .gitignore"
+ },
+ "dependencies": {
+ "@mdi/font": "7.0.96",
+ "axios": "^1.3.4",
+ "core-js": "^3.8.3",
+ "d3": "^7.4.4",
+ "d3-flextree": "^2.1.2",
+ "d3-hierarchy": "^3.1.2",
+ "js-levenshtein": "^1.1.6",
+ "pinia": "^2.0.23",
+ "qrcode.vue": "^3.4.0",
+ "roboto-fontface": "*",
+ "vue": "^3.2.13",
+ "vue-router": "^4.0.0",
+ "vuetify": "^3.0.0",
+ "webfontloader": "^1.0.0",
+ "xml-beautifier": "^0.5.0",
+ "peerjs": "^1.4.7",
+ "unique-names-generator": "^4.7.1"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^3.0.3",
+ "eslint": "^8.22.0",
+ "eslint-plugin-vue": "^9.3.0",
+ "sass": "^1.55.0",
+ "vite": "^3.1.9",
+ "vite-plugin-vuetify": "^1.0.0-alpha.12"
+ }
+}
diff --git a/frontendVue3/public/ddueruem_logo.svg b/frontendVue3/public/ddueruem_logo.svg
new file mode 100644
index 00000000..d4a49c04
--- /dev/null
+++ b/frontendVue3/public/ddueruem_logo.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontendVue3/public/ddueruem_logo_dark.svg b/frontendVue3/public/ddueruem_logo_dark.svg
new file mode 100644
index 00000000..f1f233d5
--- /dev/null
+++ b/frontendVue3/public/ddueruem_logo_dark.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontendVue3/public/favicon.ico b/frontendVue3/public/favicon.ico
new file mode 100644
index 00000000..8fb9f91b
Binary files /dev/null and b/frontendVue3/public/favicon.ico differ
diff --git a/frontendVue3/src/App.vue b/frontendVue3/src/App.vue
new file mode 100644
index 00000000..b4a89896
--- /dev/null
+++ b/frontendVue3/src/App.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+ {{ snackbar.message }}
+
+
+ ✕
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/assets/logo.png b/frontendVue3/src/assets/logo.png
new file mode 100644
index 00000000..a5f23ae7
Binary files /dev/null and b/frontendVue3/src/assets/logo.png differ
diff --git a/frontendVue3/src/assets/logo.svg b/frontendVue3/src/assets/logo.svg
new file mode 100644
index 00000000..d57771c6
--- /dev/null
+++ b/frontendVue3/src/assets/logo.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontendVue3/src/classes/CollaborationManager.js b/frontendVue3/src/classes/CollaborationManager.js
new file mode 100644
index 00000000..eca0365e
--- /dev/null
+++ b/frontendVue3/src/classes/CollaborationManager.js
@@ -0,0 +1,343 @@
+import * as commandFactory from "@/classes/Commands/CommandFactory";
+import * as update from '@/services/FeatureModel/update.service.js';
+import beautify from "xml-beautifier";
+import {xmlToJson} from "@/services/xmlTranspiler.service";
+import {Peer} from "peerjs";
+import {animals, colors, uniqueNamesGenerator} from 'unique-names-generator';
+
+export default class CollaborationManager {
+ constructor(featureModelCommandManager, constraintCommandManager, featureModel) {
+ this.featureModelCommandManager = featureModelCommandManager;
+ this.featureModelCommandManager.collaborationManager = this;
+ this.featureModelCommandManager.type = 'featureModel';
+
+ this.constraintCommandManager = constraintCommandManager;
+ this.constraintCommandManager.collaborationManager = this;
+ this.constraintCommandManager.type = 'constraint';
+ this.blockEditRequests = false;
+
+ this.connections = [];
+ this.options = {
+ host: process.env.VUE_APP_DOMAIN_WEBSOCKET,
+ port: process.env.VUE_APP_DOMAIN_WEBSOCKET_PORT,
+ path: "/myapp",
+ pingInterval: 5000,
+ debug: 0,
+ };
+
+ this.collaborationKey = null;
+ this.featureModel = featureModel;
+
+ this.isHost = false;
+ this.isClient = false;
+ this.claimerId = null;
+ this.peer = null;
+ this.name = uniqueNamesGenerator({
+ dictionaries: [colors, animals],
+ style: 'capital',
+ separator: " ",
+ });
+
+ this.noConfirm = false;
+
+ // List of all clients inclusive host with { id, name }
+ this.members = [];
+ this.editorId = null;
+ }
+
+ createCollaboration() {
+ this.collaborationKey = this.generateUUID();
+ this.editorId = this.collaborationKey;
+
+ this.peer = new Peer(this.collaborationKey, this.options);
+ this.peer.on('open', () => {
+ this.isHost = true;
+ this.isClient = false;
+ this.featureModel.editRights = true;
+ this.featureModel.collaborationStatus = true;
+ this.name = 'Host';
+ this.editorId = this.peer._id;
+ this.showSnackbarMessage(`Created collaboration session and copied invitation link.`);
+
+ this.peer.on('connection', conn => {
+ this.connections.push(conn);
+ conn.on('data', data => this.receive(conn, data.type, data.action, data.data));
+ conn.on('open', () => {
+ this.sendInitData(conn);
+ this.showSnackbarMessage('New client joined to collaboration session');
+ });
+ conn.on('close', () => {
+ this.showSnackbarMessage('Client disconnected', 'info');
+ conn.close();
+ this.connections = this.connections.filter(c => c !== conn);
+ this.featureModel.editRights = !this.connections.find(c => c.editRights);
+
+ this.members = this.members.filter(m => m.id !== conn.peer);
+ this.featureModel.collaborationReloadKey++;
+ if (this.editorId === conn.peer) {
+ this.sendMemberData(this.collaborationKey);
+ } else {
+ this.sendMemberData();
+ }
+ });
+ });
+
+ });
+ return this.collaborationKey;
+ }
+
+ joinCollaboration(key) {
+ this.collaborationKey = key;
+
+ this.peer = new Peer(this.options);
+ this.peer.on('open', () => {
+ const conn = this.peer.connect(key);
+ conn.on('open', () => {
+ this.isHost = false;
+ this.isClient = true;
+ this.featureModel.editRights = false;
+ this.featureModel.collaborationStatus = true;
+
+ this.showSnackbarMessage('Joined collaboration session');
+ this.connections.push(conn);
+
+ this.sendName();
+
+ conn.on('data', data => this.receive(conn, data.type, data.action, data.data));
+ conn.on('close', () => {
+ this.connections = this.connections.filter(c => c !== conn);
+ this.receiveClose();
+ });
+ });
+
+ });
+ this.peer.on('error', () => {
+ this.showSnackbarMessage('Cannot connect to collaboration session', 'error');
+ });
+ }
+
+ closeCollaboration() {
+ this.members = [];
+ this.connections.forEach(conn => conn.close());
+ this.connections = [];
+ this.collaborationKey = null;
+ this.featureModel.editRights = true;
+ this.claimerId = null;
+ this.editorId = null;
+ if (this.isHost) {
+ this.peer.destroy();
+ }
+ this.isHost = false;
+ this.isClient = false;
+ this.peer = null;
+ this.featureModel.collaborationStatus = false;
+ }
+
+ receive(sender, type, action, data) {
+ if (type === 'initialize') {
+ this.receiveInitialize(data);
+ } else if (type === 'close') {
+ this.receiveClose();
+ } else if (type === 'claimEditRights') {
+ this.receiveClaimEditRights(sender);
+ } else if (type === 'name') {
+ this.receiveName(action, data);
+ } else if (type === 'members') {
+ this.receiveMembers(data);
+ } else {
+ this.receiveCommand(sender, type, action, data);
+ }
+ }
+
+ receiveName(id, name) {
+ this.members = this.members.filter(m => m.id !== id);
+ this.members.push({id: id, name: name});
+
+ this.sendMemberData();
+ }
+
+ receiveMembers(data) {
+ this.blockEditRequests = data.blockEditRequests;
+ this.editorId = data.editorId;
+ this.featureModel.editRights = this.peer._id === data.editorId;
+ this.members = data.members.filter(m => m.id !== this.peer._id);
+ this.featureModel.collaborationReloadKey++;
+ }
+
+ receiveInitialize(data) {
+ const xml = beautify(data.xml);
+ this.featureModel.xml = xml;
+ xmlToJson(beautify(xml), this.featureModel.data);
+ this.featureModelCommandManager.remoteCommands = {
+ historyCommands: data.featureModelHistoryCommands,
+ futureCommands: data.featureModelFutureCommands,
+ };
+ this.constraintCommandManager.remoteCommands = {
+ historyCommands: data.constraintHistoryCommands,
+ futureCommands: data.constraintFutureCommands,
+ };
+ }
+
+ receiveClose() {
+ if (this.isClient) {
+ this.showSnackbarMessage('Host has closed collaboration session', 'info');
+ this.noConfirm = true;
+ this.featureModel.showContinueEditingDialog = true;
+ }
+ }
+
+ receiveClaimEditRights(sender) {
+ if (!this.featureModel.showClaimDialog && !this.blockEditRequests) {
+ this.featureModel.showClaimDialog = true;
+ this.claimerId = sender.peer;
+ }
+ }
+
+ receiveCommand(sender, type, action, data) {
+ this.sendExcluded(sender, type, action, data);
+ let commandManager;
+ if (type === 'constraint') {
+ commandManager = this.constraintCommandManager;
+ } else if (type === 'featureModel') {
+ commandManager = this.featureModelCommandManager;
+ } else {
+ console.error('Unknown command');
+ return;
+ }
+
+ if (action === 'execute') {
+ const command = commandFactory.create(this.featureModel.data.rootNode, this.featureModel.data.constraints, type, data, this.featureModel);
+ commandManager.execute(command, false);
+ } else if (action === 'undo') {
+ commandManager.undo(false);
+ } else if (action === 'redo') {
+ commandManager.redo(false);
+ } else {
+ console.error('Unknown command');
+ return;
+ }
+
+ if (type === 'featureModel') {
+ update.updateSvg(this.featureModelCommandManager.d3Data);
+ }
+ }
+
+ sendMemberData(newEditorId = undefined) {
+ if (newEditorId) {
+ this.editorId = newEditorId;
+ this.featureModel.editRights = this.collaborationKey === this.editorId;
+ }
+
+ const members = [...this.members, {id: this.collaborationKey, name: this.name}];
+ this.send('members', null, {
+ members: members,
+ editorId: this.editorId,
+ blockEditRequests: this.blockEditRequests,
+ });
+ this.featureModel.collaborationReloadKey++;
+ }
+
+ send(type, action = null, data = null) {
+ const toSend = {
+ type: type,
+ action: action,
+ data: data,
+ };
+
+ this.connections.forEach(conn => conn.send(toSend));
+ }
+
+ sendName(name = undefined) {
+ if (name) {
+ this.name = name;
+ }
+
+ // Send own name
+ this.send('name', this.peer._id, this.name);
+ }
+
+ sendExcluded(excluded, type, action, data) {
+ const toSend = {
+ type: type,
+ action: action,
+ data: data,
+ };
+
+ this.connections.filter(conn => conn !== excluded).forEach(conn => conn.send(toSend));
+ }
+
+ sendInitData(connection) {
+ connection.send({
+ type: "initialize",
+ action: null,
+ data: {
+ xml: this.featureModel.xml,
+ featureModelHistoryCommands: this.featureModelCommandManager.historyCommands.map(command => ({
+ type: 'featureModel',
+ action: null,
+ data: command.createDTO(),
+ })),
+ featureModelFutureCommands: this.featureModelCommandManager.futureCommands.map(command => ({
+ type: 'featureModel',
+ action: null,
+ data: command.createDTO(),
+ })),
+ constraintHistoryCommands: this.constraintCommandManager.historyCommands.map(command => ({
+ type: 'constraint',
+ action: null,
+ data: command.createDTO(),
+ })),
+ constraintFutureCommands: this.constraintCommandManager.futureCommands.map(command => ({
+ type: 'constraint',
+ action: null,
+ data: command.createDTO(),
+ })),
+ },
+ });
+ }
+
+ sendClaimEditRightsRequest() {
+ this.send('claimEditRights');
+ }
+
+ sendClaimEditRightsResponse(response) {
+ this.featureModel.showClaimDialog = false;
+
+ if (response) {
+ this.sendMemberData(this.claimerId);
+ this.showSnackbarMessage('You lost edit rights', 'info');
+ }
+ }
+
+ generateUUID() {
+ let
+ d = new Date().getTime(),
+ d2 = (performance && performance.now && (performance.now() * 1000)) || 0;
+ const uuid = 'xxxxxxxx'.replace(/[xy]/g, c => {
+ let r = Math.random() * 16;
+ if (d > 0) {
+ r = (d + r) % 16 | 0;
+ d = Math.floor(d / 16);
+ } else {
+ r = (d2 + r) % 16 | 0;
+ d2 = Math.floor(d2 / 16);
+ }
+ return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);
+ });
+
+ return uuid + (Array.from(uuid).reduce((last, curr) => parseInt(last, 16) + parseInt(curr, 16)) % 16).toString(16);
+ }
+
+ showSnackbarMessage(message, variant = 'success') {
+ this.featureModel.$store.commit("updateSnackbar", {
+ message: message,
+ variant: variant,
+ timeout: 5000,
+ show: true,
+ });
+ }
+
+ getClaimerName() {
+ return this.members.find(m => m.id === this.claimerId)?.name;
+ }
+}
diff --git a/frontendVue3/src/classes/Commands/Command.js b/frontendVue3/src/classes/Commands/Command.js
new file mode 100644
index 00000000..7791a23f
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/Command.js
@@ -0,0 +1,4 @@
+export class Command {
+ markChanges() {}
+ unmarkChanges() {}
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Commands/CommandFactory.js b/frontendVue3/src/classes/Commands/CommandFactory.js
new file mode 100644
index 00000000..7a0e71c2
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/CommandFactory.js
@@ -0,0 +1,38 @@
+import {AddCommand} from "@/classes/Commands/FeatureModel/AddCommand";
+import * as constraint_add from "@/classes/Commands/Constraints/AddCommand";
+import * as constraint_delete from "@/classes/Commands/Constraints/DeleteCommand";
+import * as constraint_edit from "@/classes/Commands/Constraints/EditCommand";
+import {EditCommand} from "@/classes/Commands/FeatureModel/EditCommand";
+import {SwapCommand} from "@/classes/Commands/FeatureModel/SwapCommand";
+import {parse} from "@/services/booleanExpressionParser.service";
+import {NewEmptyModelCommand} from "@/classes/Commands/FeatureModel/NewEmptyModelCommand";
+
+export function create(rootNode, allConstraints, type, data, featureModelComponent) {
+ if (type === 'featureModel') {
+ if (data.commandType === 'add') {
+ const dstParent = rootNode.descendants().find(node => node.name === data.dstParentName);
+ return new AddCommand(dstParent, data.dstIndex, data.data);
+ } else if (data.commandType === 'edit') {
+ const node = rootNode.descendants().find(node => node.name === data.nodeName);
+ return new EditCommand(node, data.newData);
+ } else if (data.commandType === 'swap') {
+ const node = rootNode.descendants().find(node => node.name === data.nodeName);
+ const dstParent = rootNode.descendants().find(node => node.name === data.dstParentName);
+ return new SwapCommand(node, dstParent, data.dstIndex);
+ } else if (data.commandType === 'new-empty-model') {
+ return new NewEmptyModelCommand(featureModelComponent);
+ }
+ } else {
+ if (data.commandType === 'add') {
+ const newConstraintItem = parse(data.constraintItemInfix, rootNode.descendants());
+ return new constraint_add.AddCommand(allConstraints, newConstraintItem);
+ } else if (data.commandType === 'delete') {
+ const constraint = allConstraints[data.index];
+ return new constraint_delete.DeleteCommand(allConstraints, constraint);
+ } else if (data.commandType === 'edit') {
+ const constraint = allConstraints.find(con => con.toStringForEdit() === data.constraintItemInfix);
+ const newConstraintItem = parse(data.newConstraintItemInfix, rootNode.descendants());
+ return new constraint_edit.EditCommand(allConstraints, constraint, newConstraintItem);
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Commands/CommandManager.js b/frontendVue3/src/classes/Commands/CommandManager.js
new file mode 100644
index 00000000..84f41fe8
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/CommandManager.js
@@ -0,0 +1,120 @@
+import * as commandFactory from "@/classes/Commands/CommandFactory";
+import * as update from '@/services/FeatureModel/update.service.js';
+
+export class CommandManager {
+ constructor() {
+ this.historyCommands = [];
+ this.futureCommands = [];
+ this.collaborationManager = null;
+ this.type = null;
+ this.remoteCommands = null;
+ this.commandEvent = null;
+ this.d3Data = null;
+ }
+
+ execute(command, initiator = true) {
+ if (initiator && this.collaborationManager) {
+ this.collaborationManager.send(this.type, 'execute', command.createDTO());
+ }
+
+ // Execute current command and push it on stack.
+ command.execute();
+
+ // Mark last change
+ if (this.historyCommands.length) {
+ this.historyCommands.at(-1).unmarkChanges();
+ }
+ command.markChanges();
+
+ this.historyCommands.push(command);
+
+ // Reset stack of future commands because a new command was already executed.
+ this.futureCommands = [];
+
+ this.commandEvent();
+
+ this.fadeOut(this.d3Data, command);
+ }
+
+ undo(initiator = true) {
+ if (this.historyCommands.length) {
+ if (initiator && this.collaborationManager) {
+ this.collaborationManager.send(this.type, 'undo');
+ }
+
+ // Remove last command from stack and undo it.
+ const undoCommand = this.historyCommands.pop();
+ undoCommand.undo();
+
+ // Mark last change
+ undoCommand.unmarkChanges();
+ if (this.historyCommands.length) {
+ this.historyCommands.at(-1).markChanges();
+ }
+
+ // After that push it to stack that only holds redo-commands.
+ this.futureCommands.push(undoCommand);
+
+ this.commandEvent();
+
+ this.fadeOut(this.d3Data, undoCommand);
+ }
+ }
+
+ redo(initiator = true) {
+ if (this.futureCommands.length) {
+ if (initiator && this.collaborationManager) {
+ this.collaborationManager.send(this.type, 'redo');
+ }
+
+ // Remove last command from stack and execute it once again.
+ const redoCommand = this.futureCommands.pop();
+ redoCommand.execute();
+
+ // Mark last change
+ if (this.historyCommands.length) {
+ this.historyCommands.at(-1).unmarkChanges();
+ }
+ redoCommand.markChanges();
+
+ // After that push it to stack that only holds undo-commands.
+ this.historyCommands.push(redoCommand);
+
+ this.commandEvent();
+
+ this.fadeOut(this.d3Data, redoCommand);
+ }
+ }
+
+ isUndoAvailable() {
+ return this.historyCommands.length >= 1;
+ }
+
+ isRedoAvailable() {
+ return this.futureCommands.length >= 1;
+ }
+
+ executeRemoteCommands(rootNode, constraints) {
+ if (this.remoteCommands) {
+ this.remoteCommands.historyCommands.forEach(commandData => {
+ const command = commandFactory.create(rootNode, constraints, commandData.type, commandData.data, this.collaborationManager.featureModel);
+ this.execute(command, false);
+ });
+
+ this.remoteCommands.futureCommands.forEach(commandData => {
+ const command = commandFactory.create(rootNode, constraints, commandData.type, commandData.data, this.collaborationManager.featureModel);
+ this.execute(command, false);
+ });
+
+ this.remoteCommands.futureCommands.forEach(() => this.undo(false));
+ }
+ }
+
+ fadeOut(d3Data, command) {
+ // Rerender for edits and fade them out
+ setTimeout(() => {
+ command.unmarkChanges();
+ update.updateSvg(d3Data);
+ }, 5000);
+ }
+}
diff --git a/frontendVue3/src/classes/Commands/Constraints/AddCommand.js b/frontendVue3/src/classes/Commands/Constraints/AddCommand.js
new file mode 100644
index 00000000..e551c483
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/Constraints/AddCommand.js
@@ -0,0 +1,27 @@
+import {ConstraintCommand} from "@/classes/Commands/Constraints/ConstraintCommand";
+import {Constraint} from "@/classes/Constraint";
+
+export class AddCommand extends ConstraintCommand {
+ constructor(allConstraints, newConstraintItem) {
+ const newConstraint = new Constraint(newConstraintItem);
+ super(allConstraints, newConstraint);
+ }
+
+ execute() {
+ this.allConstraints.push(this.constraint);
+ this.constraint.rule.setConstraint(this.constraint);
+ }
+
+ undo() {
+ this.constraint.rule.removeConstraint();
+ const index = this.allConstraints.indexOf(this.constraint);
+ this.allConstraints.splice(index, 1);
+ }
+
+ createDTO() {
+ return {
+ commandType: 'add',
+ constraintItemInfix: this.constraint.toStringForEdit(),
+ };
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Commands/Constraints/ConstraintCommand.js b/frontendVue3/src/classes/Commands/Constraints/ConstraintCommand.js
new file mode 100644
index 00000000..0acb21ae
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/Constraints/ConstraintCommand.js
@@ -0,0 +1,13 @@
+import {Command} from "@/classes/Commands/Command";
+
+export class ConstraintCommand extends Command {
+ constructor(allConstraints, constraint) {
+ super();
+ this.constraint = constraint;
+ this.allConstraints = allConstraints;
+ }
+
+ markChanges() { /* Do nothing */ }
+
+ unmarkChanges() { /* Do nothing */ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Commands/Constraints/DeleteCommand.js b/frontendVue3/src/classes/Commands/Constraints/DeleteCommand.js
new file mode 100644
index 00000000..c5561f97
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/Constraints/DeleteCommand.js
@@ -0,0 +1,26 @@
+import {ConstraintCommand} from "@/classes/Commands/Constraints/ConstraintCommand";
+
+export class DeleteCommand extends ConstraintCommand {
+ constructor(allConstraints, constraint) {
+ super(allConstraints, constraint);
+
+ this.index = this.allConstraints.indexOf(constraint);
+ }
+
+ execute() {
+ this.constraint.rule.removeConstraint();
+ this.allConstraints.splice(this.index, 1);
+ }
+
+ undo() {
+ this.allConstraints.splice(this.index, 0, this.constraint);
+ this.constraint.rule.setConstraint(this.constraint);
+ }
+
+ createDTO() {
+ return {
+ commandType: 'delete',
+ index: this.index,
+ };
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Commands/Constraints/EditCommand.js b/frontendVue3/src/classes/Commands/Constraints/EditCommand.js
new file mode 100644
index 00000000..4614bf44
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/Constraints/EditCommand.js
@@ -0,0 +1,28 @@
+import {ConstraintCommand} from "@/classes/Commands/Constraints/ConstraintCommand";
+
+export class EditCommand extends ConstraintCommand {
+ constructor(allConstraints, constraint, newConstraintItem) {
+ super(allConstraints, constraint);
+
+ this.newConstraintItem = newConstraintItem;
+ this.oldConstraintItem = constraint.rule;
+ }
+
+ execute() {
+ this.constraint.rule = this.newConstraintItem;
+ this.constraint.rule.setConstraint(this.constraint);
+ }
+
+ undo() {
+ this.constraint.rule = this.oldConstraintItem;
+ this.constraint.rule.setConstraint(this.constraint);
+ }
+
+ createDTO() {
+ return {
+ commandType: 'edit',
+ constraintItemInfix: this.oldConstraintItem.toStringForEdit(),
+ newConstraintItemInfix: this.newConstraintItem.toStringForEdit(),
+ };
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Commands/FeatureModel/AddCommand.js b/frontendVue3/src/classes/Commands/FeatureModel/AddCommand.js
new file mode 100644
index 00000000..c4758eea
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/FeatureModel/AddCommand.js
@@ -0,0 +1,35 @@
+import {FeatureNodeCommand} from "@/classes/Commands/FeatureModel/FeatureNodeCommand";
+import {createFeatureNode} from "@/classes/FeatureNode";
+
+export class AddCommand extends FeatureNodeCommand {
+ constructor(dstParent, dstIndex, data) {
+ const node = createFeatureNode(dstParent, data.name, data.groupType, data.mandatory, data.abstract);
+ super(node);
+ this.dstParent = dstParent;
+ this.dstIndex = dstIndex;
+ this.data = data;
+ }
+
+ execute() {
+ this.dstParent.uncollapse();
+ this.dstParent.unhideChildren();
+
+ this.dstParent.insertChildAtIndex(this.node, this.dstIndex);
+ }
+
+ undo() {
+ this.dstParent.uncollapse();
+ this.dstParent.unhideChildren();
+
+ this.dstParent.removeChild(this.node);
+ }
+
+ createDTO() {
+ return {
+ commandType: 'add',
+ dstParentName: this.dstParent.name,
+ dstIndex: this.dstIndex,
+ data: this.data,
+ };
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Commands/FeatureModel/EditCommand.js b/frontendVue3/src/classes/Commands/FeatureModel/EditCommand.js
new file mode 100644
index 00000000..47f49077
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/FeatureModel/EditCommand.js
@@ -0,0 +1,49 @@
+import {FeatureNodeCommand} from "@/classes/Commands/FeatureModel/FeatureNodeCommand";
+
+export class EditCommand extends FeatureNodeCommand {
+ constructor(node, newData) {
+ super();
+ this.node = node;
+ this.newData = newData;
+
+ // Properties for undo.
+ this.oldData = {
+ name: this.node.name,
+ groupType: this.node.groupType,
+ mandatory: this.node.isMandatory,
+ abstract: this.node.isAbstract,
+ };
+ }
+
+ execute() {
+ if (this.node.parent) {
+ this.node.parent.uncollapse();
+ this.node.parent.unhideChildren();
+ }
+
+ this.node.name = this.newData.name;
+ this.node.groupType = this.newData.groupType;
+ this.node.isMandatory = this.newData.mandatory;
+ this.node.isAbstract = this.newData.abstract;
+ }
+
+ undo() {
+ if (this.node.parent) {
+ this.node.parent.uncollapse();
+ this.node.parent.unhideChildren();
+ }
+
+ this.node.name = this.oldData.name;
+ this.node.groupType = this.oldData.groupType;
+ this.node.isMandatory = this.oldData.mandatory;
+ this.node.isAbstract = this.oldData.abstract;
+ }
+
+ createDTO() {
+ return {
+ commandType: 'edit',
+ nodeName: this.oldData.name,
+ newData: this.newData,
+ };
+ }
+}
diff --git a/frontendVue3/src/classes/Commands/FeatureModel/FeatureNodeCommand.js b/frontendVue3/src/classes/Commands/FeatureModel/FeatureNodeCommand.js
new file mode 100644
index 00000000..b842dcfc
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/FeatureModel/FeatureNodeCommand.js
@@ -0,0 +1,16 @@
+import {Command} from "@/classes/Commands/Command";
+
+export class FeatureNodeCommand extends Command {
+ constructor(node) {
+ super();
+ this.node = node;
+ }
+
+ markChanges() {
+ this.node.markAsEdited();
+ }
+
+ unmarkChanges() {
+ this.node.unmarkAsEdited();
+ }
+}
diff --git a/frontendVue3/src/classes/Commands/FeatureModel/NewEmptyModelCommand.js b/frontendVue3/src/classes/Commands/FeatureModel/NewEmptyModelCommand.js
new file mode 100644
index 00000000..3c6cc178
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/FeatureModel/NewEmptyModelCommand.js
@@ -0,0 +1,54 @@
+import {Command} from "@/classes/Commands/Command";
+import * as init from '@/services/FeatureModel/init.service.js';
+import {FeatureNode} from "@/classes/FeatureNode";
+
+export class NewEmptyModelCommand extends Command {
+ constructor(featureModelComponent) {
+ super();
+ this.featureModelComponent = featureModelComponent;
+ this.d3Data = this.featureModelComponent.$refs.featureModelTree.d3Data;
+
+ // Constraint command manager
+ this.constraintCommandManager = this.featureModelComponent.constraintCommandManager;
+ this.historyCommands = this.constraintCommandManager.historyCommands;
+ this.futureCommands = this.constraintCommandManager.futureCommands;
+
+ this.oldRoot = this.d3Data.root;
+
+ this.oldData = this.featureModelComponent.data;
+ this.newData = {
+ featureMap: [],
+ constraints: [],
+ properties: [],
+ calculations: undefined,
+ comments: [],
+ featureOrder: undefined,
+ rootNode: new FeatureNode(null, 'Root', 'and', false, false),
+ };
+ }
+
+ execute() {
+ // Constraint command manager
+ this.constraintCommandManager.historyCommands = [];
+ this.constraintCommandManager.futureCommands = [];
+
+ this.featureModelComponent.data = this.newData;
+ init.initData(this.d3Data, this.newData.rootNode);
+ }
+
+
+ undo() {
+ // Constraint command manager
+ this.constraintCommandManager.historyCommands = this.historyCommands;
+ this.constraintCommandManager.futureCommands = this.futureCommands;
+
+ this.featureModelComponent.data = this.oldData;
+ this.d3Data.root = this.oldRoot;
+ }
+
+ createDTO() {
+ return {
+ commandType: 'new-empty-model',
+ };
+ }
+}
diff --git a/frontendVue3/src/classes/Commands/FeatureModel/SwapCommand.js b/frontendVue3/src/classes/Commands/FeatureModel/SwapCommand.js
new file mode 100644
index 00000000..8f4bd07a
--- /dev/null
+++ b/frontendVue3/src/classes/Commands/FeatureModel/SwapCommand.js
@@ -0,0 +1,47 @@
+import {FeatureNodeCommand} from "@/classes/Commands/FeatureModel/FeatureNodeCommand";
+
+export class SwapCommand extends FeatureNodeCommand {
+ constructor(node, dstParent, dstIndex) {
+ super(node);
+ this.dstParent = dstParent;
+ this.dstIndex = dstIndex;
+
+ // Properties for undo.
+ this.srcParent = null;
+ this.srcIndex = null;
+ }
+
+ execute() {
+ this.dstParent.uncollapse();
+ this.dstParent.unhideChildren();
+
+ this.srcParent = this.node.parent;
+ this.srcIndex = this.srcParent.children.indexOf(this.node);
+
+ // Special case: If node is on same level and left of the ghost the index has to be decreased.
+ let tmp = 0;
+ if (this.srcParent === this.dstParent && this.srcIndex < this.dstIndex) {
+ tmp = 1;
+ }
+
+ this.srcParent.removeChild(this.node);
+ this.dstParent.insertChildAtIndex(this.node, this.dstIndex - tmp);
+ }
+
+ undo() {
+ this.dstParent.uncollapse();
+ this.dstParent.unhideChildren();
+
+ this.dstParent.removeChild(this.node);
+ this.srcParent.insertChildAtIndex(this.node, this.srcIndex);
+ }
+
+ createDTO() {
+ return {
+ commandType: 'swap',
+ nodeName: this.node.name,
+ dstParentName: this.dstParent.name,
+ dstIndex: this.dstIndex,
+ };
+ }
+}
diff --git a/frontendVue3/src/classes/Constraint.js b/frontendVue3/src/classes/Constraint.js
new file mode 100644
index 00000000..85c447cf
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint.js
@@ -0,0 +1,53 @@
+import * as CONSTANTS from "./constants";
+
+export class Constraint {
+
+ constructor(rule) {
+ this.isHighlighted = false;
+ this.rule = rule;
+ this.rule.setConstraint(this);
+ }
+
+ highlight() {
+ if (!this.isHighlighted) {
+ this.color = CONSTANTS.CONSTRAINT_HIGHLIGHT_COLORS.pop();
+ this.isHighlighted = true;
+ }
+ }
+
+ resetHighlight() {
+ if (this.isHighlighted) {
+ CONSTANTS.CONSTRAINT_HIGHLIGHT_COLORS.push(this.color);
+ this.color = undefined;
+ this.isHighlighted = false;
+ }
+ }
+
+ toggleHighlighted() {
+ if (this.isHighlighted) {
+ this.resetHighlight();
+ } else {
+ this.highlight();
+ }
+ }
+
+ getFeatureNodes() {
+ return this.rule.getFeatureNodes();
+ }
+
+ toString() {
+ return this.rule.toString();
+ }
+
+ toStringForEdit() {
+ return this.rule.toStringForEdit();
+ }
+
+ toStringPostfix() {
+ return this.rule.toStringPostfix();
+ }
+
+ toStringXML() {
+ return this.rule.toStringXML();
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Constraint/Conjunction.js b/frontendVue3/src/classes/Constraint/Conjunction.js
new file mode 100644
index 00000000..acd03011
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint/Conjunction.js
@@ -0,0 +1,7 @@
+import {GroupConstraintItem} from "@/classes/Constraint/GroupConstraintItem";
+
+export class Conjunction extends GroupConstraintItem {
+ constructor(first, second) {
+ super(first, second, '∧', 'AND', 'conj');
+ }
+}
diff --git a/frontendVue3/src/classes/Constraint/ConstraintItem.js b/frontendVue3/src/classes/Constraint/ConstraintItem.js
new file mode 100644
index 00000000..dd0f2823
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint/ConstraintItem.js
@@ -0,0 +1,32 @@
+import {operatorPrecedence} from "@/services/booleanExpressionParser.service";
+
+export class ConstraintItem {
+
+ addPossibleBrackets(item) {
+ if (item.count() === 1 || this.getPrecedence() >= item.getPrecedence()) {
+ return `${item.toString()}`;
+ } else {
+ return `(${item.toString()})`;
+ }
+ }
+
+ addPossibleBracketsForEdit(item) {
+ if (item.count() === 1 || this.getPrecedence() >= item.getPrecedence()) {
+ return `${item.toStringForEdit()}`;
+ } else {
+ return `(${item.toStringForEdit()})`;
+ }
+ }
+
+ getPrecedence() {
+ if (this.constructor.name === 'Disjunction') {
+ return operatorPrecedence['or'];
+ } else if (this.constructor.name === 'Conjunction') {
+ return operatorPrecedence['and'];
+ } else if (this.constructor.name === 'Implication') {
+ return operatorPrecedence['implies'];
+ } else if (this.constructor.name === 'Negation') {
+ return operatorPrecedence['neg'];
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Constraint/Disjunction.js b/frontendVue3/src/classes/Constraint/Disjunction.js
new file mode 100644
index 00000000..662bbb96
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint/Disjunction.js
@@ -0,0 +1,7 @@
+import {GroupConstraintItem} from "@/classes/Constraint/GroupConstraintItem";
+
+export class Disjunction extends GroupConstraintItem {
+ constructor(first, second) {
+ super(first, second, '∨', 'OR', 'disj');
+ }
+}
diff --git a/frontendVue3/src/classes/Constraint/FeatureNodeConstraintItem.js b/frontendVue3/src/classes/Constraint/FeatureNodeConstraintItem.js
new file mode 100644
index 00000000..9fb6443e
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint/FeatureNodeConstraintItem.js
@@ -0,0 +1,49 @@
+import {ConstraintItem} from "@/classes/Constraint/ConstraintItem";
+
+export class FeatureNodeConstraintItem extends ConstraintItem {
+ constructor(featureNode) {
+ super();
+ this.featureNode = featureNode;
+ }
+
+ count() {
+ return 1;
+ }
+
+ toString() {
+ const str = this.featureNode.name;
+ if (str.split(" ").length > 1) {
+ return `"${str}"`;
+ } else {
+ return str;
+ }
+ }
+
+ toStringForEdit() {
+ return this.toString();
+ }
+
+ toStringPostfix() {
+ return this.toString();
+ }
+
+ toStringXML() {
+ return `${this.featureNode.name} `;
+ }
+
+ getFeatureNodes() {
+ return [this.featureNode];
+ }
+
+ setConstraint(constraint) {
+ this.constraint = constraint;
+ if (!this.featureNode.constraints.includes(this.constraint)) {
+ this.featureNode.constraints.push(this.constraint);
+ }
+ }
+
+ removeConstraint() {
+ this.featureNode.constraints = this.featureNode.constraints.filter((c) => c !== this.constraint);
+ this.constraint = null;
+ }
+}
diff --git a/frontendVue3/src/classes/Constraint/GroupConstraintItem.js b/frontendVue3/src/classes/Constraint/GroupConstraintItem.js
new file mode 100644
index 00000000..8db6ed09
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint/GroupConstraintItem.js
@@ -0,0 +1,53 @@
+import {ConstraintItem} from "@/classes/Constraint/ConstraintItem";
+
+export class GroupConstraintItem extends ConstraintItem {
+ constructor(first, second, symbol, operator, tag) {
+ super();
+ this.first = first;
+ this.second = second;
+ this.operator = operator;
+ this.symbol = symbol;
+ this.tag = tag;
+ }
+
+ count() {
+ return 2;
+ }
+
+ toString() {
+ const firstText = this.first.constructor.name === this.constructor.name ? this.first.toString() : this.addPossibleBrackets(this.first);
+ const secondText = this.second.constructor.name === this.constructor.name ? this.second.toString() : this.addPossibleBrackets(this.second);
+ return `${firstText} ${this.symbol} ${secondText}`;
+ }
+
+ toStringPostfix() {
+ return `${this.first.toStringPostfix()} ${this.second.toStringPostfix()} ${this.constructor.name}`;
+ }
+
+ toStringForEdit() {
+ const firstText = this.first.constructor.name === this.constructor.name ? this.first.toStringForEdit() : this.addPossibleBracketsForEdit(this.first);
+ const secondText = this.second.constructor.name === this.constructor.name ? this.second.toStringForEdit() : this.addPossibleBracketsForEdit(this.second);
+ return `${firstText} ${this.operator} ${secondText}`;
+ }
+
+ toStringXML() {
+ return `<${this.tag}>
+ ${this.first.toStringXML()}
+ ${this.second.toStringXML()}
+ ${this.tag}>`;
+ }
+
+ getFeatureNodes() {
+ return [...this.first.getFeatureNodes(), ...this.second.getFeatureNodes()];
+ }
+
+ setConstraint(constraint) {
+ this.first.setConstraint(constraint);
+ this.second.setConstraint(constraint);
+ }
+
+ removeConstraint() {
+ this.first.removeConstraint();
+ this.second.removeConstraint();
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/Constraint/Implication.js b/frontendVue3/src/classes/Constraint/Implication.js
new file mode 100644
index 00000000..4fafb0bc
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint/Implication.js
@@ -0,0 +1,43 @@
+import {ConstraintItem} from "@/classes/Constraint/ConstraintItem";
+
+export class Implication extends ConstraintItem {
+ constructor(premise, conclusion) {
+ super();
+ this.premise = premise;
+ this.conclusion = conclusion;
+ }
+
+ count() {
+ return 2;
+ }
+
+ toString() {
+ return `${this.addPossibleBrackets(this.premise)} ⇒ ${this.addPossibleBrackets(this.conclusion)}`;
+ }
+
+ toStringForEdit() {
+ return `${this.addPossibleBracketsForEdit(this.premise)} IMPLIES ${this.addPossibleBracketsForEdit(this.conclusion)}`;
+ }
+
+ toStringPostfix() {
+ return `${this.premise.toStringPostfix()} ${this.conclusion.toStringPostfix()} Implication`;
+ }
+
+ toStringXML() {
+ return `${this.premise.toStringXML()} ${this.conclusion.toStringXML()} `;
+ }
+
+ getFeatureNodes() {
+ return [...this.premise.getFeatureNodes().flat(), ...this.conclusion.getFeatureNodes()];
+ }
+
+ setConstraint(constraint) {
+ this.premise.setConstraint(constraint);
+ this.conclusion.setConstraint(constraint);
+ }
+
+ removeConstraint() {
+ this.premise.removeConstraint();
+ this.conclusion.removeConstraint();
+ }
+}
diff --git a/frontendVue3/src/classes/Constraint/Negation.js b/frontendVue3/src/classes/Constraint/Negation.js
new file mode 100644
index 00000000..2522d7eb
--- /dev/null
+++ b/frontendVue3/src/classes/Constraint/Negation.js
@@ -0,0 +1,40 @@
+import {ConstraintItem} from "@/classes/Constraint/ConstraintItem";
+
+export class Negation extends ConstraintItem {
+ constructor(item) {
+ super();
+ this.item = item;
+ }
+
+ count() {
+ return 1;
+ }
+
+ toString() {
+ return `¬${this.addPossibleBrackets(this.item)}`;
+ }
+
+ toStringForEdit() {
+ return `NOT ${this.addPossibleBracketsForEdit(this.item)}`;
+ }
+
+ toStringPostfix() {
+ return `${this.item.toStringPostfix()} Negation`;
+ }
+
+ toStringXML() {
+ return `${this.item.toStringXML()} `;
+ }
+
+ getFeatureNodes() {
+ return this.item.getFeatureNodes();
+ }
+
+ setConstraint(constraint) {
+ this.item.setConstraint(constraint);
+ }
+
+ removeConstraint() {
+ this.item.removeConstraint();
+ }
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/FeatureNode.js b/frontendVue3/src/classes/FeatureNode.js
new file mode 100644
index 00000000..428fa0c7
--- /dev/null
+++ b/frontendVue3/src/classes/FeatureNode.js
@@ -0,0 +1,356 @@
+import * as CONSTANTS from './constants';
+import * as d3 from "d3";
+import {PseudoNode} from "@/classes/PseudoNode";
+
+export class FeatureNode {
+ constructor(parent, name, groupType, mandatory, abstract) {
+ this.parent = parent;
+ this.name = name;
+ this.displayName = name.slice(0, CONSTANTS.DISPLAY_NAME_LENGTH) + '...';
+ this.children = [];
+ this.groupType = groupType;
+ this.isRoot = parent === null;
+ this.isMandatory = mandatory;
+ this.isAbstract = abstract;
+ this.colorValue = CONSTANTS.NODE_COLOR;
+ this.constraints = [];
+ this.isCollapsed = false;
+ this.isHidden = false;
+ this.d3Node = null;
+ this.markedAsEdited = false;
+ }
+
+ color() {
+ if (this.markedAsEdited) {
+ return CONSTANTS.NODE_EDITED_COLOR;
+ } else if (this.isAbstract) {
+ return CONSTANTS.NODE_ABSTRACT_COLOR;
+ } else {
+ return this.colorValue;
+ }
+ }
+
+ level() {
+ if (this.isRoot) {
+ return 0;
+ } else {
+ return this.parent.level() + 1;
+ }
+ }
+
+ childrenCount() {
+ if (this.isLeaf()) {
+ return 0;
+ } else {
+ return this.children.length;
+ }
+ }
+
+ totalSubnodesCount() {
+ if (this.isLeaf()) {
+ return 0;
+ } else {
+ let totalSubnodesCount = this.children.length;
+ this.children.forEach(node => {
+ totalSubnodesCount += node.totalSubnodesCount();
+ });
+ return totalSubnodesCount;
+ }
+ }
+
+ isAnd() {
+ return this.groupType === 'and';
+ }
+
+ isOr() {
+ return this.groupType === 'or';
+ }
+
+ isAlt() {
+ return this.groupType === 'alt';
+ }
+
+ isLeaf() {
+ return this.children.length === 0;
+ }
+
+ uncollapse(toRoot = true) {
+ if (this.isCollapsed && !this.isLeaf()) {
+ this.d3Node.children = this.d3Node.collapsedChildren;
+ this.d3Node.collapsedChildren = null;
+ }
+
+ if (!this.isRoot && toRoot) {
+ this.parent.uncollapse();
+ }
+
+ this.isCollapsed = false;
+ }
+
+ collapse() {
+ if (!this.isCollapsed && !this.isLeaf()) {
+ this.d3Node.collapsedChildren = this.d3Node.children;
+ this.d3Node.children = null;
+ }
+
+ this.isCollapsed = true;
+ }
+
+ toggleCollapse() {
+ if (this.isCollapsed) {
+ this.uncollapse();
+ } else {
+ this.collapse();
+ }
+ }
+
+ getAllNodesToRoot() {
+ if (this.isRoot) {
+ return [this];
+ } else {
+ return [this, ...this.parent.getAllNodesToRoot()];
+ }
+ }
+
+ getLeftSibling() {
+ const index = this.parent.children.indexOf(this);
+ if (index === 0) {
+ return null;
+ }
+ return this.parent.children[index - 1];
+ }
+
+ getRightSibling() {
+ const index = this.parent.children.indexOf(this);
+ if (index === this.parent.children.length - 1) {
+ return null;
+ }
+ return this.parent.children[index + 1];
+ }
+
+ getLeftSiblings() {
+ if (this.isRoot) {
+ return [];
+ }
+ const index = this.parent.children.indexOf(this);
+ return this.parent.children.slice(0, index);
+ }
+
+ getRightSiblings() {
+ if (this.isRoot) {
+ return [];
+ }
+ const index = this.parent.children.indexOf(this);
+ return this.parent.children.slice(index + 1);
+ }
+
+ toggleHideLeftSiblings() {
+ if (this.getLeftSibling().isHidden) {
+ this.unhideLeftSiblings();
+ } else {
+ this.hideLeftSiblings();
+ }
+ }
+
+ toggleHideRightSiblings() {
+ if (this.getRightSibling().isHidden) {
+ this.unhideRightSiblings();
+ } else {
+ this.hideRightSiblings();
+ }
+ }
+
+ hideLeftSiblings() {
+ if (this.isRoot) {
+ return;
+ }
+
+ const leftSiblings = this.getLeftSiblings();
+ if (!leftSiblings.length) return;
+ leftSiblings.forEach(node => node.isHidden = true);
+
+ const leftD3Siblings = leftSiblings.map(node => node.d3Node);
+ const pseudoNode = new PseudoNode(this.parent, leftD3Siblings);
+ const d3PseudoNode = d3.hierarchy(pseudoNode);
+ pseudoNode.d3Node = d3PseudoNode;
+
+ const index = this.parent.d3Node.children.indexOf(this.d3Node);
+ const rightD3Siblings = this.parent.d3Node.children.slice(index + 1);
+ this.parent.d3Node.children = [d3PseudoNode, this.d3Node, ...rightD3Siblings];
+ }
+
+ hideRightSiblings() {
+ if (this.isRoot) {
+ return;
+ }
+
+ const rightSiblings = this.getRightSiblings();
+ if (!rightSiblings.length) return;
+ rightSiblings.forEach(node => node.isHidden = true);
+
+ const rightD3Siblings = rightSiblings.map(node => node.d3Node);
+ const pseudoNode = new PseudoNode(this.parent, rightD3Siblings);
+ const d3PseudoNode = d3.hierarchy(pseudoNode);
+ pseudoNode.d3Node = d3PseudoNode;
+
+ const index = this.parent.d3Node.children.indexOf(this.d3Node);
+ const leftD3Siblings = this.parent.d3Node.children.slice(0, index);
+ this.parent.d3Node.children = [...leftD3Siblings, this.d3Node, d3PseudoNode];
+ }
+
+ unhideLeftSiblings() {
+ if (this.isRoot) {
+ return;
+ }
+
+ const leftSiblings = this.getLeftSiblings();
+ leftSiblings.forEach(node => node.isHidden = false);
+
+ const index = this.parent.d3Node.children.indexOf(this.d3Node);
+ const rightD3Siblings = this.parent.d3Node.children.slice(index + 1);
+ const leftD3Siblings = leftSiblings.map(node => node.d3Node);
+ this.parent.d3Node.children = [...leftD3Siblings, this.d3Node, ...rightD3Siblings];
+ }
+
+ unhideRightSiblings() {
+ if (this.isRoot) {
+ return;
+ }
+
+ const rightSiblings = this.getRightSiblings();
+ rightSiblings.forEach(node => node.isHidden = false);
+
+ const index = this.parent.d3Node.children.indexOf(this.d3Node);
+ const leftD3Siblings = this.parent.d3Node.children.slice(index + 1);
+ const rightD3Siblings = rightSiblings.map(node => node.d3Node);
+ this.parent.d3Node.children = [...leftD3Siblings, this.d3Node, ...rightD3Siblings];
+ }
+
+ hide() {
+ if (this.isRoot) {
+ return;
+ }
+
+ const index = this.parent.d3Node.children.indexOf(this.d3Node);
+
+ // Check if the d3Node left is also a pseudo-node. If true merge with current one.
+ let leftHiddenD3Nodes = [];
+ let leftIndex = index;
+ if (index !== 0) {
+ const leftD3Node = this.parent.d3Node.children[index - 1];
+ if (leftD3Node.data instanceof PseudoNode) {
+ leftHiddenD3Nodes = leftD3Node.data.hiddenD3Nodes;
+ leftIndex--;
+ }
+ }
+
+ // Check if the d3Node right is also a pseudo-node. If true merge with current one.
+ let rightHiddenD3Nodes = [];
+ let rightIndex = index;
+ if (index !== this.parent.d3Node.children.length - 1) {
+ const rightD3Node = this.parent.d3Node.children[index + 1];
+ if (rightD3Node.data instanceof PseudoNode) {
+ rightHiddenD3Nodes = rightD3Node.data.hiddenD3Nodes;
+ rightIndex++;
+ }
+ }
+
+ const hiddenD3Nodes = [...leftHiddenD3Nodes, this.d3Node, ...rightHiddenD3Nodes];
+
+ const pseudoNode = new PseudoNode(this.parent, hiddenD3Nodes);
+ const d3PseudoNode = d3.hierarchy(pseudoNode);
+ pseudoNode.d3Node = d3PseudoNode;
+
+ const leftD3Siblings = this.parent.d3Node.children.slice(0, leftIndex);
+ const rightD3Siblings = this.parent.d3Node.children.slice(rightIndex + 1);
+
+ this.parent.d3Node.children = [...leftD3Siblings, d3PseudoNode, ...rightD3Siblings];
+ this.isHidden = true;
+ }
+
+ hideAllNodesOnThisLevel() {
+ if (this.getLeftSiblings().length) {
+ this.hideLeftSiblings();
+ }
+ if (this.getRightSiblings().length) {
+ this.hideRightSiblings();
+ }
+ }
+
+ hideAllOtherNodes() {
+ this.collapse();
+ this.getAllNodesToRoot().forEach(node => node.hideAllNodesOnThisLevel());
+ }
+
+ unhideChildren() {
+ if (this.isLeaf()) {
+ return;
+ }
+
+ this.children.forEach(node => node.isHidden = false);
+ this.d3Node.children = this.children.map(node => node.d3Node);
+ }
+
+ insertChildAtIndex(child, index) {
+ // Update d3-parent
+ child.d3Node.parent = this.d3Node;
+ child.parent = this;
+
+ // Update d3-children
+ const d3Children = this.getD3Children();
+ const leftD3Nodes = d3Children.slice(0, index);
+ const rightD3Nodes = d3Children.slice(index);
+ this.d3Node.children = [...leftD3Nodes, child.d3Node, ...rightD3Nodes];
+
+ // Update feature-node-children
+ const leftNodes = this.children.slice(0, index);
+ const rightNodes = this.children.slice(index);
+ this.children = [...leftNodes, child, ...rightNodes];
+ }
+
+ removeChild(child) {
+ this.children = this.children.filter(node => node !== child);
+ this.d3Node.children = this.getD3Children().filter(d3Node => d3Node.data !== child);
+ }
+
+ getD3Children() {
+ return this.children.map(node => node.d3Node);
+ }
+
+ each(func) {
+ func(this);
+ if (!this.isLeaf()) {
+ this.children.forEach(node => node.each(func));
+ }
+ }
+
+ descendants() {
+ if (this.isLeaf()) {
+ return [this];
+ } else {
+ return [this, ...this.children.map(node => node.descendants()).flat()];
+ }
+ }
+
+ markAsEdited() {
+ this.markedAsEdited = true;
+ }
+
+ unmarkAsEdited() {
+ this.markedAsEdited = false;
+ }
+
+ getHighlightedConstraints() {
+ return this.constraints.filter((constraint) => constraint.isHighlighted);
+ }
+
+ highlightConstraints() {
+ this.constraints.forEach((constraint) => constraint.isHighlighted = true);
+ }
+}
+
+export function createFeatureNode(parent, name, groupType, mandatory, abstract) {
+ const node = new FeatureNode(parent, name, groupType, mandatory, abstract);
+ node.d3Node = d3.hierarchy(node);
+ return node;
+}
\ No newline at end of file
diff --git a/frontendVue3/src/classes/PseudoNode.js b/frontendVue3/src/classes/PseudoNode.js
new file mode 100644
index 00000000..ed0a261d
--- /dev/null
+++ b/frontendVue3/src/classes/PseudoNode.js
@@ -0,0 +1,19 @@
+export class PseudoNode {
+ constructor(parent, hiddenD3Nodes) {
+ this.hiddenD3Nodes = hiddenD3Nodes;
+ this.parent = parent;
+ this.d3Node = null;
+ }
+
+ unhideHiddenNodes() {
+ // Unhide every node that is in this pseudo-node.
+ this.hiddenD3Nodes.forEach(d3Node => d3Node.data.isHidden = false);
+
+ // Move every node back to children of parent node.
+ const parentD3Children = this.parent.d3Node.children;
+ const index = parentD3Children.indexOf(this.d3Node);
+ const leftD3Siblings = parentD3Children.slice(0, index);
+ const rightD3Siblings = parentD3Children.slice(index + 1);
+ this.parent.d3Node.children = [...leftD3Siblings, ...this.hiddenD3Nodes, ...rightD3Siblings];
+ }
+}
diff --git a/frontendVue3/src/classes/constants.js b/frontendVue3/src/classes/constants.js
new file mode 100644
index 00000000..dce4a71f
--- /dev/null
+++ b/frontendVue3/src/classes/constants.js
@@ -0,0 +1,73 @@
+export const SVG_MARGIN = {top: 20, right: 90, bottom: 20, left: 90};
+
+export const RECT_MARGIN = {right: 8, left: 8};
+export const RECT_HEIGHT = 35;
+
+export const MONOSPACE_HEIGHT_WIDTH_FACTOR = 0.6;
+export const MANDATORY_CIRCLE_RADIUS = 6;
+export const GROUP_SEGMENT_RADIUS = 25; // Radius of the segment that represents the 'alt' and 'and' groups.
+export const FEATURE_FONT_SIZE = 16;
+export const CHILDREN_COUNT_FONT_SIZE = 7;
+
+export const PSEUDO_NODE_SIZE = 20;
+
+export const GHOST_NODE_RADIUS_MOUSE = 15;
+export const GHOST_NODE_RADIUS_TOUCH = 30;
+
+export const QUICK_EDIT_RADIUS = 5;
+
+export let CONSTRAINT_HIGHLIGHT_COLORS = [
+ '#B762D9',
+ '#FFB17A',
+ '#AEE7C2',
+ '#E2FBC5',
+ '#F3C969',
+ '#37FF8B',
+ '#51D6FF',
+ '#A0AECF',
+ '#F4743B',
+ '#F45B69',
+];
+
+export const COLORING_MAP = [
+ "#4e78b5",
+ "#6694c1",
+ "#80b1cc",
+ "#9dced6",
+ "#c0eade",
+ "#ffffe0",
+ "#eb6574",
+ "#d5405e",
+ "#b81b4a",
+ "#93003a",
+];
+
+export const STROKE_WIDTH_CONSTANT = 4;
+
+export const NODE_COLOR = "rgb(204, 204, 255)";
+export const NODE_EDITED_COLOR = "rgb(197,196,120)";
+export const NODE_ABSTRACT_COLOR = "#ebebff";
+
+export const DISPLAY_NAME_LENGTH = 8;
+export const operators = {
+ imp: "⇒",
+ conj: "∧",
+ disj: "∨",
+ eq: "⇔",
+ not: "¬",
+};
+
+export const EXAMPLE_FEATURE_MODEL_XML = `
+
+
+
+
+
+
+
+
+
+
+
+
+`;
diff --git a/frontendVue3/src/components/CollaborationContinueEditingDialog.vue b/frontendVue3/src/components/CollaborationContinueEditingDialog.vue
new file mode 100644
index 00000000..3133c47c
--- /dev/null
+++ b/frontendVue3/src/components/CollaborationContinueEditingDialog.vue
@@ -0,0 +1,34 @@
+
+
+
+
+ Do you want to stay and continue editing or close?
+
+
+
+ Close
+ Continue editing
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/CollaborationNameDialog.vue b/frontendVue3/src/components/CollaborationNameDialog.vue
new file mode 100644
index 00000000..f9015ac4
--- /dev/null
+++ b/frontendVue3/src/components/CollaborationNameDialog.vue
@@ -0,0 +1,61 @@
+
+
+
+ Choose your name
+
+
+
+
+
+
+
+
+
+
+
+ Choose name
+ (this.show = false)"
+ >Stay Anonymous
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/CollaborationToolbar.vue b/frontendVue3/src/components/CollaborationToolbar.vue
new file mode 100644
index 00000000..08c9661d
--- /dev/null
+++ b/frontendVue3/src/components/CollaborationToolbar.vue
@@ -0,0 +1,334 @@
+
+
+
+
+ mdi-close
+ mdi-account-multiple
+
+
+
+
+
+
+ Me ({{ collaborationManager.name }})
+ mdi-lead-pencil
+
+
+ {{ member.name }}
+ mdi-lead-pencil
+
+
+
+
+
+
+
+ mdi-account-edit
+
+
+ Claim edit rights
+
+
+
+
+
+ mdi-account-cancel
+
+
+ Block edit claims
+
+
+
+
+
+ mdi-qrcode
+
+
+ Show qr code
+
+
+
+
+
+ mdi-content-copy
+
+
+ Copy invitation link
+
+
+
+
+
+ mdi-close
+
+
+ Close session
+ Leave session
+
+
+
+
+
+
+
+
+ Collaboration
+
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/ConstraintAddEditDialog.vue b/frontendVue3/src/components/ConstraintAddEditDialog.vue
new file mode 100644
index 00000000..6b9c71c9
--- /dev/null
+++ b/frontendVue3/src/components/ConstraintAddEditDialog.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+ {{ mode }} Constraint
+
+
+
+
+
+
+
+
+
+
+ and
+
+
+
+ or
+
+
+
+ implies
+
+
+
+ not
+
+
+
+ (
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+ {{ errorText }}
+
+
+
+
+
+
+
+
+
+
+ Discard
+
+ {{ mode }}
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/Constraints.vue b/frontendVue3/src/components/Constraints.vue
new file mode 100644
index 00000000..cb14ae8b
--- /dev/null
+++ b/frontendVue3/src/components/Constraints.vue
@@ -0,0 +1,251 @@
+
+
+ save(newConstraint)"
+ >
+
+
+
+
+
+
+
+ mdi-plus
+
+
+
+ mdi-undo
+
+
+
+ mdi-redo
+
+
+
+ mdi-close
+
+
+
+
+
+
+ {{ item.formula }}
+
+
+
+
+
+ mdi-pencil
+
+
+ mdi-delete
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/FeatureModel/FeatureModelInformation.vue b/frontendVue3/src/components/FeatureModel/FeatureModelInformation.vue
new file mode 100644
index 00000000..8a7eb784
--- /dev/null
+++ b/frontendVue3/src/components/FeatureModel/FeatureModelInformation.vue
@@ -0,0 +1,53 @@
+
+
+ Information
+
+
+
+
+
+ Category
+ Value
+
+
+
+
+ {{ item.category }}
+ {{ item.value }}
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/FeatureModel/FeatureModelTree.vue b/frontendVue3/src/components/FeatureModel/FeatureModelTree.vue
new file mode 100644
index 00000000..922cd0f9
--- /dev/null
+++ b/frontendVue3/src/components/FeatureModel/FeatureModelTree.vue
@@ -0,0 +1,588 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
coloring(coloringIndex)"
+ @export="$emit('exportToXML')"
+ @fitToView="fitToView"
+ @quickEdit="(value) => updateQuickEdit(value)"
+ @redo="redo"
+ @reset="$emit('reset')"
+ @resetView="(levels, maxChildren) => resetView(levels, maxChildren)"
+ @save="$emit('save')"
+ @semanticEditing="(value) => (d3Data.semanticEditing = value)"
+ @shortName="changeShortName"
+ @spaceBetweenParentChild="changeSpaceBetweenParentChild"
+ @spaceBetweenSiblings="changeSpaceBetweenSiblings"
+ @toggleDirection="toggleDirection"
+ @undo="undo"
+ @show-collaboration-dialog="$emit('show-collaboration-dialog')"
+ @show-tutorial="$emit('show-tutorial')"
+ @new-empty-model="$emit('new-empty-model')"
+ >
+
+
+
+
openAddAsChildDialog(d3Node)"
+ @addAsSibling="(d3Node) => openAddAsSiblingDialog(d3Node)"
+ @close="d3Data.contextMenu.selectedD3Node = undefined"
+ @collapse="collapse"
+ @edit="(d3Node) => openEditDialog(d3Node)"
+ @hideAllNodesOnThisLevel="
+ (d3Node) => hideAllNodesOnThisLevel(d3Node)
+ "
+ @hideAllOtherNodes="(d3Node) => hideAllOtherNodes(d3Node)"
+ @hideCurrentNode="(d3Node) => hideCurrentNode(d3Node)"
+ @hideLeftSiblings="(d3Node) => hideLeftSiblings(d3Node)"
+ @hideRightSiblings="(d3Node) => hideRightSiblings(d3Node)"
+ @highlightConstraints="(d3Node) => highlightConstraints(d3Node)"
+ @resetHighlightConstraints="
+ (d3Node) => resetHighlightConstraints(d3Node)
+ "
+ >
+
+
edit(data)"
+ >
+
+
+
add(data)"
+ @close="showAddDialog = false"
+ >
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/FeatureModel/FeatureModelTreeAddDialog.vue b/frontendVue3/src/components/FeatureModel/FeatureModelTreeAddDialog.vue
new file mode 100644
index 00000000..fcd5f188
--- /dev/null
+++ b/frontendVue3/src/components/FeatureModel/FeatureModelTreeAddDialog.vue
@@ -0,0 +1,120 @@
+
+
+
+
+ Add Feature
+
+
+
+
+
+
+
+
+
+
+
+ mandatory
+ optional
+
+
+
+
+
+
+
+
+
+
+
+ Discard
+
+ Add
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/FeatureModel/FeatureModelTreeContextMenu.vue b/frontendVue3/src/components/FeatureModel/FeatureModelTreeContextMenu.vue
new file mode 100644
index 00000000..069eb826
--- /dev/null
+++ b/frontendVue3/src/components/FeatureModel/FeatureModelTreeContextMenu.vue
@@ -0,0 +1,179 @@
+
+
+
+
+ Collapse
+
+
+
+
+
+
+
+ Hide Nodes
+
+
+
+
+ Hide left siblings
+
+
+
+ Hide right siblings
+
+
+
+ Hide current node
+
+
+
+
+ Hide all other nodes on every level
+
+
+
+
+
+ Hide all other siblings on this level
+
+
+
+
+
+
+
+ Highlight constraints
+
+
+
+ Reset highlight constraints
+
+
+
+
+
+ Edit
+
+
+
+
+
+ Add
+
+
+
+
+ Add as child
+
+
+
+ Add as sibling
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/FeatureModel/FeatureModelTreeEditDialog.vue b/frontendVue3/src/components/FeatureModel/FeatureModelTreeEditDialog.vue
new file mode 100644
index 00000000..ed255de8
--- /dev/null
+++ b/frontendVue3/src/components/FeatureModel/FeatureModelTreeEditDialog.vue
@@ -0,0 +1,189 @@
+
+
+
+
+ Edit Feature
+
+
+
+
+
+
+
+
+
+
+
+ ⊻ alt
+ ∨ or
+ ∧ and
+
+
+
+
+
+ mandatory
+ optional
+
+
+
+
+
+
+
+
+
+
+
+ Discard
+
+
+ Edit
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/FeatureModel/FeatureModelTreeToolbar.vue b/frontendVue3/src/components/FeatureModel/FeatureModelTreeToolbar.vue
new file mode 100644
index 00000000..f01da8bc
--- /dev/null
+++ b/frontendVue3/src/components/FeatureModel/FeatureModelTreeToolbar.vue
@@ -0,0 +1,396 @@
+
+
+
+
+
+ New empty model
+
+
+
+
+
+ Save
+
+
+
+
+ Save?
+
+ Do you really want to overwrite the feature-model
+ currently saved in local storage?
+
+
+
+
+ Cancel
+
+ {
+ $emit('save');
+ this.saveDialog = false;
+ }
+ "
+ >
+ Save
+
+
+
+
+
+
+
+
+
+ Discard changes
+
+
+
+
+
+ Discard changes?
+ Do you really want to discard all changes? This
+ action can't be undone!
+
+
+
+ Cancel
+
+ Discard
+
+
+
+
+
+
+ Undo
+
+
+
+ Redo
+
+
+
+
+
+ Coloring
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View
+
+
+
+ View
+
+
+ Fit to view
+
+
+
+ {{
+ direction === 'v'
+ ? 'Change direction to horizontally'
+ : 'Change direction to vertically'
+ }}
+
+
+
+ Reset view
+
+
+
+ Show Constraints
+
+
+
+
+
+
+
+
+
+ Short Name
+
+
+
+
+ Space parent -> child
+
+
+
+ Space between siblings
+
+
+
+
+
+
+
+ Export as XML
+
+
+
+ Collaboration
+
+
+
+ Tutorial
+
+
+
+
+
+ Settings
+
+
+
+ Adjust Levels
+
+
+
+
+ Adjust Max Children
+
+
+
+
+
+
+
+
+
+
+
+
+ Semantic editing
+
+
+
+
+
+
+
+
+
+
+ Quick edit
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/FeatureModelTable.vue b/frontendVue3/src/components/FeatureModelTable.vue
new file mode 100644
index 00000000..aea620ce
--- /dev/null
+++ b/frontendVue3/src/components/FeatureModelTable.vue
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
+ {{ headline }}
+
+
+
+
+
+
+
+
+
+
+ Upload feature model
+
+
+
+
+
+
+ Create feature model
+
+
+
+
+
+
+ Upload from local storage
+
+
+
+
+ Are you sure you want to delete this feature
+ model?
+
+
+
+ Cancel
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+ {{ item.raw.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.value }}
+
+
+
+
+ {{ tag.label }}
+
+
+
+
+ {{ item.columns.tags[0].label }}
+
+
+ {{ item.columns.tags[1].label }}
+
+ + {{ item.columns.tags.length - 2 }}
+
+
+
+
+ mdi-check
+
+ mdi-cancel
+
+
+ {{ item.raw.family.label }} ({{ item.raw.version }})
+
+
+ {{ new Date(item.raw.uploaded_at).toLocaleString('en-US') }}
+
+ {{ noDataText }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/Footer.vue b/frontendVue3/src/components/Footer.vue
new file mode 100644
index 00000000..16cdea46
--- /dev/null
+++ b/frontendVue3/src/components/Footer.vue
@@ -0,0 +1,27 @@
+
+
+ © variability.dev, Ulm University
+ Made with ❤ in Institutspool
+
+ Imprint & Privacy
+
+
+
+
+
diff --git a/frontendVue3/src/components/GithubButton.vue b/frontendVue3/src/components/GithubButton.vue
new file mode 100644
index 00000000..bbbab07a
--- /dev/null
+++ b/frontendVue3/src/components/GithubButton.vue
@@ -0,0 +1,22 @@
+
+
+ Sign in with GitHub
+
+
+
+
diff --git a/frontendVue3/src/components/LoginDiv.vue b/frontendVue3/src/components/LoginDiv.vue
new file mode 100644
index 00000000..b84c7761
--- /dev/null
+++ b/frontendVue3/src/components/LoginDiv.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+ OR
+
+
+
+
+
+
+
+
+
+ Login
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/Navbar.vue b/frontendVue3/src/components/Navbar.vue
new file mode 100644
index 00000000..45e4bcea
--- /dev/null
+++ b/frontendVue3/src/components/Navbar.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+ variability.dev
+
+
+
+ Home
+
+
+ Profile
+
+
+ Models
+
+
+
+ Histories
+
+
+
+
+
+
+
+ mdi-fullscreen
+
+
+
+
+
+
+ Admin
+
+
+ Register
+
+
+
+
+ Login
+
+
+
+
+ Login
+
+
+
+
+
+
+
+ Logout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Home
+
+
+
+
+
+ Profile
+
+
+
+
+
+ Models
+
+
+
+
+
+
+ Histories
+
+
+
+
+
+
+ Admin
+
+
+
+
+
+
+
+
+ Register
+
+
+
+
+
+ Login
+
+
+
+
+
+ Logout
+
+
+
+
+
+ Switch theme
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/TutorialMode.vue b/frontendVue3/src/components/TutorialMode.vue
new file mode 100644
index 00000000..68c5feb5
--- /dev/null
+++ b/frontendVue3/src/components/TutorialMode.vue
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ step.title }}
+
+
+ mdi-close
+
+
+
+
+ {{ step.description }}
+
+
+
+
+ Back
+ Continue
+
+
+
+
+ Do you want to start the tutorial?
+
+
+
+
+ Close
+ Start Tutorial
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/upload_cards/FamilyCreate.vue b/frontendVue3/src/components/upload_cards/FamilyCreate.vue
new file mode 100644
index 00000000..cf4aef34
--- /dev/null
+++ b/frontendVue3/src/components/upload_cards/FamilyCreate.vue
@@ -0,0 +1,73 @@
+
+
+ Add new Family
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Upload Family
+
+
+
+
+
diff --git a/frontendVue3/src/components/upload_cards/FileCreate.vue b/frontendVue3/src/components/upload_cards/FileCreate.vue
new file mode 100644
index 00000000..e04ad240
--- /dev/null
+++ b/frontendVue3/src/components/upload_cards/FileCreate.vue
@@ -0,0 +1,932 @@
+
+
+
+ Upload Feature Model
+
+
+ Use this form to upload a new Feature Model publicly
+
+
+
+
+ {{ fileCreateAlert.message }}
+
+
+
+ Single Upload
+ Multiple Upload
+ Zip Upload
+
+
+
+
+
+
+ Multiple
+ Zip
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/upload_cards/TagCreate.vue b/frontendVue3/src/components/upload_cards/TagCreate.vue
new file mode 100644
index 00000000..4bb8c2ab
--- /dev/null
+++ b/frontendVue3/src/components/upload_cards/TagCreate.vue
@@ -0,0 +1,81 @@
+
+
+ Add new Tag
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Upload Tag
+
+
+
+
+
diff --git a/frontendVue3/src/components/upload_cards/file_create/ActionButtons.vue b/frontendVue3/src/components/upload_cards/file_create/ActionButtons.vue
new file mode 100644
index 00000000..254b424f
--- /dev/null
+++ b/frontendVue3/src/components/upload_cards/file_create/ActionButtons.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+ {{ uploadStatus }}
+
+
+ Cancel
+
+
+ Upload
+
+
+
+
+
+
diff --git a/frontendVue3/src/components/upload_cards/file_create/Single.vue b/frontendVue3/src/components/upload_cards/file_create/Single.vue
new file mode 100644
index 00000000..1ef7e5d8
--- /dev/null
+++ b/frontendVue3/src/components/upload_cards/file_create/Single.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/main.js b/frontendVue3/src/main.js
new file mode 100644
index 00000000..80f0a640
--- /dev/null
+++ b/frontendVue3/src/main.js
@@ -0,0 +1,9 @@
+import App from "./App.vue";
+import { createApp } from "vue";
+import { registerPlugins } from "@/plugins";
+
+const app = createApp(App);
+
+registerPlugins(app);
+
+app.mount("#app");
diff --git a/frontendVue3/src/plugins/index.js b/frontendVue3/src/plugins/index.js
new file mode 100644
index 00000000..6b8ab74c
--- /dev/null
+++ b/frontendVue3/src/plugins/index.js
@@ -0,0 +1,9 @@
+import { loadFonts } from "./webfontloader";
+import vuetify from "./vuetify";
+import pinia from "../store";
+import router from "../router";
+
+export function registerPlugins(app) {
+ loadFonts();
+ app.use(vuetify).use(router).use(pinia);
+}
diff --git a/frontendVue3/src/plugins/vuetify.js b/frontendVue3/src/plugins/vuetify.js
new file mode 100644
index 00000000..f737f3f9
--- /dev/null
+++ b/frontendVue3/src/plugins/vuetify.js
@@ -0,0 +1,25 @@
+import '@mdi/font/css/materialdesignicons.css';
+import 'vuetify/styles';
+import { createVuetify } from 'vuetify';
+import { VDataTable } from 'vuetify/labs/VDataTable';
+
+export default createVuetify({
+ theme: {
+ defaultTheme: 'light',
+ },
+ components: {
+ VDataTable,
+ },
+});
+/*{
+ theme: {
+ themes: {
+ light: {
+ colors: {
+ primary: '#1867C0',
+ secondary: '#5CBBF6',
+ },
+ },
+ },
+ },
+}*/
diff --git a/frontendVue3/src/plugins/webfontloader.js b/frontendVue3/src/plugins/webfontloader.js
new file mode 100644
index 00000000..d97d230f
--- /dev/null
+++ b/frontendVue3/src/plugins/webfontloader.js
@@ -0,0 +1,11 @@
+export async function loadFonts() {
+ const webFontLoader = await import(
+ /* webpackChunkName: "webfontloader" */ "webfontloader"
+ );
+
+ webFontLoader.load({
+ google: {
+ families: ["Roboto:100,300,400,500,700,900&display=swap"],
+ },
+ });
+}
diff --git a/frontendVue3/src/router/index.js b/frontendVue3/src/router/index.js
new file mode 100644
index 00000000..9df9c71b
--- /dev/null
+++ b/frontendVue3/src/router/index.js
@@ -0,0 +1,64 @@
+// Composables
+import { createRouter, createWebHistory } from 'vue-router';
+
+const routes = [
+ {
+ path: '/',
+ name: 'Home',
+ component: () => import('@/views/Home.vue'),
+ },
+ {
+ path: '/login',
+ name: 'Login',
+ component: () => import('@/views/Login.vue'),
+ },
+ {
+ path: '/profile',
+ name: 'Profile',
+ component: () => import('@/views/Profile.vue'),
+ },
+ {
+ path: '/models',
+ name: 'Models',
+ component: () => import('@/views/Models.vue'),
+ },
+ {
+ path: '/histories',
+ name: 'Histories',
+ component: () => import('@/views/Histories.vue'),
+ },
+ {
+ path: '/dsgvo',
+ name: 'DSGVO',
+ component: () => import('@/views/DSGVO.vue'),
+ },
+ {
+ path: '/files/:id/:slug',
+ name: 'FileDetail',
+ component: () => import('@/views/FileDetail.vue'),
+ meta: {
+ title: 'File Detail',
+ },
+ },
+ {
+ path: '/feature-model/:id',
+ name: 'FeatureModel',
+ props: true,
+ component: () => import('@/views/FeatureModel.vue'),
+ },
+ {
+ path: '/histories/:id/:slug',
+ name: 'HistoryDetail',
+ component: () => import('@/views/HistoryDetail.vue'),
+ meta: {
+ title: 'History Detail',
+ },
+ },
+];
+
+const router = createRouter({
+ history: createWebHistory(process.env.BASE_URL),
+ routes,
+});
+
+export default router;
diff --git a/frontendVue3/src/services/FeatureModel/collapse.service.js b/frontendVue3/src/services/FeatureModel/collapse.service.js
new file mode 100644
index 00000000..3c208559
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/collapse.service.js
@@ -0,0 +1,9 @@
+import * as update_service from '@/services/FeatureModel/update.service.js';
+
+// Collapses all children of the specified node with shortcut ALT + left-click.
+export function collapseShortcut(d3Data, event, d3Node) {
+ if (event.getModifierState('Alt')) {
+ d3Node.data.toggleCollapse();
+ update_service.updateSvg(d3Data);
+ }
+}
diff --git a/frontendVue3/src/services/FeatureModel/count.service.js b/frontendVue3/src/services/FeatureModel/count.service.js
new file mode 100644
index 00000000..c46a6551
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/count.service.js
@@ -0,0 +1,85 @@
+import * as d3 from 'd3'
+import * as CONSTANTS from '@/classes/constants'
+
+export function colorNodes(allNodes, coloringIndex) {
+ switch (coloringIndex) {
+ case 0:
+ coloring(allNodes, countNodes)
+ break
+ case 1:
+ coloring(allNodes, countDirectChildren)
+ break
+ case 2:
+ coloring(allNodes, countTotalChildren)
+ break
+ default:
+ resetColorNodes(allNodes)
+ break
+ }
+}
+
+function resetColorNodes(allNodes) {
+ for (const node of allNodes) {
+ node.colorValue = node.isAbstract
+ ? CONSTANTS.NODE_ABSTRACT_COLOR
+ : CONSTANTS.NODE_COLOR
+ }
+}
+
+function coloring(allNodes, coloringFunction) {
+ const { count, max } = coloringFunction(allNodes) // Must return {"nodeName": integer}
+ const colors = d3
+ .scaleLinear()
+ .domain(d3.ticks(1, max, CONSTANTS.COLORING_MAP.length))
+ .range(CONSTANTS.COLORING_MAP)
+
+ for (const node of allNodes) {
+ if (count[node.d3Node.id] !== undefined && !node.isAbstract) {
+ node.colorValue = colors(count[node.d3Node.id])
+ }
+ }
+}
+
+/**
+ * Counts all nodes
+ * @returns {max: number, count: {}}
+ */
+function countNodes(allNodes) {
+ let count = {}
+ let max = 0
+ for (const node of allNodes) {
+ if (count[node.d3Node.id]) {
+ count[node.d3Node.id] += 1
+ max = max < count[node.d3Node.id] ? count[node.d3Node.id] : max
+ } else {
+ count[node.d3Node.id] = 1
+ max = max < count[node.d3Node.id] ? count[node.d3Node.id] : max
+ }
+ }
+
+ return { count: count, max: max }
+}
+
+function countDirectChildren(allNodes) {
+ let count = {}
+ let max = 0
+
+ for (const node of allNodes) {
+ count[node.d3Node.id] = node.childrenCount()
+ max = max < count[node.d3Node.id] ? count[node.d3Node.id] : max
+ }
+
+ return { count: count, max: max }
+}
+
+function countTotalChildren(allNodes) {
+ let count = {}
+ let max = 0
+
+ for (const node of allNodes) {
+ count[node.d3Node.id] = node.totalSubnodesCount()
+ max = max < count[node.d3Node.id] ? count[node.d3Node.id] : max
+ }
+
+ return { count: count, max: max }
+}
diff --git a/frontendVue3/src/services/FeatureModel/createPaths.service.js b/frontendVue3/src/services/FeatureModel/createPaths.service.js
new file mode 100644
index 00000000..5bf78a32
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/createPaths.service.js
@@ -0,0 +1,84 @@
+import * as CONSTANTS from "@/classes/constants";
+
+// Helper functions for drawing alternative-group and and-group paths
+const MOVE = 'M', LINE = 'L', ARC = 'A', CLOSE = 'Z';
+
+function polarToCartesian(point, radius, degrees) {
+ const rad = degrees * Math.PI / 180.0;
+ return {
+ x: point.x + (radius * Math.cos(rad)),
+ y: point.y + (radius * Math.sin(rad)),
+ };
+}
+
+function cartesianToAngle(centerPoint, point) {
+ return Math.atan2(point.y - centerPoint.y, point.x - centerPoint.x) * 180.0 / Math.PI;
+}
+
+function translateToPathD(...data) {
+ return data.join(' ');
+}
+
+function createPathDOfSegment(centerPoint, radius, startAngle, endAngle) {
+ const start = polarToCartesian(centerPoint, radius, startAngle);
+ const end = polarToCartesian(centerPoint, radius, endAngle);
+
+ const a = translateToPathD(MOVE, toPath(end), ARC, radius, radius, 0, 0, 1, toPath(start));
+ const b = translateToPathD(LINE, toPath(centerPoint), CLOSE);
+
+ return translateToPathD(a, b, CLOSE);
+}
+
+function toPath({x, y}) {
+ return `${x},${y}`;
+}
+
+export function createGroupSegmentHorizontally(d3Node, radius) {
+ const rectAnchor = {x: d3Node.x + d3Node.width, y: d3Node.y};
+ return createGroupSegment(d3Node, radius, rectAnchor);
+}
+
+export function createGroupSegmentVertically(d3Node, radius) {
+ const rectAnchor = {x: d3Node.x, y: d3Node.y + CONSTANTS.RECT_HEIGHT};
+ return createGroupSegment(d3Node, radius, rectAnchor);
+}
+
+function createGroupSegment(d3Node, radius, rectAnchor) {
+ if (d3Node.children && d3Node.children.length > 1) {
+
+ const firstChild = d3Node.children[0].isPseudoElement ? d3Node.children[1] : d3Node.children[0];
+ const lastChild = d3Node.children[d3Node.children.length - 1].isPseudoElement ? d3Node.children[d3Node.children.length - 2] : d3Node.children[d3Node.children.length - 1];
+
+ let startAngle = cartesianToAngle(rectAnchor, firstChild);
+ let endAngle = cartesianToAngle(rectAnchor, lastChild);
+ if (startAngle < endAngle) {
+ const tmp = startAngle;
+ startAngle = endAngle;
+ endAngle = tmp;
+ }
+ return createPathDOfSegment({x: 0, y: 0}, radius, startAngle, endAngle);
+ }
+
+ return null;
+}
+
+export function createLinkVertically(src, dest) {
+ const src_y = src.y + CONSTANTS.RECT_HEIGHT;
+ return `M ${src.x} ${src_y} L ${dest.x} ${dest.y}`;
+}
+
+export function createLinkHorizontally(src, dest) {
+ return `M ${src.x + src.width} ${src.y} L ${dest.x} ${dest.y}`;
+}
+
+export function calculateTriangle() {
+ const base = 35;
+
+ const h = Math.sin(60) * base;
+
+ const [ax, ay] = [-(base / 2), base / 2];
+ const [bx, by] = [base / 2, base / 2];
+ const [cx, cy] = [0, h];
+
+ return [`${ax},${ay}`, `${bx},${by}`, `${cx},${cy}`];
+}
diff --git a/frontendVue3/src/services/FeatureModel/dragAndDrop.service.js b/frontendVue3/src/services/FeatureModel/dragAndDrop.service.js
new file mode 100644
index 00000000..7cc5b62f
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/dragAndDrop.service.js
@@ -0,0 +1,248 @@
+import * as update from '@/services/FeatureModel/update.service.js';
+import * as CONSTANTS from '@/classes/constants';
+import * as d3 from 'd3';
+import {SwapCommand} from "@/classes/Commands/FeatureModel/SwapCommand";
+
+function overGhostNode(d3Data, ghostNode) {
+ d3Data.drag.selectedGhostNode = ghostNode;
+
+ // Highlight current ghostNode.
+ d3Data.container.dragContainer
+ .selectAll('circle.ghost-circle')
+ .data([ghostNode], gN => gN.d3Node.id + gN.side)
+ .classed('ghost-circle-highlighted', true);
+
+ // Uncollapse features.
+ if (ghostNode.side === 'b' && !ghostNode.d3Node.data.isLeaf()) {
+ setTimeout(() => {
+ if (d3Data.drag.selectedGhostNode === ghostNode) {
+ ghostNode.d3Node.data.uncollapse();
+ update.updateSvg(d3Data);
+ updateGhostCircles(d3Data);
+ translateD3NodeToMouse(d3Data, d3Data.drag.selectedD3Node);
+ }
+ }, 500);
+ }
+}
+
+function outGhostNode(d3Data) {
+ // Reset highlighting of current ghostNode.
+ if (d3Data.drag.selectedGhostNode) {
+ d3Data.container.dragContainer
+ .selectAll('circle.ghost-circle')
+ .data([d3Data.drag.selectedGhostNode], gN => gN.d3Node.id + gN.side)
+ .classed('ghost-circle-highlighted', false);
+ }
+
+ d3Data.drag.selectedGhostNode = null;
+}
+
+export function updateGhostCircles(d3Data) {
+ // Remove all children nodes under the current node and also the links between them.
+ const dragChildren = d3Data.drag.selectedD3Node.descendants();
+ d3Data.container.featureNodesContainer
+ .selectAll('g.node')
+ .data(dragChildren.slice(1), d3Node => d3Node.id)
+ .remove();
+ d3Data.container.linksContainer
+ .selectAll('path.link')
+ .data(dragChildren, d3Node => d3Node.id)
+ .remove();
+ d3Data.container.segmentsContainer
+ .selectAll('path')
+ .data(dragChildren, d3Node => d3Node.id)
+ .remove();
+
+ let dragNodes = [];
+ if (d3Data.semanticEditing) {
+ const allOtherNodes = d3Data.root
+ .descendants()
+ .slice(1)
+ .filter(node => !dragChildren.includes(node) && !d3Data.drag.selectedD3Node.children?.includes(node) && node !== d3Data.drag.selectedD3Node);
+
+ const rightGhostNodes = allOtherNodes.map(node => ({d3Node: node, side: 'r'}));
+ const leftGhostNodes = allOtherNodes
+ .filter(node => node === node.parent.children[0])
+ .map(node => ({
+ d3Node: node,
+ side: 'l',
+ }));
+
+ const bottomGhostNodes = allOtherNodes
+ .filter(node => node.data.isLeaf() || node.data.isCollapsed)
+ .map(node => ({
+ d3Node: node,
+ side: 'b',
+ }));
+
+ dragNodes = [...rightGhostNodes, ...leftGhostNodes, ...bottomGhostNodes];
+ }
+
+ // Siblings on the same level.
+ const leftGhostNodesOnSameLevel = d3Data.drag.selectedD3Node.data.getLeftSiblings().map(node => ({d3Node: node.d3Node, side: 'l'}));
+ const rightGhostNodesOnSameLevel = d3Data.drag.selectedD3Node.data.getRightSiblings().map(node => ({d3Node: node.d3Node, side: 'r'}));
+ dragNodes = [...dragNodes, ...leftGhostNodesOnSameLevel, ...rightGhostNodesOnSameLevel];
+ d3Data.drag.ghostNodes = dragNodes;
+
+ // Add ghost circles left and right to all nodes
+ const ghostCircles = d3Data.container.dragContainer
+ .selectAll('circle.ghost-circle')
+ .data(dragNodes, ghostNode => ghostNode.d3Node.id + ghostNode.side);
+
+ const ghostCirclesEnter = ghostCircles
+ .enter()
+ .append('circle')
+ .attr('r', d3Data.drag.mode === 'mouse' ? CONSTANTS.GHOST_NODE_RADIUS_MOUSE : CONSTANTS.GHOST_NODE_RADIUS_TOUCH)
+ .attr('ref', ghostNode => ghostNode.d3Node.id + ghostNode.side)
+ .classed('ghost-circle', true)
+ .on('mouseover', (_, ghostNode) => overGhostNode(d3Data, ghostNode))
+ .on('mouseout', () => outGhostNode(d3Data));
+
+ ghostCirclesEnter.merge(ghostCircles).attr('transform', ghostNode => calcGhostCircleTransform(d3Data, ghostNode));
+
+ ghostCircles.exit().remove();
+}
+
+function calcGhostCircleTransform(d3Data, ghostNode) {
+ const y = ghostNode.d3Node.y;
+ let dx = 0;
+
+ const x = ghostNode.d3Node.x;
+ let dy = 0;
+
+ if (d3Data.direction === 'v') {
+ switch (ghostNode.side) {
+ case 'l':
+ dx += ghostNode.d3Node.width / 2 + d3Data.spaceBetweenSiblings / 2;
+ dx *= -1;
+ dy = CONSTANTS.RECT_HEIGHT / 2;
+ break;
+ case 'r':
+ dx += ghostNode.d3Node.width / 2 + d3Data.spaceBetweenSiblings / 2;
+ dx *= 1;
+ dy = CONSTANTS.RECT_HEIGHT / 2;
+ break;
+ case 'b':
+ dy = CONSTANTS.RECT_HEIGHT;
+ break;
+ default:
+ dx = 0;
+ dy = 0;
+ }
+ } else {
+ switch (ghostNode.side) {
+ case 'l':
+ dy += CONSTANTS.RECT_HEIGHT / 2 + d3Data.spaceBetweenSiblings / 2 + 1;
+ dy *= -1;
+ break;
+ case 'r':
+ dy += CONSTANTS.RECT_HEIGHT / 2 + d3Data.spaceBetweenSiblings / 2 + 1;
+ dy *= 1;
+ break;
+ case 'b':
+ dx = ghostNode.d3Node.width;
+ break;
+ default:
+ dx = 0;
+ dy = 0;
+ }
+ }
+ return `translate(${x + dx}, ${y + dy})`;
+}
+
+export function init(d3Data, commandManager) {
+ d3Data.drag.listener = d3
+ .drag()
+ .on('start', (_, d3Node) => {
+ if (!commandManager.collaborationManager.featureModel.editRights || d3Node === d3Data.root) {
+ return;
+ }
+ d3Data.drag.selectedD3Node = d3Node;
+ d3Data.drag.hasStarted = true;
+ })
+ .on('drag', (event, d3Node) => {
+ if (!commandManager.collaborationManager.featureModel.editRights || d3Node === d3Data.root) {
+ return;
+ }
+
+ if (d3Data.drag.hasStarted) {
+ d3Data.drag.mode = event.sourceEvent instanceof MouseEvent ? 'mouse' : 'touch';
+ d3Node.data.parent.unhideChildren();
+ d3Node.data.collapse();
+
+ // Get all nodes to root without root.
+ d3Node.data.getAllNodesToRoot().slice(1).forEach(node => {
+ node.unhideChildren();
+ });
+
+ update.updateSvg(d3Data);
+
+ updateGhostCircles(d3Data);
+ d3Data.drag.hasStarted = false;
+ }
+
+ d3Data.drag.selectedD3NodePosition = {x: event.x, y: event.y};
+ translateD3NodeToMouse(d3Data, d3Node);
+ })
+ .on('end', (_, d3Node) => {
+ if (d3Node === d3Data.root) {
+ return;
+ }
+ const nodeSelection = d3Data.container.featureNodesContainer.selectAll('g.node').data([d3Node], d => d.id);
+ nodeSelection.select('g.rect-and-text').attr('pointer-events', 'all');
+
+ // Remove ghost circles.
+ d3Data.container.dragContainer.selectAll('circle.ghost-circle').remove();
+
+ const ghost = d3Data.drag.selectedGhostNode;
+
+ if (ghost) {
+ let dstParent = null;
+ let dstIndex = null;
+ let valid = false;
+ if (ghost.side === 'l' || ghost.side === 'r') {
+ const dIndex = ghost.side === 'l' ? 0 : 1;
+ dstIndex = ghost.d3Node.data.parent.children.indexOf(ghost.d3Node.data) + dIndex;
+ dstParent = ghost.d3Node.data.parent;
+
+ valid = true;
+ } else if (ghost.side === 'b' && ghost.d3Node.data.isLeaf()) {
+ dstIndex = 0;
+ dstParent = ghost.d3Node.data;
+ valid = true;
+ }
+
+ if (valid) {
+ const swapCommand = new SwapCommand(
+ d3Node.data,
+ dstParent,
+ dstIndex,
+ );
+ commandManager.execute(swapCommand);
+ }
+
+ d3Data.drag.selectedGhostNode = null;
+ d3Data.drag.ghostNodes = [];
+ }
+
+ update.updateSvg(d3Data);
+ });
+}
+
+function translateD3NodeToMouse(d3Data, d3Node) {
+ d3Data.container.featureNodesContainer
+ .selectAll('g.node')
+ .data([d3Node], d => d.id)
+ .attr('transform', `translate(${d3Data.drag.selectedD3NodePosition.x}, ${d3Data.drag.selectedD3NodePosition.y})`);
+}
+
+export function ghostNodeTouchMove(event, d3Data) {
+ const htmlElement = document.elementFromPoint(event.changedTouches[0].clientX, event.changedTouches[0].clientY);
+ const ghostNodeRef = htmlElement.getAttribute('ref');
+ if (ghostNodeRef) {
+ const ghostNode = d3Data.drag.ghostNodes.find(gN => gN.d3Node.id + gN.side === ghostNodeRef);
+ overGhostNode(d3Data, ghostNode);
+ } else {
+ outGhostNode(d3Data);
+ }
+}
diff --git a/frontendVue3/src/services/FeatureModel/init.service.js b/frontendVue3/src/services/FeatureModel/init.service.js
new file mode 100644
index 00000000..bc763ee6
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/init.service.js
@@ -0,0 +1,76 @@
+import { flextree } from 'd3-flextree';
+import * as CONSTANTS from '@/classes/constants';
+import * as d3 from 'd3';
+import * as windowResize from '@/services/FeatureModel/windowResize.service.js';
+
+export function initData(d3Data, data) {
+ // Create root-feature-node with d3 and the data of the feature-model.
+ d3Data.root = d3.hierarchy(data, (node) => node.children);
+ d3Data.root.each((d3Node) => (d3Node.data.d3Node = d3Node));
+}
+
+export function initialize(d3Data, data) {
+ // Flexlayout belongs to a d3-plugin that calculates the width between all nodes dynamically.
+ d3Data.flexlayout = flextree()
+ .nodeSize((d3Node) => calcNodeSize(d3Data, d3Node))
+ .spacing((d3NodeA, d3NodeB) => d3NodeA.path(d3NodeB).length);
+
+ initData(d3Data, data);
+
+ d3Data.zoom = d3
+ .zoom()
+ //.scaleExtent([0.1, 8])
+ .on('zoom', (event) => svgContent.attr('transform', event.transform));
+
+ // Create svg-container.
+ const svg = d3
+ .select('#svg-container')
+ .append('svg')
+ .attr('preserveAspectRatio', 'xMidYMid meet')
+ .call(d3Data.zoom) // Zooming and penning.
+ .on('dblclick.zoom', null);
+
+ const svgContent = svg.append('g');
+
+ d3Data.container.highlightedConstraintsContainer = svgContent
+ .append('g')
+ .classed('highlighted-constraints-container', true);
+
+ d3Data.container.linksContainer = svgContent
+ .append('g')
+ .classed('link-container', true);
+
+ d3Data.container.segmentsContainer = svgContent
+ .append('g')
+ .classed('segments-container', true);
+
+ d3Data.container.featureNodesContainer = svgContent
+ .append('g')
+ .classed('feature-node-container', true);
+
+ d3Data.container.dragContainer = svgContent
+ .append('g')
+ .classed('drag-container', true);
+
+ // Listen to window resize.
+ window.onresize = () => windowResize.update(d3Data);
+ windowResize.update(d3Data);
+}
+
+function calcNodeSize(d3Data, d3Node) {
+ let width, height;
+ switch (d3Data.direction) {
+ case 'v':
+ width = d3Node.width + d3Data.spaceBetweenSiblings;
+ height = CONSTANTS.RECT_HEIGHT + d3Data.spaceBetweenParentChild;
+ break;
+ case 'h':
+ width = CONSTANTS.RECT_HEIGHT + d3Data.spaceBetweenSiblings;
+ height =
+ d3Data.maxHorizontallyLevelWidth[d3Node.data.level()] +
+ d3Data.spaceBetweenParentChild;
+ break;
+ }
+
+ return [width, height];
+}
diff --git a/frontendVue3/src/services/FeatureModel/search.service.js b/frontendVue3/src/services/FeatureModel/search.service.js
new file mode 100644
index 00000000..cf2de80e
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/search.service.js
@@ -0,0 +1,42 @@
+import levenshtein from 'js-levenshtein';
+import * as view from "@/services/FeatureModel/view.service.js";
+import * as update from '@/services/FeatureModel/update.service.js';
+
+export function resetSearch(d3Data) {
+ d3Data.root.data.each(node => {
+ node.isSearched = false;
+ node.collapse();
+ });
+
+ view.reset(d3Data);
+}
+
+export function markNodeAsSearched(d3Data, foundNode) {
+ resetSearch(d3Data);
+
+ foundNode.getAllNodesToRoot().forEach(node => node.isSearched = true);
+ foundNode.uncollapse(true);
+
+ update.updateSvg(d3Data);
+ view.zoomFit(d3Data);
+ view.focusNode(d3Data, foundNode.d3Node);
+}
+
+export function search(d3Data, searchText) {
+ if (!searchText || searchText === '') {
+ return [];
+ }
+
+ return d3Data.root.data
+ .descendants()
+ .map(node => {
+ const currentNodeName = node.name.toLowerCase();
+ if (currentNodeName !== searchText.toLowerCase() && currentNodeName.includes(searchText.toLowerCase())) {
+ return {node: node, distance: 1};
+ }
+
+ return {node: node, distance: levenshtein(node.name.toLowerCase(), searchText.toLowerCase())};
+ })
+ .filter(d => d.distance <= 2)
+ .sort((a, b) => a.distance - b.distance);
+}
diff --git a/frontendVue3/src/services/FeatureModel/update.service.js b/frontendVue3/src/services/FeatureModel/update.service.js
new file mode 100644
index 00000000..c6c946e2
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/update.service.js
@@ -0,0 +1,558 @@
+import * as createPaths from '@/services/FeatureModel/createPaths.service.js';
+import * as CONSTANTS from '@/classes/constants';
+import * as collapse from '@/services/FeatureModel/collapse.service.js';
+import { FeatureNode } from '@/classes/FeatureNode';
+import { PseudoNode } from '@/classes/PseudoNode';
+import * as count from '@/services/FeatureModel/count.service';
+import { ghostNodeTouchMove } from '@/services/FeatureModel/dragAndDrop.service';
+import { RECT_HEIGHT } from '@/classes/constants';
+
+function updateFeatureNodes(d3Data, visibleD3Nodes) {
+ const featureNode = d3Data.container.featureNodesContainer
+ .selectAll('g.node')
+ .data(
+ visibleD3Nodes.filter(
+ (d3Node) => d3Node.data instanceof FeatureNode
+ ),
+ (d3Node) => d3Node.id || (d3Node.id = ++d3Data.nodeIdCounter)
+ );
+
+ // Enter new nodes
+ const featureNodeEnter = featureNode
+ .enter()
+ .append('g')
+ .classed('node', true)
+ .call(d3Data.drag.listener)
+ // Highlight and reset highlighting of ghost-nodes during drag and drop of feature-nodes.
+ .on('touchmove', (event) => ghostNodeTouchMove(event, d3Data), true)
+ // Open contextmenu with right-click on d3Node.
+ .on('contextmenu', (event, d3Node) => {
+ // only use contextmenu on non-mobile devices
+ if (!('ontouchstart' in window)) {
+ event.preventDefault();
+ d3Data.contextMenu.selectedD3Node = d3Node;
+ d3Data.contextMenu.event = event;
+ } else {
+ event.preventDefault();
+ }
+ })
+ // Toggle collapsing on double-clock on feature-node.
+ .on('click', (event, d3Node) => {
+ // Use click for contextmenu on mobile
+ if ('ontouchstart' in window) {
+ d3Data.contextMenu.selectedD3Node = d3Node;
+ d3Data.contextMenu.event = event;
+ }
+ dblClickEvent(event, d3Data, d3Node);
+ collapse.collapseShortcut(d3Data, event, d3Node); // Collapse d3Node with Ctrl + left-click on d3Node.
+ });
+
+ const rectAndTextEnter = featureNodeEnter
+ .append('g')
+ .classed('rect-and-text', true);
+ rectAndTextEnter.append('rect').attr('height', CONSTANTS.RECT_HEIGHT);
+ rectAndTextEnter
+ .append('text')
+ .attr('font-size', CONSTANTS.FEATURE_FONT_SIZE);
+
+ featureNodeEnter
+ .append('circle')
+ .classed('and-group-circle', true)
+ .attr('r', CONSTANTS.MANDATORY_CIRCLE_RADIUS);
+
+ // Update nodes
+ const featureNodeUpdate = featureNodeEnter.merge(featureNode);
+ featureNodeUpdate.attr(
+ 'transform',
+ (d3Node) => `translate(${d3Node.x}, ${d3Node.y})`
+ );
+ featureNodeUpdate
+ .select('.and-group-circle')
+ .classed(
+ 'mandatory-and-group-circle',
+ (d3Node) =>
+ d3Node.parent &&
+ d3Node.parent.data.isAnd() &&
+ d3Node.data.isMandatory
+ )
+ .classed(
+ 'optional-and-group-circle',
+ (d3Node) =>
+ d3Node.parent &&
+ d3Node.parent.data.isAnd() &&
+ !d3Node.data.isMandatory
+ );
+
+ const rectAndTextUpdate = featureNodeUpdate.select('.rect-and-text');
+ rectAndTextUpdate
+ .select('rect')
+ .classed('is-searched-feature', (d3Node) => d3Node.data.isSearched)
+ .attr('fill', (d3Node) => d3Node.data.color())
+ .attr('x', (d3Node) =>
+ d3Data.direction === 'v' ? -d3Node.width / 2 : 0
+ )
+ .attr('y', d3Data.direction === 'v' ? 0 : -CONSTANTS.RECT_HEIGHT / 2)
+ .attr('width', (d3Node) => d3Node.width);
+ rectAndTextUpdate
+ .select('text')
+ .attr('font-style', (d3Node) =>
+ d3Node.data.isAbstract ? 'italic' : 'normal'
+ )
+ .attr(
+ 'dy',
+ d3Data.direction === 'v' ? CONSTANTS.RECT_HEIGHT / 2 + 5.5 : 5.5
+ )
+ .attr('x', d3Data.direction === 'v' ? 0 : (d3Node) => d3Node.width / 2)
+ .classed('whiteText', (d3Node) => {
+ let color = d3Node.data.color();
+ const rgb = color.replace(/[^\d,]/g, '').split(',');
+ return rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114 <= 186;
+ })
+ .text((d3Node) =>
+ d3Data.isShortenedName ? d3Node.data.displayName : d3Node.data.name
+ );
+
+ // Remove old/invisible nodes.
+ featureNode.exit().remove();
+
+ featureNodeEnter.append('g').classed('children-count-container', true);
+ featureNodeEnter.append('g').classed('quick-edit-actions-container', true);
+
+ updateChildrenCount(d3Data, featureNodeUpdate);
+ updateQuickEditActions(d3Data, featureNodeUpdate);
+}
+
+function updateQuickEditActions(d3Data, featureNodeUpdate) {
+ const quickEditActions = featureNodeUpdate
+ .select('g.quick-edit-actions-container')
+ .selectAll('g.quick-edit-actions')
+ .data(
+ (d) => (d3Data.quickEdit && d3Data.featureModelTree.editRights ? [d] : []),
+ (d) => d.data.id
+ );
+
+ const quickEditActionsEnter = quickEditActions
+ .enter()
+ .append('g')
+ .classed('quick-edit-actions', true);
+ const quickEditActionsUpdate =
+ quickEditActionsEnter.merge(quickEditActions);
+
+ // Bottom circle
+ const bottomEnter = quickEditActionsEnter
+ .append('g')
+ .classed('quick-edit-action-child', true)
+ .on('click', (e, d3Node) => {
+ e.stopPropagation();
+ d3Data.d3AddNodeIndex = d3Node.data.children.length;
+ d3Data.featureModelTree.openAddAsChildDialog(d3Node);
+ });
+ drawQuickEditGroup(bottomEnter);
+ quickEditActionsUpdate
+ .select('g.quick-edit-action-child')
+ .attr('transform', (d3Node) =>
+ d3Data.direction === 'v'
+ ? `translate(0, ${RECT_HEIGHT})`
+ : `translate(${d3Node.width}, 0)`
+ );
+
+ // Left side circle
+ const leftEnter = quickEditActionsEnter
+ .filter((d3Node) => !d3Node.data.isRoot)
+ .append('g')
+ .classed('quick-edit-action-left', true)
+ .on('click', (e, d3Node) => {
+ e.stopPropagation();
+ d3Data.d3AddNodeIndex = d3Node.data.parent.children.indexOf(
+ d3Node.data
+ );
+ d3Data.featureModelTree.openAddAsSiblingDialog(d3Node);
+ });
+ drawQuickEditGroup(leftEnter);
+ quickEditActionsUpdate
+ .select('g.quick-edit-action-left')
+ .attr('transform', (d3Node) =>
+ d3Data.direction === 'v'
+ ? `translate(${-d3Node.width / 2}, ${RECT_HEIGHT / 2})`
+ : `translate(${d3Node.width / 2}, -${RECT_HEIGHT / 2})`
+ );
+
+ // Right side circle
+ const rightEnter = quickEditActionsEnter
+ .filter((d3Node) => !d3Node.data.isRoot)
+ .append('g')
+ .classed('quick-edit-action-right', true)
+ .on('click', (e, d3Node) => {
+ e.stopPropagation();
+ d3Data.d3AddNodeIndex =
+ d3Node.data.parent.children.indexOf(d3Node.data) + 1;
+ d3Data.featureModelTree.openAddAsSiblingDialog(d3Node);
+ });
+ drawQuickEditGroup(rightEnter);
+ quickEditActionsUpdate.select('g.quick-edit-action-right').attr(
+ 'transform',
+ (d3Node) => `
+ translate(${d3Node.width / 2}, ${RECT_HEIGHT / 2})`
+ );
+
+ quickEditActions.exit().remove();
+}
+
+function drawQuickEditGroup(d3Element) {
+ // Enlarge on mobile
+ const radius =
+ 'ontouchstart' in window
+ ? CONSTANTS.QUICK_EDIT_RADIUS * 1.75
+ : CONSTANTS.QUICK_EDIT_RADIUS;
+ d3Element.append('circle').attr('fill', '#4caf50').attr('r', radius);
+ d3Element
+ .append('path')
+ .attr(
+ 'd',
+ `M -0.5 ${-(2 * radius) / 3} h 1 v ${(4 * radius) / 3} h -1 z`
+ )
+ .attr('fill', 'white');
+ d3Element
+ .append('path')
+ .attr(
+ 'd',
+ `M ${-(2 * radius) / 3} -0.5 v 1 h ${(4 * radius) / 3} v -1 z`
+ )
+ .attr('fill', 'white');
+}
+
+function updateChildrenCount(d3Data, featureNodeUpdate) {
+ // Enter triangle with number of direct and total children.
+ const childrenCount = featureNodeUpdate
+ .select('g.children-count-container')
+ .selectAll('g.children-count')
+ .data(
+ (d) => (d.data.isLeaf() || !d.data.isCollapsed ? [] : [d]),
+ (d) => d.id
+ );
+
+ const childrenCountEnter = childrenCount
+ .enter()
+ .append('g')
+ .classed('children-count', true);
+ childrenCountEnter
+ .append('polygon')
+ .attr('fill', 'white')
+ .attr('points', createPaths.calculateTriangle());
+ childrenCountEnter
+ .append('text')
+ .classed('children-count-text', true)
+ .classed('direct-children', true)
+ .attr('dy', 5)
+ .attr('font-size', CONSTANTS.CHILDREN_COUNT_FONT_SIZE);
+ childrenCountEnter
+ .append('text')
+ .classed('children-count-text', true)
+ .classed('total-children', true)
+ .attr('dy', 15)
+ .attr('font-size', CONSTANTS.CHILDREN_COUNT_FONT_SIZE);
+
+ const childrenCountUpdate = childrenCountEnter.merge(childrenCount);
+ childrenCountUpdate.attr('transform', (d3Node) => {
+ const x = d3Data.direction === 'v' ? 0 : d3Node.width + 10;
+ const y =
+ d3Data.direction === 'v'
+ ? CONSTANTS.RECT_HEIGHT + 10
+ : -CONSTANTS.RECT_HEIGHT / 8;
+ return `
+ translate(${x}, ${y})`;
+ });
+ childrenCountUpdate
+ .selectAll('text.direct-children')
+ .text((d3Node) => d3Node.data.childrenCount());
+ childrenCountUpdate
+ .selectAll('text.total-children')
+ .text((d3Node) => d3Node.data.totalSubnodesCount());
+
+ childrenCount.exit().remove();
+}
+
+function updatePseudoNodes(d3Data, visibleD3Nodes) {
+ const pseudoNode = d3Data.container.featureNodesContainer
+ .selectAll('g.pseudo-node')
+ .data(
+ visibleD3Nodes.filter(
+ (d3Node) => d3Node.data instanceof PseudoNode
+ ),
+ (d3Node) => d3Node.id || (d3Node.id = ++d3Data.nodeIdCounter)
+ );
+ const pseudoNodeEnter = pseudoNode
+ .enter()
+ .append('g')
+ .classed('pseudo-node', true)
+ .on('click', (_, d3Node) => {
+ d3Node.data.unhideHiddenNodes();
+ updateSvg(d3Data);
+ });
+ pseudoNodeEnter.append('circle').attr('r', CONSTANTS.PSEUDO_NODE_SIZE);
+ pseudoNodeEnter
+ .append('text')
+ .attr('font-size', 30)
+ .attr('dy', 2)
+ .attr('dx', -12)
+ .text('...');
+
+ const pseudoNodeUpdate = pseudoNodeEnter.merge(pseudoNode);
+ pseudoNodeUpdate.attr('transform', (d3Node) => {
+ let dx = d3Node.x;
+ let dy = d3Node.y;
+ if (d3Data.direction === 'v') {
+ dy += CONSTANTS.RECT_HEIGHT / 2;
+ } else {
+ dx += d3Node.width / 2;
+ }
+ return `
+ translate(${dx}, ${dy})`;
+ });
+
+ pseudoNode.exit().remove();
+}
+
+function updateHighlightedConstraints(d3Data, visibleD3Nodes) {
+ const highlightedNodes = visibleD3Nodes
+ .filter((d3Node) => d3Node.data instanceof FeatureNode)
+ .map((d3Node) => ({
+ d3Node: d3Node,
+ highlightedConstraints: d3Node.data.getHighlightedConstraints(),
+ }))
+ .filter((d) => d.highlightedConstraints.length);
+
+ const highlightedConstraintNodes =
+ d3Data.container.highlightedConstraintsContainer
+ .selectAll('g.highlighted-constraints')
+ .data(
+ highlightedNodes,
+ (d) => d.d3Node.id || (d.d3Node.id = ++d3Data.nodeIdCounter)
+ );
+
+ const highlightedConstraintNodesEnter = highlightedConstraintNodes
+ .enter()
+ .append('g')
+ .classed('highlighted-constraints', true);
+
+ const highlightedConstraintNodeRects = highlightedConstraintNodesEnter
+ .merge(highlightedConstraintNodes)
+ .selectAll('rect')
+ .data(
+ (d) =>
+ d.highlightedConstraints.map((c) => ({
+ constraint: c,
+ d3Node: d.d3Node,
+ })),
+ (d) => d.constraint.toString() + d.d3Node.id
+ );
+
+ // Enter highlighted constraint rects
+ const highlightedConstraintNodeRectsEnter = highlightedConstraintNodeRects
+ .enter()
+ .append('rect')
+ .attr('stroke', (json) => json.constraint.color)
+ .attr('stroke-width', CONSTANTS.STROKE_WIDTH_CONSTANT)
+ .attr('fill', 'transparent');
+
+ // Update highlighted constraint rects
+ highlightedConstraintNodeRectsEnter
+ .merge(highlightedConstraintNodeRects)
+ .attr('x', (constraint) =>
+ d3Data.direction === 'v' ? -constraint.d3Node.width / 2 : 0
+ )
+ .attr('y', d3Data.direction === 'v' ? 0 : -CONSTANTS.RECT_HEIGHT / 2)
+ .attr(
+ 'height',
+ (_, i) =>
+ CONSTANTS.RECT_HEIGHT +
+ i * 2 * CONSTANTS.STROKE_WIDTH_CONSTANT +
+ CONSTANTS.STROKE_WIDTH_CONSTANT
+ )
+ .attr(
+ 'width',
+ (constraint, i) =>
+ constraint.d3Node.width +
+ i * 2 * CONSTANTS.STROKE_WIDTH_CONSTANT +
+ CONSTANTS.STROKE_WIDTH_CONSTANT
+ )
+ .attr(
+ 'transform',
+ (json, i) => `
+ translate(${
+ json.d3Node.x -
+ i * CONSTANTS.STROKE_WIDTH_CONSTANT -
+ CONSTANTS.STROKE_WIDTH_CONSTANT / 2
+ },
+ ${
+ json.d3Node.y -
+ i * CONSTANTS.STROKE_WIDTH_CONSTANT -
+ CONSTANTS.STROKE_WIDTH_CONSTANT / 2
+ })`
+ );
+
+ // Remove constraints highlighted nodes
+ highlightedConstraintNodes.exit().remove();
+ highlightedConstraintNodeRects.exit().remove();
+}
+
+function updateLinks(d3Data, visibleD3Nodes) {
+ const links = visibleD3Nodes
+ .slice(1)
+ .filter((d3Node) => d3Node.data instanceof FeatureNode);
+ const link = d3Data.container.linksContainer
+ .selectAll('path.link')
+ .data(links, (d3Node) => d3Node.id);
+
+ const linkEnter = link.enter().insert('path', 'g').classed('link', true);
+
+ const linkUpdate = linkEnter.merge(link);
+ linkUpdate
+ .classed('is-searched-link', (d3Node) => d3Node.data.isSearched)
+ .attr('d', (d3Node) => {
+ if (d3Data.direction === 'v') {
+ return createPaths.createLinkVertically(d3Node.parent, d3Node);
+ } else {
+ return createPaths.createLinkHorizontally(
+ d3Node.parent,
+ d3Node
+ );
+ }
+ });
+
+ link.exit().remove();
+}
+
+function updateColoring(d3Data) {
+ const allNodes = d3Data.root.data.descendants();
+ count.colorNodes(allNodes, d3Data.coloringIndex);
+}
+
+function updateSegments(d3Data, visibleD3Nodes) {
+ const segment = d3Data.container.segmentsContainer
+ .selectAll('path.segment')
+ .data(
+ visibleD3Nodes.filter(
+ (d3Node) =>
+ d3Node.data instanceof FeatureNode &&
+ (d3Node.data.isAlt() || d3Node.data.isOr())
+ ),
+ (d3Node) => d3Node.id || (d3Node.id = ++d3Data.nodeIdCounter)
+ );
+
+ const segmentEnter = segment
+ .enter()
+ .append('path')
+ .classed('segment', true);
+
+ // Segment update.service.js
+ segmentEnter
+ .merge(segment)
+ .classed('alt-group', (d3Node) => d3Node.data.isAlt())
+ .classed('or-group', (d3Node) => d3Node.data.isOr())
+ .attr('d', (d3Node) => {
+ if (d3Data.direction === 'h') {
+ return createPaths.createGroupSegmentHorizontally(
+ d3Node,
+ CONSTANTS.GROUP_SEGMENT_RADIUS
+ );
+ } else {
+ return createPaths.createGroupSegmentVertically(
+ d3Node,
+ CONSTANTS.GROUP_SEGMENT_RADIUS
+ );
+ }
+ })
+ .attr('transform', (d3Node) => {
+ let dx = d3Node.x;
+ let dy = d3Node.y;
+ if (d3Data.direction === 'h') {
+ dx += d3Node.width;
+ } else {
+ dy += CONSTANTS.RECT_HEIGHT;
+ }
+ return `
+ translate(${dx}, ${dy})`;
+ });
+
+ segment.exit().remove();
+}
+
+export function updateSvg(d3Data) {
+ /*const start = performance.now();*/
+
+ // Calculate rect widths of all d3Nodes once for better performance instead of repeatedly during update.
+ d3Data.root.descendants().forEach((d3Node) => {
+ d3Node.width = calcRectWidth(d3Data, d3Node);
+
+ if (d3Node.data instanceof FeatureNode) {
+ const level = d3Node.data.level();
+ if (d3Data.maxHorizontallyLevelWidth.length <= level) {
+ d3Data.maxHorizontallyLevelWidth.push(0);
+ }
+
+ if (d3Data.maxHorizontallyLevelWidth[level] < d3Node.width) {
+ d3Data.maxHorizontallyLevelWidth[level] = d3Node.width;
+ }
+ }
+ });
+
+ // Flexlayout belongs to a d3-plugin that calculates the width between all nodes dynamically.
+ const visibleD3Nodes = d3Data.flexlayout(d3Data.root).descendants();
+
+ // Swap x and y to draw from left to right instead of drawing from top to bottom
+ if (d3Data.direction === 'h') {
+ visibleD3Nodes.forEach((d3Node) => {
+ const x = d3Node.x;
+ d3Node.x = d3Node.y;
+ d3Node.y = x;
+ });
+ }
+
+ updateColoring(d3Data);
+ updateHighlightedConstraints(d3Data, visibleD3Nodes);
+ updateSegments(d3Data, visibleD3Nodes);
+ updateFeatureNodes(d3Data, visibleD3Nodes);
+ updatePseudoNodes(d3Data, visibleD3Nodes);
+ updateLinks(d3Data, visibleD3Nodes);
+
+ /*console.log('Rendertime', performance.now() - start);*/
+}
+
+// Calculates rect-width dependent on font-size dynamically.
+export function calcRectWidth(d3Data, d3Node) {
+ if (d3Node.data instanceof FeatureNode) {
+ return (
+ (d3Data.isShortenedName
+ ? d3Node.data.displayName.length
+ : d3Node.data.name.length) *
+ (CONSTANTS.FEATURE_FONT_SIZE *
+ CONSTANTS.MONOSPACE_HEIGHT_WIDTH_FACTOR) +
+ CONSTANTS.RECT_MARGIN.left +
+ CONSTANTS.RECT_MARGIN.right
+ );
+ } else {
+ return CONSTANTS.PSEUDO_NODE_SIZE * 2;
+ }
+}
+
+let touchtime = 0;
+
+function dblClickEvent(event, d3Data, d3Node) {
+ if (touchtime === 0) {
+ // set first click
+ touchtime = new Date().getTime();
+ } else {
+ // compare first click to this click and see if they occurred within double click threshold
+ if (new Date().getTime() - touchtime < 300) {
+ // double click occurred
+ event.preventDefault();
+ d3Node.data.toggleCollapse();
+ updateSvg(d3Data);
+ touchtime = 0;
+ } else {
+ // not a double click so set as a new first click
+ touchtime = new Date().getTime();
+ }
+ }
+}
diff --git a/frontendVue3/src/services/FeatureModel/view.service.js b/frontendVue3/src/services/FeatureModel/view.service.js
new file mode 100644
index 00000000..3b55f7e5
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/view.service.js
@@ -0,0 +1,49 @@
+import * as d3 from "d3";
+import * as update from '@/services/FeatureModel/update.service.js';
+
+export function reset(d3Data, uncollapsedLevels = 4, maxChildrenCount = 3) {
+ // Collapses all nodes after depth 1.
+ d3Data.root.data.each(node => node.collapse());
+
+ let currentChildren = [d3Data.root.data];
+ for (let i = 1; i <= uncollapsedLevels; i++) {
+ currentChildren.forEach(child => {
+ if (child.children.length <= maxChildrenCount) {
+ child.uncollapse(false);
+ }
+ });
+ currentChildren = currentChildren
+ .map(parent => parent.children.length <= maxChildrenCount ? parent.children : [])
+ .flat();
+
+ if (currentChildren.length === 0) {
+ break;
+ }
+ }
+
+ update.updateSvg(d3Data);
+ zoomFit(d3Data);
+}
+
+export function zoomFit(d3Data, padding = 0.75) {
+ let bounds = document.querySelector('svg > g').getBBox();
+ let fullWidth = document.querySelector('svg').getBoundingClientRect().width,
+ fullHeight = document.querySelector('svg').getBoundingClientRect().height;
+ let width = bounds.width,
+ height = bounds.height;
+ let midX = bounds.x + width / 2,
+ midY = bounds.y + height / 2;
+
+ // nothing to fit
+ if (width === 0 || height === 0) {
+ return;
+ }
+
+ let scale = padding / Math.max(width / fullWidth, height / fullHeight);
+
+ d3.select('svg').call(d3Data.zoom.translateTo, midX, midY).call(d3Data.zoom.scaleTo, scale);
+}
+
+export function focusNode(d3Data, d3Node) {
+ d3.select('svg').call(d3Data.zoom.translateTo, d3Node.x, d3Node.y);
+}
diff --git a/frontendVue3/src/services/FeatureModel/windowResize.service.js b/frontendVue3/src/services/FeatureModel/windowResize.service.js
new file mode 100644
index 00000000..ebb4b8d1
--- /dev/null
+++ b/frontendVue3/src/services/FeatureModel/windowResize.service.js
@@ -0,0 +1,15 @@
+import * as view from '@/services/FeatureModel/view.service.js';
+import * as d3 from 'd3';
+
+export function update(d3Data) {
+ d3.select('#svg-container')
+ .style('height', window.innerHeight - 100);
+
+ d3.select('#svg-container > svg')
+ .attr(
+ 'viewBox',
+ `0 0 ${window.innerWidth} ${window.innerHeight - 64}`,
+ );
+
+ view.zoomFit(d3Data);
+}
diff --git a/frontendVue3/src/services/api.service.js b/frontendVue3/src/services/api.service.js
new file mode 100644
index 00000000..e5a1625b
--- /dev/null
+++ b/frontendVue3/src/services/api.service.js
@@ -0,0 +1,68 @@
+import axios from 'axios';
+import authService from './auth.service';
+
+const API_URL = process.env.VITE_APP_DOMAIN;
+
+// axios instance for checking if token is (still) valid.
+const instance = axios.create({
+ baseURL: API_URL,
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+});
+
+// Send the authorization header with every request, but only if auth code exists (Client -> Server)
+// Enhance all requests to server with auth header
+instance.interceptors.request.use(
+ (config) => {
+ const token = authService.getAccessToken();
+ const changeConfig = config;
+ if (token && changeConfig.headers) {
+ changeConfig.headers.Authorization = `Bearer ${token}`;
+ }
+
+ return changeConfig;
+ },
+ // In case there is an error just pipe it through to the appropriate handler
+ (error) => Promise.reject(error)
+);
+
+// Look at every answer from the API, in case it is unauthorized
+// get another access token with the refresh token (Server -> Client)
+instance.interceptors.response.use(
+ // A fine response remains untouched
+ (res) => res,
+ async (error) => {
+ const originalRequest = error.config;
+
+ // Access key expired
+ if (error.response && error.response.status === 401) {
+ try {
+ // Use axios not an instance to prevent infinite loops
+ const response = await axios.post(`${API_URL}auth/refresh/`, {
+ refresh: authService.getRefreshToken(),
+ });
+
+ const accessToken = response.data.access;
+ localStorage.setItem('access', JSON.stringify(accessToken));
+
+ return instance(originalRequest);
+ } catch (responseError) {
+ // Refresh Token is also not valid anymore -> return to login
+ // Also save the previously surfed URL to relocate to when logged in
+ localStorage.setItem(
+ 'previousURL',
+ `${window.location.protocol}//${window.location.host}${window.location.pathname}${window.location.search}`
+ );
+
+ authService.logout();
+ window.location.replace('/login');
+ return Promise.reject(error);
+ }
+ } else {
+ return Promise.reject(error);
+ }
+ }
+);
+
+export default instance;
diff --git a/frontendVue3/src/services/auth.service.js b/frontendVue3/src/services/auth.service.js
new file mode 100644
index 00000000..7d329fde
--- /dev/null
+++ b/frontendVue3/src/services/auth.service.js
@@ -0,0 +1,68 @@
+import axios from 'axios';
+
+const API_URL = `${import.meta.env.VITE_APP_DOMAIN}auth/`;
+
+class AuthService {
+ login(email, password) {
+ return axios
+ .post(`${API_URL}login/`, {
+ email,
+ password,
+ })
+ .then((response) => {
+ if (response.data.access && response.data.refresh) {
+ localStorage.setItem(
+ 'access',
+ JSON.stringify(response.data.access)
+ );
+ localStorage.setItem(
+ 'refresh',
+ JSON.stringify(response.data.refresh)
+ );
+ localStorage.setItem(
+ 'user',
+ JSON.stringify(response.data.user)
+ );
+ }
+
+ return response.data;
+ });
+ }
+
+ logout() {
+ localStorage.removeItem('access');
+ localStorage.removeItem('refresh');
+ localStorage.removeItem('user');
+ }
+
+ register(email, password1, password2) {
+ return axios.post(`${API_URL}register/`, {
+ email,
+ password1,
+ password2,
+ });
+ }
+
+ getAccessToken() {
+ const accessToken = localStorage.getItem('access');
+ if (accessToken) return JSON.parse(accessToken);
+
+ return null;
+ }
+
+ getRefreshToken() {
+ const refreshToken = localStorage.getItem('refresh');
+ if (refreshToken) return JSON.parse(refreshToken);
+
+ return null;
+ }
+
+ getCurrentUser() {
+ const userStr = localStorage.getItem('user');
+ if (userStr) return JSON.parse(userStr);
+
+ return null;
+ }
+}
+
+export default new AuthService();
diff --git a/frontendVue3/src/services/booleanExpressionParser.service.js b/frontendVue3/src/services/booleanExpressionParser.service.js
new file mode 100644
index 00000000..547029f4
--- /dev/null
+++ b/frontendVue3/src/services/booleanExpressionParser.service.js
@@ -0,0 +1,98 @@
+import {Negation} from "@/classes/Constraint/Negation";
+import {Implication} from "@/classes/Constraint/Implication";
+import {Conjunction} from "@/classes/Constraint/Conjunction";
+import {Disjunction} from "@/classes/Constraint/Disjunction";
+import {FeatureNodeConstraintItem} from "@/classes/Constraint/FeatureNodeConstraintItem";
+
+const operators = ['not', 'implies', 'and', 'or'];
+export const operatorPrecedence = {};
+operators.forEach((operator, i) => operatorPrecedence[operator] = i);
+
+export function parse(toParse, allNodes) {
+ const inputToken = toParse
+ .replaceAll('(', '( ')
+ .replaceAll(')', ' )')
+ .match(/(?:[^\s"]+|"[^"]*")+/g) // Split by space except double-quotes
+ .map(str => str.replaceAll("\"", ""))
+ .filter((str) => str); // Remove the undefined tokens
+
+ const operatorStack = [];
+ let outputStack = [];
+ inputToken.forEach((token) => {
+ if (operators.includes(token.toLowerCase())) {
+ parseOperator(token.toLowerCase(), operatorStack, outputStack);
+ } else if (token === '(') {
+ operatorStack.push('(');
+ } else if (token === ')') {
+ parseClosingBracket(operatorStack, outputStack);
+ } else {
+ outputStack.push(createFeatureNodeConstraintItem(token, allNodes));
+ }
+ });
+
+ // Push all operators to output that remains on operator-stack
+ while (operatorStack.length) {
+ convertToConstraintItem(operatorStack.pop(), outputStack);
+ }
+
+ if (outputStack.length > 1) {
+ throw Error(`Missing operator between ${outputStack[0].toString()} and ${outputStack[1].toString()}`);
+ } else {
+ return outputStack[0];
+ }
+}
+
+function parseOperator(token, operatorStack, outputStack) {
+ if (operatorStack.length) {
+ let lastOperator = operatorStack.at(-1);
+ while (lastOperator && lastOperator !== '(' && operatorPrecedence[token] > operatorPrecedence[lastOperator]) {
+ operatorStack.pop();
+ convertToConstraintItem(lastOperator, outputStack);
+ lastOperator = operatorStack.length ? operatorStack.at(-1) : undefined;
+ }
+ }
+ operatorStack.push(token);
+}
+
+function parseClosingBracket(operatorStack, outputStack) {
+ let lastOperator = operatorStack.pop();
+ while (lastOperator !== '(' && operatorStack.length !== 0) {
+ convertToConstraintItem(lastOperator, outputStack);
+ lastOperator = operatorStack.pop();
+ }
+}
+
+function convertToConstraintItem(operator, stack) {
+ operator = operator.toLowerCase();
+ let constraintItem;
+ if (operator === 'not') {
+ if (stack.length < 1) {
+ throw Error('Too few arguments: Expected 1 argument for not');
+ }
+ constraintItem = new Negation(stack.pop());
+ } else {
+ if (stack.length < 2) {
+ throw Error(`Too few arguments: Expected 2 arguments for ${operator}`);
+ }
+ const second = stack.pop();
+ const first = stack.pop();
+
+ if (operator === 'and') {
+ constraintItem = new Conjunction(first, second);
+ } else if (operator === 'or') {
+ constraintItem = new Disjunction(first, second);
+ } else if (operator === 'implies') {
+ constraintItem = new Implication(first, second);
+ }
+ }
+
+ stack.push(constraintItem);
+}
+
+function createFeatureNodeConstraintItem(featureNodeName, allNodes) {
+ const foundNode = allNodes.find((node) => node.name === featureNodeName);
+ if (!foundNode) {
+ throw Error(`FeatureNode '${featureNodeName} cannot be found`);
+ }
+ return new FeatureNodeConstraintItem(foundNode);
+}
\ No newline at end of file
diff --git a/frontendVue3/src/services/collaboration.service.js b/frontendVue3/src/services/collaboration.service.js
new file mode 100644
index 00000000..638cb71c
--- /dev/null
+++ b/frontendVue3/src/services/collaboration.service.js
@@ -0,0 +1,3 @@
+import { Peer } from "peerjs";
+
+export const instance = new Peer("pick-an-id");
diff --git a/frontendVue3/src/services/fileDeletion.service.js b/frontendVue3/src/services/fileDeletion.service.js
new file mode 100644
index 00000000..3d78d9f1
--- /dev/null
+++ b/frontendVue3/src/services/fileDeletion.service.js
@@ -0,0 +1,27 @@
+/*import api from './api.service';
+import { default as Modal } from '../components/Modal';
+
+const API_URL = process.env.VUE_APP_DOMAIN;
+
+export default function deleteFile(id: string) {
+ api.delete(`${API_URL}files/uploaded/unconfirmed/${id}/`)
+ .then(() => {
+ Modal.fire({
+ icon: 'success',
+ title: 'Success!!',
+ text: 'File was deleted successfully',
+ }).then(() => {
+ window.location.replace('/');
+ });
+ })
+ .catch((error) => {
+ Modal.fire({
+ icon: 'error',
+ title: 'Error!!',
+ text: JSON.stringify(error.message),
+ }).then(() => {
+ window.location.replace('/');
+ });
+ });
+}
+*/
\ No newline at end of file
diff --git a/frontendVue3/src/services/numbers.service.js b/frontendVue3/src/services/numbers.service.js
new file mode 100644
index 00000000..190c5f1f
--- /dev/null
+++ b/frontendVue3/src/services/numbers.service.js
@@ -0,0 +1,3 @@
+export function isNumeric(value) {
+ return /^-?\d+$/.test(value);
+}
diff --git a/frontendVue3/src/services/xmlTranspiler.service.js b/frontendVue3/src/services/xmlTranspiler.service.js
new file mode 100644
index 00000000..5d9c57ff
--- /dev/null
+++ b/frontendVue3/src/services/xmlTranspiler.service.js
@@ -0,0 +1,212 @@
+import { FeatureNode } from '@/classes/FeatureNode';
+import { Constraint } from '@/classes/Constraint';
+import { FeatureNodeConstraintItem } from '@/classes/Constraint/FeatureNodeConstraintItem';
+import { Disjunction } from '@/classes/Constraint/Disjunction';
+import { Conjunction } from '@/classes/Constraint/Conjunction';
+import { Implication } from '@/classes/Constraint/Implication';
+import { Negation } from '@/classes/Constraint/Negation';
+
+export function xmlToJson(currentModel, data) {
+ /*const start = performance.now();*/
+
+ // To remove the line
+ let m = currentModel.split('\n').splice(1).join('\n');
+
+ const parser = new DOMParser();
+ const xmlDocument = parser.parseFromString(m, 'text/xml');
+
+ const struct = xmlDocument.querySelector('struct');
+ const constraintsContainer = xmlDocument.querySelector('constraints');
+ const propertiesSection = xmlDocument.querySelector('properties');
+ const calculationsSection = xmlDocument.querySelector('calculations');
+ const commentsSection = xmlDocument.querySelector('comments');
+ const featureOrderSection = xmlDocument.querySelector('featureOrder');
+
+ data.calculations = getCalculations(calculationsSection);
+
+ data.rootNode = getChildrenOfFeature(struct, null, data)[0];
+ data.constraints = readConstraints(
+ [...constraintsContainer.childNodes],
+ data
+ );
+ data.properties = getProperties(propertiesSection);
+ data.comments = getComments(commentsSection);
+ data.featureOrder = getFeatureOrder(featureOrderSection);
+
+ /*console.log('Parsertime', performance.now() - start);*/
+}
+
+function getChildrenOfFeature(struct, parent, data) {
+ let toReturn = [];
+
+ for (const child of struct.childNodes) {
+ // To remove #text nodes, as they don't have a tagName
+ if (child.tagName) {
+ let toAppend = new FeatureNode(
+ parent,
+ child.getAttribute('name'),
+ child.tagName,
+ child.getAttribute('mandatory') === 'true',
+ child.getAttribute('abstract') === 'true'
+ );
+ toAppend.children = getChildrenOfFeature(child, toAppend, data);
+
+ data.featureMap[toAppend.name] = toAppend;
+ toReturn.push(toAppend);
+ }
+ }
+
+ return toReturn;
+}
+
+function readConstraints(constraints, data) {
+ return constraints
+ .filter((rule) => rule.tagName)
+ .map((rule) => {
+ return [...rule.childNodes]
+ .filter((item) => item.tagName)
+ .map(
+ (item) => new Constraint(readConstraintItem(item, data))
+ )[0];
+ });
+}
+
+function readConstraintItem(item, data) {
+ if (item.tagName === 'var') {
+ return new FeatureNodeConstraintItem(
+ data.featureMap[item.innerHTML.trim()]
+ );
+ } else {
+ const childItems = [...item.childNodes]
+ .filter((childItem) => childItem.tagName)
+ .map((childItem) => readConstraintItem(childItem, data));
+
+ switch (item.tagName) {
+ case 'disj':
+ return new Disjunction(childItems[0], childItems[1]);
+ case 'conj':
+ return new Conjunction(childItems[0], childItems[1]);
+ case 'imp':
+ return new Implication(childItems[0], childItems[1]);
+ case 'not':
+ return new Negation(childItems[0]);
+ }
+ }
+}
+
+function getProperties(properties) {
+ if (!properties) return [];
+
+ return [...properties.childNodes]
+ .filter((element) => element.tagName)
+ .map((element) => ({
+ tag: element.tagName,
+ key: element.getAttribute('key'),
+ value: element.getAttribute('value'),
+ }));
+}
+
+function getCalculations(calculationsSection) {
+ if (!calculationsSection) return null;
+
+ return {
+ Auto: calculationsSection.getAttribute('Auto'),
+ Constraints: calculationsSection.getAttribute('Constraints'),
+ Features: calculationsSection.getAttribute('Features'),
+ Redundant: calculationsSection.getAttribute('Redundant'),
+ Tautology: calculationsSection.getAttribute('Tautology'),
+ };
+}
+
+function getComments(commentsSection) {
+ if (!commentsSection) return [];
+
+ return [...commentsSection.childNodes]
+ .filter((element) => element.tagName)
+ .map((element) => element.innerHTML);
+}
+
+function getFeatureOrder(featureOrder) {
+ if (!featureOrder) return null;
+
+ return {
+ userDefined: featureOrder.getAttribute('userDefined'),
+ };
+}
+
+export function jsonToXML(data) {
+ let xml = ``;
+
+ xml += `${data.properties.reduce(
+ (prev, prop) =>
+ prev + `<${prop.tag} key="${prop.key}" value="${prop.value}"/>`,
+ ''
+ )} `;
+
+ xml += `${nodeToXML(data.rootNode)} `;
+
+ xml += `${data.constraints.reduce(
+ (prev, constraint) => `${prev}${constraint.toStringXML()} `,
+ ''
+ )} `;
+
+ if (data.calculations) {
+ xml += ` `;
+ }
+
+ xml += `${data.comments
+ .map((comment) => '' + comment + ' ')
+ .join(' ')} `;
+
+ if (data.featureOrder) {
+ xml += ` `;
+ }
+
+ xml += ` `;
+
+ return xml;
+}
+
+export function downloadXML(data) {
+ const xml = jsonToXML(data);
+
+ const filename = 'featureModel.xml';
+ const pom = document.createElement('a');
+ const bb = new Blob([xml], { type: 'application/xml' });
+
+ pom.setAttribute('href', window.URL.createObjectURL(bb));
+ pom.setAttribute('download', filename);
+
+ pom.dataset.downloadurl = ['application/xml', pom.download, pom.href].join(
+ ':'
+ );
+
+ pom.click();
+}
+
+function nodeToXML(node) {
+ if (node.isLeaf()) {
+ return ` `;
+ } else {
+ let toReturn = `<${node.groupType} ${
+ node.isAbstract ? 'abstract="true" ' : ''
+ }${node.isMandatory ? 'mandatory="true" ' : ''}name="${node.name}">`;
+
+ node.children.forEach((childNode) => {
+ toReturn += nodeToXML(childNode);
+ });
+
+ toReturn += `${node.groupType}>`;
+ return toReturn;
+ }
+}
diff --git a/frontendVue3/src/store/app.js b/frontendVue3/src/store/app.js
new file mode 100644
index 00000000..69d58ce9
--- /dev/null
+++ b/frontendVue3/src/store/app.js
@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia';
+
+export const useAppStore = defineStore('app', {
+ state: () => ({
+ snackbar: {
+ show: false,
+ variant: 'success',
+ timeout: 5000,
+ message: '',
+ },
+ fileCreateAlert: {
+ show: false,
+ variant: 'success',
+ message: '',
+ },
+ isOnline: true,
+ }),
+ actions: {
+ updateSnackbar(message, variant, timeout, show) {
+ this.snackbar.message = message;
+ this.snackbar.variant = variant;
+ this.snackbar.timeout = timeout;
+ this.snackbar.show = show;
+ },
+ closeSnackbar() {
+ this.snackbar.show = false;
+ },
+ updateFileCreateAlert(message, variant, show) {
+ this.fileCreateAlert.message = message;
+ this.fileCreateAlert.variant = variant;
+ this.fileCreateAlert.show = show;
+ },
+ closeFileCreateAlert() {
+ this.fileCreateAlert.show = false;
+ },
+ setOnlineState(isOnline) {
+ this.isOnline = isOnline;
+ },
+ },
+});
diff --git a/frontendVue3/src/store/auth.js b/frontendVue3/src/store/auth.js
new file mode 100644
index 00000000..c720044d
--- /dev/null
+++ b/frontendVue3/src/store/auth.js
@@ -0,0 +1,55 @@
+import { defineStore } from 'pinia';
+import authService from '@/services/auth.service';
+import api from '@/services/api.service';
+import { useAppStore } from '@/store/app';
+
+const API_URL = import.meta.env.VITE_APP_DOMAIN;
+
+export const useAuthStore = defineStore('auth', {
+ state: () => ({
+ loggedIn: !!authService.getCurrentUser(),
+ currentUser: authService.getCurrentUser(),
+ accessToken: authService.getAccessToken(),
+ }),
+ actions: {
+ logout() {
+ const appStore = useAppStore();
+
+ authService.logout();
+ this.loggedIn = !!authService.getCurrentUser();
+ this.currentUser = authService.getCurrentUser();
+ this.accessToken = authService.getAccessToken();
+ appStore.updateSnackbar(
+ 'Successfully logged out',
+ 'success',
+ 5000,
+ true
+ );
+ },
+ login() {
+ const appStore = useAppStore();
+
+ this.loggedIn = !!authService.getCurrentUser();
+ this.currentUser = authService.getCurrentUser();
+ this.accessToken = authService.getAccessToken();
+ appStore.updateSnackbar('Login Successful!', 'success', 5000, true);
+ },
+ async loginWithGithubRedirect() {
+ const appStore = useAppStore();
+ return api
+ .post(`${API_URL}auth/github/redirect/`)
+ .then((response) => {
+ return response.data.url;
+ })
+ .catch((error) => {
+ appStore.updateSnackbar(
+ 'Error while connecting to GitHub: ' + error.message,
+ 'error',
+ 5000,
+ true
+ );
+ return error;
+ });
+ },
+ },
+});
diff --git a/frontendVue3/src/store/file.js b/frontendVue3/src/store/file.js
new file mode 100644
index 00000000..057fb01a
--- /dev/null
+++ b/frontendVue3/src/store/file.js
@@ -0,0 +1,164 @@
+import { defineStore } from 'pinia';
+import authService from '@/services/auth.service';
+import api from '@/services/api.service';
+import { useAppStore } from '@/store/app';
+import { useAuthStore } from '@/store/auth';
+
+const API_URL = import.meta.env.VITE_APP_DOMAIN;
+
+export const useFileStore = defineStore('file', {
+ state: () => ({
+ tags: [],
+ families: [],
+ analysis: [],
+ licenses: [],
+ confirmedFeatureModels: [],
+ myConfirmedFeatureModels: [],
+ featureModels: [],
+ }),
+ getters: {
+ myOwnTags(state) {
+ return state.tags.filter((el) => el.owner);
+ },
+ myOwnFamilies(state) {
+ return state.families.filter((el) => el.owner);
+ },
+ },
+ actions: {
+ fetchConfirmedFeatureModels() {
+ api.get(`${API_URL}files/uploaded/confirmed/`).then((response) => {
+ this.confirmedFeatureModels = response.data;
+ console.log(response.data[0]);
+ });
+ },
+ async fetchMyConfirmedFeatureModels() {
+ const id = useAuthStore().currentUser.id;
+ api.get(`${API_URL}files/uploaded/confirmed/?owner=` + id).then(
+ (response) => {
+ this.myConfirmedFeatureModels = response.data;
+ }
+ );
+ },
+ async deleteFeatureModel(id) {
+ const appStore = useAppStore();
+ await api
+ .delete(`${API_URL}files/${id}/`)
+ .then(() => {
+ appStore.updateSnackbar(
+ 'File deleted successfully!',
+ 'success',
+ 5000,
+ true
+ );
+ })
+ .catch((error) => {
+ appStore.updateSnackbar(
+ 'Error: ' + error.message,
+ 'error',
+ 5000,
+ true
+ );
+ });
+ },
+ async fetchFeatureModelOfFamily(value) {
+ await api
+ .get(`${API_URL}files/uploaded/confirmed/?family=${value}`)
+ .then((response) => {
+ if (response.data.length === 0) {
+ return null;
+ } else {
+ return response.data;
+ /*this.numberOfModelsInFamily = response.data.length;
+ this.allVersions = response.data.map(
+ (item) => item.version
+ );
+ this.latestFeatureModelVersion =
+ response.data[response.data.length - 1].version;*/
+ }
+ });
+ },
+ fetchLicenses() {
+ api.get(`${API_URL}licenses/`).then((response) => {
+ this.licenses = response.data;
+ });
+ },
+ fetchTags() {
+ api.get(`${API_URL}tags/`).then((response) => {
+ this.tags = response.data;
+ });
+ },
+ fetchFamilies() {
+ api.get(`${API_URL}families/`).then((response) => {
+ this.families = response.data;
+ });
+ },
+ async uploadBulkFeatureModels(data) {
+ const appStore = useAppStore();
+ await api
+ .post(`${API_URL}bulk-upload/`, data, {
+ headers: { 'Content-Type': 'multipart/form-data' },
+ })
+ .then(() => {
+ appStore.updateSnackbar(
+ 'Upload successfully! Check your mails',
+ 'success',
+ 5000,
+ true
+ );
+ })
+ .catch((error) => {
+ appStore.updateSnackbar(
+ 'Error! ' + error.message,
+ 'error',
+ 5000,
+ true
+ );
+ });
+ },
+ async uploadTag(payload) {
+ // payload = { label, description, is_public }
+ const appStore = useAppStore();
+ return api
+ .post(`${API_URL}tags/`, payload)
+ .then((response) => {
+ appStore.updateFileCreateAlert(
+ `Successfully uploaded new tag '${payload.label}'`,
+ 'success',
+ true
+ );
+ return response.data;
+ })
+ .catch((error) => {
+ appStore.updateFileCreateAlert(
+ 'Error while uploading new tag: ' + error.message,
+ 'error',
+ true
+ );
+ return error;
+ });
+ },
+ async uploadFamily(payload) {
+ // payload = { label, description }
+ const appStore = useAppStore();
+ return api
+ .post(`${API_URL}families/`, payload)
+ .then((response) => {
+ appStore.updateFileCreateAlert(
+ `Successfully uploaded new family '${payload.label}'`,
+ 'success',
+ true
+ );
+ return response.data;
+ })
+ .catch((error) => {
+ console.log(error);
+ appStore.updateFileCreateAlert(
+ 'Error while uploading new family: ' + error.message,
+ 'error',
+ true
+ );
+ return error;
+ });
+ },
+ },
+});
diff --git a/frontendVue3/src/store/index.js b/frontendVue3/src/store/index.js
new file mode 100644
index 00000000..15362525
--- /dev/null
+++ b/frontendVue3/src/store/index.js
@@ -0,0 +1,4 @@
+// Utilities
+import { createPinia } from 'pinia'
+
+export default createPinia()
diff --git a/frontendVue3/src/styles/settings.scss b/frontendVue3/src/styles/settings.scss
new file mode 100644
index 00000000..344c490c
--- /dev/null
+++ b/frontendVue3/src/styles/settings.scss
@@ -0,0 +1,14 @@
+/**
+ * src/styles/settings.scss
+ *
+ * Configures SASS variables and Vuetify overwrites
+ */
+
+// https://next.vuetifyjs.com/features/sass-variables/`
+// @use 'vuetify' with (
+// $color-pack: false
+// );
+
+.v-btn {
+ text-transform: none;
+}
\ No newline at end of file
diff --git a/frontendVue3/src/views/DSGVO.vue b/frontendVue3/src/views/DSGVO.vue
new file mode 100644
index 00000000..75148e0d
--- /dev/null
+++ b/frontendVue3/src/views/DSGVO.vue
@@ -0,0 +1,220 @@
+
+
+
+ Datenschutzerklärung
+
+
Grundlegendes
+
+ Diese Datenschutzerklärung soll die Nutzer dieser Website über die
+ Art, den Umfang und den Zweck der Erhebung und Verwendung
+ personenbezogener Daten durch den Websitebetreiber Tobias Heß
+ informieren.
+
+
+ Der Websitebetreiber nimmt Ihren Datenschutz sehr ernst und
+ behandelt Ihre personenbezogenen Daten vertraulich und entsprechend
+ der gesetzlichen Vorschriften. Da durch neue Technologien und die
+ ständige Weiterentwicklung dieser Webseite Änderungen an dieser
+ Datenschutzerklärung vorgenommen werden können, empfehlen wir Ihnen
+ sich die Datenschutzerklärung in regelmäßigen Abständen wieder
+ durchzulesen.
+
+
+ Definitionen der verwendeten Begriffe (z.B. “personenbezogene Daten”
+ oder “Verarbeitung”) finden Sie in Art. 4 DSGVO.
+
+
+
Zugriffsdaten
+
+ Wir, der Websitebetreiber bzw. Seitenprovider, erheben aufgrund
+ unseres berechtigten Interesses (s. Art. 6 Abs. 1 lit. f. DSGVO)
+ Daten über Zugriffe auf die Website und speichern diese als
+ „Server-Logfiles“ auf dem Server der Website ab. Folgende Daten
+ werden so protokolliert:
+
+
+
+ Besuchte Website
+ Uhrzeit zum Zeitpunkt des Zugriffes
+ Menge der gesendeten Daten in Byte
+ Quelle/Verweis, von welchem Sie auf die Seite gelangten
+ Verwendeter Browser
+ Verwendetes Betriebssystem
+ Verwendete IP-Adresse
+
+
+
+ Die Server-Logfiles werden für maximal 7 Tage gespeichert und
+ anschließend gelöscht. Die Speicherung der Daten erfolgt aus
+ Sicherheitsgründen, um z. B. Missbrauchsfälle aufklären zu können.
+ Müssen Daten aus Beweisgründen aufgehoben werden, sind sie solange
+ von der Löschung ausgenommen bis der Vorfall endgültig geklärt ist.
+
+
+
Cookies
+
+ Bei Cookies handelt es sich um kleine Dateien, welche auf Ihrem
+ Endgerät gespeichert werden. Ihr Browser greift auf diese Dateien
+ zu. Durch den Einsatz von Cookies erhöht sich die
+ Benutzerfreundlichkeit und Sicherheit dieser Website. Diese Website
+ verwendet ausschließlich technische Cookies die das
+ Webseitenerlebnis angenehmer machen. Personenbezogene Cookies werden
+ nicht gesammelt!
+
+
+ Gängige Browser bieten die Einstellungsoption, Cookies nicht
+ zuzulassen. Hinweis: Es ist nicht gewährleistet, dass Sie auf alle
+ Funktionen dieser Website ohne Einschränkungen zugreifen können,
+ wenn Sie entsprechende Einstellungen vornehmen.
+
+
Diese Webseite verwendet folgende cookies:
+
+
+
+ Name
+ Zweck
+ Vorhaltedauer
+
+
+
+
+ {{ item.name }}
+ {{ item.purpose }}
+ {{ item.retentionPeriod }}
+
+
+
+
+
+ Erfassung und Verarbeitung personenbezogener Daten
+
+
+ Der Websitebetreiber erhebt, nutzt und gibt Ihre personenbezogenen
+ Daten nur dann weiter, wenn dies im gesetzlichen Rahmen erlaubt ist
+ oder Sie in die Datenerhebung einwilligen. Als personenbezogene
+ Daten gelten sämtliche Informationen, welche dazu dienen, Ihre
+ Person zu bestimmen und welche zu Ihnen zurückverfolgt werden können
+ – also beispielsweise Ihr Name, Ihre E-Mail-Adresse und
+ Telefonnummer.
+
+
+ Diese Website können Sie auch besuchen, ohne Angaben zu Ihrer Person
+ zu machen. Zum Schutz unserer technischen Infrastruktur speichern
+ wir jedoch (ohne Personenbezug) Ihre Zugriffsdaten auf diese
+ Website. Zu diesen Zugriffsdaten gehören z. B. die von Ihnen
+ angeforderte Datei oder der Name Ihres Internet-Providers. Durch die
+ Anonymisierung der Daten sind Rückschlüsse auf Ihre Person nicht
+ möglich. Wir sammeln personenbezogene Daten nur im Falle einer
+ Registrierung auf unserer Website.
+
+
+ Im Falle einer Registrierung sammeln wir folgende personendbezogene
+ Daten:
+
+
+
+
+ Art der Daten
+ Art der Sammlung
+ Zweck
+
+
+
+
+ {{ item.typeOfData }}
+ {{ item.typeOfCollection }}
+ {{ item.purpose }}
+
+
+
+
+
Umgang mit Kontaktdaten
+
+ Nehmen Sie mit uns als Websitebetreiber durch die angebotenen
+ Kontaktmöglichkeiten Verbindung auf, werden Ihre Angaben
+ gespeichert, damit auf diese zur Bearbeitung und Beantwortung Ihrer
+ Anfrage zurückgegriffen werden kann. Ohne Ihre Einwilligung werden
+ diese Daten nicht an Dritte weitergegeben.
+
+
+
Rechte des Nutzers
+
+ Sie haben als Nutzer das Recht, auf Antrag eine kostenlose Auskunft
+ darüber zu erhalten, welche personenbezogenen Daten über Sie
+ gespeichert wurden. Sie haben außerdem das Recht auf Berichtigung
+ falscher Daten und auf die Verarbeitungseinschränkung oder Löschung
+ Ihrer personenbezogenen Daten. Falls zutreffend, können Sie auch Ihr
+ Recht auf Datenportabilität geltend machen. Sollten Sie annehmen,
+ dass Ihre Daten unrechtmäßig verarbeitet wurden, können Sie eine
+ Beschwerde bei der zuständigen Aufsichtsbehörde einreichen
+
+
+
Löschung von Daten
+
+ Sofern Ihr Wunsch nicht mit einer gesetzlichen Pflicht zur
+ Aufbewahrung von Daten (z. B. Vorratsdatenspeicherung) kollidiert,
+ haben Sie ein Anrecht auf Löschung Ihrer Daten. Von uns gespeicherte
+ Daten werden, sollten sie für ihre Zweckbestimmung nicht mehr
+ vonnöten sein und es keine gesetzlichen Aufbewahrungsfristen geben,
+ gelöscht. Falls eine Löschung nicht durchgeführt werden kann, da die
+ Daten für zulässige gesetzliche Zwecke erforderlich sind, erfolgt
+ eine Einschränkung der Datenverarbeitung. In diesem Fall werden die
+ Daten gesperrt und nicht für andere Zwecke verarbeitet.
+
+
+
Widerspruchsrecht
+
+ Nutzer dieser Webseite können von ihrem Widerspruchsrecht Gebrauch
+ machen und der Verarbeitung ihrer personenbezogenen Daten zu jeder
+ Zeit widersprechen. Wenn Sie eine Berichtigung, Sperrung, Löschung
+ oder Auskunft über die zu Ihrer Person gespeicherten
+ personenbezogenen Daten wünschen oder Fragen bzgl. der Erhebung,
+ Verarbeitung oder Verwendung Ihrer personenbezogenen Daten haben
+ oder erteilte Einwilligungen widerrufen möchten, wenden Sie sich
+ bitte an folgende E-Mail-Adresse: [EMail-Adresse einfügen]
+
+
+
+
+
diff --git a/frontendVue3/src/views/FeatureModel.vue b/frontendVue3/src/views/FeatureModel.vue
new file mode 100644
index 00000000..4eccec64
--- /dev/null
+++ b/frontendVue3/src/views/FeatureModel.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/views/FileDetail.vue b/frontendVue3/src/views/FileDetail.vue
new file mode 100644
index 00000000..4b381213
--- /dev/null
+++ b/frontendVue3/src/views/FileDetail.vue
@@ -0,0 +1,3313 @@
+
+
+
+ Feature Model:
+
+
+
+
+ {{ file.label }}
+
+
+
+
+ Details and more information
+
+
+
+
+
+
+
+
+ {{ loading ? '...' : file.label }}
+
+ Label
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ loading ? '...' : file.description }}
+
+
+ Description
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ loading ? '...' : file.license.label }}
+
+ License
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tag.label }}
+
+
+ ...
+ Tags
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ new Date(file.uploaded_at).toLocaleString(
+ 'en-US'
+ )
+ }}
+
+ ...
+
+ Uploaded on
+
+
+
+
+
+
+
+
+
+
+ {{ loading ? '...' : file.family.label }} ({{
+ loading ? '...' : file.version
+ }})
+
+
+ Family and version
+
+
+
+
+
+
+
+
+ View Model
+
+
+
+
+ See Family
+
+
+
+
+
+ Delete Model
+
+
+
+
+
+
+
Artifacts (tbd)
+
+
+ REPORTS
+
+
+
+
+
+ {{ item.title }}
+
+
+ {{ item.subtitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Analyses Progress:
+
+
+
+
+
+
+
+ Success:
+ {{ getStati.success.absolute }} /
+ {{ getStati.amount }}
+
+
+
+
+
+
+
+
+
+ Error:
+ {{ getStati.error.absolute }} /
+ {{ getStati.amount }}
+
+
+
+
+
+
+
+
+
+ In progress:
+ {{ getStati.progress.absolute }} /
+ {{ getStati.amount }}
+
+
+
+
+
+
+
+
+ Analyses
+
+
+
+
+
+
+
+
+
+
+ mdi-check
+
+ mdi-cancel
+
+
+ {{ index + 1 }}
+
+
+
+
+
+
+
+
+ Are you sure you want to delete this feature model?
+
+
+
+ Cancel
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+ View and compare Feature Model artifacts:
+
+ {{ selectedArtifact.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+ Toggle Headers
+
+
+
+
+ {{ item.title }}
+
+
+
+
+ Collapse all
+
+ el.key
+ )
+ "
+ >
+ Expand all
+
+
+
+
+
+
+
+ Feature Model: {{ file.label }}
+
+
+
+
+
+
+
+ Download Artifact
+
+
+ Compare
+
+
+
+
+
+
+
+ mdi-arrow-left
+
+ {{ getMyFM[selectedRightFM].label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/views/Histories.vue b/frontendVue3/src/views/Histories.vue
new file mode 100644
index 00000000..aeeb891c
--- /dev/null
+++ b/frontendVue3/src/views/Histories.vue
@@ -0,0 +1,281 @@
+
+
+
Histories
+
+ Here you can add new feature model histories
+
+
+
+
+
+
+ Histories
+
+
+
+
+
+
+
+ New Family
+
+
+
+
+ {{ formTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+
+
+ Save
+
+
+
+
+
+
+
+
+ {{ item.raw.label }}
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+ mdi-check
+
+ mdi-cancel
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/views/HistoryDetail.vue b/frontendVue3/src/views/HistoryDetail.vue
new file mode 100644
index 00000000..d8419da9
--- /dev/null
+++ b/frontendVue3/src/views/HistoryDetail.vue
@@ -0,0 +1,119 @@
+
+
+
+ Family:
+
+
+
+ {{ family.label }}
+
+ Details and more information
+ TODO: see FamilyDetail.vue in old Vue-frontend-folder
+
+
+
+
diff --git a/frontendVue3/src/views/Home.vue b/frontendVue3/src/views/Home.vue
new file mode 100644
index 00000000..96c60455
--- /dev/null
+++ b/frontendVue3/src/views/Home.vue
@@ -0,0 +1,131 @@
+
+
+
Welcome to variability.dev
+
+ A web service for sharing feature model instances and collaborative
+ benchmarking
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/views/Login.vue b/frontendVue3/src/views/Login.vue
new file mode 100644
index 00000000..dcaf41be
--- /dev/null
+++ b/frontendVue3/src/views/Login.vue
@@ -0,0 +1,19 @@
+
+
+
+
Login to variability.dev
+
+
+
+
+
+
diff --git a/frontendVue3/src/views/Models.vue b/frontendVue3/src/views/Models.vue
new file mode 100644
index 00000000..b8224fa5
--- /dev/null
+++ b/frontendVue3/src/views/Models.vue
@@ -0,0 +1,151 @@
+
+
+
My Feature Models
+
Here you can add new Feature Models
+
+
+
+
+
+ mdi-plus
+ Create new model
+
+
+ mdi-server
+ Edit Model from local storage
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/src/views/Profile.vue b/frontendVue3/src/views/Profile.vue
new file mode 100644
index 00000000..99747409
--- /dev/null
+++ b/frontendVue3/src/views/Profile.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+ mdi-account
+
+
+
+ {{ currentUser.email }}
+ {{
+ currentUser.email
+ }}
+
+ Institute:
+ {{
+ currentUser.institute == ''
+ ? 'None'
+ : currentUser.institute
+ }}
+
+
+
+
+
+
+
+
+
+
+ User since:
+
+
+
+ {{
+ new Date(currentUser.date_joined)
+ .toLocaleString('en-US')
+ .substring(0, 9)
+ }}
+
+
+
+
+
+ Token:
+
+
+
+ {{ authStore.accessToken }}
+
+
+
+
+
+ ID:
+
+
+
+ {{
+ currentUser.id
+ ? currentUser.id
+ : currentUser.pk
+ }}
+
+
+
+
+
+ Uploaded Feature Models:
+
+
+
+
+
+
+
+
+
+ {{ elem.label }}
+
+
+ Uploaded:
+ {{
+ getFormattedDate(
+ elem.uploaded_at
+ )
+ }}
+
+
+
+ Show
+
+
+ Analyse
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontendVue3/vite.config.js b/frontendVue3/vite.config.js
new file mode 100644
index 00000000..2cd6d144
--- /dev/null
+++ b/frontendVue3/vite.config.js
@@ -0,0 +1,33 @@
+// Plugins
+import vue from '@vitejs/plugin-vue';
+import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify';
+
+// Utilities
+import { defineConfig } from 'vite';
+import { fileURLToPath, URL } from 'node:url';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ vue({
+ template: { transformAssetUrls },
+ }),
+ // https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin
+ vuetify({
+ autoImport: true,
+ styles: {
+ configFile: 'src/styles/settings.scss',
+ },
+ }),
+ ],
+ define: { 'process.env': {} },
+ resolve: {
+ alias: {
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
+ },
+ extensions: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue'],
+ },
+ server: {
+ port: 3000,
+ },
+});